EF2 Changelog

Builds / 1.12.74

Update 1.12.74

Compared with 1.11.83 · published Fri, 24 Jul 2026 10:23:41 GMT · live channel

No summary yet.

Text changes 463

KeyText
UNIT_NAME_100000 + Scorpion King
UNIT_NAME_100001 + Storm Harpy
UNIT_NAME_100002 + Blazing Titan
UNIT_NAME_100003 + Emperor Belial
UNIT_NAME_100004 + Ancient Dragon Knight
TREASURE_NAME_121 + Essence of Negligence
TREASURE_NAME_122 + Essence of Laziness
TREASURE_NAME_123 + Essence of Arrogance
TREASURE_NAME_124 + Belial's Hammer
TREASURE_NAME_125 + Earth Dragon Horn
TREASURE_NAME_126 + Sacred Sand
TREASURE_SET_TITLE_34 + Sacred Set of the Ancient Ruins
PET_NAME_2001 + Skole
PET_NAME_2002 + Harping
PET_NAME_2003 + Gnome
PET_NAME_2004 + Bellial
PET_NAME_2005 + Sark
PET_NAME_2006 + Sand Priestess
PET_1000 + Increases Sand Resistance.
COMMON_552 + Select All
PRODUCT_NAME_191 + Special Offer: Priest (1x)
PRODUCT_NAME_192 + Special Offer: Fairy (1x)
PRODUCT_NAME_193 + Special Offer: Dark Archer (1x)
PRODUCT_NAME_194 + Starter Knights Pack 1 (1x)
PRODUCT_NAME_195 + Starter Knights Pack 2 (1x)
PRODUCT_NAME_196 + Starter Knights Pack 3 (1x)
PRODUCT_NAME_197 + Starter Knights Pack 4 (1x)
PRODUCT_NAME_198 + Starter Knights Pack 5 (1x)
PRODUCT_NAME_199 + Priest Pack 1 (1x)
PRODUCT_NAME_200 + Priest Pack 2 (1x)
PRODUCT_NAME_201 + Priest Pack 3 (1x)
PRODUCT_NAME_202 + Fairy Pack 1 (1x)
PRODUCT_NAME_203 + Fairy Pack 2 (1x)
PRODUCT_NAME_204 + Fairy Pack 3 (1x)
PRODUCT_NAME_205 + Dark Archer Pack 1 (1x)
PRODUCT_NAME_206 + Dark Archer Pack 2 (1x)
PRODUCT_NAME_207 + Dark Archer Pack 3 (1x)
PRODUCT_NAME_208 + Brave Knights Pack (Weekly)
PRODUCT_NAME_209 + Dimensional Knights Pack (Weekly)
PRODUCT_NAME_210 + Legendary Knights Pack (Weekly)
PRODUCT_NAME_211 + Immortal Knights Pack (Weekly)
PRODUCT_NAME_212 + Brave Knights Package (Monthly)
PRODUCT_NAME_213 + Dimensional Knights Package (Monthly)
PRODUCT_NAME_214 + Legendary Knights Package (Monthly)
PRODUCT_NAME_215 + Immortal Knights Package (Monthly)
PRODUCT_NAME_216 + Sand Priestess Package 1 (One-time only)
PRODUCT_NAME_217 + Sand Priestess Package 2 (One-time only)
PRODUCT_NAME_218 + Sand Priestess Package 3 (One-time only)
PRODUCT_NAME_219 + Sand Priestess Package 4 (One-time only)
PRODUCT_NAME_220 + Sand Priestess Package 5 (One-time only)
PRODUCT_NAME_221 + Sand Priestess Package 6 (One-time only)
PRODUCT_NAME_222 + Special Pet Package 1 (Weekly)
PRODUCT_NAME_223 + Special Pet Package 2 (Weekly)
PRODUCT_NAME_224 + Special Pet Package 3 (Weekly)
PRODUCT_NAME_225 + Special Pet Package 4 (Weekly)
PRODUCT_NAME_226 + Special Pet Package 5 (Weekly)
PRODUCT_NAME_227 + Special Pet Package 6 (Weekly)
PRODUCT_NAME_228 + Guild Raid Crystal Package 1 (Weekly)
PRODUCT_NAME_229 + Guild Raid Crystal Package 2 (Weekly)
PRODUCT_NAME_230 + Guild Raid Crystal Package 3 (Weekly)
PRODUCT_NAME_231 + Guild Raid Crystal Package 4 (Weekly)
PRODUCT_NAME_232 + Guild Raid Crystal Package 5 (Weekly)
PRODUCT_DESC_54 + You can obtain Pet Shards (Sand Priestess).
PRODUCT_DESC_55 + A Special Pet Package containing unique Hero Couple Pets.
PRODUCT_DESC_56 + This is a Guild Raid Crystal Package.
PRODUCT_DESC_57 + Can be purchased up to once every 7 days.
HELP_27 + Drag deployed Heroes to move them.
HELP_28 + Castle - The Secretary in the Keep is a helpful growth companion.
HELP_29 + The Secretary collects Heroes, Pet Shards, and other resources over time.
HELP_30 + Hiring an Advanced Secretary greatly improves collection.
RaidBoss1_1 + Pincer Sweep — Charges at enemies and sweeps the surrounding area with its pincers.
RaidBoss1_2 + Pull In — Sucks in enemies from the front, gathers them in one spot, then detonates and poisons them.
RaidBoss1_3 + Venom Stinger Barrage — Retreats while firing a barrage of venomous stingers, leaving poison mist at ranged troops' positions.
RaidBoss1_4 + Tail Slam — Slams its tail down, stunning enemies hit and knocking back nearby enemies.
RaidBoss1_5 + Standing in poison mist deals continuous damage — Drag the Legion out of it.
RaidBoss2_1 + While airborne, it cannot be reached by melee soldiers — Attack with ranged troops and the Harpoon Cart.
RaidBoss2_2 + Rending Claws — Swoops down on a Legion and repeatedly slashes with its talons.
RaidBoss2_3 + Dive Slam — Plunges from the sky onto a Legion, blasting nearby enemies away.
RaidBoss2_4 + Gale — Retreats and beats its wings to create a powerful gust that blows enemies in front far away.
RaidBoss2_5 + Feather Storm — Unleashes feathers in all directions, piercing multiple enemies.
RaidBoss2_6 + After Gale, it summons a tornado that deals continuous damage — Drag the Legion out of it.
RaidBoss3_1 + Ground Smash — Slams the ground nearby, dealing heavy damage and knocking enemies away.
RaidBoss3_2 + Charge — Rushes toward a cluster of enemies, trampling those in its path.
RaidBoss3_3 + Stone Pillars — Stone pillars erupt from the ground nearby, launching enemies high into the air.
RaidBoss3_4 + Rockfall — Rains rocks down on areas marked with red circles.
RaidBoss3_5 + Teleport — Vanishes and reappears elsewhere, forcefully knocking back nearby enemies.
RaidBoss3_6 + When Rockfall's red circles appear, drag the Legion away — Remaining inside causes damage to keep stacking.
RaidBoss4_1 + Magic Barrage — Fires dozens of fireballs from magic circles that chase soldiers.
RaidBoss4_2 + Vortex — Pulls in nearby enemies with a vortex and deals continuous damage.
RaidBoss4_3 + Energy Barrage — Selects multiple nearby enemies and strikes them with energy.
RaidBoss4_4 + Lightning Magic Circle — Places magic circles at ranged troops' positions and repeatedly calls down lightning.
RaidBoss4_5 + Teleport — Usually fights in place, but occasionally teleports elsewhere.
RaidBoss4_6 + Standing on a Lightning Magic Circle causes repeated lightning strikes — Drag the Legion out of it.
RaidBoss5_1 + Spinning Spear Slash — Dives into enemies and swings its spear in two wide slashes.
RaidBoss5_2 + Leap Slam — Leaps up and slams down in front, knocking enemies back.
RaidBoss5_3 + Aerial Charge — Takes flight and charges in a straight line, slashing enemies along its path.
RaidBoss5_4 + Summon Dragon — Calls a dragon to unleash its breath attack over a Legion. The cast can be interrupted with the harpoon.
RaidBoss5_5 + Aerial Assault — Disappears into the sky, rains down spears, then crashes into the red-circle location. Flames remain at the impact point.
RaidBoss5_6 + When the red circle appears, drag the Legion away.
EmblemName1 + Guardian Emblem
EmblemName2 + Onslaught Emblem
EmblemName3 + Healing Emblem
EmblemName4 + Arcane Emblem
EmblemName5 + Assault Emblem
EmblemName6 + Sniper Emblem
EmblemDesc1 + ATK +{v}%
EmblemDesc2 + Max HP +{v}%
EmblemDesc3 + DEF +{v}%
EmblemDesc4 + Attack Speed +{v}%
EmblemDesc5 + Movement Speed +{v}%
EmblemDesc6 + Attack Range +{v}%
EmblemDesc7 + Aggro Generation +{v}%
EmblemDesc8 + Aggro Generation -{v}%
EmblemDesc9 + Damage Taken -{v}%
EmblemDesc10 + Crit Rate +{v}%
EmblemDesc11 + Crit Damage +{v}%
EmblemDesc12 + Absorbs {v}% of damage dealt as HP
EmblemDesc13 + Restores {v}% HP every 5s
EmblemDesc14 + Healing +{v}%
EmblemDesc15 + Mana Regen Speed +{v}%
EmblemDesc16 + Applied Debuff Duration +{v}%
EmblemDesc17 + Counterattacks for {v}% of ATK
EmblemDesc21 + Freeze Duration -{v}%
EmblemDesc22 + Stun Duration -{v}%
EmblemDesc23 + Knockback -{v}%
EmblemDesc24 + Blow -{v}%
EmblemDesc31 + Depletes an additional {v}% Stamina
EmblemDesc32 + Damage While Groggy +{v}%
EmblemDesc33 + Groggy Duration +{v}%
EmblemDesc34 + Damage While Weak Point Is Exposed +{v}%
EmblemDesc35 + Cooldown -{v}%
EmblemDesc36 + Duration +{v}%
EmblemDesc37 + Power +{v}%
EmblemDesc38 + Dash Speed +{v}%
EmblemDesc41 + Damage +{v}%
EmblemDesc42 + Enhanced Wound Rend — Damage Taken +{v}%
EmblemDesc43 + Energy Charge Speed +{v}%
EmblemDesc44 + Energy +{v}%p (including battle start)
EmblemDesc45 + Weak Point Exposure Window +{v}%
EmblemDesc46 + Charges Energy to {v}%
EmblemDesc47 + Harpoon Crit Rate +{v}%
EmblemDesc49 + Damage to Groggy Bosses +{v}%
EmblemDesc51 + Stage {v} — Harpoon Cart No. 2 firing interval reduced (60s → 45s)
EmblemDesc52 + Double Shot — Automatically fires a second harpoon (Power {v}%)
EmblemDesc53 + Applies {v} Additional Debuffs
EmblemDesc56 + DEF -{v}% (5s)
EmblemDesc61 + Taunt — Forces Boss Targeting + Aggro Generation +{v}%
EmblemDesc62 + Burst — ATK/Attack Speed +{v}% + Aggro -20%
EmblemDesc63 + All Legions Restore {v}% HP per Second
EmblemDesc64 + Boss DEF -{v}%
EmblemDesc65 + All-Out Attack — All Legions' ATK +{v}%
EmblemDesc66 + Wound Rend on Weak Point Hit — Damage Taken +{v}%
EmblemDesc71 + DEF -{v}% (10s)
EmblemDesc72 + Damage Taken -{v}%
EmblemDesc73 + Restores {v}% HP
EmblemDesc75 + Crit Rate +{v}%
EmblemDesc76 + Cleanses {v} Debuffs
EmblemDesc77 + Damage Taken -{v}% (4s)
EmblemDesc78 + Additional Damage Taken +{v}%
EmblemDesc79 + Mana Recovery +{v}%
EmblemDesc80 + Attack Speed +{v}%
EmblemDesc82 + Groggy Duration +{v}s
EmblemDesc83 + Wound Rend Duration +{v}s
EmblemDesc84 + Damage Taken +{v}%
EmblemDesc91 + Damage Taken +{v}% per Stack (10s)
EmblemDesc92 + DEF -{v}% per Stack
EmblemDesc93 + ATK +{v}%
EmblemDesc94 + Attack Speed +{v}%
EmblemDesc95 + Damage Taken -{v}% (8s, Once Only)
EmblemDesc101 + Restores {v}% HP to 1 Allied Hero Every 1s
EmblemDesc102 + Restores {v}% HP to 4 Allied Heroes Every 3s
EmblemDesc103 + Restores {v}% HP to 8 Allied Soldiers Every 2s
EmblemDesc104 + Cleanses Debuffs from {v} Allies Every 5s
EmblemDesc105 + 4 Allies' ATK +{v}% Every 3s (6s)
EmblemDesc106 + 4 Allies' Attack Speed +{v}% Every 3s (6s)
EmblemDesc107 + 4 Allies' Crit Rate +{v}% Every 4s (7s)
EmblemDesc108 + Restores {v}% Mana to 4 Allies Every 4s
EmblemDesc109 + 3 Allies' Damage Taken -{v}% Every 5s (5s)
EmblemDesc110 + 8 Soldiers' DEF +{v}% Every 4s (4s)
EmblemDesc111 + 5 Soldiers' ATK +{v}% Every 4s (8s)
EmblemDesc113 + Damage Taken +{v}% Every 8s (3s)
EmblemShortName1 + Guardian
EmblemShortName2 + Onslaught
EmblemShortName3 + Healing
EmblemShortName4 + Arcane
EmblemShortName5 + Assault
EmblemShortName6 + Sniper
EmblemSubDesc1 + ATK Up
EmblemSubDesc2 + Max HP Up
EmblemSubDesc3 + DEF Up
EmblemSubDesc4 + Attack Speed Up
EmblemSubDesc5 + Damage Taken Down
EmblemSubDesc6 + Active Cooldown Reduction
EmblemSubDesc7 + Restores Legion HP Every 5s
EmblemSubDesc8 + Depletes Boss Stamina per Hit
EmblemSubDesc9 + Crossbow Damage Up
EmblemSubDesc10 + Crossbow Energy Charge Speed Up
EmblemGradeName1 + Common
EmblemGradeName2 + Uncommon
EmblemGradeName3 + Rare
EmblemGradeName4 + Epic
EmblemGradeName5 + Legendary
EmblemGradeName6 + Mythic
EmblemSkillDesc6_21 + Freeze Immunity
EmblemSkillDesc6_22 + Stun Immunity
EmblemSkillDesc6_23 + Knockback Immunity
EmblemSkillDesc6_24 + Blow Immunity
EmblemSkillDesc6_51 + Deploys an Additional Harpoon Cart No. 3
GAME_1259 + If you perform Rebirth at Wave 30 or higher, your Race will be changed randomly.
GAME_1260 + Emblem
GAME_1261 + Ancient Ruins
GAME_1262 + Burning Lands
GAME_1263 + Swamp of Death
GAME_1264 + Hell Lord's Citadel
GAME_1265 + Frozen Ancient Civilization
GAME_1266 + Attempts Remaining Today: {0}
GAME_1267 + Stage {0}
GAME_1268 + Only Elders or higher can open this
GAME_1269 + Open {0} Stage {1}?
GAME_1270 + Consumes {0} Guild Coins
GAME_1271 + Give Up
GAME_1272 + Tutorial
GAME_1273 + Defeated
GAME_1274 + Available after defeating the previous boss
GAME_1275 + Time's up — The raid has ended
GAME_1276 + In Battle: {0}
GAME_1277 + Another guild member is in battle ({0})
GAME_1278 + You have used all attempts for today
GAME_1279 + Give up the current raid?
GAME_1280 + Raid Cleared! Rewards will be sent by mail
GAME_1281 + Rewards will be sent by mail
GAME_1282 + Time's Up
GAME_1283 + Attack Formation
GAME_1284 + Raid Attack Formation
GAME_1285 + Race Matchup
GAME_1286 + {0} Resistance: {1} (Recommended: {2}+)
GAME_1287 + Crossbow
GAME_1288 + Rear Attack
GAME_1289 + Vulnerable
GAME_1290 + Tickets Remaining: {0}
GAME_1291 + Select an attack formation first
GAME_1292 + Boss Defeated!! (Damage: {0})
GAME_1293 + Damage Dealt: {0}!
GAME_1294 + Crystal List
GAME_1295 + Equip
GAME_1296 + Equipped
GAME_1297 + Replace
GAME_1298 + Empty Slot
GAME_1299 + Select a crystal from the list below
GAME_1300 + All slots are full — Unequip an equipped crystal
GAME_1301 + Failed to equip
GAME_1302 + Failed to unequip
GAME_1303 + Duration: {0}s
GAME_1304 + Cooldown: {0}s
GAME_1305 + Substat
GAME_1306 + Active
GAME_1307 + Equipped Legion
GAME_1308 + All Legions
GAME_1309 + Boss
GAME_1310 + Harpoon Cart
GAME_1311 + Always Active
GAME_1312 + Periodic
GAME_1313 + On Attack Hit
GAME_1314 + When Hit
GAME_1315 + Accumulated Hits
GAME_1316 + On Successful Interrupt
GAME_1317 + On Failed Interrupt
GAME_1318 + On Entering Stagger
GAME_1319 + When HP Drops Below 20%
GAME_1320 + When Weak Point Is Hit
GAME_1321 + On Firing
GAME_1322 + When {0} Starts
GAME_1323 + While {0} Is Active
GAME_1324 + When {0} Ends
GAME_1325 + Crystal Fusion
GAME_1326 + Select 5 Crystals of the same Emblem and grade — Receive 1 higher-grade Crystal (random type)
GAME_1327 + Owned Crystals
GAME_1328 + Fuse
GAME_1329 + No Crystals are available for fusion (equipped and locked Crystals excluded)
GAME_1330 + Select Crystals to use as materials
GAME_1331 + [{0}] {1}/5 selected → Receive 1 [{2}] (random type)
GAME_1332 + Fusion Successful!
GAME_1333 + Mythic-grade Crystals cannot be fused
GAME_1334 + 5 materials have already been selected
GAME_1335 + Only Crystals of the same grade can be fused together
GAME_1336 + Only Crystals with the same Emblem can be fused together
GAME_1337 + Insufficient quantity
GAME_1338 + Fusion failed
GAME_1339 + Failed to load Crystal information
GAME_1340 + {0} Grade
GAME_1341 + Crystal Draw Rates
GAME_1342 + Same rates for all draws · Type randomly selected from all Emblems
GAME_1343 + Raid Shop
GAME_1344 + Crystal Draw
GAME_1345 + Draw 10 Crystals
GAME_1346 + Draw 3 Crystals
GAME_1347 + Not enough Raid Coins
GAME_1348 + Not enough Draw Tickets
GAME_1349 + Draw failed
GAME_1350 + Draw Results
GAME_1351 + Your age information cannot be verified on the current device or OS, so some features are restricted to Safe Mode.
GAME_1352 + No more draws available today (resets daily at 00:00)
GAME_1353 + Crystal not found
GAME_1354 + This Crystal cannot be equipped in this slot
GAME_1355 + Fusion requirements are not met
GAME_1356 + Equipped Crystals cannot be used as materials
GAME_1357 + Locked Crystals cannot be used as materials
GAME_1358 + Not enough Gems
GAME_1359 + Guild Member Records
GAME_1360 + Last 14 Days
GAME_1361 + By Damage
GAME_1362 + Most Recent
GAME_1363 + Today
GAME_1364 + Participation
GAME_1365 + Battles
GAME_1366 + No raids were opened in the last 14 days
GAME_1367 + No attempts against this boss yet
GAME_1368 + {0}/{1} ({2})
GAME_1369 + Sun
GAME_1370 + Mon
GAME_1371 + Tue
GAME_1372 + Wed
GAME_1373 + Thu
GAME_1374 + Fri
GAME_1375 + Sat
GAME_1376 + Boss Info
GAME_1377 + Attack Patterns
GAME_1378 + No boss information available.
GAME_1379 + Race Matchup
GAME_1380 + # Advantage: {0} Race ATK/DEF/HP +{1}%
GAME_1381 + # Disadvantage: {0} Race ATK/DEF/HP -{1}%
GAME_1382 + Elemental Resistance
GAME_1383 + # This boss uses {0} attacks. Higher {0} Resistance reduces damage taken.
GAME_1384 + # Recommended {0} Resistance: {1}
GAME_1385 + Vulnerable Elements
GAME_1386 + The boss is immune to all status effects, but each hit with the elements below stacks increased damage taken. (Max +{0}% per element)
GAME_1387 + {0} — Damage taken +{1}% per hit, stacking
GAME_1388 + Stun
GAME_1389 + Frost
GAME_1390 + Poison
GAME_1391 + Curse
GAME_1392 + Silence
GAME_1393 + Shock
GAME_1394 + Bind
GAME_1395 + Blow
GAME_1396 + Knockback
GAME_1397 + Charm
GAME_1398 + Stun Vulnerability
GAME_1399 + Frost Vulnerability
GAME_1400 + Poison Vulnerability
GAME_1401 + Curse Vulnerability
GAME_1402 + Silence Vulnerability
GAME_1403 + Shock Vulnerability
GAME_1404 + Bind Vulnerability
GAME_1405 + Blow Vulnerability
GAME_1406 + Knockback Vulnerability
GAME_1407 + Charm Vulnerability
GAME_1408 + Exposed
GAME_1409 + Human
GAME_1410 + Elf
GAME_1411 + Orc
GAME_1412 + Undead
GAME_1413 + Sand
GAME_1414 + Fire
GAME_1415 + Poison
GAME_1416 + Dark
GAME_1417 + Ice
GAME_1418 + Raid Guide
GAME_1419 + Raid Basics
GAME_1420 + # The Guild Master and Vice Guild Master can open a raid.
GAME_1421 + # A raid can be opened up to twice per day.
GAME_1422 + # Once a raid opens, each player can battle twice.
GAME_1423 + Battle Guide
GAME_1424 + # Raid battles last 2 minutes and 30 seconds.
GAME_1425 + # Players form 5 Legions (1 Hero and 30 Soldiers per Legion) to battle.
GAME_1426 + # Soldiers are taken from the Guild Barracks, and all soldiers participating in the Guild Raid disappear after the battle.
GAME_1427 + # The boss has a Stamina Gauge. When it reaches 0, the boss becomes Groggy for a period of time.
GAME_1428 + # Attacking the boss while it is Groggy deals 60% additional damage.
GAME_1429 + # Bosses generally follow a [Basic Attack - Basic Attack - Skill] attack pattern.
GAME_1430 + # In stages featuring the Harpoon Cart, the boss exposes a [Weak Point] when casting a skill.
GAME_1431 + # Aim the harpoon at the [Weak Point] to greatly reduce the boss's Stamina and deal additional damage.
GAME_1432 + # Each Legion has an Emblem.
GAME_1433 + # Crystals can be equipped on Emblems to improve stats.
GAME_1434 + - Guardian Emblem: Tanking Specialist
GAME_1435 + - Onslaught Emblem: Damage Dealer Specialist
GAME_1436 + - Assault Emblem: Damage Dealer + Support Specialist
GAME_1437 + - Arcane Emblem: Mana + Support Specialist
GAME_1438 + - Healing Emblem: Healer Specialist
GAME_1439 + - Sniper Emblem: Harpoon Specialist
GAME_1440 + Aggro
GAME_1441 + # Aggro increases based on the damage dealt to the boss over a recent period of time.
GAME_1442 + # The boss faces the Hero of the Legion with the highest Aggro.
GAME_1443 + # Certain bosses take 30% additional damage when attacked from behind.
GAME_1444 + # When battling a boss vulnerable to Rear Attacks, a virtual pad appears that lets you control the Hero of the [Guardian Emblem] Legion.
GAME_1445 + # Use the virtual pad to move the Guardian Legion's Hero so the other Legions can attack the boss from behind and deal high damage.
GAME_1446 + # In stages featuring the Harpoon Cart, the boss exposes a [Weak Point] when using a skill attack.
GAME_1447 + # Press and drag the harpoon to aim at the Weak Point. A successful hit greatly reduces the boss's Stamina and inflicts a debuff.
GAME_1448 + # After firing the harpoon, it takes time to reload.
GAME_1449 + # Bosses are unaffected by CC effects, but are vulnerable to certain types of CC.
GAME_1450 + # When hit by an attack matching a Vulnerability, the boss takes additional damage.
GAME_1451 + # For example, hitting a boss with Stun Vulnerability using a Stun attack inflicts a debuff that increases damage taken by 0.3% for 10 seconds. This debuff stacks, up to a maximum of 20%.
GAME_1452 + # Bosses generally have 4 to 5 Vulnerabilities. Deploy Heroes and Soldiers that can trigger them to deal additional damage.
GAME_1453 + ATK Up
GAME_1454 + Increases ATK for a period of time.
GAME_1455 + Attack Speed Up
GAME_1456 + Increases Attack Speed for a period of time.
GAME_1457 + Damage Reduction
GAME_1458 + Reduces damage taken for a period of time.
GAME_1459 + Continuous Healing
GAME_1460 + Healing energy continuously restores HP.
GAME_1461 + Effect
GAME_1462 + Bleed
GAME_1463 + Open wounds increase damage taken for a period of time.
GAME_1464 + Weak Point Exposed
GAME_1465 + The exposed Weak Point increases damage taken for a period of time.
GAME_1466 + DEF Down
GAME_1467 + Reduces Physical and Magic DEF for a period of time.
GAME_1468 + ATK Down
GAME_1469 + Reduces ATK for a period of time.
GAME_1470 + Attack Speed Down
GAME_1471 + Reduces Attack Speed for a period of time.
GAME_1472 + Movement Speed Down
GAME_1473 + Reduces Movement Speed for a period of time.
GAME_1474 + Taunt
GAME_1475 + Taunted units face and attack only the troop that taunted them.
GAME_1476 + Exhausted and left Exposed. Damage taken is greatly increased.
GAME_1477 + Becomes vulnerable to {0}, increasing damage taken for a period of time.
GAME_1478 + Boss Status
GAME_1479 + Troop Buff
GAME_1480 + {0} Troop Buff
GAME_1481 + Total Damage
GAME_1482 + Boss Defeated!
GAME_1483 + Time's Up
GAME_1484 + All Legions Defeated
GAME_1485 + Legion {0}
GAME_1486 + Practice
GAME_1487 + Practice Battle — No tickets are consumed, and results are not recorded
GAME_1488 + Practice Battle — Results are not recorded
GAME_1489 + Burst Damage
GAME_1490 + Mass Heal
GAME_1491 + Weaken Boss
GAME_1492 + All-Out Attack
GAME_1493 + Wound Rend
GAME_1494 + Armor Break
GAME_1495 + Suppression
GAME_1496 + Weaken
GAME_1497 + Collapse
GAME_1498 + Coordinated Attack
GAME_1499 + Crush
GAME_1500 + Crystal Draw Ticket
GAME_1501 + Obtain a 7★ Artifact upon reaching 5★.
GAME_1502 + You can obtain Crystals at random from the Raid Shop.
GAME_1503 + A raid is already in progress.
GAME_1504 + No more raids can be opened today.
GAME_1505 + You have used all attempts for today.
GAME_1506 + Another guild member is in battle. Please try again shortly.
GAME_1507 + Rapid Training
GAME_1508 + Raid Coin
GAME_1509 + The boss status has changed. Please check the list again.
GAME_1510 + Guild War begins on July 25 at 00:00:00 (UTC).
GAME_1511 + Only the Guild Master and Vice Guild Master can open this.
GAME_818 ~ Items other than Gems, Honor Coins, Heroes, and Transcend Tickets will be sent to your inventory.Items other than Gems, Honor Coins, Heroes, Transcend Tickets, and Crystal Draw Tickets will be sent to your inventory.
GAME_819 ~ Items other than Gems, Honor Coins, Heroes, and Transcend Tickets have been sent to your inventory.Items other than Gems, Honor Coins, Heroes, Transcend Tickets, and Crystal Draw Tickets have been sent to your inventory.

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

Game data tables

Assets 63

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

New sprites: Btn_ReceiveAll, Btn_ReceiveAll_Gray, Hero9999, Icon_Hammer, Icon_Hammer_nor, Icon_TransMat_Change, Icon_TreasureTicket6_Change, Icon_TreasureTicket7_Change, Icon_alarm_check_brown, Package_Secretary_3, RuneTicket, UI_ROUND_BTN_BG_Gray

Removed sprites: BTN_BUY_UNIT_SHOP, BTN_GEM_SHOP, BTN_GOLD_SHOP, Raid1_1_off, Raid1_1_on, Raid1_2_off, Raid1_2_on, Raid1_3_off, Raid1_3_on, Raid1_4_off, Raid1_4_on, Raid1_5_off, Raid1_5_on, UI_ICON_UNIT_BUY_CLOSE

assets/ekkorr/UI_Ekkorr.ktx2 changed 2,039.7 KB → 1,985.9 KB
assets/images/ActiveSkill.json changed 4.0 KB → 4.0 KB
assets/images/ActiveSkill.ktx2 changed 42.7 KB → 44.2 KB
assets/images/BgRaid2.json changed 0.5 KB → 0.5 KB
assets/images/BgRaid2.ktx2 changed 270.3 KB → 319.1 KB
assets/images/Game.json changed 1,901.0 KB → 1,913.3 KB

New sprites: BackAttack0001, BackAttack0002, HeroAura0_0001, HeroAura0_0002, HeroAura0_0003, HeroAura0_0004, HeroAura0_0005, HeroAura0_0006, HeroAura1_0001, HeroAura1_0002, HeroAura1_0003, HeroAura1_0004, HeroAura1_0005, HeroAura1_0006, HeroAura2_0001, HeroAura2_0002, HeroAura2_0003, HeroAura2_0004, HeroAura2_0005, HeroAura2_0006, HeroAura3_0001, HeroAura3_0002, HeroAura3_0003, HeroAura3_0004, HeroAura3_0005, HeroAura3_0006, HeroAura4_0001, HeroAura4_0002, HeroAura4_0003, HeroAura4_0004, HeroAura4_0005, HeroAura4_0006, HeroAura5_0001, HeroAura5_0002, HeroAura5_0003, HeroAura5_0004, HeroAura5_0005, HeroAura5_0006, HeroAura6_0001, HeroAura6_0002, HeroAura6_0003, HeroAura6_0004, HeroAura6_0005, HeroAura6_0006, RaidBuffSkill1, RaidBuffSkill2, RaidBuffSkill3, RaidBuffSkill4, RaidBuffSkill5

assets/images/Game.ktx2 changed 1,988.6 KB → 2,051.6 KB
assets/images/RaidBattle.json changed 16.4 KB → 38.0 KB

New sprites: Crater0001, Crater0002, Crater0003, Crater0004, Crater0005, Crater0006, Crater0007, Crater0008, Crater0009, Crater0010, Crater0011, Crater0012, Crater0013, Crater0014, Crater0015, Crater0016, Crater0017, Crater0018, Crater0019, Crater0020, DKSpear0001, DKSpear0002, DKSpear0003, DKSpear0004, DKSpear0005, DKSpear0006, DKSpear0007, DKSpear0008, DKSpear0009, DKSpear0010, DKSpear0011, DKSpear0012, DKSpear0013, DKSpear0014, DKSpear0015, DKSpear0016, DKSpear0017, DKSpear0018, DKSpear0019, DKSpear0020, DKSpear0021, DKSpear0022, DKSpear0023, DKSpear0024, DKSpear0025, DKSpear0026, DKSpear0027, DKSpear0028, DKSpear0029, DKSpear0030, DKSpear0031, FireArea0001, FireArea0002, FireArea0003, FireArea0004, FireArea0005, FireArea0006, FireArea0007, FireArea0008, PoisonGas0001, PoisonGas0002, PoisonGas0003, PoisonGas0004, PoisonGas0005, PoisonGas0006, PoisonGas0007, PoisonGas0008, PoisonGas0009, PoisonGas0010, PoisonGas0011, PoisonGas0012, PoisonGas0013, PoisonGas0014, PoisonGas0015, PoisonGas0016, PoisonGas0017, PoisonGas0018, PoisonGas0019, PoisonGas0020, PoisonGas0021, PoisonGas0022, PoisonGas0023, PoisonGas0024, PoisonGas0025, PoisonGas0026, PoisonGas0027, PoisonGas0028, SandFire0001, SandFire0002, SandFire0003, SandFire0004, SandFire0005, SandFire0006, SandFire0007, SandFire0008

assets/images/RaidBattle.ktx2 changed 98.3 KB → 271.3 KB
assets/images/UI_HELP.json changed 9.0 KB → 8.7 KB

New sprites: Help_2_3, Icon_Help_Secretary

Removed sprites: Help_8_1, Help_8_2, Help_8_3

assets/images/UI_HELP.ktx2 changed 1,162.0 KB → 1,154.9 KB
assets/images/UI_HELP2.json added 1.6 KB

New sprites: Help_8_1, Help_8_2, Help_8_3, Help_9_1, Help_9_2, Help_9_3

assets/images/UI_HELP2.ktx2 added 336.8 KB
assets/images/UI_PET.json changed 35.8 KB → 36.2 KB

New sprites: UI_PET2001, UI_PET2002, UI_PET2003, UI_PET2004, UI_PET2005, UI_PET2006, UI_PET3001, UI_PET3002, UI_PET3003, UI_PET3004

Removed sprites: UI_PET0020, UI_PET102, UI_PET103, UI_PET105, UI_PET106, UI_PET45, UI_PET46, UI_PET47

assets/images/UI_PET.ktx2 changed 577.4 KB → 597.2 KB
assets/images/UI_RAID.json added 23.9 KB

New sprites: 1-1-1.png, 1-1.PNG, 1-2-1.png, 1-2.PNG, 1-3-1.png, 1-3.PNG, 2-1.PNG, 2-1_g.PNG, 2-2.PNG, 2-2_g.PNG, 2-3.PNG, 2-3_g.PNG, AgroAni0001.png, AgroAni0002.png, AgroAni0003.png, AgroAni0004.png, AgroAni0005.png, AgroAni0006.png, AgroAni0007.png, AgroAni0008.png, AgroAni0009.png, AgroAni0010.png, AgroAni0011.png, AgroAni0012.png, Anger.png, Buff_AtkDown.png, Buff_AtkSpeedDown.png, Buff_AtkSpeedUp.png, Buff_AtkUp.png, Buff_Binding.png, Buff_BloodSuck.png, Buff_Blow.png, Buff_Charm.png, Buff_CritChanceUp.png, Buff_Curse.png, Buff_DamageReduction.png, Buff_DefenseDown.png, Buff_DefenseUp.png, Buff_Freeze.png, Buff_Heal.png, Buff_Injury.png, Buff_Injury2.png, Buff_Knockback.png, Buff_ManaUp.png, Buff_MoveSpeedDown.png, Buff_MoveSpeedUp.png, Buff_Poison.png, Buff_Shock.png, Buff_Silence.png, Buff_Stun.png, Buff_Wound.png, MRaid1_1_off.png, MRaid1_1_on.png, MRaid1_2_off.png, MRaid1_2_on.png, MRaid1_3_off.png, MRaid1_3_on.png, MRaid1_4_off.png, MRaid1_4_on.png, MRaid1_5_off.png, MRaid1_5_on.png, Raid1.png, Raid1_1_off.png, Raid1_1_on.png, Raid1_2_off.png, Raid1_2_on.png, Raid1_3_off.png, Raid1_3_on.png, Raid1_4_off.png, Raid1_4_on.png, Raid1_5_off.png, Raid1_5_on.png, Raid1_Main.png, RaidPortal.png, WhiteRect.png, emblem_bal.png, emblem_buf.png, emblem_deb.png, emblem_dps.png, emblem_hps.png, emblem_tnk.png, expands.png, icon_agro_1.png, icon_agro_2.png, icon_agro_3.png, rune_bal_01.png, rune_bal_02.png, rune_bal_03.png, rune_bal_04.png, rune_bal_05.png, rune_bal_06.png, rune_buf_01.png, rune_buf_02.png, rune_buf_03.png, rune_buf_04.png, rune_buf_05.png, rune_buf_06.png, rune_deb_01.png, rune_deb_02.png, rune_deb_03.png, rune_deb_04.png, rune_deb_05.png, rune_deb_06.png, rune_dps_01.png, rune_dps_02.png, rune_dps_03.png, rune_dps_04.png, rune_dps_05.png, rune_dps_06.png, rune_hps_01.png, rune_hps_02.png, rune_hps_03.png, rune_hps_04.png, rune_hps_05.png, rune_hps_06.png, rune_tnk_01.png, rune_tnk_02.png, rune_tnk_03.png, rune_tnk_04.png, rune_tnk_05.png, rune_tnk_06.png

assets/images/UI_RAID.ktx2 added 553.8 KB
assets/sounds/battle/raid/raid1/boss1/att_01.mp3 added 19.3 KB
assets/sounds/battle/raid/raid1/boss1/att_02.mp3 added 29.2 KB
assets/sounds/battle/raid/raid1/boss1/att_03.mp3 added 18.5 KB
assets/sounds/battle/raid/raid1/boss1/att_04.mp3 added 29.8 KB
assets/sounds/battle/raid/raid1/boss1/poison_bullet.mp3 added 13.0 KB
assets/sounds/battle/raid/raid1/boss1/teleport_in.mp3 added 34.4 KB
assets/sounds/battle/raid/raid1/boss1/teleport_out.mp3 added 30.6 KB
assets/sounds/battle/raid/raid1/boss2/att_01.mp3 added 15.8 KB
assets/sounds/battle/raid/raid1/boss2/att_02.mp3 added 14.7 KB
assets/sounds/battle/raid/raid1/boss2/att_03_jump.mp3 added 21.0 KB
assets/sounds/battle/raid/raid1/boss2/att_03_shockwave.mp3 added 28.7 KB
assets/sounds/battle/raid/raid1/boss2/att_04.mp3 added 34.4 KB
assets/sounds/battle/raid/raid1/boss2/att_05.mp3 added 28.3 KB
assets/sounds/battle/raid/raid1/boss2/feather_bullet.mp3 added 8.7 KB
assets/sounds/battle/raid/raid1/boss3/att_01.mp3 added 28.7 KB
assets/sounds/battle/raid/raid1/boss3/att_02.mp3 added 34.2 KB
assets/sounds/battle/raid/raid1/boss3/att_03.mp3 added 35.8 KB
assets/sounds/battle/raid/raid1/boss3/att_04.mp3 added 35.0 KB
assets/sounds/battle/raid/raid1/boss3/att_05.mp3 added 29.2 KB
assets/sounds/battle/raid/raid1/boss3/stone_bullet.mp3 added 23.5 KB
assets/sounds/battle/raid/raid1/boss3/teleport_in.mp3 added 23.7 KB
assets/sounds/battle/raid/raid1/boss3/teleport_out.mp3 added 26.2 KB
assets/sounds/battle/raid/raid1/boss4/att_01.mp3 added 46.5 KB
assets/sounds/battle/raid/raid1/boss4/att_02.mp3 added 52.1 KB
assets/sounds/battle/raid/raid1/boss4/att_03.mp3 added 27.9 KB
assets/sounds/battle/raid/raid1/boss4/att_04.mp3 added 34.8 KB
assets/sounds/battle/raid/raid1/boss4/att_05.mp3 added 48.0 KB
assets/sounds/battle/raid/raid1/boss4/beam.mp3 added 17.2 KB
assets/sounds/battle/raid/raid1/boss4/teleport_in.mp3 added 30.4 KB
assets/sounds/battle/raid/raid1/boss4/teleport_out.mp3 added 19.7 KB
assets/sounds/battle/raid/raid1/boss5/att_01.mp3 added 19.1 KB
assets/sounds/battle/raid/raid1/boss5/att_02.mp3 added 18.3 KB
assets/sounds/battle/raid/raid1/boss5/att_03.mp3 added 22.5 KB
assets/sounds/battle/raid/raid1/boss5/att_04.mp3 added 31.9 KB
assets/sounds/battle/raid/raid1/boss5/att_05.mp3 added 38.8 KB
assets/sounds/battle/raid/raid1/boss5/att_06.mp3 added 34.4 KB
assets/sounds/battle/raid/raid1/boss5/dragon_breath.mp3 added 54.0 KB
assets/sounds/battle/raid/raid1/boss5/dragon_shout.mp3 added 26.6 KB
assets/sounds/battle/raid/raid1/boss5/teleport_in.mp3 added 41.7 KB
assets/sounds/battle/raid/raid1/boss5/teleport_out.mp3 added 22.1 KB
assets/spines/raids/raid1/Ancient_DragonKnight.json changed 95.1 KB → 105.6 KB
assets/spines/raids/raid1/Ancient_DragonKnight.png changed 369.3 KB → 367.1 KB before after
assets/spines/raids/raid1/Golem.atlas changed 4.1 KB → 4.0 KB
assets/spines/raids/raid1/Golem.json changed 126.2 KB → 128.4 KB
assets/spines/raids/raid1/Golem.png changed 661.9 KB → 722.1 KB before after

Code 769 changes in 205 classes

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

BannerImage 1 hunks, 19222 statements
- const D3=class extends Be{
- constructor(t=552,i=106,s="Banner"){
- super(),zt(this,"banner"),zt(this,"bannerName",""),zt(this,"sheetName","Banner"),zt(this,"_width",552),zt(this,"_height",106),zt(this,"_imageWidth",-1),zt(this,"_imageHeight",-1),zt(this,"_autoResize",!1),this._width=t,this._height=i,this.sheetName=s,this.banner=new We,this.addChild(this.banner)}
- get width(){
- return this._width}
- get height(){
- return this._height}
- get imageWidth(){
- return this._imageWidth}
- get imageHeight(){
- return this._imageHeight}
- get autoResize(){
- return this._autoResize}
- set autoResize(t){
- t!=this._autoResize&&(this._autoResize=t,this._imageWidth<0||this._imageHeight<0||(this._autoResize?(this.banner.width=this._width,this.banner.height=this._height):(this.banner.width=this._imageWidth,this.banner.height=this._imageHeight)))}
- async update(t,i=-1,s=-1,e="Banner"){
- if(t==this.bannerName)return;
- if(this.bannerName=t,this.sheetName=e,!1===ZA.hasSheet(this.sheetName)){
- const t="ktx2";
- await ZA.generateTexture(this.sheetName,t,!1)}
- let n=ZA.getTexture(this.sheetName,this.bannerName);
- this.banner.texture=n,this._imageWidth=n.width,this._imageHeight=n.height,this._autoResize?(this.banner.width=this._width,this.banner.height=this._height):(this.banner.width=this._imageWidth,this.banner.height=this._imageHeight)}
- }
- ;
- Kt(D3,"BannerImage");
- let L3=D3;
- const G3=class t extends Be{
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- constructor(){
- super()}
- }
- ;
- Kt(G3,"RewardLayer"),zt(G3,"_instance");
- let B3=G3;
- const U3=class{
- static showItemsInHorizontal(t,i=50,s=220){
- t.forEach((t,e)=>{
- const n=t.x;
- t.x>s?t.x=n+i:t.x=n-i,t.alpha=0,HI.killTweensOf(t),HI.to(t,{
- x:n,alpha:1,duration:.4,delay:(4+2*e)/60,ease:"power2.out",onComplete:Kt(()=>{
- t.x=n}
- ,"onComplete")}
- )}
- )}
- static showItemsInVertical(t,i=20,s=.4){
- t.forEach((t,e)=>{
- const n=t.y;
- t.y=n+i,t.alpha=0,HI.killTweensOf(t),HI.to(t,{
- y:n,alpha:1,duration:s,delay:(4+2*e)/60,ease:"power2.out",onComplete:Kt(()=>{
- t.y=n}
- ,"onComplete")}
- )}
- )}
- static hideItemsInVertical(t,i=20,s=.4,e=null){
- const n=e;
- t.forEach((t,e)=>{
- const h=t.y,r=t.alpha;
- HI.killTweensOf(t),HI.to(t,{
- y:h+i,alpha:0,duration:s,delay:(4+2*e)/60,ease:"power2.out",onComplete:Kt(()=>{
- t.y=h,t.alpha=r,n&&n()}
- ,"onComplete")}
- )}
- )}
- static showItemsInAlpha(t,i=.4,s=null){
- const e=s;
- t.forEach((t,s)=>{
- t.alpha=0,HI.killTweensOf(t),HI.to(t,{
- alpha:1,duration:i,delay:(4+2*s)/60,ease:"power2.out",onComplete:Kt(()=>{
- t.alpha=1,e&&e()}
- ,"onComplete")}
- )}
- )}
- static hideItemsInAlpha(t,i=.4,s=null){
- const e=s;
- t.forEach((t,s)=>{
- t.alpha=1,HI.killTweensOf(t),HI.to(t,{
- alpha:0,duration:i,delay:(4+2*s)/60,ease:"power2.out",onComplete:Kt(()=>{
- e&&e()}
- ,"onComplete")}
- )}
- )}
- }
- ;
- Kt(U3,"GsapUtil");
- let F3=U3;
- const H3=class extends Be{
- constructor(){
- super(),zt(this,"top"),zt(this,"bottom"),zt(this,"bg"),zt(this,"bgContainer"),zt(this,"btnClose",new nG),zt(this,"txtTitle"),zt(this,"topOverlap",12),zt(this,"bottomOverlap",15),zt(this,"_width",574),zt(this,"_height",868),zt(this,"_positionY",-1),zt(this,"outSideClickHide",!1),zt(this,"onPointerDownHandler"),this.createBG(),this.onPointerDownHandler=this.onPointerDown.bind(this)}
- createBG(){
- this.bgContainer=new Be,this.addChild(this.bgContainer),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Frame"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
- ),this.bg.width=this._width,this.bgContainer.addChild(this.bg),this.top=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Base_Title_up"),leftWidth:200,topHeight:54,rightWidth:200,bottomHeight:14}
- ),this.bgContainer.addChild(this.top),this.bottom=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Base_Title_Down"),leftWidth:200,topHeight:27,rightWidth:200,bottomHeight:16}
- ),this.bgContainer.addChild(this.bottom),this.bottom.eventMode="none",this.top.x=.5*(this.bg.width-this.top.width),this.bottom.x=.5*(this.bg.width-this.bottom.width),this.bottom.y=this._height-this.bottom.height,this.bg.y=this.top.height-this.topOverlap,this.bg.height=this.bottom.y-this.bg.y+this.bottomOverlap,this.btnClose.x=this.top.x+this.top.width-this.btnClose.width-35,this.btnClose.y=18,this.addChild(this.btnClose),this.btnClose.onClick=this.onCloseBtnClick.bind(this),this.txtTitle=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20),this.txtTitle.x=.5*(this.top.width-this.txtTitle.width),this.txtTitle.y=22,this.addChild(this.txtTitle),aD.setLabelWrapWidth(this.txtTitle,this._width-40)}
- setTitle(t){
- this.txtTitle.text=t,this.txtTitle.x=.5*(this.top.width-this.txtTitle.width),this.txtTitle.y=22}
- show(t="",i=null,s=null){
- this.pivot.set(this.width/2,this.height/2),this.position.set(320,this.getPositionY()),this.scale.set(.1),HI.to(this.scale,{
- x:1,y:1,duration:.2,ease:"back.out",onComplete:Kt(()=>{
- this.onShowMotionComplete()}
- ,"onComplete")}
- ),IL.getInstance().addPopup(this)}
- onShowMotionComplete(){
- KA.stage.on("pointertap",this.onPointerDownHandler)}
- hide(){
- this.parent&&HI.to(this.scale,{
- x:.8,y:.8,duration:.15,ease:"back.in",onComplete:Kt(()=>{
- this.onHideMotionComplete()}
- ,"onComplete")}
- )}
- onHideMotionComplete(){
- this.hideImmediately()}
- hideImmediately(){
- IL.getInstance().removePopup(this),KA.stage.off("pointertap",this.onPointerDownHandler),this.resetPostionY()}
- onCloseBtnClick(){
- this.hide()}
- get width(){
- return this._width}
- set width(t){
- t!=this._width&&(this._width=t,this.bg.width=this._width,this.top.width=this._width+20,this.bottom.width=this._width+20,this.top.x=.5*(this._width-this.top.width),this.bottom.x=.5*(this._width-this.bottom.width),this.txtTitle&&(aD.setLabelWrapWidth(this.txtTitle,this._width-40),this.txtTitle.x=.5*(this.top.width-this.txtTitle.width),this.txtTitle.y=22),this.btnClose&&(this.btnClose.x=this.top.x+this.top.width-this.btnClose.width-35))}
- get height(){
- return this._height}
- set height(t){
- t!=this._height&&(this._height=t,this.bottom.y=this._height-this.bottom.height,this.bg.height=this.bottom.y-this.bg.y+this.bottomOverlap)}
- getBaseX(){
- return this.bg.x}
- getBaseY(){
- return this.bg.y}
- getPositionY(){
- return-1===this._positionY&&(this._positionY=this.getDefaultPositionY()),this._positionY}
- getDefaultPositionY(){
- return Math.floor((KA.safeHeight-this.height)*(3/7))+.5*this.height}
- resetPostionY(){
- this._positionY=this.getDefaultPositionY()}
- setPositonRatioY(t){
- this._positionY=KA.stageHeight*t}
- onPointerDown(t){
- 0!=this.outSideClickHide&&(this.getPopupBounds().containsPoint(t.global.x,t.global.y)||this.hide())}
- getPopupBounds(){
- return this.bgContainer&&this.bgContainer.parent&&this.bgContainer.visible?this.bgContainer.getBounds():this.getBounds()}
- onBackButton(){
- return!!(this.btnClose&&this.btnClose.parent&&this.btnClose.visible)&&(this.onCloseBtnClick(),!0)}
- }
- ;
- Kt(H3,"BasePopup3");
- let W3=H3;
- const j3=class extends W3{
- constructor(){
- super(),this.width=KA.stageWidth-20,this.height=KA.safeHeight-yii.getInstance().height-Xti.getInstance().height}
- getDefaultPositionY(){
- return Math.floor(yii.getInstance().height+.5*this._height)}
- }
- ;
- Kt(j3,"BaseViewPopup");
- let $3=j3;
- const V3=class extends mB{
- constructor(){
- super("UI_Ekkorr","Btn_Delete",1)}
- get activated(){
- return this._activated}
- set activated(t){
- t!=this._activated&&(this._activated=t,this._activated?this.bg.texture=ZA.getTexture("UI_Ekkorr","Btn_Delete"):this.bg.texture=ZA.getTexture("UI_Ekkorr","Btn_Delete_Gray"))}
- }
- ;
- Kt(V3,"MailDeleteAllButton");
- let K3=V3;
- const z3=class t extends Be{
- constructor(i){
- super(),zt(this,"bg"),zt(this,"lbl"),zt(this,"container"),zt(this,"_width",100),zt(this,"_minWidth",100),zt(this,"_height",58),zt(this,"_textSize",19),zt(this,"_activated",!0),zt(this,"_activatedTextColor",16777215),zt(this,"_deactivatedTextColor",10066329),zt(this,"_outlineText",!1),zt(this,"_resizable",!1),zt(this,"_padding",20),zt(this,"_color",t.COLOR_SAND_BROWN),zt(this,"onClick"),zt(this,"redDot"),this.container=new Be,this.addChild(this.container),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr",this._color),leftWidth:40,topHeight:27,rightWidth:40,bottomHeight:29}
- ),this.bg.width=this._width,this.bg.height=this._height,this.container.addChild(this.bg);
- const s=aD.LABEL_OPTION_NO_DROP_SHADOW;
- s.fill=aD.COLOR_WHITE,s.fontSize=this._textSize,this.lbl=new YD(i,s.fill,s),this.container.addChild(this.lbl),this.updateLayout(),this.eventMode="dynamic",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this),this.container.pivot.set(.5*this._width,.5*this._height)}
- updateLayout(){
- this._resizable?aD.setLabelWrapWidth(this.lbl,5*this._width):aD.setLabelWrapWidth(this.lbl,this._width),this.lbl.x=.5*(this._width-this.lbl.width),this.lbl.y=.5*(this._height-this.lbl.height),this.container.x=.5*this._width,this.container.y=.5*this._height}
- get width(){
- return this._width}
- set width(t){
- t!=this._width&&(this._resizable&&t<this._minWidth&&(t=this._minWidth),this._width=t,this.bg.width=this._width,this.container.pivot.set(.5*this._width,.5*this._height),this.updateLayout())}
- get minWidth(){
- return this._minWidth}
- set minWidth(t){
- t!=this._minWidth&&(this._minWidth=t,this._resizable&&this._width<this._minWidth&&(this.width=this._minWidth))}
- get height(){
- return this._height}
- set height(t){
- t!=this._height&&(this._height=t,this.bg.height=this._height,this.container.pivot.set(.5*this._width,.5*this._height),this.updateLayout())}
- get text(){
- return this.lbl.text}
- set text(t){
- this.lbl.text=t,this._resizable&&(this.width=this.lbl.width+2*this._padding),this.updateLayout()}
- get textSize(){
- return this._textSize}
- set textSize(t){
- t!=this._textSize&&(this._textSize=t,this.lbl.textSize=this._textSize,this.updateLayout())}
- get activated(){
- return this._activated}
- set activated(t){
- t!=this._activated&&(this._activated=t,this._activated,this.updateTextColor())}
- get activatedTextColor(){
- return this._activatedTextColor}
- set activatedTextColor(t){
- t!=this._activatedTextColor&&(this._activatedTextColor=t,this.updateTextColor())}
- get deactivatedTextColor(){
- return this._deactivatedTextColor}
- set deactivatedTextColor(t){
- t!=this._deactivatedTextColor&&(this._deactivatedTextColor=t,this.updateTextColor())}
- updateTextColor(){
- 1==this._activated?this.lbl.textColor=this._activatedTextColor:this.lbl.textColor=this._deactivatedTextColor}
- get outlineText(){
- return this._outlineText}
- set outlineText(t){
- if(t==this._outlineText)return;
- this._outlineText=t;
- const i=this.lbl.getStyle();
- this._outlineText?(delete i.stroke,i.stroke={
- color:"#000000",width:4,join:"round"}
- ):delete i.stroke,this.lbl.setStyle(i),this.updateLayout()}
- get resizable(){
- return this._resizable}
- set resizable(t){
- t!=this._resizable&&(this._resizable=t,this.width=this.lbl.width+2*this._padding,this.updateLayout())}
- getStyle(){
- return this.lbl.getStyle()}
- setStyle(t){
- this.lbl.setStyle(t)}
- setTexture(t){
- if(t)try{
- this.bg.texture=t.texture,this.bg.leftWidth=t.leftWidth,this.bg.topHeight=t.topHeight,this.bg.rightWidth=t.rightWidth,this.bg.bottomHeight=t.bottomHeight}
- catch(i){
- }
- }
- get color(){
- return this._color}
- set color(t){
- if(t!=this._color){
- this._color=t;
- try{
- this.bg.texture=ZA.getTexture("UI_Ekkorr",this._color)}
- catch(i){
- }
- }
- }
- onDown(t){
- 0!=this._activated&&(this.container.scale=.9)}
- onUp(t){
- 0!=this._activated&&(this.container.scale=1)}
- onTap(t){
- 0!=this._activated&&(KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),WL(),this.onClick&&this.onClick())}
- showRedDot(){
- this.redDot||(this.redDot=new YL,this.container.addChild(this.redDot)),this.redDot.show(),this.updateRedDot()}
- hideRedDot(){
- this.redDot&&this.redDot.hide()}
- updateRedDot(){
- this.redDot&&(this.redDot.x=this.bg.x+this.bg.width-this.redDot.width-12,this.redDot.y=this.bg.y-3)}
- }
- ;
- Kt(z3,"CommonButton2"),zt(z3,"COLOR_SAND_BROWN","Btn_Sand_Brown"),zt(z3,"COLOR_ORANGE","Btn_Orange"),zt(z3,"COLOR_GRAY","Btn_Gray");
- let q3=z3;
- const X3=class extends q3{
- constructor(t){
- super(t),zt(this,"bgOff"),zt(this,"_selected",!0),this.minWidth=180,this.resizable=!0,this.outlineText=!0,this.bgOff=new CM({
- texture:ZA.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.bg.visible=this._selected,this.bgOff.visible=!this._selected}
- get selected(){
- return this._selected}
- set selected(t){
- t!=this._selected&&(this._selected=t,this._selected?(this.bg.visible=!0,this.bgOff.visible=!1):(this.bg.visible=!1,this.bgOff.visible=!0))}
- onTap(t){
- this._selected||super.onTap(t)}
- }
- ;
- Kt(X3,"MailMenuButton");
- let Y3=X3;
- const J3=class extends iP{
- constructor(){
- super(),this.sp.x=.5*-this.sp.width,this.sp.y=.5*-this.sp.height,this.offsetX=2,this.scale=.5}
- getTextures(){
- return ZA.getTextures("Loading","loading_circle_60f_")}
- }
- ;
- Kt(J3,"MailLoading");
- let Q3=J3;
- const Z3=class extends Be{
- constructor(){
- super(),zt(this,"yPrev",0),zt(this,"yHome",0),zt(this,"vy",0),zt(this,"yMax",0),zt(this,"yMin",0),zt(this,"yMouse",0),zt(this,"yOffset",140),zt(this,"min",0),zt(this,"max",0),zt(this,"dragSensorDistance",20),zt(this,"_isDragging",!1),zt(this,"onDragStart",null),zt(this,"onDragEnd",null),this.eventMode="static",this.on("pointerdown",this.onDown,this)}
- get isDragging(){
- return this._isDragging}
- onDown(t){
- this.min>this.max||(this.yMin=this.min,this.yMax=this.max,this.yPrev=this.yHome=this.yMouse=t.globalY,this.off("pointermove",this.onMove,this),this.on("pointermove",this.onMove,this),this.off("pointerup",this.onUp,this),this.on("pointerup",this.onUp,this),this.off("pointerupoutside",this.onUp,this),this.on("pointerupoutside",this.onUp,this),GM.getInstance().remove(this.onFlickEnter,this),GM.getInstance().add(this.onDragEnter,this))}
- onDragEnter(){
- 0==this._isDragging&&Math.abs(this.yMouse-this.yHome)>this.dragSensorDistance&&(this._isDragging=!0,this.onDragStartCallback()),0!=this._isDragging&&(this.vy=this.yMouse-this.yPrev,this.y==this.yMin&&this.vy<0||this.y==this.yMax&&this.vy>0||(this.y+=this.vy,this.y>this.yMax&&(this.y=this.yMax),this.y<this.yMin&&(this.y=this.yMin),this.yPrev=this.yMouse))}
- onMove(t){
- this.yMouse=t.globalY}
- onUp(t){
- 1==this._isDragging&&(this.vy=2*this.vy,GM.getInstance().add(this.onFlickEnter,this),this._isDragging=!1,this.onDragEndCallback()),GM.getInstance().remove(this.onDragEnter,this),this.off("pointermove",this.onMove,this),this.off("pointerup",this.onUp,this),this.off("pointerupoutside",this.onUp,this)}
- onFlickEnter(){
- this.vy*=.98,this.y==this.yMin&&this.vy<0||this.y==this.yMax&&this.vy>0?GM.getInstance().remove(this.onFlickEnter,this):(this.y+=this.vy,this.y>this.yMax&&(this.y=this.yMax),this.y<this.yMin&&(this.y=this.yMin),Math.abs(this.vy)<1&&GM.getInstance().remove(this.onFlickEnter,this))}
- onDragStartCallback(){
- this.onDragStart&&this.onDragStart()}
- onDragEndCallback(){
- this.onDragEnd&&this.onDragEnd()}
- setScroll(t){
- let i=this.max-t;
- i<this.min&&(i=this.min),this.y=i}
- }
- ;
- Kt(Z3,"DraggableContainer");
- let t6=Z3;
- const i6=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lbl"),zt(this,"count",0),zt(this,"duration",180),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:6,topHeight:6,rightWidth:6,bottomHeight:6}
- ),this.bg.alpha=.7,this.bg.width=640,this.bg.height=50,this.addChild(this.bg),this.lbl=new YD("Toast",aD.DEFAULT_COLOR),this.lbl.x=.5*(this.bg.width-this.lbl.width),this.lbl.y=25,this.addChild(this.lbl),this.eventMode="none"}
- show(t,i,s=aD.DEFAULT_COLOR,e=null,n=!0,h=180,r=.7){
- this.lbl.text=t,aD.setLabelWrapWidth(this.lbl,this.bg.width-10),this.lbl.textColor=s,this.lbl.x=.5*(this.bg.width-this.lbl.width),this.bg.height=this.lbl.height+2*this.lbl.y,this.y=i-this.height,this.duration=h,this.bg.alpha=r,null==e&&(e=qD.getInstance()),e&&e.addChild(this),1==n&&this.startCheckHide(),F3.showItemsInVertical([this])}
- hide(){
- this.parent&&this.parent.removeChild(this)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- startCheckHide(){
- this.count=0,GM.getInstance().add(this.checkHide,this)}
- checkHide(){
- ++this.count>this.duration&&(this.count=0,this.count=0,this.hide(),GM.getInstance().remove(this.checkHide,this))}
- }
- ;
- Kt(i6,"BaseToast");
- let s6=i6;
- const e6=class t extends s6{
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- constructor(){
- super()}
- }
- ;
- Kt(e6,"Toast"),zt(e6,"_instance");
- let n6=e6;
- const h6=class t{
- constructor(){
- zt(this,"requestPending",!1),zt(this,"obj",{
- }
- ),zt(this,"objByType",{
- }
- ),zt(this,"types",[])}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- async getInventory(t,i=!1){
- if(this.requestPending)return;
- this.requestPending=!0;
- let s=await hD.getInstance().user.getInventory(t,i);
- if(0==s.success)return this.requestPending=!1,void lS.getInstance().dispatchCustomEvent("UserInventory");
- this.setData(s.body),this.requestPending=!1}
- setData(t){
- if(!t||!t.inventory)return;
- this.obj={
- }
- ,this.objByType={
- }
- ,this.obj.all=[],this.types[0]="all",this.types.length=1;
- const i=t.inventory;
- let s,e,n;
- const h=i.length;
- for(let r=0;
- r<h;
- ++r){
- if(s=i[r].type.toString(),e="subType"in i[r]?i[r].subType.toString():"",n="","ticket"==s)switch(e){
- case"heroGacha":case"heroSelect":n="hero";
- break;
- case"pet":case"petSelect":n="pet";
- break;
- case"treasureGacha":n="relic"}
- ""!=n&&(e&&(this.objByType[`${
- s}
- _${
- e}
- `]=i[r]),i[r].inventoryType=n,this.obj[n]||(this.obj[n]=[]),this.obj[n].push(i[r]),this.obj.all.push(i[r]),this.types.includes(n)||this.types.push(n))}
- lS.getInstance().dispatchCustomEvent("UserInventory")}
- getTypes(){
- return this.types}
- getListWithType(t){
- return this.obj[t]}
- getDataWithTypeAndSubType(t,i){
- return this.objByType[`${
- t}
- _${
- i}
- `]}
- }
- ;
- Kt(h6,"InventoryManager"),zt(h6,"instance");
- let r6=h6;
- var o6=(t=>(t.all="all",t.hero="hero",t.relic="relic",t.pet="pet",t))(o6||{
- }
- );
- const a6=class t{
- constructor(){
- zt(this,"data",{
- hero5:0,hero7:0,treasure5:0,treasure6:0,treasure7:0,treasure8:0,treasure9:0}
- )}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setData(t){
- if(t)for(const i in this.data)i in t&&(this.data[i]=Number(t[i]))}
- getHeroTransTicket(t=5){
- const i=`hero${
- t}
- `;
- return i in this.data?this.data[i]:0}
- getTreasureTransTicket(t=6){
- const i=`treasure${
- t}
- `;
- return i in this.data?this.data[i]:0}
- }
- ;
- Kt(a6,"TransTicketManager"),zt(a6,"instance");
- let c6=a6;
- const l6=class t extends AB{
- constructor(){
- super(),zt(this,"lblDesc"),zt(this,"btnConfirm"),zt(this,"icons",[]),this.outSideClickHide=!0,this.title=AG.getValueReplace("GAME_181","##",5,"5성 병사 뽑기"),this.lblDesc=new YD("",13421772,aD.DEFAULT_FONT_OPTION_16),this.lblDesc.align="center",this.contentContainer.addChild(this.lblDesc),this.btnConfirm=new QL(AG.getText("COMMON_1","확인")),this.btnConfirm.color=QL.GREEN,this.btnConfirm.width=160,this.btnConfirm.height=50,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getValueReplace("GAME_181","##",5,"5성 병사 뽑기"),this.btnConfirm.text=AG.getText("COMMON_1","확인");
- const t=vx.getInstance(),i=Number(EL.getInstance().getClientData("BUYABLE_HONOR_HERO_NUMBER")||1),s=t.bookList.filter(t=>5===t.grade&&0===t.evolStage&&t.canPurchase&&t.honor>=i+1&&t.kindNum<1e3);
- this.update(s,this.title),await this.loadImage(),super.show()}
- showGuideOfHeroGacha(){
- this.title=AG.getText("GAME_764","5성 영웅 확정권"),this.btnConfirm.text=AG.getText("COMMON_1","확인");
- const t=vx.getInstance(),i=t.honorNumberMax,s=t.bookList.filter(t=>5===t.grade&&0===t.evolStage&&t.canPurchase&&(t.honor>=1&&t.honor<i||t.honor<1)&&t.kindNum<1e3);
- this.update(s,this.title),super.show()}
- update(t,i){
- var s,e;
- for(const p of this.icons)this.contentContainer.removeChild(p);
- this.icons=[];
- const n=t.length,h=n>0?(100/n).toFixed(2):"0",r=AG.getText("GAME_602","아래 병사 중 랜덤한 병사를 획득합니다.")+" "+AG.getText("COMMON_475","획득 확률은 모두 동일합니다.")+`\n(${
- AG.getText("COMMON_476","개별 획득 확률")}
-  : ${
- h}
- %(=1/${
- n}
- ))`;
- this.lblDesc.text=r;
- for(let p=0;
- p<t.length;
- p++){
- const i=new vK;
- i.scale=.7,i.setDataWithKindNum(t[p].kindNum),this.contentContainer.addChild(i),this.icons.push(i)}
- const o=(null==(s=this.icons[0])?void 0:s.width)??70,a=(null==(e=this.icons[0])?void 0:e.height)??70,c=Math.ceil(t.length/4),l=4*o+15;
- this.width=520,this.title=i,aD.setLabelWrapWidth(this.lblDesc,this.width-55),this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.lblDesc.y=65;
- const u=this.lblDesc.y+this.lblDesc.height+15,d=.5*(this.width-l)+5;
- for(let p=0;
- p<this.icons.length;
- p++){
- const t=p%4,i=Math.floor(p/4);
- this.icons[p].x=d+t*(o+5),this.icons[p].y=u+i*(a+2)}
- const f=u+c*(a+2)+35;
- this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=f,this.height=f+this.btnConfirm.height+30,this.btnClose.x=this.width-this.btnClose.width-12}
- }
- ;
- Kt(l6,"HeroDrawGuidePopup"),zt(l6,"_instance");
- let u6=l6;
- const d6=class extends Be{
- constructor(){
- super(),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","UI_T001"))),zt(this,"bg",new We(ZA.getTexture("UI_Ekkorr","HeroFrame_1_Bg"))),zt(this,"cover",new We(ZA.getTexture("UI_Ekkorr","HeroFrame_1"))),zt(this,"lblEnhance",new YD("+0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"posList",[30,26,24,19,16,13,9]),zt(this,"star",new We(ZA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[3])),zt(this,"trans",new We(ZA.getTexture("UI_Ekkorr","Trans0001"))),this.icon.x=3,this.icon.y=3,this.bg.x=3,this.bg.y=3,this.addChild(this.bg),this.addChild(this.icon),this.cover.x=0,this.cover.y=0,this.addChild(this.cover),this.star.x=this.posList[3],this.star.y=this.bg.height-this.star.height,this.addChild(this.star),this.icon.x=.5*(this.bg.height-this.icon.height),this.icon.y=.5*(this.bg.height-this.icon.height),this.lblEnhance.x=this.bg.width-this.lblEnhance.width-1,this.lblEnhance.y=3,this.addChild(this.lblEnhance),this.trans.scale=1.2,this.trans.x=5,this.trans.y=7,this.trans.visible=!1,this.addChild(this.trans)}
- setVO(t){
- this.icon.texture=ZA.getTexture("UI_Ekkorr",`UI_T${
- uU.addZeros(3,t.kindNum)}
- `),this.icon.width=this.icon.height=this.cover.width-6,this.icon.x=3,this.icon.y=2,this.lblEnhance.text=`+${
- t.enhance}
- `,this.star.texture=ZA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[t.grade-1],this.star.x=this.posList[t.grade-1],this.bg.texture=ZA.getTexture("UI_Ekkorr",`HeroFrame_${
- t.grade}
- _Bg`),this.cover.texture=ZA.getTexture("UI_Ekkorr",`HeroFrame_${
- t.grade}
- `),t.trans&&t.trans>0?(this.trans.texture=ZA.getTexture("UI_Ekkorr",`Trans000${
- t.trans}
- `),this.trans.visible=!0):this.trans.visible=!1}
- hideTrans(){
- this.trans.visible=!1}
- showTrans(t){
- t<=0?this.trans.visible=!1:(this.trans.texture=ZA.getTexture("UI_Ekkorr",`Trans000${
- t}
- `),this.trans.visible=!0)}
- setDataWithKindNum(t){
- const i=Wx.getInstance().getBookDataByKindNum(t);
- i&&this.setVO(i)}
- hideFrame(){
- this.bg.visible=!1,this.cover.visible=!1}
- showFrame(){
- this.bg.visible=!0,this.cover.visible=!0}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- hideEnhance(){
- this.lblEnhance.visible=!1}
- showEnhance(){
- this.lblEnhance.visible=!0}
- }
- ;
- Kt(d6,"TreasureIcon");
- let f6=d6;
- const p6=class t extends AB{
- constructor(){
- super(),zt(this,"lblDesc"),zt(this,"btnConfirm"),zt(this,"icons",[]),this.outSideClickHide=!0,this.title=AG.getValueReplace("GAME_184","##",6,"6성 유물 뽑기"),this.lblDesc=new YD("",13421772,aD.DEFAULT_FONT_OPTION_16),this.lblDesc.align="center",this.contentContainer.addChild(this.lblDesc),this.btnConfirm=new QL(AG.getText("COMMON_1","확인")),this.btnConfirm.color=QL.GREEN,this.btnConfirm.width=160,this.btnConfirm.height=50,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_218","유물 뽑기권"),this.btnConfirm.text=AG.getText("COMMON_1","확인");
- const t=Wx.getInstance().bookList.filter(t=>6===t.grade);
- this.update(t,this.title),await this.loadImage(),super.show()}
- showGuideOfTreasureGacha(){
- this.title=AG.getText("GAME_218","유물 뽑기권"),this.btnConfirm.text=AG.getText("COMMON_1","확인");
- const t=Wx.getInstance().bookList.filter(t=>6===t.grade);
- this.update(t,this.title),super.show()}
- update(t,i){
- var s,e;
- for(const g of this.icons)this.contentContainer.removeChild(g);
- this.icons=[];
- const n=Wx.getInstance(),h=new Set;
- for(const g of n.equipedList)h.add(g.kindNum);
- for(const g of n.ownedList)h.add(g.kindNum);
- const r=t.filter(t=>!h.has(t.kindNum)).length;
- let o=AG.getText("GAME_603","아래 유물 중 랜덤한 유물을 획득합니다.")+" "+AG.getText("COMMON_475","획득 확률은 모두 동일합니다.");
- if(r>0){
- const t=(100/r).toFixed(2);
- o+=`\n(${
- AG.getText("COMMON_476","개별 획득 확률")}
-  : ${
- t}
- %(=1/${
- r}
- ))`}
- this.lblDesc.text=o;
- for(let g=0;
- g<t.length;
- g++){
- const i=new f6;
- i.scale=.75,i.setDataWithKindNum(t[g].kindNum),i.hideEnhance(),i.alpha=h.has(t[g].kindNum)?.35:1,this.contentContainer.addChild(i),this.icons.push(i)}
- const a=(null==(s=this.icons[0])?void 0:s.width)??70,c=(null==(e=this.icons[0])?void 0:e.height)??70,l=Math.ceil(t.length/7),u=7*a-12;
- this.width=520,this.title=i,aD.setLabelWrapWidth(this.lblDesc,this.width-40),this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.lblDesc.y=65;
- const d=this.lblDesc.y+this.lblDesc.height+15,f=.5*(this.width-u)+5;
- for(let g=0;
- g<this.icons.length;
- g++){
- const t=g%7,i=Math.floor(g/7);
- this.icons[g].x=f+t*(a+-2),this.icons[g].y=d+i*(c+2)}
- const p=d+l*(c+2)+10;
- this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=p,this.height=p+this.btnConfirm.height+30,this.btnClose.x=this.width-this.btnClose.width-12}
- }
- ;
- Kt(p6,"TreasureDrawGuidePopup"),zt(p6,"_instance");
- let g6=p6;
- const m6=class t{
- constructor(){
- zt(this,"battlePoolMap",{
- }
- ),zt(this,"seasonSetMap",{
- }
- ),zt(this,"rewardMap",{
- }
- ),zt(this,"seasonSetKindNum",0),zt(this,"seasonNumber",0),zt(this,"seasonEndTime",0),zt(this,"currentFloor",0),zt(this,"floorStars",[]),zt(this,"ticket",0),zt(this,"maxTicket",5),zt(this,"ticketTime",0),zt(this,"currentBattleFloor",0),zt(this,"bookLoaded",!1)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBattlePoolData(t){
- if(this.battlePoolMap={
- }
- ,t)for(const i of t){
- const t=new b6;
- t.kindNum=i.kindNum,t.difficulty=i.difficulty,t.enemyKindNums=i.enemyKindNums||"",t.enemyTrans=i.enemyTrans||"",t.enemyShields=i.enemyShields||"",t.enemyLevels=i.enemyLevels||"",t.tribes=i.tribes,t.gradeMax=i.gradeMax,t.femaleExclude=i.femaleExclude,t.maleExclude=i.maleExclude,t.rangeExclude=i.rangeExclude,t.meleeExclude=i.meleeExclude,t.airExclude=i.airExclude,t.star1=i.star1,t.star2=i.star2,t.star3=i.star3,this.battlePoolMap[t.kindNum]=t}
- }
- setSeasonSetData(t){
- if(this.seasonSetMap={
- }
- ,t)for(const i of t){
- const t=new _6;
- t.kindNum=i.kindNum,t.battleIDs=i.battleIDs,this.seasonSetMap[t.kindNum]=t}
- }
- setRewardData(t){
- if(this.rewardMap={
- }
- ,t)for(const i of t){
- const t=new E6;
- t.floor=i.floor,t.gem1=i.gem1,t.gem2=i.gem2,t.gem3=i.gem3,t.honor1=i.honor1,t.honor2=i.honor2,t.honor3=i.honor3,this.rewardMap[t.floor]=t}
- }
- setData(t){
- for(this.seasonSetKindNum=t.seasonSetKindNum,this.seasonNumber=t.seasonNumber||0,this.seasonEndTime=t.seasonEndTime?new Date(t.seasonEndTime).getTime():0,this.currentFloor=t.currentFloor,this.floorStars=t.floorStars||[];
- this.floorStars.length<30;
- )this.floorStars.push(0);
- this.ticket=t.ticket,this.maxTicket=t.maxTicket,this.ticketTime=new Date(t.ticketTime).getTime()+1e3,this.currentBattleFloor=t.currentBattleFloor}
- getFloorList(){
- const t=this.seasonSetMap[this.seasonSetKindNum];
- if(!t)return[];
- const i=t.battleIDs.split("|").map(Number),s=[],e=Math.min(this.currentFloor+1,30);
- for(let n=0;
- n<e;
- n++){
- const t=this.battlePoolMap[i[n]];
- if(!t)continue;
- const e=new S6;
- e.floor=n+1,e.stars=this.floorStars[n]||0,e.battleVO=t,e.reward=this.rewardMap[n+1],e.isCleared=this.floorStars[n]>0,e.isNext=n+1===this.currentFloor+1,s.push(e)}
- return s}
- getFloorListReversed(){
- return this.getFloorList().reverse()}
- getBattlePool(t){
- return this.battlePoolMap[t]}
- buildFloorVO(t){
- if(t<1||t>30)return null;
- const i=this.seasonSetMap[this.seasonSetKindNum];
- if(!i)return null;
- const s=i.battleIDs.split("|").map(Number),e=t-1;
- if(e>=s.length)return null;
- const n=this.battlePoolMap[s[e]];
- if(!n)return null;
- const h=new S6;
- return h.floor=t,h.stars=this.floorStars[e]||0,h.battleVO=n,h.reward=this.rewardMap[t],h.isCleared=this.floorStars[e]>0,h.isNext=t===this.currentFloor+1,h}
- getReward(t){
- return this.rewardMap[t]}
- }
- ;
- Kt(m6,"TowerDataManager"),zt(m6,"instance");
- let w6=m6;
- const v6=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"difficulty",0),zt(this,"enemyKindNums",""),zt(this,"enemyTrans",""),zt(this,"enemyShields",""),zt(this,"enemyLevels",""),zt(this,"tribes","0"),zt(this,"gradeMax",0),zt(this,"femaleExclude","N"),zt(this,"maleExclude","N"),zt(this,"rangeExclude","N"),zt(this,"meleeExclude","N"),zt(this,"airExclude","N"),zt(this,"star1",0),zt(this,"star2",0),zt(this,"star3",0)}
- static parseEnemies(t){
- const i=new Array(20).fill(null);
- if(!t||!t.enemyKindNums)return i;
- const s=String(t.enemyKindNums).split("|"),e=Math.min(s.length,20);
- for(let n=0;
- n<e;
- n++){
- const t=s[n].trim();
- if(!t||"0"===t)continue;
- const e=t.indexOf("-"),h=e>=0?t.substring(0,e):t,r=e>=0?t.substring(e+1):"0",o=Number(h);
- o>0&&(i[n]={
- kindNum:o,trans:Number(r)||0}
- )}
- return i}
- static stringifyEnemies(t,i){
- let s=-1;
- for(let n=19;
- n>=0;
- n--)if((t[n]??-1)>0){
- s=n;
- break}
- if(s<0)return"";
- const e=[];
- for(let n=0;
- n<=s;
- n++){
- const s=t[n]??-1;
- s<=0?e.push("0"):e.push(`${
- s}
- -${
- i[n]??0}
- `)}
- return e.join("|")}
- }
- ;
- Kt(v6,"TowerBattlePoolVO");
- let b6=v6;
- const y6=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"battleIDs","")}
- }
- ;
- Kt(y6,"TowerSeasonSetVO");
- let _6=y6;
- const M6=class{
- constructor(){
- zt(this,"floor",0),zt(this,"gem1",0),zt(this,"gem2",0),zt(this,"gem3",0),zt(this,"honor1",0),zt(this,"honor2",0),zt(this,"honor3",0)}
- }
- ;
- Kt(M6,"TowerRewardVO");
- let E6=M6;
- const A6=class{
- constructor(){
- zt(this,"floor",0),zt(this,"stars",0),zt(this,"battleVO"),zt(this,"reward"),zt(this,"isCleared",!1),zt(this,"isNext",!1)}
- }
- ;
- Kt(A6,"TowerFloorVO");
- let S6=A6;
- const T6=class t{
- constructor(){
- zt(this,"lastFetchTime",0),zt(this,"hasData",!1),zt(this,"dungeonRechargeMs",0),zt(this,"towerRechargeMs",0),zt(this,"towerSnapshot",null),zt(this,"pvpSnapshot",null),zt(this,"dailyRankingSnapshot",null)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- setSummary(t){
- if(t){
- if(this.hasData=!0,this.lastFetchTime=ix.time,t.dungeon){
- this.dungeonRechargeMs=t.dungeon.ticketRechargeMs??0;
- const i=Rx.getInstance();
- i.ticket=t.dungeon.ticket??i.ticket,i.maxTicket=t.dungeon.maxTicket??i.maxTicket,t.dungeon.ticketTime&&(i.ticketTime=new Date(t.dungeon.ticketTime).getTime()+1e3)}
- if(t.tower){
- this.towerRechargeMs=t.tower.ticketRechargeMs??0;
- const i=w6.getInstance();
- i.seasonNumber>0&&(i.ticket=t.tower.ticket??i.ticket,i.maxTicket=t.tower.maxTicket??i.maxTicket,t.tower.ticketTime&&(i.ticketTime=new Date(t.tower.ticketTime).getTime()+1e3),void 0!==t.tower.currentFloor&&(i.currentFloor=t.tower.currentFloor),void 0!==t.tower.seasonNumber&&(i.seasonNumber=t.tower.seasonNumber),t.tower.seasonEndTime&&(i.seasonEndTime=new Date(t.tower.seasonEndTime).getTime())),this.towerSnapshot={
- seasonNumber:t.tower.seasonNumber??0,seasonEndTime:t.tower.seasonEndTime?new Date(t.tower.seasonEndTime).getTime():0,currentFloor:t.tower.currentFloor??0,ticket:t.tower.ticket??0,maxTicket:t.tower.maxTicket??0,ticketTime:t.tower.ticketTime?new Date(t.tower.ticketTime).getTime():0}
- }
- this.pvpSnapshot=t.pvp??null,this.dailyRankingSnapshot=t.dailyRanking??null}
- }
- has(){
- return this.hasData}
- isStale(t){
- return!this.hasData||ix.time-this.lastFetchTime>=t}
- getDungeon(){
- if(!this.hasData)return null;
- const t=Rx.getInstance();
- return{
- ticket:t.ticket,maxTicket:t.maxTicket,ticketTime:t.ticketTime,ticketRechargeMs:this.dungeonRechargeMs}
- }
- getTower(){
- if(!this.hasData)return null;
- const t=w6.getInstance();
- return t.seasonNumber>0?{
- seasonNumber:t.seasonNumber,seasonEndTime:t.seasonEndTime,currentFloor:t.currentFloor,ticket:t.ticket,maxTicket:t.maxTicket,ticketTime:t.ticketTime,ticketRechargeMs:this.towerRechargeMs}
- :this.towerSnapshot?{
- ...this.towerSnapshot,ticketRechargeMs:this.towerRechargeMs}
- :null}
- getPvp(){
- return this.pvpSnapshot}
- updatePvpTicket(t,i){
- this.pvpSnapshot&&(this.pvpSnapshot.ticket=t,void 0!==i&&(this.pvpSnapshot.ticketTime=i))}
- getDailyRanking(){
- return this.dailyRankingSnapshot}
- updateDailyRanking(t,i){
- this.dailyRankingSnapshot?(this.dailyRankingSnapshot.joined=t,this.dailyRankingSnapshot.score=i):this.dailyRankingSnapshot={
- joined:t,score:i,date:""}
- }
- invalidate(){
- this.lastFetchTime=0}
- }
- ;
- Kt(T6,"BattleSummaryManager"),zt(T6,"instance");
- let C6=T6;
- const k6=class extends Be{
- constructor(){
- super()}
- get className(){
- return""}
- updateLanguage(){
- }
- }
- ;
- Kt(k6,"BaseSubView");
- let O6=k6;
- const I6=class extends Be{
- constructor(){
- super(),zt(this,"container",new Be),zt(this,"_currentSubView",null),this.addChild(this.container)}
- get currentSubView(){
- return this._currentSubView}
- set currentSubView(t){
- this._currentSubView!==t&&(null!=this._currentSubView&&this.removeChild(this._currentSubView),this._currentSubView=t,null!=this._currentSubView&&(this.addChild(this._currentSubView),this._currentSubView.x=0))}
- get className(){
- return""}
- updateLanguage(){
- this._currentSubView&&this._currentSubView.updateLanguage()}
- }
- ;
- Kt(I6,"BaseView");
- let x6=I6;
- const N6=class t extends x6{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- super(),this.currentSubView=Ght.getInstance()}
- setData(){
- Ght.getInstance().setData(),this.currentSubView=Ght.getInstance()}
- get className(){
- return"BattleView"}
- }
- ;
- Kt(N6,"BattleView"),zt(N6,"instance");
- let P6=N6,R6=(Kt(J=class extends Be{
- constructor(t,i="UI_Ekkorr"){
- super(),zt(this,"icon",new We),zt(this,"stopEventPropagation",!1),zt(this,"onClick",null),zt(this,"_iconColor",16777215),zt(this,"_iconName",""),zt(this,"_sheetName","UI_Ekkorr"),this._iconName=t,this._sheetName=i,this.icon.texture=this.getTexture(this._iconName,this._sheetName),this.addChild(this.icon),this.update(),this.eventMode="dynamic",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this)}
- update(){
- this.icon.pivot.set(.5*this.icon.width,.5*this.icon.height),this.icon.x=.5*this.icon.width,this.icon.y=.5*this.icon.height}
- onDown(){
- this.icon.scale=.9}
- onUp(){
- this.icon.scale=1}
- onTap(){
- KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),WL(),null!=this.onClick&&this.onClick()}
- get iconColor(){
- return this._iconColor}
- set iconColor(t){
- t!==this._iconColor&&(this._iconColor=t,this.icon.tint=this._iconColor)}
- get iconName(){
- return this._iconName}
- set iconName(t){
- this._iconName=t,this.icon.texture=this.getTexture(this._iconName,this._sheetName),this.update()}
- getTexture(t,i){
- return ZA.getTexture(i,t)}
- getIcon(){
- return this.icon}
- }
- ,"IconButton"),J);
- const D6=class extends R6{
- constructor(){
- super("UI_Close3","UI_Ekkorr"),this.width=45,this.height=45}
- }
- ;
- Kt(D6,"CommonCloseButton");
- let L6=D6;
- const G6=class t extends QL{
- constructor(t,i=120,s=50){
- super(t),zt(this,"index",-1),zt(this,"bg2"),zt(this,"indicator"),zt(this,"minWidth",120),zt(this,"_selected",!0),zt(this,"padding",50),zt(this,"_autoResize",!0),zt(this,"_allowMultiline",!1),this.minWidth=i,this.padding=s,this.container.removeChild(this.bg),this.lbl.textSize=18,this._activatedTextColor=YD.LIGHT_BROWN,this.updateTextColor(),this.bg2=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Base_Tooltip"),leftWidth:9,topHeight:9,rightWidth:9,bottomHeight:10}
- ),this.bg2.width=101,this.bg2.height=45,this.bg2.x=.5*-this.bg2.width,this.bg2.y=.5*-this.bg2.height,this.container.addChildAt(this.bg2,0),this.indicator=new CM({
- texture:ZA.getTexture("UI_Ekkorr","SelectedBar"),leftWidth:5,topHeight:1,rightWidth:5,bottomHeight:1}
- ),this.container.addChild(this.indicator),this.container.x=.5*this.bg2.width,this.container.y=.5*this.bg2.height,this.width=100,this.height=44,this._autoResize&&(this.text=t),this.updateHitArea(),this.selected=!1}
- updateHitArea(){
- null!=this.bg2&&(this._hitArea.width=this.bg2.width,this._hitArea.height=this.bg2.height,this.hitArea=this._hitArea)}
- get width(){
- return this.bg2.width-2*t.TRANSPARENT_BORDER}
- set width(i){
- i<this.minWidth&&(i=this.minWidth);
- const s=t.TRANSPARENT_BORDER;
- this.bg2.width=i+2*s,this.bg2.x=.5*-this.bg2.width,this.lbl.x=.5*-this.lbl.width,this.container.x=.5*i,this.indicator.width=i-16,this.indicator.x=.5*-this.indicator.width,this.updateHitArea()}
- set height(i){
- const s=t.TRANSPARENT_BORDER;
- this.bg2.height=i+2*s,this.bg2.y=.5*-this.bg2.height,this.lbl.y=.5*-this.lbl.height,this.container.y=.5*i,this.indicator.y=this.bg2.y+this.bg2.height-this.indicator.height-10,this.updateHitArea()}
- get height(){
- return this.bg2.height-2*t.TRANSPARENT_BORDER}
- get selected(){
- return this._selected}
- set selected(t){
- t!=this._selected&&(this._selected=t,1==this._selected?(this.indicator.visible=!0,this.activatedTextColor=aD.COLOR_ORANGE):(this.indicator.visible=!1,this.activatedTextColor=aD.DEFAULT_COLOR))}
- get autoResize(){
- return this._autoResize}
- set autoResize(t){
- this._autoResize=t}
- get allowMultiline(){
- return this._allowMultiline}
- set allowMultiline(t){
- this._allowMultiline!==t&&(this._allowMultiline=t,this.lbl.text&&(this.text=this.lbl.text))}
- applyMultilineLayout(i){
- const s=Math.max(40,this.width-2*t.MULTILINE_SIDE_PAD);
- if(this.lbl.setWrapWidth(0),this.lbl.lineHeight=0,this.lbl.text=i,this.lbl.width<=s)return this.lbl.x=.5*-this.lbl.width,void(this.lbl.y=.5*-this.lbl.height);
- this.lbl.align="center",this.lbl.lineHeight=Math.floor(this.lbl.textSize*t.MULTILINE_LINE_HEIGHT_RATIO)+t.MULTILINE_LINE_HEIGHT_EXTRA,this.lbl.setWrapWidth(s),this.lbl.text=i,this.lbl.x=.5*-this.lbl.width,this.lbl.y=.5*-this.lbl.height+t.MULTILINE_Y_OFFSET}
- setCompactStyle(t,i){
- this.lbl.textSize=t,this.padding=i,this._autoResize=!0,this.lbl.setWrapWidth(0),this.text=this.lbl.text}
- setMultilineMode(t,i,s=16){
- this._autoResize=!1,this.lbl.textSize=s,this.width=t,this.height=i;
- const e=Math.max(40,t-10);
- this.lbl.setWrapWidth(e),this.lbl.align="center",this.lbl.x=.5*-this.lbl.width,this.lbl.y=.5*-this.lbl.height}
- fitWithinWidth(t,i=50){
- this._autoResize=!1;
- const s=this.lbl.text;
- this.lbl.setWrapWidth(0),this.lbl.textSize=18,this.lbl.text=s,this.width=t,this.height=i;
- const e=Math.max(40,t-10);
- if(this.lbl.width<=e)return this.lbl.x=.5*-this.lbl.width,void(this.lbl.y=.5*-this.lbl.height);
- for(let n=17;
- n>=12;
- n--)if(this.lbl.textSize=n,this.lbl.text=s,this.lbl.width<=e)return this.lbl.x=.5*-this.lbl.width,void(this.lbl.y=.5*-this.lbl.height);
- this.lbl.textSize=12,this.lbl.setWrapWidth(e),this.lbl.align="center",this.lbl.text=s,this.lbl.x=.5*-this.lbl.width,this.lbl.y=.5*-this.lbl.height}
- set text(t){
- super.text=t,this._autoResize?this.width=this.lbl.width+this.padding:this._allowMultiline?this.applyMultilineLayout(t):this.lbl.x=.5*-this.lbl.width}
- updateEventTag(t,i){
- this.eventTag&&(this.eventTag.scale=.7,this.eventTag.x=this.bg2.x+this.bg2.width-this.eventTag.width+t,this.eventTag.y=this.bg2.y+i)}
- }
- ;
- Kt(G6,"SubMenuButton"),zt(G6,"TRANSPARENT_BORDER",3),zt(G6,"MULTILINE_SIDE_PAD",10),zt(G6,"MULTILINE_LINE_HEIGHT_RATIO",.85),zt(G6,"MULTILINE_LINE_HEIGHT_EXTRA",2),zt(G6,"MULTILINE_Y_OFFSET",-2);
- let B6=G6,U6=null;
- function F6(){
- if(null!==U6)return U6;
- try{
- const t=new URLSearchParams(window.location.search);
- U6="1"===t.get("chatDev")}
- catch{
- U6=!1}
- return U6}
- Kt(F6,"isChatDevMode"),Kt(function(){
- return"ef-chat-dev"}
- ,"getDevChannelName");
- const H6="ef.chat.dev.identity.v1",W6=["블루","레드","옐로우","그린","퍼플","오렌지","실버","골드","아쿠아","코랄"],j6=["MASTER","SUB_MASTER","ELDER","ELITE","MEMBER"];
- function $6(){
- try{
- const t=sessionStorage.getItem(H6);
- if(t){
- const i=JSON.parse(t);
- if(i&&i.uid&&i.name)return i}
- }
- catch{
- }
- const t=Math.floor(100*Math.random()),i={
- uid:`dev-${
- Math.random().toString(36).slice(2,10)}
- `,name:`${
- W6[Math.floor(Math.random()*W6.length)]}
- ${
- t}
- `,level:20+Math.floor(80*Math.random()),role:j6[Math.floor(Math.random()*j6.length)]}
- ;
- try{
- sessionStorage.setItem(H6,JSON.stringify(i))}
- catch{
- }
- return i}
- Kt($6,"getDevIdentity");
- const V6=class{
- constructor(){
- zt(this,"listeners",new Map)}
- on(t,i){
- let s=this.listeners.get(t);
- return s||(s=new Set,this.listeners.set(t,s)),s.add(i),()=>this.off(t,i)}
- off(t,i){
- var s;
- null==(s=this.listeners.get(t))||s.delete(i)}
- emit(t,i){
- const s=this.listeners.get(t);
- if(!s||0===s.size)return;
- const e=[...s];
- for(const h of e)try{
- h(i)}
- catch(n){
- }
- }
- clear(t){
- null==t?this.listeners.clear():this.listeners.delete(t)}
- }
- ;
- Kt(V6,"EventBus");
- let K6=V6;
- const z6=class{
- constructor(t=200){
- zt(this,"messages",[]),zt(this,"byId",new Map),zt(this,"maxSize"),this.maxSize=t}
- get size(){
- return this.messages.length}
- getAll(){
- return this.messages}
- get(t){
- return this.byId.get(t)}
- has(t){
- return this.byId.has(t)}
- append(t){
- return!this.byId.has(t.id)&&(this.messages.push(t),this.byId.set(t.id,t),this.trimHead(),!0)}
- prependHistory(t){
- if(0===t.length)return[];
- const i=[];
- for(const s of t)this.byId.has(s.id)||(i.push(s),this.byId.set(s.id,s));
- return 0===i.length?[]:(this.messages=i.concat(this.messages),i)}
- update(t,i){
- const s=this.byId.get(t);
- if(s)return Object.assign(s,i),s}
- replaceId(t,i){
- if(t===i)return this.byId.get(i);
- const s=this.byId.get(t);
- return s?(this.byId.delete(t),s.id=i,this.byId.has(i)||this.byId.set(i,s),s):void 0}
- reset(t=[]){
- const i=new Map(this.byId);
- this.messages=[],this.byId.clear();
- for(const s of t){
- if(this.byId.has(s.id))continue;
- const t=i.get(s.id);
- (null==t?void 0:t.translated)&&(s.translated=t.translated,s.translatedText=t.translatedText,s.originalText=t.originalText),this.messages.push(s),this.byId.set(s.id,s)}
- this.trimHead()}
- clear(){
- this.messages=[],this.byId.clear()}
- oldestTimestamp(){
- var t;
- return null==(t=this.messages[0])?void 0:t.timestamp}
- trimHead(){
- if(this.messages.length<=this.maxSize)return;
- const t=this.messages.length-this.maxSize,i=this.messages.splice(0,t);
- for(const s of i)this.byId.delete(s.id)}
- }
- ;
- Kt(z6,"MessageStore");
- let q6=z6;
- const X6=class{
- constructor(t,i,s,e=200){
- zt(this,"roomId"),zt(this,"kind"),zt(this,"peerUid"),zt(this,"peerName"),zt(this,"store"),zt(this,"bus"),this.roomId=t,this.kind=i,this.peerUid=s,this.store=new q6(e),this.bus=new K6}
- receive(t){
- this.store.append(t)&&this.bus.emit("message:new",t)}
- prependHistory(t){
- const i=this.store.prependHistory(t);
- i.length>0&&this.bus.emit("history:prepended",i)}
- resetHistory(t=[]){
- this.store.reset(t),this.bus.emit("history:reset",this.store.getAll())}
- updateMessage(t,i){
- const s=this.store.update(t,i);
- s&&this.bus.emit("message:updated",s)}
- confirmSend(t,i){
- const s=this.store.replaceId(t,i);
- s&&(s.status="sent",s.localId=void 0,this.bus.emit("message:updated",s))}
- failSend(t){
- const i=this.store.get(t);
- i&&(i.status="failed",this.bus.emit("message:updated",i))}
- notifyConnected(t){
- this.bus.emit("connected",{
- latency:t}
- )}
- notifyDisconnected(t){
- this.bus.emit("disconnected",{
- reason:t}
- )}
- getMessages(){
- return this.store.getAll()}
- getMessage(t){
- return this.store.get(t)}
- oldestTimestamp(){
- return this.store.oldestTimestamp()}
- }
- ;
- Kt(X6,"ChatRoom");
- let Y6=X6;
- const J6=class t{
- constructor(){
- zt(this,"rooms",new Map),zt(this,"guildRoom"),zt(this,"globalRoom"),zt(this,"systemRoom"),zt(this,"globalBus"),zt(this,"conversations",[]),zt(this,"currentChannel",null),this.guildRoom=new Y6(t.GUILD_ROOM_ID,"guild"),this.rooms.set(t.GUILD_ROOM_ID,this.guildRoom),this.globalRoom=new Y6(t.GLOBAL_ROOM_ID,"global"),this.rooms.set(t.GLOBAL_ROOM_ID,this.globalRoom),this.systemRoom=new Y6(t.SYSTEM_ROOM_ID,"system"),this.rooms.set(t.SYSTEM_ROOM_ID,this.systemRoom),this.globalBus=new K6}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- getGuildRoom(){
- return this.guildRoom}
- getGlobalRoom(){
- return this.globalRoom}
- getSystemRoom(){
- return this.systemRoom}
- getDMRoom(i,s){
- const e=t.dmRoomId(i);
- let n=this.rooms.get(e);
- return n||(n=new Y6(e,"dm",i),this.rooms.set(e,n)),s&&s.length>0&&(n.peerName=s),n}
- hasDMRoom(i){
- return this.rooms.has(t.dmRoomId(i))}
- getRoom(t){
- return this.rooms.get(t)}
- getAllRooms(){
- return Array.from(this.rooms.values())}
- clearAll(){
- for(const t of this.rooms.values())t.store.clear();
- this.conversations=[],this.currentChannel=null}
- static dmRoomId(t){
- return`dm:${
- t}
- `}
- dispatchToRoom(t,i){
- const s=t.store.size;
- t.receive(i),t.store.size>s&&this.globalBus.emit("room:message",{
- roomId:t.roomId,kind:t.kind,message:i}
- )}
- setConversations(t){
- this.conversations=t,this.globalBus.emit("conversations:updated",t)}
- get store(){
- return this.guildRoom.store}
- get bus(){
- return this.guildRoom.bus}
- receive(t){
- this.dispatchToRoom(this.guildRoom,t)}
- prependHistory(t){
- this.guildRoom.prependHistory(t)}
- resetHistory(t=[]){
- this.guildRoom.resetHistory(t)}
- updateMessage(t,i){
- this.guildRoom.updateMessage(t,i)}
- confirmSend(t,i){
- this.guildRoom.confirmSend(t,i)}
- failSend(t){
- this.guildRoom.failSend(t)}
- notifyConnected(t){
- this.guildRoom.notifyConnected(t)}
- notifyDisconnected(t){
- this.guildRoom.notifyDisconnected(t)}
- getMessages(){
- return this.guildRoom.getMessages()}
- getMessage(t){
- return this.guildRoom.getMessage(t)}
- oldestTimestamp(){
- return this.guildRoom.oldestTimestamp()}
- }
- ;
- Kt(J6,"ChatService"),zt(J6,"_instance",null),zt(J6,"GUILD_ROOM_ID","guild"),zt(J6,"GLOBAL_ROOM_ID","global"),zt(J6,"SYSTEM_ROOM_ID","system");
- let Q6=J6;
- const Z6={
- level:0,role:""}
- ,t4=class{
- static resolve(t,i){
- var s;
- if(""!==t&&t===_L.uid)return{
- level:Math.floor((_L.maxWave||0)/100),role:String((null==(s=ED.myMembershipVO)?void 0:s.role)??"")}
- ;
- if(""!==i){
- const t=ED.memberList??[];
- for(const s of t)if(s.userName===i)return{
- level:Math.floor((s.wave||0)/100),role:String(s.role??"")}
- }
- return Z6}
- }
- ;
- Kt(t4,"UserCache");
- let i4=t4;
- function s4(t){
- const i=t.timestamp instanceof Date?t.timestamp.getTime():Number(new Date(t.timestamp).getTime()),s=String(t.senderId),e=String(t.senderName??""),n=i4.resolve(s,e),h=Number(t.senderLevel??0);
- return{
- id:String(t.id),guildId:String(t.guildId),sender:{
- uid:s,name:e,level:h>0?h:n.level,role:n.role||String(t.senderRole??""),frame:t.frame}
- ,content:String(t.content??""),timestamp:Number.isFinite(i)?i:Date.now(),status:"sent",translated:!0===t.translated}
- }
- Kt(s4,"toChatMessage");
- const e4=class t{
- constructor(){
- zt(this,"started",!1),zt(this,"service",Q6.getInstance()),zt(this,"useLoopback",!1),zt(this,"devChannel",null),zt(this,"devIdentity",null),zt(this,"onMessageRef",Kt(t=>{
- try{
- const i=s4(t);
- if(this.isMine(i.sender.uid)){
- const t=this.findMatchingPending(i);
- if(t&&t.localId)return this.service.confirmSend(t.localId,i.id),void this.service.updateMessage(i.id,{
- timestamp:i.timestamp,content:i.content}
- )}
- this.service.receive(i)}
- catch(i){
- }
- }
- ,"onMessageRef")),zt(this,"onConnectRef",Kt(()=>{
- this.service.notifyConnected(),this.seedFromCache(),this.requestConversationList()}
- ,"onConnectRef")),zt(this,"onDisconnectRef",Kt(t=>{
- this.service.notifyDisconnected(t)}
- ,"onDisconnectRef")),zt(this,"onExtraRef",Kt(t=>{
- var i,s,e;
- if(t&&"object"==typeof t)try{
- switch(t.type){
- case"whisper":this.handleIncomingWhisper(t.data);
- break;
- case"whisperHistory":this.handleWhisperHistory(t.data);
- break;
- case"conversationList":this.handleConversationList(t.data);
- break;
- case"whisperReadAck":break;
- case"globalChat":this.handleIncomingGlobalChat(t.data);
- break;
- case"globalRecentMessages":this.handleGlobalRecentMessages(t.data);
- break;
- case"globalChatError":this.service.globalBus.emit("global:error",{
- code:String((null==(i=t.data)?void 0:i.code)??""),remainMs:Number((null==(s=t.data)?void 0:s.remainMs)??0),minWave:Number((null==(e=t.data)?void 0:e.minWave)??0)}
- );
- break;
- case"channelAssigned":case"channelSwitched":this.handleChannelInfo(t.data);
- break;
- case"channelList":this.service.globalBus.emit("channel:list",t.data);
- break;
- case"systemMessage":this.handleSystemMessage(t.data);
- break;
- case"systemMessages":this.handleSystemMessages(t.data)}
- }
- catch(n){
- }
- }
- ,"onExtraRef")),zt(this,"onHistoryRef",Kt(t=>{
- const i=t.messages.map(s4);
- i.sort((t,i)=>t.timestamp-i.timestamp),this.service.resetHistory(i)}
- ,"onHistoryRef")),zt(this,"onDevChannelMessage",Kt(t=>{
- const i=t.data;
- if(i&&"chat"===i.type)try{
- const t={
- id:String(i.id),guildId:String(i.guildId??"dev"),sender:i.sender,content:String(i.content??""),timestamp:Number(i.timestamp??Date.now()),status:"sent"}
- ;
- this.service.receive(t)}
- catch(s){
- }
- }
- ,"onDevChannelMessage"))}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- findMatchingPending(t){
- const i=this.service.getMessages();
- for(let s=i.length-1;
- s>=0;
- s--){
- const e=i[s];
- if("pending"===e.status&&e.localId&&e.sender.uid===t.sender.uid&&e.content===t.content&&!(Math.abs(t.timestamp-e.timestamp)>6e4))return e}
- }
- isMine(t){
- return""!==_L.uid&&t===_L.uid}
- handleIncomingWhisper(t){
- if(!t)return;
- const i=String(t.senderUId??""),s=this.isMine(i)?String(t.recipientUId):i;
- if(!s)return;
- const e=this.service.getDMRoom(s),n=this.whisperToChatMessage(t);
- if(this.isMine(n.sender.uid)){
- const t=this.findMatchingPendingInRoom(e,n);
- if(t&&t.localId)return e.confirmSend(t.localId,n.id),void e.updateMessage(n.id,{
- timestamp:n.timestamp,content:n.content}
- )}
- this.service.dispatchToRoom(e,n)}
- handleWhisperHistory(t){
- if(!t||!Array.isArray(t.messages))return;
- const i=String(t.peerUid??"");
- if(!i)return;
- const s=this.service.getDMRoom(i),e=t.messages.map(t=>this.whisperToChatMessage(t)).sort((t,i)=>t.timestamp-i.timestamp);
- 0===s.store.size?s.resetHistory(e):s.prependHistory(e)}
- handleConversationList(t){
- if(!Array.isArray(t))return;
- const i=t.map(t=>{
- const i=(null==t?void 0:t.last)??{
- }
- ,s=String(i.senderUId??""),e=this.isMine(s),n=e?String(i.recipientUId??""):s,h=e;
- let r=String(h?i.recipientName??"":i.senderName??"");
- if(!r&&n){
- const t=this.service.getRoom(Q6.dmRoomId(n));
- t&&t.peerName&&(r=t.peerName)}
- return{
- peerUid:n,peerName:r,lastMessage:String(i.message??""),lastTimestamp:i.createdAt?new Date(i.createdAt).getTime():0,unread:Number((null==t?void 0:t.unread)??0),lastFromMe:h}
- }
- );
- this.service.setConversations(i)}
- handleIncomingGlobalChat(t){
- if(!t)return;
- const i=this.globalRawToChatMessage(t),s=this.service.getGlobalRoom();
- if(this.isMine(i.sender.uid)){
- const t=this.findMatchingPendingInRoom(s,i);
- if(t&&t.localId)return s.confirmSend(t.localId,i.id),void s.updateMessage(i.id,{
- timestamp:i.timestamp,content:i.content}
- )}
- this.service.dispatchToRoom(s,i)}
- handleGlobalRecentMessages(t){
- if(!t||!Array.isArray(t.messages))return;
- const i=t.messages.map(t=>this.globalRawToChatMessage(t)).sort((t,i)=>t.timestamp-i.timestamp);
- this.service.getGlobalRoom().resetHistory(i)}
- handleChannelInfo(t){
- if(!t)return;
- const i={
- channelId:String(t.channelId??""),memberCount:Number(t.memberCount??0),totalChannels:Number(t.totalChannels??0)}
- ;
- this.service.currentChannel=i,this.service.globalBus.emit("channel:info",i)}
- globalRawToChatMessage(t){
- const i=String(t.senderUId??""),s=String(t.senderName??""),e=t.createdAt?new Date(t.createdAt).getTime():Date.now(),n=Number(t.senderLevel??0),h=n>0?n:i4.resolve(i,s).level;
- return{
- id:String(t.id??t._id??""),guildId:"",sender:{
- uid:i,name:s,level:h,role:""}
- ,content:String(t.message??""),timestamp:Number.isFinite(e)?e:Date.now(),status:"sent"}
- }
- handleSystemMessage(t){
- if(!t)return;
- const i=this.systemRawToChatMessage(t);
- this.service.dispatchToRoom(this.service.getSystemRoom(),i)}
- handleSystemMessages(t){
- if(!Array.isArray(t))return;
- const i=t.map(t=>this.systemRawToChatMessage(t)).sort((t,i)=>t.timestamp-i.timestamp);
- this.service.getSystemRoom().resetHistory(i)}
- systemRawToChatMessage(t){
- const i=t.createdAt?new Date(t.createdAt).getTime():Date.now();
- return{
- id:String(t.id??t._id??""),guildId:"",sender:{
- uid:"system",name:t.title||"공지",level:0,role:""}
- ,content:String(t.message??""),timestamp:Number.isFinite(i)?i:Date.now(),status:"sent"}
- }
- whisperToChatMessage(t){
- const i=String(t.senderUId??""),s=String(t.senderName??""),e=i4.resolve(i,s),n=Number(t.senderLevel??0),h=t.createdAt?new Date(t.createdAt).getTime():Number(t.timestamp??Date.now());
- return{
- id:String(t.id??t._id??""),guildId:"",sender:{
- uid:i,name:s,level:n>0?n:e.level,role:e.role,frame:t.frame}
- ,content:String(t.message??""),timestamp:Number.isFinite(h)?h:Date.now(),status:"sent"}
- }
- findMatchingPendingInRoom(t,i){
- const s=t.getMessages();
- for(let e=s.length-1;
- e>=0;
- e--){
- const t=s[e];
- if("pending"===t.status&&t.localId&&t.sender.uid===i.sender.uid&&t.content===i.content&&!(Math.abs(i.timestamp-t.timestamp)>6e4))return t}
- }
- async start(){
- if(F6())return this.startLoopback();
- const t=vD.getInstance();
- if(this.started||(t.onMessage(this.onMessageRef),t.onConnect(this.onConnectRef),t.onDisconnect(this.onDisconnectRef),t.onHistory(this.onHistoryRef),t.onExtraMessage(this.onExtraRef),this.started=!0),t.connected)return this.seedFromCache(),t.sendRaw({
- type:"getGlobalRecentMessages",data:{
- limit:50}
- }
- ),!0;
- try{
- const i=await t.connect();
- return i&&t.sendRaw({
- type:"getGlobalRecentMessages",data:{
- limit:50}
- }
- ),i}
- catch(i){
- return!1}
- }
- stop(){
- if(this.useLoopback)return void this.stopLoopback();
- if(!this.started)return;
- const t=vD.getInstance();
- t.offMessage(this.onMessageRef),t.offConnect(this.onConnectRef),t.offDisconnect(this.onDisconnectRef),t.offHistory(this.onHistoryRef),t.offExtraMessage(this.onExtraRef),this.started=!1}
- get isConnected(){
- return this.useLoopback?null!==this.devChannel:vD.getInstance().connected}
- requestGlobalRecent(t=50){
- if(this.useLoopback)return;
- const i=vD.getInstance();
- i.connected&&i.sendRaw({
- type:"getGlobalRecentMessages",data:{
- limit:t}
- }
- )}
- get devUser(){
- return this.devIdentity}
- async send(t){
- const i=t.trim();
- if(0===i.length)return!1;
- if(this.useLoopback)return this.sendLoopback(i);
- const s=vD.getInstance();
- if(!s.connected)return!1;
- const e=`local-${
- Date.now()}
- -${
- Math.random().toString(36).slice(2,8)}
- `,n=Date.now(),h=String(_L.uid??""),r=String(_L.name??""),o=i4.resolve(h,r),a={
- id:e,localId:e,guildId:String(ED.myGuildId??""),sender:{
- uid:h,name:r,level:o.level,role:o.role}
- ,content:i,timestamp:n,status:"pending"}
- ;
- this.service.receive(a);
- let c=!1;
- try{
- c=await s.sendMessage(i)}
- catch(l){
- c=!1}
- return c?(setTimeout(()=>{
- const t=this.service.getMessage(e);
- t&&"pending"===t.status&&this.service.failSend(e)}
- ,15e3),!0):(this.service.failSend(e),!1)}
- async retrySend(t){
- const i=this.service.getMessage(t);
- if(!i)return!1;
- if("failed"!==i.status)return!1;
- if(this.service.updateMessage(t,{
- status:"pending",timestamp:Date.now()}
- ),this.useLoopback){
- if(!this.devChannel||!i.localId)return this.service.failSend(t),!1;
- const s=Date.now(),e=`dev-${
- s}
- -${
- Math.random().toString(36).slice(2,8)}
- `;
- try{
- return this.devChannel.postMessage({
- type:"chat",id:e,guildId:i.guildId,sender:i.sender,content:i.content,timestamp:s}
- ),this.service.confirmSend(i.localId,e),!0}
- catch{
- return this.service.failSend(t),!1}
- }
- const s=vD.getInstance();
- if(!s.connected)return this.service.failSend(t),!1;
- try{
- if(!(await s.sendMessage(i.content)))return this.service.failSend(t),!1}
- catch(e){
- return this.service.failSend(t),!1}
- return setTimeout(()=>{
- const i=this.service.getMessage(t);
- i&&"pending"===i.status&&this.service.failSend(t)}
- ,15e3),!0}
- async loadOlder(t=20){
- if(this.useLoopback)return 0;
- const i=vD.getInstance();
- if(!i.connected)return 0;
- const s=this.service.oldestTimestamp(),e=null!=s?new Date(s):void 0;
- try{
- const s=await i.loadPreviousMessages({
- before:e,limit:t}
- );
- if(!s.messages||0===s.messages.length)return 0;
- const n=s.messages.map(s4).sort((t,i)=>t.timestamp-i.timestamp);
- return this.service.prependHistory(n),n.length}
- catch(n){
- return 0}
- }
- async sendGlobalMessage(t){
- const i=t.trim();
- if(0===i.length)return!1;
- const s=vD.getInstance();
- if(!s.connected)return!1;
- const e=this.service.getGlobalRoom(),n=Date.now(),h=`local-${
- n}
- -${
- Math.random().toString(36).slice(2,8)}
- `,r=String(_L.uid??""),o=String(_L.name??""),a=i4.resolve(r,o),c={
- id:h,localId:h,guildId:"",sender:{
- uid:r,name:o,level:a.level,role:""}
- ,content:i,timestamp:n,status:"pending"}
- ;
- return this.service.dispatchToRoom(e,c),s.sendRaw({
- type:"globalMessage",data:{
- senderName:o,message:i}
- }
- )?(setTimeout(()=>{
- const t=e.getMessage(h);
- t&&"pending"===t.status&&e.failSend(h)}
- ,15e3),!0):(e.failSend(h),!1)}
- switchChannel(t){
- const i=vD.getInstance();
- return!!i.connected&&i.sendRaw({
- type:"switchChannel",data:{
- channelId:t}
- }
- )}
- requestChannelList(){
- const t=vD.getInstance();
- return!!t.connected&&t.sendRaw({
- type:"getChannelList"}
- )}
- async sendWhisper(t,i){
- const s=i.trim();
- if(0===s.length)return!1;
- if(!t||t===_L.uid)return!1;
- const e=vD.getInstance();
- if(!e.connected)return!1;
- const n=this.service.getDMRoom(t),h=Date.now(),r=`local-${
- h}
- -${
- Math.random().toString(36).slice(2,8)}
- `,o=String(_L.uid??""),a=String(_L.name??""),c=i4.resolve(o,a),l={
- id:r,localId:r,guildId:"",sender:{
- uid:o,name:a,level:c.level,role:c.role}
- ,content:s,timestamp:h,status:"pending"}
- ;
- return this.service.dispatchToRoom(n,l),e.sendRaw({
- type:"whisper",data:{
- senderName:a,recipientUId:t,recipientName:n.peerName||"",message:s}
- }
- )?(setTimeout(()=>{
- const t=n.getMessage(r);
- t&&"pending"===t.status&&n.failSend(r)}
- ,15e3),!0):(n.failSend(r),!1)}
- requestWhisperHistory(t,i){
- const s=vD.getInstance();
- return!!s.connected&&s.sendRaw({
- type:"getWhisperHistory",data:{
- peerUid:t,before:(null==i?void 0:i.before)?i.before.toISOString():void 0,limit:(null==i?void 0:i.limit)??50}
- }
- )}
- requestConversationList(){
- const t=vD.getInstance();
- return!!t.connected&&t.sendRaw({
- type:"getConversationList"}
- )}
- requestSystemMessages(t=50){
- const i=vD.getInstance();
- return!!i.connected&&i.sendRaw({
- type:"getSystemMessages",data:{
- limit:t}
- }
- )}
- markWhisperRead(t){
- const i=vD.getInstance();
- return!!i.connected&&i.sendRaw({
- type:"markWhisperRead",data:{
- peerUid:t}
- }
- )}
- seedFromCache(){
- const t=vD.getInstance().getMessages();
- if(0===t.length)return;
- const i=t.map(s4).sort((t,i)=>t.timestamp-i.timestamp);
- this.service.resetHistory(i)}
- startLoopback(){
- if(this.devChannel)return this.service.notifyConnected(),!0;
- this.useLoopback=!0,this.devIdentity=$6();
- try{
- this.devChannel=new BroadcastChannel("ef-chat-dev")}
- catch(t){
- return this.useLoopback=!1,!1}
- return this.devChannel.addEventListener("message",this.onDevChannelMessage),this.service.notifyConnected(),!0}
- stopLoopback(){
- this.devChannel&&(this.devChannel.removeEventListener("message",this.onDevChannelMessage),this.devChannel.close(),this.devChannel=null),this.useLoopback=!1,this.devIdentity=null}
- async sendLoopback(t){
- if(!this.devChannel||!this.devIdentity)return!1;
- const i=Date.now(),s=`local-${
- i}
- -${
- Math.random().toString(36).slice(2,8)}
- `,e=`dev-${
- i}
- -${
- Math.random().toString(36).slice(2,8)}
- `,n={
- id:s,localId:s,guildId:"dev",sender:this.devIdentity,content:t,timestamp:i,status:"pending"}
- ;
- this.service.receive(n);
- try{
- this.devChannel.postMessage({
- type:"chat",id:e,guildId:"dev",sender:this.devIdentity,content:t,timestamp:i}
- )}
- catch(h){
- return this.service.failSend(s),!1}
- return this.service.confirmSend(s,e),!0}
- }
- ;
- Kt(e4,"ChatTransport"),zt(e4,"_instance",null);
- let n4=e4;
- const h4=class t{
- constructor(){
- zt(this,"_initialized",!1),zt(this,"badWords")}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get initialized(){
- return this._initialized}
- async validate(t){
- if(this._initialized)return this.checkWord(t);
- let i=YA.getBadWordAssetPath(`badWordList.txt?v=${
- qA.appVersion}
- `);
- const s=await fetch(i);
- if(!s.ok)return!1;
- const e=await s.text();
- return this.badWords=new Set(e.split("\n").map(t=>t.trim().toLowerCase()).filter(Boolean)),this._initialized=!0,this.checkWord(t)}
- checkWord(t){
- const i=t.toLowerCase().trim();
- for(const s of this.badWords)if(i.includes(s))return!1;
- return!0}
- filter(t){
- if(!t)return t;
- let i,s,e="";
- const n=t.length;
- for(let h=0;
- h<n;
- ++h)s=!1,i=t.charCodeAt(h),(i>=65&&i<=90||i>=97&&i<=122||i>=48&&i<=57||i>=12593&&i<=12643||i>=44032&&i<=55203||i>=12353&&i<=12438||12447==i||i>=12449&&i<=12543||i>=19968&&i<=40917||i>=63744&&i<=64045||i>=64048&&i<=64109||i>=12549&&i<=12589||i>=3585&&i<=3642||i>=3648&&i<=3673||i>=1040&&i<=1103||i>=7840&&i<=7921||i>=256&&i<=328||i>=330&&i<=383||i>=192&&i<=214||i>=216&&i<=246||i>=248&&i<=255)&&(s=!0),s&&(e+=t.charAt(h));
- return e}
- async changeBadWordToAsterisk(t){
- if(1==await this.validate(t))return t;
- const i=t.toLowerCase().trim();
- let s=-1;
- for(const e of this.badWords)if(s=i.indexOf(e),s>-1){
- let i=new RegExp(e,"g");
- t=t.replace(i,"*".repeat(e.length))}
- return t}
- }
- ;
- Kt(h4,"BadWordUtil"),zt(h4,"_instance");
- let r4=h4;
- const o4=[{
- key:"face",icon:"😀",list:["😀","😁","😂","🤣","😊","😍","🥰","😘","🙂","😉","🤗","🤩","🤔","🤨","😐","😑","😶","🙄","😏","😮","😴","😌","😛","😜","🤪","😝","😒","😔","😪","😫","😤","😠","😡","🤯","😳","🥺","😢","😭","😱","🤭"]}
- ,{
- key:"heart",icon:"❤️",list:["❤️","🧡","💛","💚","💙","💜","🖤","🤍","💔","❣️","💕","💞","💓","💗","💖","💘","💝","💟"]}
- ,{
- key:"hand",icon:"👍",list:["👍","👎","👏","🙌","🙏","✊","👊","🤛","🤜","🤞","✌️","🤟","🤘","👌","👈","👉","👆","👇","✋","👋","💪","🫡","🤝"]}
- ,{
- key:"party",icon:"🎉",list:["🎉","🎊","🎁","🎂","🎈","✨","⭐","🌟","💫","⚡","🔥","💥","💯","🏆","🥇","🥈","🥉","🎯","🎮","🎲"]}
- ,{
- key:"battle",icon:"⚔️",list:["⚔️","🗡️","🛡️","🏹","🪓","🔫","💣","👑","💎","💰","🗝️","🔑","⏰","⏳","🧪","🧿","🧙","🧚","🐉","🦄"]}
- ],a4=class t{
- constructor(){
- zt(this,"root"),zt(this,"card"),zt(this,"listEl"),zt(this,"statusEl"),zt(this,"titleEl"),zt(this,"actionSheetEl"),zt(this,"actionSheetBackdrop"),zt(this,"actionSheetContent"),zt(this,"tabBarEl"),zt(this,"tabSystemBtn"),zt(this,"tabGlobalBtn"),zt(this,"tabGuildBtn"),zt(this,"tabDMBtn"),zt(this,"tabDMUnreadBadge"),zt(this,"tabGuildRedDot"),zt(this,"tabSystemRedDot"),zt(this,"tabWhisperRedDot"),zt(this,"listWrap"),zt(this,"dmListWrap"),zt(this,"dmListEl"),zt(this,"newMsgBadgeEl"),zt(this,"newMsgBadgeCount",0),zt(this,"hideTransitionTimer",null),zt(this,"inputBar"),zt(this,"emojiPicker"),zt(this,"textareaEl"),zt(this,"sendBtnEl"),zt(this,"emojiBtnEl"),zt(this,"emojiGridEl"),zt(this,"emojiCategoryBtns",[]),zt(this,"emojiPickerOpen",!1),zt(this,"sending",!1),zt(this,"roomUnsubs",[]),zt(this,"globalUnsubs",[]),zt(this,"rows",new Map),zt(this,"orderedIds",[]),zt(this,"viewMode","guild"),zt(this,"globalCooldownEnd",0),zt(this,"globalCooldownTimer",null),zt(this,"activeRoom",Q6.getInstance().getGuildRoom()),zt(this,"activeDMPeer",null),zt(this,"channelSwitchBtn"),zt(this,"totalUnread",0),zt(this,"loadingOlder",!1),zt(this,"exhaustedOlder",!1),zt(this,"pendingTranslations",new Set),zt(this,"translationCache",new Map),zt(this,"timeTickerId",null),zt(this,"handleNew",Kt(t=>{
- const i=this.isNearBottom(),s=this.appendRow(t);
- s&&this.playMountAnimation(s),i?requestAnimationFrame(()=>this.scrollToBottom()):this.isMine(t)||this.incrementNewMsgBadge()}
- ,"handleNew")),zt(this,"handleUpdated",Kt(t=>{
- var i;
- const s=this.rows.get(t.id);
- if(!s)return;
- s.msg=t;
- const e=this.orderedIds.indexOf(t.id),n=e>0?this.orderedIds[e-1]:void 0,h=n?null==(i=this.rows.get(n))?void 0:i.msg:void 0;
- s.hasHeader=!this.shouldGroup(h,t),this.renderRowContent(s)}
- ,"handleUpdated")),zt(this,"handleReset",Kt(t=>{
- this.clearRows();
- for(const i of t)this.appendRow(i);
- this.exhaustedOlder=!1,requestAnimationFrame(()=>this.scrollToBottom())}
- ,"handleReset")),zt(this,"handlePrepended",Kt(t=>{
- if(0===t.length)return;
- const i=this.listEl.scrollHeight,s=this.listEl.scrollTop,e=[...t].sort((t,i)=>t.timestamp-i.timestamp),n=document.createDocumentFragment(),h=[];
- for(let o=0;
- o<e.length;
- o++){
- const t=e[o],i=0===o?void 0:e[o-1],s=!this.shouldGroup(i,t),r=this.buildRow(t,s);
- n.appendChild(r.el),h.push(r),this.rows.set(t.id,r)}
- this.listEl.insertBefore(n,this.listEl.firstChild),this.orderedIds=[...e.map(t=>t.id),...this.orderedIds];
- const r=this.orderedIds[e.length];
- if(r){
- const t=this.rows.get(r),i=h[h.length-1];
- if(t&&i){
- const s=!this.shouldGroup(i.msg,t.msg);
- t.hasHeader!==s&&(t.hasHeader=s,this.renderRowContent(t))}
- }
- requestAnimationFrame(()=>{
- const t=this.listEl.scrollHeight;
- this.listEl.scrollTop=s+(t-i)}
- )}
- ,"handlePrepended")),zt(this,"onScroll",Kt(()=>{
- this.loadingOlder||this.exhaustedOlder||this.listEl.scrollTop<=40&&this.tryLoadOlder(),this.newMsgBadgeCount>0&&this.isNearBottom()&&this.hideNewMsgBadge()}
- ,"onScroll")),zt(this,"onVisibilityChange",Kt(()=>{
- document.hidden?this.stopTimeTicker():"none"!==this.root.style.display&&(this.tickTimes(),this.startTimeTicker())}
- ,"onVisibilityChange")),zt(this,"onInputKey",Kt(t=>{
- t.isComposing||"Enter"!==t.key||t.shiftKey||(t.preventDefault(),this.handleSend())}
- ,"onInputKey")),t.ensureGlobalStyle(),this.root=document.createElement("div"),this.root.dataset.role="chat-overlay",this.root.style.cssText=["position:fixed","inset:0","display:none","flex-direction:column","background:#1f1a1a","color:#f3ece2","z-index:10000","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif","-webkit-tap-highlight-color:transparent","opacity:0","transform:translateY(12px)","transition:opacity 200ms ease-out, transform 220ms cubic-bezier(0.2,0.8,0.25,1)","padding-top:env(safe-area-inset-top, 0px)","padding-bottom:env(safe-area-inset-bottom, 0px)","padding-left:env(safe-area-inset-left, 0px)","padding-right:env(safe-area-inset-right, 0px)"].join(";
- "),this.card=document.createElement("div"),this.card.style.cssText=["flex:1","display:flex","flex-direction:column","overflow:hidden","position:relative","background:#1f1a1a"].join(";
- "),this.root.appendChild(this.card);
- const i=document.createElement("div");
- i.style.cssText=["flex:0 0 auto","display:flex","align-items:center","padding:8px 6px","min-height:48px","border-bottom:1px solid #2a2121","background:#241c1c"].join(";
- ");
- const s=document.createElement("button");
- s.type="button",s.style.cssText=["width:44px","height:44px","background:transparent","color:#f3ece2","border:none","font-size:22px","line-height:1","cursor:pointer","padding:0","flex:0 0 auto","display:flex","align-items:center","justify-content:center"].join(";
- "),s.setAttribute("aria-label","뒤로"),s.innerHTML='<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg>',s.addEventListener("click",()=>{
- "dm"===this.viewMode?this.setViewMode("dmList"):this.hide()}
- ),i.appendChild(s);
- const e=document.createElement("div");
- e.style.cssText=["flex:1","display:flex","flex-direction:column","align-items:center","justify-content:center","min-width:0","padding:0 4px"].join(";
- "),this.titleEl=document.createElement("div"),this.titleEl.textContent=AG.getText("GAME_634","길드 채팅"),this.titleEl.style.cssText="font-size:16px;
-  font-weight:700;
-  line-height:1.2;
- ",e.appendChild(this.titleEl),this.statusEl=document.createElement("div"),this.statusEl.style.cssText="font-size:11px;
-  color:#8a8074;
-  line-height:1.2;
-  margin-top:1px;
- ",this.statusEl.textContent=AG.getText("COMMON_28","대기중"),e.appendChild(this.statusEl),i.appendChild(e),this.channelSwitchBtn=document.createElement("button"),this.channelSwitchBtn.type="button",this.channelSwitchBtn.setAttribute("aria-label","채널 변경"),this.channelSwitchBtn.textContent=AG.getText("COMMON_5","변경"),this.channelSwitchBtn.style.cssText=["flex:0 0 auto","min-width:44px","height:36px","background:transparent","color:#c9a861","border:1px solid #3a2f2a","border-radius:8px","font-size:12px","font-weight:700","cursor:pointer","padding:0 10px","display:none"].join(";
- "),this.channelSwitchBtn.addEventListener("click",()=>{
- this.showChannelPicker()}
- ),i.appendChild(this.channelSwitchBtn),this.card.appendChild(i),this.tabBarEl=this.buildTabBar(),this.card.appendChild(this.tabBarEl),this.listWrap=document.createElement("div"),this.listWrap.style.cssText=["flex:1","position:relative","display:flex","flex-direction:column","overflow:hidden"].join(";
- "),this.listEl=document.createElement("div"),this.listEl.className="chat-scroll",this.listEl.style.cssText=["flex:1","overflow-y:auto","padding:8px 12px 12px","display:flex","flex-direction:column","gap:0","touch-action:pan-y","-webkit-overflow-scrolling:touch","overscroll-behavior:contain","font-size:14px"].join(";
- "),this.listEl.addEventListener("scroll",this.onScroll),this.listWrap.appendChild(this.listEl),this.newMsgBadgeEl=this.buildNewMsgBadge(),this.listWrap.appendChild(this.newMsgBadgeEl),this.card.appendChild(this.listWrap),this.dmListWrap=this.buildDMListView(),this.card.appendChild(this.dmListWrap),this.inputBar=this.buildInputBar(),this.card.appendChild(this.inputBar),this.emojiPicker=this.buildEmojiPicker(),this.card.appendChild(this.emojiPicker),this.actionSheetEl=this.buildNameActionSheet(),this.root.appendChild(this.actionSheetEl),document.body.appendChild(this.root)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- static ensureGlobalStyle(){
- if(this._globalStyleInjected)return;
- const t=document.createElement("style");
- t.id="chat-overlay-style",t.textContent='\n[data-role="chat-overlay"] .chat-scroll::-webkit-scrollbar {
-  width:0;
-  height:0;
-  display:none;
-  }
- \n[data-role="chat-overlay"] .chat-scroll {
-  scrollbar-width:none;
-  -ms-overflow-style:none;
-  }
- \n[data-role="chat-overlay"] button {
-  -webkit-tap-highlight-color:transparent;
-  }
- \n[data-role="chat-overlay"] button:active:not(:disabled) {
-  opacity:0.55;
-  transform:scale(0.96);
-  }
- \n[data-role="chat-overlay"] button {
-  transition:opacity 120ms ease, transform 120ms ease;
-  }
- \n[data-role="chat-overlay"] textarea {
-  -webkit-user-select:text;
-  user-select:text;
-  -webkit-touch-callout:default;
-  }
- \n[data-role="chat-overlay"] textarea::placeholder {
-  color:#6a5f54;
-  }
- \n',document.head.appendChild(t),this._globalStyleInjected=!0}
- show(){
- null!==this.hideTransitionTimer&&(clearTimeout(this.hideTransitionTimer),this.hideTransitionTimer=null),this.updateRedDot(),this.subscribeGlobal(),this.refreshSenderInfoFromCache();
- const t=ED.hasGuild||F6();
- this.tabGuildBtn.style.display=t?"":"none",this.setViewMode(t?"guild":"global"),this.root.style.display="flex",requestAnimationFrame(()=>{
- this.root.style.opacity="1",this.root.style.transform="translateY(0)",this.scrollToBottom()}
- ),this.startTimeTicker(),document.addEventListener("visibilitychange",this.onVisibilityChange)}
- openDMWith(t,i){
- t&&t!==_L.uid&&(this.show(),this.setViewMode("dm",{
- uid:t,name:i||t}
- ))}
- hide(){
- this.root.style.opacity="0",this.root.style.transform="translateY(12px)",this.hideTransitionTimer=window.setTimeout(()=>{
- this.root.style.display="none",this.hideTransitionTimer=null}
- ,220),this.saveChatInfo(),this.unsubscribeAll(),this.stopTimeTicker(),document.removeEventListener("visibilitychange",this.onVisibilityChange),this.closeEmojiPicker(),this.hideNewMsgBadge(),this.textareaEl&&this.textareaEl.blur()}
- async saveChatInfo(){
- await $A.saveGuildChatMessageID(vD.getInstance().recentMessageTimes.join("|")),lS.getInstance().dispatchCustomEvent("GuildInfoUpdate")}
- subscribeActiveRoom(){
- for(const i of this.roomUnsubs)i();
- this.roomUnsubs.length=0;
- const t=this.activeRoom.bus;
- this.roomUnsubs.push(t.on("message:new",this.handleNew)),this.roomUnsubs.push(t.on("message:updated",this.handleUpdated)),this.roomUnsubs.push(t.on("history:reset",this.handleReset)),this.roomUnsubs.push(t.on("history:prepended",this.handlePrepended))}
- subscribeGlobal(){
- if(this.globalUnsubs.length>0)return;
- const t=Q6.getInstance(),i=t.getGuildRoom().bus;
- this.globalUnsubs.push(i.on("connected",()=>{
- if(F6()){
- const t=n4.getInstance().devUser;
- if(t)return void this.setStatus(`${
- t.name}
-  (Lv.${
- t.level}
- )`,"#c9a861")}
- this.setStatus(AG.getText("GAME_635","연결됨"),"#8fd27a")}
- )),this.globalUnsubs.push(i.on("disconnected",t=>this.setStatus(`${
- AG.getText("GAME_651","끊김")}
- ${
- t.reason?` (${
- t.reason}
- )`:""}
- `,"#d28383"))),this.globalUnsubs.push(t.globalBus.on("room:message",({
- roomId:i,kind:s,message:e}
- )=>{
- if("dm"!==s)return;
- const n=this.myUid();
- ""!==n&&e.sender.uid===n||"dm"===this.viewMode&&this.activeRoom.roomId===i||(this.totalUnread+=1,this.updateWhisperTabBadge()),"dmList"===this.viewMode&&(F6()?t.setConversations(this.buildLocalConversations()):n4.getInstance().requestConversationList())}
- )),this.globalUnsubs.push(t.globalBus.on("conversations:updated",t=>{
- this.totalUnread=t.reduce((t,i)=>t+i.unread,0),this.updateWhisperTabBadge(),"dmList"===this.viewMode&&this.renderConversationList(t)}
- )),this.globalUnsubs.push(t.globalBus.on("channel:info",t=>{
- if("global"===this.viewMode){
- const i=AG.getValueReplace("GAME_528","##",t.memberCount,`${
- t.memberCount}
- 명`);
- this.statusEl.textContent=i}
- }
- )),this.globalUnsubs.push(t.globalBus.on("global:error",t=>{
- if("COOLDOWN"===t.code&&t.remainMs)this.showGlobalCooldownUI(t.remainMs);
- else if("WAVE_RESTRICTED"===t.code)this.showCooldownToast(AG.getText("GAME_652","Lv.1 이상부터 채팅 가능합니다"));
- else if("SWITCH_COOLDOWN"===t.code&&t.remainMs){
- const i=AG.getValueReplace("GAME_653","##",Math.ceil(t.remainMs/1e3),`${
- Math.ceil(t.remainMs/1e3)}
- 초 후 채널 변경 가능`);
- this.showCooldownToast(i)}
- else"CHANNEL_FULL"===t.code&&this.showCooldownToast(AG.getText("GAME_654","해당 채널이 가득 찼습니다"))}
- ))}
- unsubscribeAll(){
- for(const t of this.roomUnsubs)t();
- this.roomUnsubs.length=0;
- for(const t of this.globalUnsubs)t();
- this.globalUnsubs.length=0}
- refreshSenderInfoFromCache(){
- if(!F6())for(const t of Q6.getInstance().getAllRooms())for(const i of t.getMessages()){
- const t=i4.resolve(i.sender.uid,i.sender.name);
- (t.level>0||""!==t.role)&&(i.sender.level=t.level,""!==t.role&&(i.sender.role=t.role))}
- }
- clearRows(){
- this.listEl.replaceChildren(),this.rows.clear(),this.orderedIds=[]}
- rebuildAll(){
- this.clearRows();
- for(const t of this.activeRoom.getMessages())this.appendRow(t)}
- appendRow(t){
- var i;
- const s=this.orderedIds[this.orderedIds.length-1],e=s?null==(i=this.rows.get(s))?void 0:i.msg:void 0,n=!this.shouldGroup(e,t),h=this.buildRow(t,n);
- return this.listEl.appendChild(h.el),this.rows.set(t.id,h),this.orderedIds.push(t.id),h}
- playMountAnimation(t){
- t.el.style.opacity="0",t.el.style.transform="translateY(6px)",requestAnimationFrame(()=>{
- t.el.style.opacity="1",t.el.style.transform="translateY(0)"}
- )}
- shouldGroup(t,i){
- return!(!t||t.sender.uid!==i.sender.uid||i.timestamp-t.timestamp>3e5||"failed"===i.status)}
- buildRow(t,i){
- const s=document.createElement("div");
- s.dataset.messageId=t.id;
- const e={
- el:s,msg:t,hasHeader:i,timeEl:null}
- ;
- return this.applyRowStyle(e),this.renderRowContent(e),e}
- applyRowStyle(t){
- const i=this.isMine(t.msg),s="failed"===t.msg.status,e="system"===this.activeRoom.kind,n=t.hasHeader;
- t.el.style.cssText=[`padding:${
- n?"6px":"1px"}
-  8px`,"margin-top:"+(n?"8px":"0"),"border-radius:"+(n?"6px 6px 4px 4px":"0 0 4px 4px"),e?"background:rgba(201,168,97,0.08)":s?"background:rgba(210,131,131,0.1)":i?"background:rgba(255,204,102,0.06)":"background:transparent",e?"border-left:2px solid #c9a861":s?"border-left:2px solid #d28383":"border-left:2px solid transparent","display:flex","flex-direction:column","gap:2px","touch-action:pan-y","-webkit-user-select:none","user-select:none","transition:opacity 200ms ease-out, transform 200ms cubic-bezier(0.2,0.8,0.25,1), background 160ms ease"].join(";
- ")}
- renderRowContent(t){
- const{
- el:i,msg:s,hasHeader:e}
- =t;
- this.applyRowStyle(t),i.replaceChildren(),t.timeEl=null;
- const n=this.isMine(s);
- if(e){
- const e=document.createElement("div");
- e.style.cssText="font-size:12px;
-  color:#a79a8a;
-  display:flex;
-  gap:4px;
-  align-items:baseline;
- ";
- const h=document.createElement("span");
- if(h.style.color=n?"#ffcc66":"#88cfff",h.style.fontWeight="700",h.textContent=s.sender.name,!(n||F6()||"guild"!==this.viewMode&&"global"!==this.viewMode)&&(h.style.cursor="pointer",h.style.textDecoration="underline",h.style.textDecorationColor="rgba(136,207,255,0.35)",h.style.textUnderlineOffset="2px",h.addEventListener("click",t=>{
- t.stopPropagation(),this.openNameActionSheet(s)}
- )),e.appendChild(h),s.sender.level>0){
- const t=document.createElement("span");
- t.style.color="#8a8074",t.textContent=` ( Lv. ${
- s.sender.level}
-  )`,e.appendChild(t)}
- const r=l4(s.sender.role);
- if(r){
- const t=document.createElement("span");
- t.style.color="#c9a861",t.textContent=` 🛡${
- r}
- `,e.appendChild(t)}
- const o=document.createElement("span");
- if(o.style.color="#6a5f54",o.textContent=` · ${
- u4(s.timestamp)}
- `,e.appendChild(o),t.timeEl=o,"failed"===s.status){
- const t=document.createElement("span");
- t.style.color="#d28383",t.textContent=AG.getText("GAME_655","전송 실패"),e.appendChild(t);
- const i=document.createElement("button");
- i.type="button",i.textContent=AG.getText("GAME_656","재시도"),i.style.cssText=["background:transparent","color:#d28383","border:1px solid #d28383","border-radius:4px","padding:0 6px","font-size:11px","cursor:pointer","margin-left:4px","line-height:1.4"].join(";
- "),i.addEventListener("click",t=>{
- t.stopPropagation(),n4.getInstance().retrySend(s.id)}
- ),e.appendChild(i)}
- i.appendChild(e)}
- const h=document.createElement("div");
- h.style.cssText=["display:flex","align-items:flex-start","gap:6px"].join(";
- ");
- const r=document.createElement("div");
- r.style.cssText=["flex:1","font-size:14px","line-height:1.4","white-space:pre-wrap","word-break:break-word","pending"===s.status?"opacity:0.55":""].filter(Boolean).join(";
- ");
- const o=s.translated&&s.translatedText?s.translatedText:s.content;
- if(r.textContent=o,h.appendChild(r),!n){
- const t=document.createElement("button");
- t.type="button";
- const i=this.pendingTranslations.has(s.id);
- t.style.cssText=["flex:0 0 auto","width:28px","height:28px","background:transparent","border:0px solid #3a2f2a","border-radius:4px","padding:0","cursor:pointer","margin-top:1px","display:flex","align-items:center","justify-content:center"].join(";
- ");
- const e=Kt(()=>i?'\n            <svg width="16" height="16" viewBox="0 0 24 24">\n              <circle cx="12" cy="12" r="10"\n                stroke="#8a8074"\n                stroke-width="2"\n                fill="none"\n                stroke-dasharray="60"\n                stroke-dashoffset="20">\n                <animateTransform attributeName="transform"\n                  type="rotate"\n                  from="0 12 12"\n                  to="360 12 12"\n                  dur="1s"\n                  repeatCount="indefinite"/>\n              </circle>\n            </svg>\n          ':'\n          <svg width="16" height="16" viewBox="0 0 24 24">\n\n            <g transform="scale(1.3) translate(-2.5, -2.5)">\n\n              \x3c!-- 뒤: 文 박스 --\x3e\n              <rect x="2" y="2" width="14" height="14" rx="3"\n                    fill="#f3f1ec"/>\n\n              \x3c!-- 文 --\x3e\n              <text x="9" y="9"\n                text-anchor="middle"\n                dominant-baseline="middle"\n                font-size="9"\n                font-weight="bold"\n                fill="#5a3825"\n                font-family="sans-serif">\n                文\n              </text>\n\n              \x3c!-- 앞: A 박스 --\x3e\n              <rect x="8" y="8" width="14" height="14" rx="3" fill="#5a3825"/>\n\n              <text x="15" y="15"\n                text-anchor="middle"\n                dominant-baseline="middle"\n                font-size="9"\n                font-weight="bold"\n                fill="#ffffff">\n                A\n              </text>\n\n            </g>\n\n          </svg>\n        ',"getSVG");
- t.innerHTML=e(),t.disabled=i,t.addEventListener("click",async n=>{
- n.stopPropagation(),i||(await this.onTranslateClick(s.id),t.innerHTML=e())}
- ),h.appendChild(t)}
- i.appendChild(h)}
- openNameActionSheet(t){
- const i=t.sender.uid,s=t.sender.name||`상대 ${
- i.slice(0,6)}
- `;
- if(!i)return;
- this.actionSheetContent.replaceChildren();
- const e=document.createElement("div");
- e.style.cssText=["padding:14px 16px 10px","text-align:center","font-size:13px","color:#8a8074","border-bottom:1px solid #2a2121","overflow:hidden","text-overflow:ellipsis","white-space:nowrap"].join(";
- "),e.textContent=s,this.actionSheetContent.appendChild(e),this.actionSheetContent.appendChild(this.buildActionSheetItem(`💬  ${
- AG.getText("GAME_639","귓속말 보내기")}
- `,()=>{
- this.closeNameActionSheet(),this.openDMWith(i,s)}
- )),this.actionSheetContent.appendChild(this.buildActionSheetItem(AG.getText("COMMON_2","취소"),()=>this.closeNameActionSheet(),{
- color:"#6a5f54",borderTop:!0}
- )),this.actionSheetEl.style.display="flex",requestAnimationFrame(()=>{
- this.actionSheetBackdrop.style.opacity="1",this.actionSheetContent.style.transform="translateY(0)"}
- )}
- closeNameActionSheet(){
- this.actionSheetBackdrop.style.opacity="0",this.actionSheetContent.style.transform="translateY(100%)",setTimeout(()=>{
- "0"===this.actionSheetBackdrop.style.opacity&&(this.actionSheetEl.style.display="none")}
- ,200)}
- buildNameActionSheet(){
- const t=document.createElement("div");
- return t.style.cssText=["position:absolute","inset:0","display:none","flex-direction:column","justify-content:flex-end","z-index:5","touch-action:none"].join(";
- "),this.actionSheetBackdrop=document.createElement("div"),this.actionSheetBackdrop.style.cssText=["position:absolute","inset:0","background:rgba(0,0,0,0.5)","opacity:0","transition:opacity 180ms ease-out"].join(";
- "),this.actionSheetBackdrop.addEventListener("click",()=>this.closeNameActionSheet()),t.appendChild(this.actionSheetBackdrop),this.actionSheetContent=document.createElement("div"),this.actionSheetContent.style.cssText=["position:relative","background:#241c1c","border-top-left-radius:16px","border-top-right-radius:16px","padding-bottom:env(safe-area-inset-bottom, 12px)","box-shadow:0 -8px 24px rgba(0,0,0,0.5)","transform:translateY(100%)","transition:transform 220ms cubic-bezier(0.2,0.8,0.25,1)"].join(";
- "),this.actionSheetContent.addEventListener("click",t=>t.stopPropagation()),t.appendChild(this.actionSheetContent),t}
- buildActionSheetItem(t,i,s){
- const e=document.createElement("button");
- return e.type="button",e.textContent=t,e.style.cssText=["display:block","width:100%","padding:16px","background:transparent",`color:${
- (null==s?void 0:s.color)??"#f3ece2"}
- `,"border:none",(null==s?void 0:s.borderTop)?"border-top:1px solid #2a2121":"","font-size:15px","font-weight:600","cursor:pointer","text-align:center"].filter(Boolean).join(";
- "),e.addEventListener("click",i),e}
- async onTranslateClick(t){
- const i=this.activeRoom,s=i.getMessage(t);
- if(!s)return;
- if(s.translated)return void i.updateMessage(t,{
- translated:!1}
- );
- const e=this.translationCache.get(s.content);
- if(e)return void i.updateMessage(t,{
- translated:!0,translatedText:e}
- );
- this.pendingTranslations.add(t);
- const n=this.rows.get(t);
- n&&this.renderRowContent(n);
- try{
- const e=await vD.getInstance().translateText(s.content);
- e&&e.length>0&&(this.translationCache.set(s.content,e),i.updateMessage(t,{
- translated:!0,translatedText:e}
- ))}
- catch(h){
- }
- finally{
- this.pendingTranslations.delete(t);
- const i=this.rows.get(t);
- i&&this.renderRowContent(i)}
- }
- async tryLoadOlder(){
- if(!this.loadingOlder&&!this.exhaustedOlder){
- this.loadingOlder=!0;
- try{
- let t=0;
- if("dm"===this.activeRoom.kind&&this.activeRoom.peerUid){
- const i=this.activeRoom.oldestTimestamp(),s=null!=i?new Date(i):void 0,e=this.activeRoom;
- t=await new Promise(t=>{
- const i=setTimeout(()=>{
- n(),t(0)}
- ,5e3),n=e.bus.on("history:prepended",s=>{
- clearTimeout(i),n(),t(s.length)}
- );
- n4.getInstance().requestWhisperHistory(e.peerUid,{
- before:s,limit:20}
- )}
- )}
- else t=await n4.getInstance().loadOlder(20);
- 0===t&&(this.exhaustedOlder=!0)}
- finally{
- requestAnimationFrame(()=>{
- this.loadingOlder=!1}
- )}
- }
- }
- isNearBottom(){
- const t=this.listEl;
- return t.scrollHeight-t.scrollTop-t.clientHeight<80}
- scrollToBottom(){
- this.listEl.scrollTop=this.listEl.scrollHeight}
- buildNewMsgBadge(){
- const t=document.createElement("button");
- return t.type="button",t.style.cssText=["position:absolute","left:50%","bottom:12px","transform:translate(-50%, 8px)","background:#684f3e","color:#f3ece2","border:none","border-radius:999px","padding:8px 16px","font-size:13px","font-weight:700","cursor:pointer","opacity:0","pointer-events:none","transition:opacity 160ms ease, transform 160ms ease","box-shadow:0 4px 12px rgba(0,0,0,0.4)","z-index:2","white-space:nowrap"].join(";
- "),t.textContent=`${
- AG.getText("GAME_659","새 메시지")}
-  ↓`,t.addEventListener("click",()=>{
- this.hideNewMsgBadge(),this.scrollToBottom()}
- ),t}
- incrementNewMsgBadge(){
- this.newMsgBadgeCount+=1;
- const t=this.newMsgBadgeCount;
- this.newMsgBadgeEl.textContent=1===t?`${
- AG.getText("GAME_659","새 메시지")}
-  ↓`:`${
- AG.getText("GAME_659","새 메시지")}
-  ${
- t}
-  ↓`,this.newMsgBadgeEl.style.opacity="1",this.newMsgBadgeEl.style.pointerEvents="auto",this.newMsgBadgeEl.style.transform="translate(-50%, 0)"}
- hideNewMsgBadge(){
- 0!==this.newMsgBadgeCount&&(this.newMsgBadgeCount=0,this.newMsgBadgeEl.style.opacity="0",this.newMsgBadgeEl.style.pointerEvents="none",this.newMsgBadgeEl.style.transform="translate(-50%, 8px)")}
- startTimeTicker(){
- null===this.timeTickerId&&(document.hidden||(this.timeTickerId=window.setInterval(()=>this.tickTimes(),15e3)))}
- stopTimeTicker(){
- null!==this.timeTickerId&&(clearInterval(this.timeTickerId),this.timeTickerId=null)}
- tickTimes(){
- const t=Date.now();
- for(const i of this.rows.values()){
- if(!i.timeEl)continue;
- if(t-i.msg.timestamp>864e5)continue;
- const s=` · ${
- u4(i.msg.timestamp)}
- `;
- i.timeEl.textContent!==s&&(i.timeEl.textContent=s)}
- }
- setStatus(t,i){
- this.statusEl.textContent=t,this.statusEl.style.color=i}
- isMine(t){
- if("__me__"===t.sender.uid)return!0;
- if(F6()){
- const i=n4.getInstance().devUser;
- return null!==i&&t.sender.uid===i.uid}
- return""!==_L.uid&&t.sender.uid===_L.uid}
- buildTabBar(){
- const t=document.createElement("div");
- return t.style.cssText=["flex:0 0 auto","display:flex","border-bottom:1px solid #2a2121","background:#1f1a1a"].join(";
- "),this.tabSystemBtn=this.buildTabButton(AG.getText("GAME_660","시스템"),"system"),this.tabGlobalBtn=this.buildTabButton(AG.getText("COMMON_332","전체"),"global"),this.tabGuildBtn=this.buildTabButton(AG.getText("GAME_411","길드"),"guild"),this.tabDMBtn=this.buildTabButton(AG.getText("GAME_637","귓속말"),"dmList"),this.tabDMUnreadBadge=document.createElement("span"),this.tabDMUnreadBadge.style.cssText=["display:none","margin-left:6px","min-width:18px","height:18px","padding:0 5px","background:#d28383","color:#1f1a1a","border-radius:9px","font-size:11px","font-weight:700","line-height:18px","text-align:center"].join(";
- "),this.tabDMBtn.appendChild(this.tabDMUnreadBadge),this.tabGuildRedDot=document.createElement("span"),this.tabGuildRedDot.style.cssText=["position:relative","top:-6px","display:none","margin-left:12px","min-width:12px","height:12px","padding:0","background:#d28383","color:#1f1a1a","border-radius:50%","font-size:11px","font-weight:700","line-height:12px","text-align:center"].join(";
- "),this.tabGuildBtn.appendChild(this.tabGuildRedDot),this.tabSystemRedDot=document.createElement("span"),this.tabSystemRedDot.style.cssText=this.tabGuildRedDot.style.cssText,this.tabSystemBtn.appendChild(this.tabSystemRedDot),this.tabWhisperRedDot=document.createElement("span"),this.tabWhisperRedDot.style.cssText=this.tabGuildRedDot.style.cssText,this.tabDMBtn.appendChild(this.tabWhisperRedDot),t.appendChild(this.tabGuildBtn),t.appendChild(this.tabGlobalBtn),t.appendChild(this.tabSystemBtn),t.appendChild(this.tabDMBtn),t}
- buildTabButton(t,i){
- const s=document.createElement("button");
- return s.type="button",s.textContent=t,s.style.cssText=["flex:1","background:transparent","border:none","color:#8a8074","padding:12px 0","font-size:14px","font-weight:700","cursor:pointer","border-bottom:2px solid transparent","transition:color 120ms ease, border-color 120ms ease"].join(";
- "),s.addEventListener("click",()=>this.setViewMode(i)),s}
- updateTabActive(){
- const t=[this.tabSystemBtn,this.tabGlobalBtn,this.tabGuildBtn,this.tabDMBtn],i={
- system:this.tabSystemBtn,global:this.tabGlobalBtn,guild:this.tabGuildBtn,dmList:this.tabDMBtn,dm:this.tabDMBtn}
- [this.viewMode];
- for(const s of t)s===i?(s.style.color="#f3ece2",s.style.borderBottomColor="#c9a861"):(s.style.color="#8a8074",s.style.borderBottomColor="transparent")}
- updateWhisperTabBadge(){
- this.tabDMUnreadBadge&&(this.totalUnread>0?(this.tabDMUnreadBadge.textContent=this.totalUnread>99?"99+":String(this.totalUnread),this.tabDMUnreadBadge.style.display="inline-block",this.tabWhisperRedDot.style.display="none"):this.tabDMUnreadBadge.style.display="none")}
- updateGuildTabRedDot(){
- this.tabGuildRedDot&&(1==ED.checkChatGuild()?this.tabGuildRedDot.style.display="inline-block":this.tabGuildRedDot.style.display="none")}
- updateSystemTabRedDot(){
- this.tabSystemRedDot&&(1==ED.checkChatSystem()?this.tabSystemRedDot.style.display="inline-block":this.tabSystemRedDot.style.display="none")}
- updateWhisperTabRedDot(){
- this.tabWhisperRedDot&&(1==ED.checkChatWhisper()?this.tabWhisperRedDot.style.display="inline-block":this.tabWhisperRedDot.style.display="none")}
- updateRedDot(){
- this.updateGuildTabRedDot(),this.updateSystemTabRedDot(),this.updateWhisperTabRedDot()}
- setViewMode(t,i){
- this.viewMode=t;
- const s=Q6.getInstance();
- if("system"===t)this.activeRoom=s.getSystemRoom(),this.activeDMPeer=null,this.titleEl.textContent=AG.getText("COMMON_18","공지"),this.statusEl.style.display="none";
- else if("global"===t){
- this.activeRoom=s.getGlobalRoom(),this.activeDMPeer=null,this.titleEl.textContent=AG.getText("GAME_650","전체 채팅");
- const t=s.currentChannel;
- this.statusEl.textContent=t?`${
- t.channelId.toUpperCase()}
-  (${
- t.memberCount}
- 명)`:"",this.statusEl.style.display="block",this.channelSwitchBtn.style.display=t&&t.totalChannels>1?"block":"none",n4.getInstance().requestGlobalRecent(50)}
- else"guild"===t?(this.activeRoom=s.getGuildRoom(),this.activeDMPeer=null,this.titleEl.textContent=AG.getText("GAME_634","길드 채팅"),this.statusEl.textContent="",this.statusEl.style.display="none"):"dm"===t&&i?(this.activeRoom=s.getDMRoom(i.uid,i.name),this.activeDMPeer=i,this.titleEl.textContent=i.name||AG.getText("GAME_637","귓속말"),this.statusEl.style.display="none"):"dmList"===t&&(this.activeDMPeer=null,this.titleEl.textContent=AG.getText("GAME_637","귓속말"),this.statusEl.style.display="none");
- const e="system"===t||"global"===t||"guild"===t||"dm"===t,n="global"===t||"guild"===t||"dm"===t;
- if(this.listWrap.style.display=e?"flex":"none",this.dmListWrap.style.display="dmList"===t?"flex":"none",this.inputBar.style.display=n?"flex":"none",this.emojiPicker.style.display="none",this.emojiPickerOpen=!1,this.tabBarEl.style.display="dm"===t?"none":"flex","global"!==t&&(this.channelSwitchBtn.style.display="none"),this.updateTabActive(),this.clearGlobalCooldownUI(),e)this.exhaustedOlder=!1,this.loadingOlder=!1,this.subscribeActiveRoom(),this.rebuildAll(),requestAnimationFrame(()=>this.scrollToBottom());
- else if(F6()){
- const t=this.buildLocalConversations();
- s.setConversations(t)}
- else{
- const t=s.conversations;
- t.length>0?this.renderConversationList(t):this.renderConversationList(this.buildLocalConversations()),n4.getInstance().requestConversationList()}
- "dm"===t&&i&&(n4.getInstance().markWhisperRead(i.uid),0===this.activeRoom.store.size&&n4.getInstance().requestWhisperHistory(i.uid,{
- limit:50}
- )),"system"===t&&0===this.activeRoom.store.size&&n4.getInstance().requestSystemMessages(50)}
- buildDMListView(){
- const t=document.createElement("div");
- return t.style.cssText=["flex:1","display:none","flex-direction:column","overflow:hidden"].join(";
- "),this.dmListEl=document.createElement("div"),this.dmListEl.className="chat-scroll",this.dmListEl.style.cssText=["flex:1","overflow-y:auto","touch-action:pan-y","-webkit-overflow-scrolling:touch","overscroll-behavior:contain"].join(";
- "),t.appendChild(this.dmListEl),t}
- buildLocalConversations(){
- const t=this.myUid(),i=[];
- for(const s of Q6.getInstance().getAllRooms()){
- if("dm"!==s.kind||!s.peerUid)continue;
- const e=s.getMessages();
- if(0===e.length)continue;
- const n=e[e.length-1];
- let h=s.peerName??"";
- if(!h)for(let t=e.length-1;
- t>=0;
- t--)if(e[t].sender.uid===s.peerUid){
- h=e[t].sender.name;
- break}
- const r=""!==t&&n.sender.uid===t;
- i.push({
- peerUid:s.peerUid,peerName:h,lastMessage:n.content,lastTimestamp:n.timestamp,unread:0,lastFromMe:r}
- )}
- return i.sort((t,i)=>i.lastTimestamp-t.lastTimestamp),i}
- myUid(){
- var t;
- return F6()?(null==(t=n4.getInstance().devUser)?void 0:t.uid)??"":_L.uid??""}
- renderConversationList(t){
- if(this.dmListEl.replaceChildren(),0===t.length){
- const t=document.createElement("div");
- return t.style.cssText=["padding:40px 20px","text-align:center","color:#6a5f54","font-size:14px"].join(";
- "),t.textContent=AG.getText("GAME_638","아직 대화가 없습니다."),void this.dmListEl.appendChild(t)}
- for(const i of t)this.dmListEl.appendChild(this.buildConversationItem(i))}
- buildConversationItem(t){
- const i=document.createElement("div");
- i.style.cssText=["display:flex","align-items:center","gap:12px","padding:12px 14px","border-bottom:1px solid #2a2121","cursor:pointer","transition:background 120ms ease"].join(";
- "),i.addEventListener("click",()=>{
- this.setViewMode("dm",{
- uid:t.peerUid,name:t.peerName}
- )}
- ),i.addEventListener("pointerdown",()=>{
- i.style.background="#2a2121"}
- );
- const s=Kt(()=>{
- i.style.background="transparent"}
- ,"clearHover");
- i.addEventListener("pointerup",s),i.addEventListener("pointercancel",s),i.addEventListener("pointerleave",s);
- const e=document.createElement("div");
- e.style.cssText=["flex:0 0 auto","width:44px","height:44px","border-radius:50%","background:#3a2f2a","color:#f3ece2","display:flex","align-items:center","justify-content:center","font-size:16px","font-weight:700"].join(";
- "),e.textContent=(t.peerName||"?").slice(0,1).toUpperCase(),i.appendChild(e);
- const n=document.createElement("div");
- n.style.cssText="flex:1;
-  min-width:0;
-  display:flex;
-  flex-direction:column;
-  gap:2px;
- ";
- const h=document.createElement("div");
- h.style.cssText="font-size:14px;
-  font-weight:700;
-  color:#f3ece2;
-  overflow:hidden;
-  text-overflow:ellipsis;
-  white-space:nowrap;
- ",h.textContent=t.peerName||`${
- AG.getText("상대","상대")}
-  ${
- t.peerUid.slice(0,6)}
- `,n.appendChild(h);
- const r=document.createElement("div");
- r.style.cssText="font-size:13px;
-  color:#8a8074;
-  overflow:hidden;
-  text-overflow:ellipsis;
-  white-space:nowrap;
- ";
- const o=t.lastFromMe?`${
- AG.getText("GAME_665","나")}
- :`:"";
- r.textContent=o+t.lastMessage,n.appendChild(r),i.appendChild(n);
- const a=document.createElement("div");
- a.style.cssText="flex:0 0 auto;
-  display:flex;
-  flex-direction:column;
-  align-items:flex-end;
-  gap:4px;
- ";
- const c=document.createElement("div");
- if(c.style.cssText="font-size:11px;
-  color:#6a5f54;
- ",c.textContent=t.lastTimestamp?u4(t.lastTimestamp):"",a.appendChild(c),t.unread>0){
- const i=document.createElement("div");
- i.style.cssText=["min-width:20px","height:20px","padding:0 6px","background:#d28383","color:#1f1a1a","border-radius:10px","font-size:11px","font-weight:700","line-height:20px","text-align:center"].join(";
- "),i.textContent=t.unread>99?"99+":String(t.unread),a.appendChild(i)}
- return i.appendChild(a),i}
- buildInputBar(){
- const t=document.createElement("div");
- return t.style.cssText=["flex:0 0 auto","display:flex","align-items:flex-end","gap:8px","padding:10px 12px","border-top:1px solid #2a2121","background:#241c1c"].join(";
- "),this.emojiBtnEl=document.createElement("button"),this.emojiBtnEl.type="button",this.emojiBtnEl.textContent="😊",this.emojiBtnEl.setAttribute("aria-label","이모지"),this.emojiBtnEl.style.cssText=["flex:0 0 auto","width:44px","height:44px","background:transparent","border:none","font-size:24px","cursor:pointer","padding:0","display:flex","align-items:center","justify-content:center","line-height:1"].join(";
- "),this.emojiBtnEl.addEventListener("click",t=>{
- t.stopPropagation(),this.toggleEmojiPicker()}
- ),t.appendChild(this.emojiBtnEl),this.textareaEl=document.createElement("textarea"),this.textareaEl.placeholder=`${
- AG.getText("GAME_661","메시지 입력")}
- …`,this.textareaEl.rows=1,this.textareaEl.maxLength=500,this.textareaEl.className="chat-scroll",this.textareaEl.style.cssText=["flex:1","resize:none","background:#2a2121","color:#f3ece2","border:1px solid #3a2f2a","border-radius:22px","padding:10px 14px","font-size:15px","line-height:1.35","font-family:inherit","outline:none","min-height:44px","max-height:120px","overflow-y:auto","touch-action:pan-y","-webkit-appearance:none"].join(";
- "),this.textareaEl.addEventListener("input",()=>this.autoGrow()),this.textareaEl.addEventListener("keydown",this.onInputKey),t.appendChild(this.textareaEl),this.sendBtnEl=document.createElement("button"),this.sendBtnEl.type="button",this.sendBtnEl.setAttribute("aria-label","전송"),this.sendBtnEl.style.cssText=["flex:0 0 auto","width:44px","height:44px","background:#c9a861","color:#1f1a1a","border:none","border-radius:50%","cursor:pointer","padding:0","display:flex","align-items:center","justify-content:center"].join(";
- "),this.sendBtnEl.innerHTML='<svg width="22" height="22" viewBox="0 0 24 24" fill="currentColor" stroke="none"><path d="M2 21l21-9L2 3v7l15 2-15 2v7z"/></svg>',this.sendBtnEl.addEventListener("click",()=>{
- this.handleSend()}
- ),t.appendChild(this.sendBtnEl),t}
- autoGrow(){
- const t=this.textareaEl;
- t.style.height="auto",t.style.height=Math.min(t.scrollHeight,120)+"px"}
- async handleSend(){
- if(this.sending)return;
- const t=this.textareaEl.value.trim();
- if(0!==t.length){
- this.sending=!0,this.sendBtnEl.disabled=!0,this.sendBtnEl.style.opacity="0.6",this.closeEmojiPicker();
- try{
- const i=await r4.getInstance().changeBadWordToAsterisk(t),s=n4.getInstance();
- let e=!1;
- e="global"===this.viewMode?await s.sendGlobalMessage(i):"dm"===this.viewMode&&this.activeDMPeer?await s.sendWhisper(this.activeDMPeer.uid,i):await s.send(i),e&&(this.textareaEl.value="",this.autoGrow())}
- catch(i){
- }
- finally{
- this.sending=!1,this.sendBtnEl.disabled=!1,this.sendBtnEl.style.opacity="1",this.textareaEl.focus()}
- }
- }
- buildEmojiPicker(){
- const t=document.createElement("div");
- t.style.cssText=["flex:0 0 auto","width:100%","height:260px","background:#241c1c","border-top:1px solid #2a2121","display:none","flex-direction:column","overflow:hidden"].join(";
- ");
- const i=document.createElement("div");
- return i.style.cssText=["flex:0 0 auto","display:flex","padding:4px","border-bottom:1px solid #2a2121","background:#1a1515"].join(";
- "),o4.forEach((t,s)=>{
- const e=document.createElement("button");
- e.type="button",e.textContent=t.icon,e.dataset.cat=t.key,e.style.cssText=["flex:1","background:transparent","border:none","font-size:22px","padding:10px 0","cursor:pointer","border-radius:8px","line-height:1"].join(";
- "),e.addEventListener("click",t=>{
- t.stopPropagation(),this.selectEmojiCategory(s)}
- ),i.appendChild(e),this.emojiCategoryBtns.push(e)}
- ),t.appendChild(i),this.emojiGridEl=document.createElement("div"),this.emojiGridEl.className="chat-scroll",this.emojiGridEl.style.cssText=["flex:1","overflow-y:auto","padding:8px","display:grid","grid-template-columns:repeat(8, 1fr)","gap:2px","touch-action:pan-y","-webkit-overflow-scrolling:touch","overscroll-behavior:contain"].join(";
- "),t.appendChild(this.emojiGridEl),t.addEventListener("click",t=>t.stopPropagation()),this.selectEmojiCategory(0),t}
- toggleEmojiPicker(){
- this.emojiPickerOpen?this.closeEmojiPicker():this.openEmojiPicker()}
- openEmojiPicker(){
- this.emojiPicker.style.display="flex",this.emojiPickerOpen=!0}
- closeEmojiPicker(){
- this.emojiPicker.style.display="none",this.emojiPickerOpen=!1}
- selectEmojiCategory(t){
- this.emojiCategoryBtns.forEach((i,s)=>{
- i.style.background=s===t?"#3a2f2a":"transparent"}
- );
- const i=o4[t].list;
- this.emojiGridEl.replaceChildren();
- for(const s of i){
- const t=document.createElement("button");
- t.type="button",t.textContent=s,t.style.cssText=["background:transparent","border:none","font-size:26px","aspect-ratio:1 / 1","cursor:pointer","border-radius:8px","line-height:1","display:flex","align-items:center","justify-content:center"].join(";
- "),t.addEventListener("click",t=>{
- t.stopPropagation(),this.insertAtCursor(s)}
- ),this.emojiGridEl.appendChild(t)}
- }
- showGlobalCooldownUI(t){
- this.globalCooldownEnd=Date.now()+t,this.sendBtnEl.disabled=!0,this.updateCooldownLabel(),null!=this.globalCooldownTimer&&clearInterval(this.globalCooldownTimer),this.globalCooldownTimer=window.setInterval(()=>{
- this.globalCooldownEnd-Date.now()<=0?this.clearGlobalCooldownUI():this.updateCooldownLabel()}
- ,500)}
- updateCooldownLabel(){
- const t=Math.max(0,this.globalCooldownEnd-Date.now()),i=Math.ceil(t/1e3);
- this.sendBtnEl.innerHTML=`<span style="font-size:13px;
- font-weight:700;
- ">${
- i}
- </span>`,this.sendBtnEl.style.opacity="0.5"}
- clearGlobalCooldownUI(){
- null!=this.globalCooldownTimer&&(clearInterval(this.globalCooldownTimer),this.globalCooldownTimer=null),this.globalCooldownEnd=0,this.sendBtnEl.disabled=!1,this.sendBtnEl.style.opacity="1",this.sendBtnEl.innerHTML='<svg width="22" height="22" viewBox="0 0 24 24" fill="currentColor" stroke="none"><path d="M2 21l21-9L2 3v7l15 2-15 2v7z"/></svg>'}
- showChannelPicker(){
- const t=Q6.getInstance(),i=t.currentChannel;
- if(!i)return;
- const s=t.globalBus.on("channel:list",t=>{
- if(s(),!t||t.length<=1)return void this.showCooldownToast(AG.getText("GAME_662","다른 채널이 없습니다."));
- this.actionSheetContent.replaceChildren();
- const e=document.createElement("div");
- e.style.cssText="padding:14px 16px 10px;
-  text-align:center;
-  font-size:13px;
-  color:#8a8074;
-  border-bottom:1px solid #2a2121;
- ",e.textContent=AG.getText("GAME_666","채널 선택"),this.actionSheetContent.appendChild(e);
- for(const s of t){
- const t=s.channelId===i.channelId,e=`  ✓ ${
- AG.getText("GAME_152","현재")}
- `,n=`${
- s.channelId.toUpperCase()}
-     ${
- s.memberCount}
- /500${
- t?e:""}
- `;
- this.actionSheetContent.appendChild(this.buildActionSheetItem(n,()=>{
- this.closeNameActionSheet(),t||n4.getInstance().switchChannel(s.channelId)}
- ,{
- color:t?"#c9a861":"#f3ece2"}
- ))}
- this.actionSheetContent.appendChild(this.buildActionSheetItem(AG.getText("COMMON_2","취소"),()=>this.closeNameActionSheet(),{
- color:"#6a5f54",borderTop:!0}
- )),this.actionSheetEl.style.display="flex",requestAnimationFrame(()=>{
- this.actionSheetBackdrop.style.opacity="1",this.actionSheetContent.style.transform="translateY(0)"}
- )}
- );
- setTimeout(()=>{
- s()}
- ,5e3),n4.getInstance().requestChannelList()}
- showCooldownToast(t){
- const i=document.createElement("div");
- i.style.cssText=["position:absolute","left:50%","bottom:70px","transform:translateX(-50%)","background:#3a2f2a","color:#f3ece2","padding:8px 16px","border-radius:8px","font-size:13px","white-space:nowrap","z-index:3","opacity:0","transition:opacity 200ms ease"].join(";
- "),i.textContent=t,this.card.appendChild(i),requestAnimationFrame(()=>{
- i.style.opacity="1"}
- ),setTimeout(()=>{
- i.style.opacity="0",setTimeout(()=>i.remove(),200)}
- ,2500)}
- insertAtCursor(t){
- const i=this.textareaEl,s=i.selectionStart??i.value.length,e=i.selectionEnd??i.value.length,n=i.value.slice(0,s)+t+i.value.slice(e);
- if(n.length>500)return;
- i.value=n;
- const h=s+t.length;
- i.selectionStart=i.selectionEnd=h,i.focus(),this.autoGrow()}
- }
- ;
- Kt(a4,"ChatOverlay"),zt(a4,"_instance",null),zt(a4,"_globalStyleInjected",!1);
- let c4=a4;
- function l4(t){
- return t?t===ND.MEMBER?"":ED.getRoleName(t)??t:""}
- function u4(t){
- const i=Math.max(0,Date.now()-t),s=Math.floor(i/1e3);
- if(s<5)return AG.getText("GAME_663","방금");
- if(s<60)return AG.getValueReplace("GAME_664","##",s,`${
- s}
- 초 전`);
- const e=Math.floor(s/60);
- if(e<60)return AG.getValueReplace("GAME_455","##",e,`${
- e}
- 분 전`);
- const n=Math.floor(e/60);
- if(n<24)return AG.getValueReplace("GAME_456","##",n,`${
- n}
- 시간 전`);
- const h=Math.floor(n/24);
- return AG.getValueReplace("GAME_457","##",h,`${
- h}
- 일 전`)}
- Kt(l4,"getRoleLabel"),Kt(u4,"formatRelTime");
- const d4=class t{
- constructor(){
- zt(this,"list",[])}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- if(this.list=[],t)for(let i=0;
- i<t.length;
- i++){
- const s=t[i],e=new g4;
- e.kindNum=s.kindNum||0,e.desc=s.desc||"",e.useYn=s.useYn||"N",e.startWave=s.startWave||0,this.list.push(e)}
- }
- getFilteredMessages(){
- const t=_L.maxWave,i=this.list.filter(i=>"Y"===i.useYn&&(t>=i.startWave||i.startWave<=1)).map(t=>AG.getText(`TIP_DESC_${
- t.kindNum}
- `,t.desc));
- for(let s=i.length-1;
- s>0;
- s--){
- const t=Math.floor(Math.random()*(s+1));
- [i[s],i[t]]=[i[t],i[s]]}
- return i}
- }
- ;
- Kt(d4,"TipDataManager"),zt(d4,"instance");
- let f4=d4;
- const p4=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"desc",""),zt(this,"useYn","N"),zt(this,"startWave",0)}
- }
- ;
- Kt(p4,"TipVO");
- let g4=p4;
- const m4=class t extends W3{
- constructor(){
- super(),zt(this,"paperContainer",new Be),zt(this,"paperTop"),zt(this,"paperMiddle"),zt(this,"paperBottom"),zt(this,"imageSprite",new We),zt(this,"lblDesc",new YD("",3811866,aD.DEFAULT_FONT_OPTION_18)),zt(this,"btnPrev"),zt(this,"btnNext"),zt(this,"btnPrevBg"),zt(this,"btnNextBg"),zt(this,"btnPrevIcon"),zt(this,"btnNextIcon"),zt(this,"btnCloseCustom",new L6),zt(this,"subs",[]),zt(this,"subIndex",0),zt(this,"hideBtnClose",!1),zt(this,"onHideHandler",null),this.width=t.POPUP_WIDTH,this.height=t.POPUP_HEIGHT,this.bg.visible=!1,this.top.visible=!1,this.bottom.visible=!1,this.buildPaperBackground(),this.addChild(this.paperContainer),this.imageSprite.anchor.set(.5,.5),this.addChild(this.imageSprite),this.lblDesc.wordWrap=!0,this.lblDesc.wordWrapWidth=t.DESC_WRAP_WIDTH,this.lblDesc.align="center",this.addChild(this.lblDesc),this.buildNavButtons(),this.addChild(this.btnPrev),this.addChild(this.btnNext),this.btnClose.visible=!1,this.btnCloseCustom.x=t.POPUP_WIDTH-this.btnCloseCustom.width-t.CLOSE_BTN_RIGHT_PAD,this.btnCloseCustom.y=t.CLOSE_BTN_TOP_PAD,this.btnCloseCustom.onClick=()=>this.hide(),this.addChild(this.btnCloseCustom),this.bringFrontFurniture(),this.outSideClickHide=!0}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- buildPaperBackground(){
- this.paperTop=new We(ZA.getTexture("UI_HELP","Help_Page_up")),this.paperMiddle=new CM({
- texture:ZA.getTexture("UI_HELP","Help_Page_middle"),leftWidth:40,topHeight:40,rightWidth:40,bottomHeight:40}
- ),this.paperMiddle.width=618,this.paperMiddle.height=511,this.paperBottom=new We(ZA.getTexture("UI_HELP","Help_Page_down")),this.paperContainer.addChild(this.paperTop),this.paperContainer.addChild(this.paperMiddle),this.paperContainer.addChild(this.paperBottom),this.layoutPaper()}
- layoutPaper(){
- const i=t.POPUP_WIDTH,s=t.POPUP_HEIGHT;
- this.paperTop.x=.5*(i-this.paperTop.width),this.paperMiddle.x=.5*(i-this.paperMiddle.width),this.paperBottom.x=.5*(i-this.paperBottom.width),this.paperTop.y=0,this.paperMiddle.y=this.paperTop.height;
- const e=s-this.paperTop.height-this.paperBottom.height;
- e>0&&(this.paperMiddle.height=e),this.paperBottom.y=this.paperMiddle.y+this.paperMiddle.height}
- buildNavButtons(){
- this.btnPrev=new Be,this.btnPrevBg=new We(ZA.getTexture("UI_HELP","Btn_Help_01_nor")),this.btnPrevIcon=new We(ZA.getTexture("UI_HELP","Icon_Help_Left")),this.btnPrev.addChild(this.btnPrevBg),this.btnPrev.addChild(this.btnPrevIcon),this.btnPrevIcon.x=.5*(this.btnPrevBg.width-this.btnPrevIcon.width),this.btnPrevIcon.y=.5*(this.btnPrevBg.height-this.btnPrevIcon.height),this.btnPrev.eventMode="dynamic",this.btnPrev.cursor="pointer",this.btnPrev.on("pointertap",()=>this.onPrev()),this.btnNext=new Be,this.btnNextBg=new We(ZA.getTexture("UI_HELP","Btn_Help_01_nor")),this.btnNextIcon=new We(ZA.getTexture("UI_HELP","Icon_Help_Right")),this.btnNext.addChild(this.btnNextBg),this.btnNext.addChild(this.btnNextIcon),this.btnNextIcon.x=.5*(this.btnNextBg.width-this.btnNextIcon.width),this.btnNextIcon.y=.5*(this.btnNextBg.height-this.btnNextIcon.height),this.btnNext.eventMode="dynamic",this.btnNext.cursor="pointer",this.btnNext.on("pointertap",()=>this.onNext())}
- bringFrontFurniture(){
- const t=[this.txtTitle,this.btnCloseCustom];
- for(const i of t)i&&i.parent===this&&(this.removeChild(i),this.addChild(i))}
- showWith(t,i=0,s=!1,e=!0){
- this.hideBtnClose=s,this.btnCloseCustom.visible=!s,this.outSideClickHide=e,this.subs=sK.getInstance().getSubsByMain(t),i>0&&(this.subs=this.subs.slice(0,i)),this.subIndex=0,this.applyCurrent(),super.show()}
- onPrev(){
- this.subIndex<=0?this.hide():(this.subIndex--,this.applyCurrent())}
- onNext(){
- 1==this.hideBtnClose&&(this.subIndex==this.subs.length-2?this.btnCloseCustom.visible=!0:this.btnCloseCustom.visible=!1),this.subIndex>=this.subs.length-1?this.hide():(this.subIndex++,this.applyCurrent())}
- hide(){
- super.hide(),this.onHideHandler&&this.onHideHandler(),this.onHideHandler=null}
- applyCurrent(){
- if(0===this.subs.length)return;
- const i=this.subs[this.subIndex];
- this.txtTitle.text=i.title,this.txtTitle.x=.5*(t.POPUP_WIDTH-this.txtTitle.width),this.txtTitle.y=t.TITLE_Y;
- const s=sK.getInstance().getImageName(i.main,i.sub),e=ZA.getTexture("UI_HELP",s);
- this.imageSprite.texture=e;
- const n=t.IMAGE_AREA_TOP,h=t.IMAGE_AREA_HEIGHT,r=t.POPUP_WIDTH-80,o=e.width||1,a=e.height||1,c=Math.min(r/o,h/a,1);
- this.imageSprite.scale.set(c),this.imageSprite.x=.5*t.POPUP_WIDTH,this.imageSprite.y=n+.5*h,this.lblDesc.text=i.desc,this.lblDesc.x=.5*(t.POPUP_WIDTH-this.lblDesc.width),this.lblDesc.y=n+h+20;
- const l=t.POPUP_HEIGHT-this.btnPrevBg.height-t.NAV_BTN_BOTTOM_PAD;
- this.btnPrev.x=80,this.btnPrev.y=l,this.btnNext.x=t.POPUP_WIDTH-80-this.btnNextBg.width,this.btnNext.y=l,this.btnPrev.alpha=0===this.subIndex?.4:1,this.btnNext.alpha=this.subIndex===this.subs.length-1?.4:1}
- getPopupBounds(){
- return this.getBounds()}
- }
- ;
- Kt(m4,"HelpDetailPopup"),zt(m4,"instance",null),zt(m4,"POPUP_WIDTH",600),zt(m4,"POPUP_HEIGHT",720),zt(m4,"IMAGE_AREA_TOP",110),zt(m4,"IMAGE_AREA_HEIGHT",360),zt(m4,"DESC_WRAP_WIDTH",500),zt(m4,"NAV_BTN_BOTTOM_PAD",50),zt(m4,"TITLE_Y",40),zt(m4,"CLOSE_BTN_RIGHT_PAD",20),zt(m4,"CLOSE_BTN_TOP_PAD",18);
- let w4=m4;
- const v4=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon",new We),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnQuestion"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=t.ITEM_WIDTH,this.bg.height=t.ITEM_HEIGHT,this.addChild(this.bg),this.addChild(this.icon),this.lblTitle.x=t.TITLE_X,this.addChild(this.lblTitle),this.btnQuestion=new We(ZA.getTexture("UI_HELP","Btn_Help")),this.addChild(this.btnQuestion)}
- setData(i){
- this.data=i;
- const s=i,e=sK.getInstance().getIconName(s.main),n=ZA.getTexture("UI_HELP",e);
- this.icon.texture=n;
- const h=n.width||1,r=n.height||1,o=Math.min(1,t.ICON_MAX_SIZE/Math.max(h,r));
- this.icon.scale.set(o),this.icon.x=t.ICON_AREA_X+.5*(t.ICON_AREA_W-this.icon.width),this.icon.y=.5*(this.bg.height-this.icon.height),this.lblTitle.text=s.title,this.lblTitle.y=.5*(this.bg.height-this.lblTitle.height),this.btnQuestion.x=this.bg.width-this.btnQuestion.width-t.QUESTION_RIGHT_PAD,this.btnQuestion.y=.5*(this.bg.height-this.btnQuestion.height)}
- onClick(t,i){
- if(!this.data)return;
- const s=this.data;
- w4.getInstance().showWith(s.main)}
- get height(){
- return t.ITEM_HEIGHT+6}
- }
- ;
- Kt(v4,"HelpItemRenderer"),zt(v4,"ITEM_WIDTH",540),zt(v4,"ITEM_HEIGHT",79),zt(v4,"ICON_AREA_X",5),zt(v4,"ICON_AREA_W",80),zt(v4,"TITLE_X",140),zt(v4,"QUESTION_RIGHT_PAD",20),zt(v4,"ICON_MAX_SIZE",56);
- let b4=v4;
- const y4=class t extends $3{
- constructor(){
- super(),zt(this,"list"),this.height=t.POPUP_HEIGHT,this.initialize()}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- initialize(){
- this.setTitle(AG.getText("HELP_TITLE","HELP"));
- const t=this.top.height+10,i=this.bottom.height+20,s=this.height-t-i;
- this.list=new R3(b4,560,s),this.list.x=.5*(this.bg.width-560)+11,this.list.y=t,this.addChild(this.list),this.outSideClickHide=!0}
- setData(){
- this.setTitle(AG.getText("HELP_TITLE","HELP")),this.list.dataProvider=sK.getInstance().getMainList()}
- show(){
- this.setData(),super.show()}
- getDefaultPositionY(){
- return Math.floor(.35*(KA.safeHeight-this.height)+.5*this.height)}
- }
- ;
- Kt(y4,"HelpPopup"),zt(y4,"instance",null),zt(y4,"POPUP_HEIGHT",850);
- let _4=y4;
- const M4=class t extends Be{
- constructor(){
- super(),zt(this,"bg",new QD),zt(this,"lblText",new YD("",aD.COLOR_WHITE,aD.DEFAULT_DESC_FONT_OPTION_16)),zt(this,"btnChat",new R6("Btn_Guild_Chatting","UI_Ekkorr")),zt(this,"btnHelp"),zt(this,"messages",[]),zt(this,"currentIndex",0),zt(this,"BG_WIDTH",640),zt(this,"BG_HEIGHT",20),zt(this,"SCROLL_SPEED",.8),zt(this,"VISIBLE_WIDTH",640),zt(this,"chatUnlockTick",0),zt(this,"onLanguageChangeBind"),zt(this,"textY",-1),zt(this,"update",Kt(()=>{
- !this.btnChat.visible&&++this.chatUnlockTick>=60&&(this.chatUnlockTick=0,_L.maxWave>=t.CHAT_UNLOCK_WAVE&&(this.btnChat.visible=!0),Zti.getInstance().isOpened?(this.btnHelp.visible=!0,this.btnHelp.x=this.BG_WIDTH-this.btnHelp.width+6,this.btnChat.x=this.btnHelp.x-this.btnChat.width+10):(this.btnHelp.visible=!1,this.btnChat.x=this.BG_WIDTH-this.btnChat.width+6)),0!==this.messages.length&&(this.lblText.x-=this.SCROLL_SPEED,this.lblText.x+this.lblText.width<0&&(this.currentIndex=(this.currentIndex+1)%this.messages.length,this.showCurrentMessage()))}
- ,"update")),this.bg.width=this.BG_WIDTH,this.bg.height=this.BG_HEIGHT,this.bg.alpha=.4,this.bg.setIndex(7),this.addChild(this.bg),this.lblText.textColor=aD.COLOR_WHITE,this.lblText.wordWrap=!1,this.addChild(this.lblText),this.btnHelp=new mB("UI_Ekkorr","Btn_help_p"),this.btnHelp.x=this.BG_WIDTH-this.btnHelp.width+6,this.btnHelp.y=.5*(this.BG_HEIGHT-this.btnHelp.height)+4,this.btnHelp.onClick=this.onHelpBtnClick.bind(this),this.addChild(this.btnHelp),this.btnChat.scale=1,this.btnChat.x=this.btnHelp.x-this.btnChat.width+10,this.btnChat.y=this.btnHelp.y,this.btnChat.onClick=this.onChatBtn.bind(this),this.btnChat.visible=_L.maxWave>=t.CHAT_UNLOCK_WAVE,this.addChild(this.btnChat),dn.shared.add(this.update,this),this.setLanguageChange(!0)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- async onChatBtn(){
- if(F6())return c4.getInstance().show(),void n4.getInstance().start();
- const t=await hD.getInstance().guild.getMyMembership(!0);
- ED.setMembershipData(t.body),c4.getInstance().show(),n4.getInstance().start()}
- onHelpBtnClick(){
- _4.getInstance().show()}
- setLanguageChange(t){
- lS.getInstance().removeEventListener("LanguageChange",this.onLanguageChangeBind),t&&(this.onLanguageChangeBind=this.onLanguageChange.bind(this),lS.getInstance().addEventListener("LanguageChange",this.onLanguageChangeBind))}
- onLanguageChange(t=null){
- this.refreshMessages()}
- refreshMessages(){
- this.messages=f4.getInstance().getFilteredMessages(),this.currentIndex=0,this.showCurrentMessage()}
- showCurrentMessage(){
- 0!==this.messages.length&&(this.lblText.text=this.messages[this.currentIndex],this.lblText.x=this.VISIBLE_WIDTH+15,this.textY<0&&(this.textY=.5*(this.BG_HEIGHT-this.lblText.height)),this.lblText.y=this.textY)}
- setMessages(t){
- this.messages=t,this.currentIndex=0,this.showCurrentMessage()}
- addMessage(t){
- this.messages.push(t)}
- clearMessages(){
- this.messages=[],this.currentIndex=0,this.lblText.text=""}
- destroy(){
- dn.shared.remove(this.update,this),this.setLanguageChange(!1),super.destroy()}
- }
- ;
- Kt(M4,"MessageInfo"),zt(M4,"instance"),zt(M4,"CHAT_UNLOCK_WAVE",50);
- let E4=M4;
- const A4=class t extends Be{
- constructor(){
- super(),zt(this,"_currentView",null),zt(this,"container",new Be),zt(this,"bg"),zt(this,"onLanguageChangeBind"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
- ),this.addChild(this.bg),this.bg.width=640,this.bg.height=KA.viewMainHeight,this.container.y=40,this.addChild(this.container),UV.getInstance().y=-1,this.addChild(UV.getInstance()),E4.getInstance().y=-20,this.addChild(E4.getInstance()),this.setLanguageChange(!0)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setExpandedMode(i){
- i?(this.y=t.EXPANDED_Y,this.bg.height=KA.safeHeight-t.EXPANDED_Y-KA.BOTTOM_MENU_H):(this.y=KA.viewMainY,this.bg.height=KA.viewMainHeight)}
- static getExpandedListHeight(){
- return KA.safeHeight-t.EXPANDED_Y-KA.BOTTOM_MENU_H-KA.SUB_MENU_H-KA.RESOURCE_INFO_H}
- get currentView(){
- return this._currentView}
- set currentView(t){
- null!=this._currentView&&this.container.removeChild(this._currentView),this._currentView=t,null!=this._currentView&&(this.container.addChild(this._currentView),this._currentView.x=0,this._currentView.y=0,F3.showItemsInVertical([this._currentView],20,.3))}
- setLanguageChange(t){
- lS.getInstance().removeEventListener("LanguageChange",this.onLanguageChangeBind),t&&(this.onLanguageChangeBind=this.onLanguageChange.bind(this),lS.getInstance().addEventListener("LanguageChange",this.onLanguageChangeBind))}
- onLanguageChange(t=null){
- this._currentView&&this._currentView.updateLanguage()}
- }
- ;
- Kt(A4,"ViewMain"),zt(A4,"instance"),zt(A4,"EXPANDED_Y",320);
- let S4=A4;
- const T4=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblRankTitle",new YD("rank",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblRankNum",new YD("",aD.DEFAULT_COLOR,aD.ORANGE_OUTLINE_FONT_OPTION_28)),zt(this,"lblNameInfo",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblDetail",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnFight",new QL("전투")),zt(this,"onFight"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),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=QL.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.data&&this.onFight&&this.onFight(this.data)}
- ,this.addChild(this.btnFight)}
- setData(t){
- 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.lblNameInfo.text=`${
- t.name}
-  ( Lv.${
- s}
-  )`;
- const e=Number(t.total)||0,n=Number(t.win)||0,h=e-n;
- this.lblDetail.text=`${
- t.point.toLocaleString()}
- `+AG.getText("COMMON_37","점수").charAt(0)+`  ( ${
- e}
- -${
- n}
- -${
- h}
-  )`,this.btnFight.text=AG.getText("GAME_70","전투")}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(T4,"PVPOpponentItemRenderer");
- let C4=T4;
- const k4=class extends vK{
- constructor(){
- super(),zt(this,"index",-1),zt(this,"onClick"),zt(this,"plus",new We(ZA.getTexture("UI_Ekkorr","UI_Plus"))),zt(this,"check",new We(ZA.getTexture("UI_Ekkorr","Base_Check01"))),zt(this,"atkTypeIcon",new We),zt(this,"_showAtkType",!1),zt(this,"_selected",!1),zt(this,"_activated",!0),this.plus.scale=.8,this.plus.x=.5*(this.bg.width-this.plus.width)-5,this.plus.y=.5*(this.bg.height-this.plus.height)+2,this.addChildAt(this.plus,0),this.check.scale=1.2,this.check.x=.5*(this.bg.width-this.check.width)-5,this.check.y=.5*(this.bg.height-this.check.height),this.addChild(this.check),this.check.visible=!1,this.atkTypeIcon.scale=1.15,this.atkTypeIcon.visible=!1,this.addChild(this.atkTypeIcon),this.eventMode="dynamic",this.on("pointertap",this.onTap,this)}
- set showAtkType(t){
- this._showAtkType=t,this.atkTypeIcon.visible=t}
- get showAtkType(){
- return this._showAtkType}
- updateAtkTypeIcon(t){
- if(!this._showAtkType||!t||t.kindNum<=0)return void(this.atkTypeIcon.visible=!1);
- const i=t.dmgType===nx.MAGICAL?"UI_MAGIC_WAND":"UI_SWORD";
- this.atkTypeIcon.texture=ZA.getTexture("UI_Ekkorr",i),this.atkTypeIcon.x=this.bg.width-this.atkTypeIcon.width-22,this.atkTypeIcon.y=this.bg.height-this.atkTypeIcon.height-4,this.atkTypeIcon.visible=!0}
- hidePlusIcon(){
- this.plus.visible=!1}
- hideLevel(){
- this.lblLevel.visible=!1}
- setNumber(t){
- this.lblCount.text=t.toString(),this.lblCount.visible=!0}
- setAlphaToFrame(t){
- this.bg.alpha=t,this.cover.alpha=t,this.setTransAlpha(t)}
- set selected(t){
- this._selected=t,this.check.visible=t,this.plus.visible=!t}
- get selected(){
- return this._selected}
- onTap(t){
- 0!=this._activated&&(KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),this.onClick&&this.onClick(this.index))}
- setDataWith(t,i){
- this.index=t,this.setMode(mK.HERO_PVP),-1==i.kindNum?(this.icon.visible=!1,this.lblLevel.visible=!1,this.lblEnhance.visible=!1,this.lblCount.visible=!1,this.bg.texture=ZA.getTexture("UI_Ekkorr","HeroFrame1}
- "),this.cover.texture=ZA.getTexture("UI_Ekkorr","HeroCover1"),this.atkTypeIcon.visible=!1,this.hideTrans()):(this.icon.visible=!0,super.setData(i),this.updateAtkTypeIcon(i))}
- get activated(){
- return this._activated}
- set activated(t){
- t!=this._activated&&(this._activated=t,this._activated)}
- }
- ;
- Kt(k4,"HeroButton");
- let O4=k4;
- const I4=class t{
- constructor(){
- zt(this,"kindNum",0),zt(this,"trans",0),zt(this,"remaining",0),zt(this,"total",0)}
- static getVO(){
- return t.recycleList.length>0?t.recycleList.pop():new t}
- static set(t,i,s,e,n){
- return t.kindNum=i,t.trans=s,t.remaining=e,t.total=n,t}
- remove(){
- this.kindNum=0,this.trans=0,this.remaining=0,this.total=0,t.recycleList.push(this)}
- static removeAll(t){
- for(const i of t)i.remove();
- t.length=0}
- }
- ;
- Kt(I4,"TowerHeroSelectVO"),zt(I4,"recycleList",[]);
- let x4=I4;
- const N4=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icons"),zt(this,"posList",[]),zt(this,"rowData",[]),zt(this,"badges",[]),zt(this,"atkTypeIcons",[]),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=62,this.bg.visible=!1,this.addChild(this.bg),this.icons=[],this.posList=[];
- for(let t=0;
- t<7;
- t++){
- const i=new vK;
- i.scale=.7,i.x=7+t*(i.width+1),i.y=4,this.addChild(i),this.icons.push(i),this.posList.push(i.x);
- const s=new We;
- s.width=32,s.height=32,s.x=i.x+i.width-37,s.y=i.y,s.visible=!1,this.addChild(s),this.badges.push(s);
- const e=new We;
- e.scale=.8,e.x=i.x+i.width-39,e.y=i.y+i.height-22,e.visible=!1,this.addChild(e),this.atkTypeIcons.push(e)}
- this.posList.push(640)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- setData(i){
- var s;
- const e=i;
- if(e){
- this.rowData=e;
- for(let i=0;
- i<this.icons.length;
- i++){
- const n=this.icons[i];
- if(i<e.length){
- const h=e[i];
- if(n.setMode(mK.TOWER),h.kindNum<=0)n.visible=!0,n.alpha=1,n.tint=16777215,n.hideIcon(),n.hideLevel(),n.hideEnhance(),n.setCountText(""),this.badges[i].visible=!1,this.atkTypeIcons[i].visible=!1;
- else{
- n.setDataWithKindNum(h.kindNum,h.trans),n.visible=!0,h.remaining<=0?n.tint=6710886:n.tint=16777215,n.setCountText(`${
- h.remaining}
- /${
- h.total}
- `),n.lblCount.x=3;
- const e=null==(s=t.skillCodeMap)?void 0:s.get(h.kindNum);
- if("medal"===e?(this.badges[i].texture=ZA.getTexture("UI_Ekkorr","Icon_Medalbuff_02"),this.badges[i].visible=!0):"startwave"===e?(this.badges[i].texture=ZA.getTexture("UI_Ekkorr","Icon_Startwave_02"),this.badges[i].visible=!0):this.badges[i].visible=!1,t.showAttackType&&!this.badges[i].visible){
- const t=vx.getInstance().getBookVO(h.kindNum);
- if(t){
- const s=t.dmgType===nx.MAGICAL?"UI_MAGIC_WAND":"UI_SWORD";
- this.atkTypeIcons[i].texture=ZA.getTexture("UI_Ekkorr",s),this.atkTypeIcons[i].visible=!0}
- else this.atkTypeIcons[i].visible=!1}
- else this.atkTypeIcons[i].visible=!1}
- }
- else n.visible=!1,this.badges[i].visible=!1,this.atkTypeIcons[i].visible=!1}
- }
- }
- onClick(i,s){
- let e=-1;
- for(let t=0;
- t<this.icons.length;
- t++)if(i>this.posList[t]&&i<this.posList[t+1]){
- e=t;
- break}
- if(-1!==e&&e<this.rowData.length){
- const i=this.rowData[e];
- this.icons[e].visible&&t.onHeroClick&&t.onHeroClick(i.kindNum,i.trans)}
- }
- }
- ;
- Kt(N4,"TowerHeroSelectItemRenderer"),zt(N4,"onHeroClick",null),zt(N4,"skillCodeMap",null),zt(N4,"showAttackType",!1);
- let P4=N4;
- const R4=class extends Be{
- constructor(){
- super(),zt(this,"bg",new QD),zt(this,"closeBtn",new We(ZA.getTexture("UI_Ekkorr","UI_Close3"))),zt(this,"lblTitle",new YD("Title",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20)),this.bg.setIndex(6),this.bg.width=640,this.bg.height=60,this.bg.y=-1,this.addChild(this.bg),this.closeBtn.width=50,this.closeBtn.height=50,this.closeBtn.visible=!1,this.closeBtn.x=this.bg.width-this.closeBtn.width-5,this.closeBtn.y=.5*(this.bg.height-this.closeBtn.height),this.addChild(this.closeBtn),this.lblTitle.x=10,this.lblTitle.y=10,this.addChild(this.lblTitle)}
- setTitle(t){
- this.lblTitle.text=t}
- get height(){
- return this.bg.height}
- updateLanguage(){
- }
- }
- ;
- Kt(R4,"BaseSubMenu");
- let D4=R4;
- const L4=class extends _K{
- constructor(){
- super(),zt(this,"receivedIcon"),zt(this,"activatedBg"),zt(this,"_activated",!0),zt(this,"_received",!1),this.activatedBg=new We(ZA.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.activatedBg.visible=!this._activated,this.addChild(this.activatedBg),this.receivedIcon=new We(ZA.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)}
- }
- ;
- Kt(L4,"AchievementRewardItem");
- let G4=L4;
- const B4=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lbl"),zt(this,"_width",100),zt(this,"_widthMax",570),zt(this,"count",0),this.eventMode="none",this.bg=this.getBg(),this.bg.alpha=.9;
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_16;
- t.fill=14405050,t.stroke={
- color:"#333333",width:3,join:"round"}
- ,this.lbl=new YD("0",t.fill,t),this.lbl.x=15,this.lbl.y=12,aD.setLabelWrapWidth(this.lbl,this._widthMax-2*this.lbl.x),this.addChild(this.bg,this.lbl),this.text="tooltip"}
- getBg(){
- return new CM({
- texture:ZA.getTexture("UI_Ekkorr","Btn_Unit_01"),leftWidth:30,topHeight:20,rightWidth:30,bottomHeight:20}
- )}
- set text(t){
- this.lbl.text=t,this._width=this.lbl.width+2*this.lbl.x+5,this._width>this._widthMax&&(this._width=this._widthMax),this.updateBg()}
- updateBg(){
- this.bg.width=this._width,this.bg.height=this.lbl.height+2*this.lbl.y}
- show(t,i,s){
- this.x=i,this.y=s,t&&t.addChild(this),this.startCheckHide()}
- hide(){
- this.parent&&this.parent.removeChild(this)}
- get width(){
- return this._width}
- get widthMax(){
- return this._widthMax}
- set widthMax(t){
- this._widthMax=t,aD.setLabelWrapWidth(this.lbl,this._widthMax-2*this.lbl.x)}
- get height(){
- return this.bg.height}
- startCheckHide(){
- this.count=0,GM.getInstance().add(this.checkHide,this)}
- checkHide(){
- ++this.count>180&&(this.count=0,this.hide(),GM.getInstance().remove(this.checkHide,this))}
- }
- ;
- Kt(B4,"ToolTipBase");
- let U4=B4;
- const F4=class t extends U4{
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- constructor(){
- super()}
- }
- ;
- Kt(F4,"ToolTip"),zt(F4,"_instance");
- let H4=F4;
- const W4=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblIndex"),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","Package_2"))),zt(this,"lblName"),zt(this,"lblProgress"),zt(this,"barBg"),zt(this,"barFill"),zt(this,"rewardContainer",new Be),zt(this,"rewardItems",[]),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:135,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=t.W,this.bg.height=t.H,this.addChild(this.bg),this.lblIndex=new YD("",16764057,aD.DEFAULT_OUTLINE_FONT_OPTION_32),this.addChild(this.icon),this.lblName=new YD("",16764057,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblName),this.barBg=new QD,this.barBg.setIndex(4),this.barBg.width=t.BAR_W,this.barBg.height=t.BAR_H,this.barBg.alpha=.5,this.addChild(this.barBg),this.barFill=new QD,this.barFill.setIndex(3),this.barFill.width=t.BAR_W,this.barFill.height=t.BAR_H,this.addChild(this.barFill),this.lblProgress=new YD("0/0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblProgress),this.addChild(this.rewardContainer);
- for(let t=0;
- t<7;
- t++){
- const t=new G4;
- t.scale.set(.7),t.visible=!1,this.rewardItems.push(t),this.rewardContainer.addChild(t)}
- }
- get width(){
- return t.W}
- get height(){
- return t.H}
- setData(i){
- const s=i.index+1;
- this.lblIndex.text=`${
- s}
- `,this.lblIndex.x=.5*(t.INDEX_AREA_W-this.lblIndex.width),this.lblIndex.y=.5*(this.height-this.lblIndex.height),this.icon.x=.5*(t.INDEX_AREA_W-this.icon.width),this.icon.y=.5*(this.height-this.icon.height);
- const e=AG.getText("GAME_946","총 결제 금액"),n=fU.isUsdCurrency()?`$${
- uU.setComma(i.amount)}
- `:`₩${
- uU.setComma(i.amount)}
- `;
- this.lblName.text=`${
- e}
-  (${
- n}
- )`,this.lblName.height,t.BAR_H,this.lblName.x=140,this.lblName.y=5;
- const h=this.lblName.y+this.lblName.height+5;
- this.barBg.x=140,this.barBg.y=h,this.barFill.x=140,this.barFill.y=h;
- const r=Number(i.amount)>0?Math.min(1,Math.max(0,Number(i.userAmount)/Number(i.amount))):0;
- this.barFill.width=t.BAR_W*r,this.lblProgress.text=`${
- Math.floor(100*r)}
- %`,this.lblProgress.x=140+this.barBg.width-this.lblProgress.width,this.lblProgress.y=this.lblName.y,this.showRewards(i.rewards,1==r),this.rewardContainer.x=140,this.rewardContainer.y=this.barBg.y+this.barBg.height+7}
- showRewards(t,i){
- const s=Math.min(t.length,7);
- let e=0,n=!1;
- for(let h=0;
- h<7;
- h++){
- const r=this.rewardItems[h];
- n=!1,h<s?(r.setDataFrom(t[h]),r.visible=!0,r.x=e,e+=r.width*r.scale.x+5,r.received=i,r.activated=!i,r.type!=bK.ticket||r.subType!=bK.heroGacha&&r.subType!=bK.heroSelect&&r.subType!=bK.treasureGacha&&r.subType!=bK.petSelect||(n=!0)):r.visible=!1,this.setItemEvent(r,n)}
- }
- setItemEvent(t,i){
- t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
- onItemTap(t){
- const i=t.target;
- if(!i)return;
- let s="";
- if(i.type==bK.ticket&&i.subType==bK.heroGacha?s=AG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==bK.ticket&&i.subType==bK.heroSelect?s=AG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==bK.ticket&&i.subType==bK.treasureGacha?s=AG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==bK.ticket&&i.subType==bK.petSelect&&(s=AG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다.")),s){
- const t=H4.getInstance();
- t.text=s;
- let e=this.rewardContainer.x+i.x-20;
- e+t.width+7>this.bg.x+this.bg.width&&(e=this.bg.x+this.bg.width-t.width-7);
- let n=i.y-i.height;
- n<7&&(n=7),t.show(this,e,n)}
- }
- }
- ;
- Kt(W4,"PaymentEventItemRenderer"),zt(W4,"W",534),zt(W4,"H",102),zt(W4,"BAR_W",380),zt(W4,"BAR_H",10),zt(W4,"INDEX_AREA_W",124);
- let j4=W4;
- const $4=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new vB("@",this.width-90,16,aD.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_945","결제 이벤트");
- const t=[AG.getText("GAME_947","목표 금액에 도달하면 보상이 우편으로 발송됩니다."),AG.getText("GAME_948","총 결제 금액은 이벤트 기간 내 결제분만 반영됩니다."),AG.getText("GAME_986","붉은 보석으로 상품 구매 시, 결제 이벤트에 반영됩니다."),AG.getText("GAME_987","웹 마켓에서 진행된 결제는 결제 이벤트에 반영되지 않습니다.")];
- this.lblGuide.text=t.map(t=>`@ ${
- t}
- `).join("\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.4*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt($4,"PaymentEventGuidePopup"),zt($4,"_instance");
- let V4=$4;
- const K4=class t extends aG{
- constructor(){
- super(),zt(this,"bntMonth",new B6(AG.getText("COMMON_482","월간"),215)),zt(this,"btnSpecial",new B6(AG.getText("GAME_1158","스페셜"),215)),zt(this,"tabs"),zt(this,"activeIndex",0),zt(this,"infoBg"),zt(this,"lblPeriod"),zt(this,"lblRemainTitle"),zt(this,"lblRemainTime"),zt(this,"lblTotal"),zt(this,"lblAmount"),zt(this,"btnGuide"),zt(this,"list"),zt(this,"endTime",0),zt(this,"count",0),this.title="결제 이벤트",this.width=580,this.outSideClickHide=!0,this.tabs=[this.btnSpecial,this.bntMonth];
- for(let i=0;
- i<this.tabs.length;
- i++){
- const t=this.tabs[i];
- this.addChild(t);
- const s=i;
- t.onClick=()=>this.switchTab(s)}
- this.layoutTabs(),this.infoBg=new yB,this.infoBg.setIndex(2),this.infoBg.width=this.width-46,this.infoBg.x=23,this.contentContainer.addChild(this.infoBg),this.lblPeriod=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblPeriod),this.lblRemainTitle=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblRemainTitle),this.lblRemainTime=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblRemainTime),this.lblTotal=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblTotal),this.lblAmount=new YD("",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblAmount),this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=this.infoBg.x+this.infoBg.width-this.btnGuide.width-10,this.btnGuide.y=this.infoBg.y+10,this.contentContainer.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- V4.getInstance().showGuide()}
- );
- const t=this.width-46;
- this.list=new R3(j4,t,300),this.list.x=23,this.contentContainer.addChild(this.list),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onAdded(){
- GM.getInstance().add(this.onEnter,this)}
- onRemoved(){
- GM.getInstance().remove(this.onEnter,this)}
- async update(){
- await fU.getEventList()}
- show(){
- null==fU.currentPaymentMonthEvent?this.activeIndex=0:null==fU.currentPaymentSpecialEvent&&(this.activeIndex=1),this.switchTab(this.activeIndex),super.show()}
- updateLayout(){
- this.title=AG.getText("GAME_945","결제 이벤트");
- const t=0==this.activeIndex?fU.currentPaymentSpecialEvent:fU.currentPaymentMonthEvent;
- let i=[];
- if(t){
- const s=t.userAmount,e=t.endTime.replace("T"," ").replace(".000Z","");
- this.endTime=new Date(t.endTime).getTime(),this.endTime,ix.time,this.lblPeriod.text=AG.getText("GAME_545","이벤트 기간")+` : ~ ${
- e}
-  (UTC)`,this.lblRemainTitle.text=AG.getText("COMMON_29","남은 시간")+" : ",this.onEnterUpdate(),this.lblTotal.text=AG.getText("GAME_946","총 결제 금액")+" : ",this.lblAmount.text=fU.isUsdCurrency()?`$${
- uU.setComma(s)}
- `:`₩${
- uU.setComma(s)}
- `,this.lblAmount.textColor=aD.COLOR_BRIGHT_GREEN;
- let n=0;
- for(let h=0;
- h<t.rewards.length;
- h++){
- const e={
- index:h,userAmount:s,rewards:t.rewards[h],amount:fU.isUsdCurrency()?t.amounts[h].usdAmount:t.amounts[h].amount}
- ;
- i.push(e),s>=Number(e.amount)&&(n=h)}
- this.list.dataProvider=i,t.rewards.length<4?this.list.scrollTo(0):this.list.scrollTo(n)}
- this.lblPeriod.x=this.lblRemainTitle.x=this.lblTotal.x=50,this.lblRemainTime.x=this.lblRemainTitle.x+this.lblRemainTitle.width,this.lblAmount.x=this.lblTotal.x+this.lblTotal.width;
- const s=null!=fU.currentPaymentMonthEvent&&null!=fU.currentPaymentSpecialEvent;
- this.tabs.forEach(t=>t.visible=s);
- const e=s?125:70;
- this.infoBg.y=e,this.btnGuide.y=this.infoBg.y+10,this.lblPeriod.y=this.infoBg.y+20,this.lblRemainTitle.y=this.lblRemainTime.y=this.lblPeriod.y+this.lblPeriod.height+10,this.lblTotal.y=this.lblAmount.y=this.lblRemainTitle.y+this.lblRemainTitle.height+10,this.infoBg.height=this.lblTotal.y+this.lblTotal.height-this.infoBg.y+17;
- const n=this.infoBg.y+this.infoBg.height+14;
- this.list.y=n;
- const h=Math.min(352,103*i.length);
- this.list.setListHeight(h),this.height=this.list.y+this.list.height+30}
- onEnter(){
- ++this.count>60&&(this.count=0,this.onEnterUpdate())}
- onEnterUpdate(){
- const t=.001*(this.endTime-ix.time);
- this.lblRemainTime.textColor=t<43200?aD.COLOR_RED:aD.DEFAULT_COLOR,this.lblRemainTime.text=t>0?`${
- uU.displayTimeAsTwoOfDDHHMMSS(t)}
- `:AG.getText("GAME_949","이벤트 종료")}
- switchTab(t){
- this.activeIndex=t;
- for(let i=0;
- i<this.tabs.length;
- i++)this.tabs[i].selected=i===t;
- this.updateLayout()}
- layoutTabs(){
- let t=.5*(this.width-46-2);
- for(const s of this.tabs)s.fitWithinWidth(t,50);
- let i=23;
- for(let s=0;
- s<this.tabs.length;
- s++){
- const e=this.tabs[s];
- i=23+(t+2)*s,e.x=i,e.y=65}
- }
- }
- ;
- Kt(K4,"PaymentEventPopup"),zt(K4,"_instance"),zt(K4,"TAB_HEIGHT",60);
- let z4=K4;
- const q4=class t extends D4{
- constructor(){
- super(),zt(this,"tabs",[]),zt(this,"buttons",[]),zt(this,"activeIndex",0),zt(this,"onTabChange",null),zt(this,"btnPaymentEvent",new mB("UI_Ekkorr","Package_2",.7)),zt(this,"clickedEventInfo",[]),zt(this,"cnt",0),this.btnPaymentEvent.onClick=this.onPaymentEventClick.bind(this),this.addChild(this.btnPaymentEvent),this.btnPaymentEvent.visible=!1,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- async onAdded(){
- this.btnPaymentEvent.hideRedDot();
- const t=await $A.getPaymentEventInfo();
- if(t)for(this.clickedEventInfo=t.split("#").map(t=>""===t?[0]:t.split("|").map(Number));
- this.clickedEventInfo.length<2;
- )this.clickedEventInfo.push([0]);
- else this.clickedEventInfo=Array.from({
- length:2}
- ,()=>[0]);
- GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- async onPaymentEventClick(){
- await z4.getInstance().update(),z4.getInstance().show();
- const t=[fU.currentPaymentSpecialEvent,fU.currentPaymentMonthEvent];
- this.clickedEventInfo=[];
- for(const i of t){
- if(!i){
- this.clickedEventInfo.push([]);
- continue}
- const t=[];
- t.push(i.id);
- for(let s=0;
- s<i.rewards.length;
- s++){
- let e=i.amounts[s].amount;
- fU.isUsdCurrency()&&(e=i.amounts[s].usdAmount),i.userAmount>=e?t.push(1):t.push(0)}
- this.clickedEventInfo.push(t)}
- $A.savePaymentEventInfo(this.clickedEventInfo.map(t=>t.join("|")).join("#"))}
- onFrame(){
- this.cnt-- >0||(this.cnt=30,this.updatePaymentEvent())}
- updatePaymentEvent(){
- if(this.buttons.length<2)return;
- const t=this.buttons[1];
- if(this.buttons[1]&&(fU.isValidEvent(pU.PAYMENT_EVENT)?(this.btnPaymentEvent.visible=!0,fU.currentPaymentSpecialEvent?t.showEventTag(-3,2):t.hideEventTag()):(this.btnPaymentEvent.visible=!1,t.hideEventTag()),this.btnPaymentEvent.visible&&(fU.currentPaymentSpecialEvent||fU.currentPaymentMonthEvent))){
- const t=!!fU.currentPaymentSpecialEvent&&this.clickedEventInfo[0][0]<fU.currentPaymentSpecialEvent.id,i=!!fU.currentPaymentMonthEvent&&this.clickedEventInfo[1][0]<fU.currentPaymentMonthEvent.id;
- t||this.checkNewReach(0)||i||this.checkNewReach(1)?this.btnPaymentEvent.showRedDot():this.btnPaymentEvent.hideRedDot()}
- }
- checkNewReach(t){
- const i=0==t?fU.currentPaymentSpecialEvent:fU.currentPaymentMonthEvent;
- if(!i)return!1;
- for(let s=0;
- s<i.rewards.length;
- s++){
- let e=i.amounts[s].amount;
- if(fU.isUsdCurrency()&&(e=i.amounts[s].usdAmount),0==this.clickedEventInfo[t][s+1]&&i.userAmount>=e)return!0}
- return!1}
- setTabs(t){
- for(const i of this.buttons)this.removeChild(i);
- this.buttons=[],this.tabs=t;
- for(let i=0;
- i<t.length;
- i++){
- const s=t[i],e=new B6(AG.getText(s.labelKey,s.defaultText));
- e.height=50,this.addChild(e),this.buttons[i]=e;
- const n=i;
- e.onClick=()=>this.setActiveTab(n)}
- this.layoutTabs(),this.setActiveTab(0),this.updateLayout()}
- layoutTabs(){
- if(this.buttons.reduce((t,i)=>t+i.width,0)+2*Math.max(0,this.buttons.length-1)<=628){
- let t=634;
- for(let i=this.buttons.length-1;
- i>=0;
- i--){
- const s=this.buttons[i];
- s.height=50,t-=s.width+2,s.x=t,s.y=5}
- }
- else{
- const t=this.buttons.length,i=Math.floor((628-2*(t-1))/t),s=56;
- let e=634;
- for(let n=t-1;
- n>=0;
- n--){
- const t=this.buttons[n];
- t.setMultilineMode(i,s,15),e-=i+2,t.x=e,t.y=.5*(60-s)}
- }
- }
- setActiveTab(t){
- this.activeIndex=t;
- for(let i=0;
- i<this.buttons.length;
- i++)this.buttons[i].selected=i===t;
- this.onTabChange&&this.onTabChange(t)}
- updateLayout(){
- const t=this.buttons[0];
- this.btnPaymentEvent.x=this.lblTitle.x+this.lblTitle.width+10,this.btnPaymentEvent.y=t.y+.5*(t.height-this.btnPaymentEvent.height)}
- updateLanguage(){
- this.setTitle(AG.getText("COMMON_356","상점")),this.setTabs(this.tabs)}
- }
- ;
- Kt(q4,"ShopSubMenu"),zt(q4,"instance");
- let X4=q4;
- const Y4=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("2배속 ",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","Shop_Icon_07"))),zt(this,"btnBuy",new UB("UI_GEM","100")),zt(this,"btnAd",new UB("UI_MOVIE_SMALL",AG.getText("GAME_236","광고"))),zt(this,"lblRemaining",new YD("",11184810,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblCooldown",new YD("",16737894,aD.DEFAULT_FONT_OPTION_16)),zt(this,"requesting",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.x=5,this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.addChild(this.icon),this.lblName.x=135,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.btnBuy.lbl.iconScale=.8,this.btnBuy.color=UB.BROWN,this.btnBuy.height=55,this.btnBuy.width=140,this.btnBuy.x=this.bg.width-this.btnBuy.width-6,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.on("pointerdown",this.onBuy,this),this.btnAd.lbl.iconScale=.6,this.btnAd.color=QL.BROWN,this.btnAd.height=55,this.btnAd.width=140,this.btnAd.x=this.bg.width-this.btnAd.width-6,this.btnAd.y=.5*(this.bg.height-this.btnAd.height),this.addChild(this.btnAd),this.btnAd.onClick=this.onAdWatch.bind(this),this.lblRemaining.y=.5*(this.bg.height-this.lblRemaining.height),this.addChild(this.lblRemaining),this.lblCooldown.visible=!1,this.addChild(this.lblCooldown)}
- async onBuy(t){
- if(1==this.data.kindNum){
- let t=await hD.getInstance().user.buySpeed15();
- if(0==t.success)return void mG.getInstance().showError(t);
- _L.setUser(t.body),UV.getInstance().updateAll(),WG.getInstance().setSpeed(2)}
- }
- async onAdWatch(){
- var t;
- try{
- const t=ez.getInstance().checkApproved();
- if(0==t.approved)return void mG.getInstance().show(t.errorMessage)}
- catch(s){
- const t=AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
- return void mG.getInstance().show(t)}
- if(this.requesting)return;
- if(!(null==(t=this.data)?void 0:t.isAd))return;
- const i=this.data.adsType;
- if(0!==JB.getInstance().getDailyRemaining(i)){
- if(JB.getInstance().isCooldownReady(i)){
- this.requesting=!0;
- try{
- _L.canSkipAds?(TU.trackAd("ad_skip",String(i)),await this.onAdComplete()):(TU.trackAd("ad_try",String(i)),await jL(async()=>{
- TU.trackAd("ad_success",String(i)),await this.onAdComplete()}
- ,i,()=>{
- TU.trackAd("ad_fail",String(i))}
- ))}
- finally{
- this.requesting=!1}
- }
- }
- else mG.getInstance().show(AG.getText("GAME_244","오늘 최대 횟수를 초과했습니다."))}
- async onAdComplete(){
- const t=this.data.adsType,i=await hD.getInstance().ads.watch(t,!0);
- if(!1!==i.success){
- if(aV.getInstance().markDirty(),i.body.user&&(_L.setUserData(i.body.user),UV.getInstance().updateAll()),i.body.ads&&JB.getInstance().setData(i.body.ads),i.body.dungeon&&Rx.getInstance().setData(i.body.dungeon),"speed"===i.body.rewardType&&WG.getInstance().setSpeed(2),5===t){
- const t=JB.getInstance().getDailyRemaining(5),i=JB.getInstance().isCooldownReady(5);
- 0!==t&&i||zii.getInstance().removeAdsGoblins()}
- this.updateRemaining()}
- else mG.getInstance().showError(i)}
- setData(t){
- this.data=t,t.isAd?(this.btnBuy.visible=!1,this.btnAd.visible=!0,this.lblName.text=t.name,this.icon.scale.set(1),this.icon.texture=ZA.getTexture("UI_Ekkorr",t.icon),this.icon.y=.5*(this.bg.height-this.icon.height),this.updateRemaining()):(this.btnBuy.visible=!0,this.btnAd.visible=!1,this.lblRemaining.visible=!1,this.lblName.text=t.name,(1==t.kindNum||2==t.kindNum)&&(this.icon.texture=ZA.getTexture("UI_Ekkorr",t.icon)),this.icon.y=.5*(this.bg.height-this.icon.height),this.btnBuy.text=t.gem.toString()),this.icon.x=60-.5*this.icon.width,this.lblRemaining.visible?aD.setLabelWrapWidth(this.lblName,this.lblRemaining.x-this.lblName.x-5):aD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x-5),this.lblName.y=.5*(this.bg.height-this.lblName.height)}
- updateRemaining(){
- var t;
- (null==(t=this.data)?void 0:t.isAd)&&this.updateCooldown()}
- updateCooldown(){
- var t;
- if(!(null==(t=this.data)?void 0:t.isAd))return;
- const i=this.data.adsType,s=JB.getInstance().getCooldownRemaining(i),e=JB.getInstance().getDailyRemaining(i),n=0===e,h=e>=0&&this.data.dailyMax,r=this.btnAd.x-8,o=.5*this.bg.height;
- if(s>0&&!n){
- const t=Math.ceil(s/1e3),i=Math.floor(t/60),n=t%60,a=`${
- String(i).padStart(2,"0")}
- :${
- String(n).padStart(2,"0")}
- `;
- this.lblCooldown.visible=!0,this.lblCooldown.text=a,this.btnAd.activated=!1,h?(this.lblRemaining.visible=!0,this.lblRemaining.text=`${
- e}
- /${
- this.data.dailyMax}
- `,this.lblCooldown.x=r-this.lblCooldown.width,this.lblCooldown.y=o-this.lblCooldown.height-1,this.lblRemaining.x=r-this.lblRemaining.width,this.lblRemaining.y=o+1):(this.lblRemaining.visible=!1,this.lblCooldown.x=r-this.lblCooldown.width,this.lblCooldown.y=o-.5*this.lblCooldown.height)}
- else this.lblCooldown.visible=!1,this.btnAd.activated=!n,h?(this.lblRemaining.visible=!0,this.lblRemaining.text=`${
- e}
- /${
- this.data.dailyMax}
- `,this.lblRemaining.x=r-this.lblRemaining.width,this.lblRemaining.y=o-.5*this.lblRemaining.height):this.lblRemaining.visible=!1}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(Y4,"ShopItemRenderer");
- let J4=Y4;
- const Q4=class t extends O6{
- constructor(){
- super(),zt(this,"list"),this.list=new zI(J4,635,KA.listHeight),this.list.x=0,this.list.y=0,this.addChild(this.list),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onAdded(){
- GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- var t;
- if(null==(null==(t=this.parent)?void 0:t.parent))return;
- const i=this.list.getItemList();
- for(let s=0;
- s<i.length;
- s++)!1!==i[s].visible&&i[s].updateCooldown()}
- setData(){
- let t=[];
- t.push({
- kindNum:1,icon:"UI_SHOP_SPEED2",name:AG.getValueReplaceMulti("GAME_57",["@@","##"],[20,2],"20분간 게임속도 2배 증가"),gem:100,desc:AG.getValueReplaceMulti("GAME_57",["@@","##"],[20,2],"20분간 게임속도 2배 증가")}
- ),t.push({
- isAd:!0,adsType:2,dailyMax:20,icon:"UI_SHOP_SPEED2",name:AG.getValueReplaceMulti("GAME_228",["##","@@"],[20,2],"{
-  광고보고 20분간 2배속 }
- "),rewardDesc:AG.getValueReplaceMulti("GAME_232",["##","@@","$$"],[10,2,20],"{
-  20분간 2배속, 하루 최대 3회 }
- ")}
- ),t.push({
- isAd:!0,adsType:3,dailyMax:3,icon:"UI_COIN_Big",name:AG.getValueReplace("GAME_229","##",100,"{
-  광고보고 명예코인 100개 }
- "),rewardDesc:AG.getValueReplaceMulti("GAME_233",["##","@@"],[100,3],"{
-  명예코인 100개, 하루 최대 3회 }
- ")}
- ),t.push({
- isAd:!0,adsType:5,dailyMax:10,icon:"UI_SHOP_GEM",name:AG.getValueReplace("GAME_231","##",100,"{
-  광고보고 보석 100개 }
- "),rewardDesc:AG.getValueReplaceMulti("GAME_235",["##","@@"],[100,10],"{
-  보석 100개, 하루 최대 10회 }
- ")}
- ),this.list.dataProvider=t,this.onAdded()}
- get className(){
- return"ShopGemSubView"}
- }
- ;
- Kt(Q4,"ShopGemSubView"),zt(Q4,"instance");
- let Z4=Q4;
- const t8=class extends R6{
- constructor(t="Icon_Web_Market",i="UI_Ekkorr"){
- super(t,i),zt(this,"lbl");
- const s=aD.DEFAULT_OUTLINE_FONT_OPTION_16;
- s.fill=aD.COLOR_BRIGHT_ORANGE,this.lbl=new YD("WEB",s.fill,s),this.lbl.eventMode="none",this.addChild(this.lbl),this.update()}
- update(){
- super.update(),this.lbl&&(this.lbl.x=this.icon.x-.5*this.lbl.width,this.lbl.y=this.icon.y+10),this.pivot.set(.5*this.width,.5*this.height)}
- onDown(){
- this.scale=.95}
- onUp(){
- this.scale=1}
- get width(){
- return this.icon.width}
- get height(){
- return this.icon.height}
- }
- ;
- Kt(t8,"WebMarketButton");
- let i8=t8;
- const s8=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",16777215,aD.ERROR_POPUP_LABEL_OPTION)),zt(this,"btnConfirm",new sG("이동")),zt(this,"btnCancel",new lK("취소")),zt(this,"iconNote"),zt(this,"lblNote",new YD("",aD.COLOR_LIGHT_BROWN,aD.ERROR_POPUP_LABEL_OPTION)),zt(this,"onConfirm",null),zt(this,"onCancel",null),this.title="알림",this.lblMessage.y=90;
- let t=this.lblMessage.getStyle();
- t.align="center",this.lblMessage.setStyle(t),this.iconNote=new We(ZA.getTexture("UI_Ekkorr","UI_Alarm")),this.iconNote.anchor.set(.5),this.iconNote.scale.set(.8),this.iconNote.x=35,t=this.lblNote.getStyle(),t.fontSize=17,t.lineHeight=25,this.lblNote.setStyle(t),this.lblNote.x=this.iconNote.x+.5*this.iconNote.width+5,this.contentContainer.addChild(this.lblMessage,this.btnConfirm,this.btnCancel,this.lblNote,this.iconNote),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.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()}
- onCancelClick(){
- this.hide();
- let t=this.onCancel;
- this.onCancel=null,null!==t&&t()}
- showError(t,i=null,s=null,e=null){
- let n=t.errorMessage,h=AG.getErrorMessage(t.error);
- h&&(n=h),i&&(n+="\n"+i),this.show(n,s,e)}
- show(t,i=null,s=null){
- this.onConfirm=i,this.onCancel=s;
- let e=AG.getText("GAME_939","웹 마켓에서 특별한 상품들을 만나보실 수 있습니다."),n=AG.getText("GAME_940","웹 마켓으로 이동하시겠습니까?"),h="("+AG.getText("GAME_941","구매하신 상품은 인게임 우편으로 전송됩니다.")+")",r=AG.getText("GAME_942","상품 결제 및 구매 문제 발생 시, NEXT MARKET 고객센터로 문의해 주세요.");
- this.lblMessage.text=e+"\n"+n+"\n"+h,this.lblNote.text=r,this.title=AG.getText("COMMON_4","알림"),this.btnConfirm.text=AG.getText("COMMON_65","이동"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout(),super.show(t,i,s)}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnConfirm.y=this.lblMessage.y+this.lblMessage.height+30,this.btnCancel.y=this.btnConfirm.y,this.iconNote.y=this.btnConfirm.y+this.btnConfirm.height+40,this.lblNote.y=this.iconNote.y+.5*(this.iconNote.height-this.lblNote.height),this.height=this.lblNote.y+this.lblNote.height+30}
- getDefaultPositionY(){
- return.3*KA.stageHeight}
- onBackButton(){
- return this.onConfirmClick(),!0}
- }
- ;
- Kt(s8,"LineMarketConfirimPopup"),zt(s8,"_instance");
- let e8=s8;
- const n8=class t extends fz{
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- constructor(){
- super()}
- }
- ;
- Kt(n8,"ShopProductPopup"),zt(n8,"_instance");
- let h8=n8;
- const r8=IK("AppleStoreKit"),o8=class{
- static async canMakePurchases(){
- try{
- return(await r8.canMakePurchases()).allowed}
- catch(t){
- return!1}
- }
- static async getProducts(t){
- try{
- return(await r8.getProducts({
- productIds:t}
- )).products}
- catch(i){
- return[]}
- }
- static async purchase(t){
- try{
- return await r8.purchase({
- productId:t}
- )}
- catch(i){
- const t=(null==i?void 0:i.message)||(null==i?void 0:i.errorMessage)||"";
- return t.toLowerCase().includes("cancelled")||t.toLowerCase().includes("canceled")?{
- success:!1,error:"USER_CANCELED"}
- :{
- success:!1,error:t||"Purchase failed"}
- }
- }
- static async finishTransaction(t){
- try{
- return(await r8.finishTransaction({
- transactionId:t}
- )).finished}
- catch(i){
- return!1}
- }
- static async getPendingTransactions(){
- try{
- return(await r8.getPendingTransactions()).transactions}
- catch(t){
- return[]}
- }
- static async restorePurchases(){
- try{
- return(await r8.restorePurchases()).purchases}
- catch(t){
- return[]}
- }
- }
- ;
- Kt(o8,"AppleStoreKitManager");
- let a8=o8;
- const c8=IK("GooglePlayBilling"),l8=class{
- static async getProducts(t){
- try{
- return(await c8.getProducts({
- productIds:t}
- )).products}
- catch(i){
- return[]}
- }
- static async purchase(t){
- try{
- return await c8.purchase({
- productId:t}
- )}
- catch(i){
- return{
- success:!1,error:(null==i?void 0:i.message)||"Purchase failed"}
- }
- }
- static async restorePurchases(){
- try{
- return(await c8.restorePurchases()).purchases}
- catch(t){
- return[]}
- }
- static async getSubscriptions(t){
- try{
- return(await c8.getSubscriptions({
- productIds:t}
- )).products}
- catch(i){
- return[]}
- }
- static async purchaseSubscription(t,i,s){
- try{
- return await c8.purchaseSubscription({
- productId:t,offerToken:i,basePlanId:s}
- )}
- catch(e){
- return{
- success:!1,error:(null==e?void 0:e.message)||"Subscription purchase failed"}
- }
- }
- static async restoreSubscriptions(){
- try{
- return(await c8.restoreSubscriptions()).subscriptions}
- catch(t){
- return[]}
- }
- }
- ;
- Kt(l8,"GooglePlayBillingManager");
- let u8=l8;
- const d8=class t{
- constructor(){
- zt(this,"_busy",!1)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get busy(){
- return this._busy}
- async hasActiveSubscription(){
- var t;
- try{
- const i=await hD.getInstance().subscription.getMy(!1);
- return!!(null==i?void 0:i.success)&&((null==(t=i.body)?void 0:t.subscriptions)??[]).some(t=>!0===(null==t?void 0:t.isActive))}
- catch(_gt){
- return!1}
- }
- async logPaymentAttempt(t,i,s){
- try{
- await hD.getInstance().shop.paymentAttempt(t,i,s)}
- catch(_gt){
- }
- }
- async buyGoogleSubscription(t,i,s){
- var e,n;
- if(this._busy)mG.getInstance().show(AG.getText("COMMON_491","진행중인 결제가 있습니다."));
- else if(await this.hasActiveSubscription())mG.getInstance().show(AG.getText("COMMON_492","이미 구독중입니다."));
- else{
- this._busy=!0,hz.getInstance().show();
- try{
- await this.logPaymentAttempt(t,"google",i);
- const h=await u8.purchaseSubscription(i);
- if(!h.success||!h.purchaseToken)return void("USER_CANCELED"===h.error||mG.getInstance().show(h.error||AG.getText("COMMON_495","구독 결제 실패")));
- const{
- ServerStatusManager:r}
- =await Jt(async()=>{
- const{
- ServerStatusManager:t}
- =await Promise.resolve().then(()=>kL);
- return{
- ServerStatusManager:t}
- }
- ,void 0);
- if(r.getInstance().development){
- const t=EL.getInstance().getClientData("IN_APP_SHOP_PENDING_TEST");
- if(t&&"Y"==t)return}
- const o=await hD.getInstance().subscription.confirmGoogle(t,i,h.purchaseToken,0);
- if(!o.success)return void mG.getInstance().showError(o);
- (null==(e=o.body)?void 0:e.user)&&(_L.setUserData(o.body.user),UV.getInstance().updateAll());
- const a=EL.getInstance();
- let c=AG.getText("COMMON_493","구독이 활성화되었습니다.")+"\n\n"+AG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
- a.isGoogleClient()||a.isGoogleClientKr()?c+="\n"+AG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):c+="\n"+AG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다."),mG.getInstance().show(c),(null==(n=o.body)?void 0:n.products)&&hK.getInstance().setProducts(o.body.products),s&&s()}
- catch(h){
- mG.getInstance().show((null==h?void 0:h.message)||AG.getText("COMMON_494","구독 결제 오류"))}
- finally{
- this._busy=!1,hz.getInstance().hide()}
- }
- }
- async buyAppleSubscription(t,i,s){
- var e,n,h;
- if(this._busy)mG.getInstance().show(AG.getText("COMMON_491","진행중인 결제가 있습니다."));
- else if(await this.hasActiveSubscription())mG.getInstance().show(AG.getText("COMMON_492","이미 구독중입니다."));
- else{
- this._busy=!0,hz.getInstance().show();
- try{
- await this.logPaymentAttempt(t,"apple",i);
- const r=await a8.purchase(i);
- if(!r.success||!r.receipt)return void("USER_CANCELED"===r.error||mG.getInstance().show(r.error||AG.getText("COMMON_495","구독 결제 실패")));
- const{
- ServerStatusManager:o}
- =await Jt(async()=>{
- const{
- ServerStatusManager:t}
- =await Promise.resolve().then(()=>kL);
- return{
- ServerStatusManager:t}
- }
- ,void 0);
- if(o.getInstance().development){
- const t=EL.getInstance().getClientData("IN_APP_SHOP_PENDING_TEST");
- if(t&&"Y"==t)return}
- const a=await hD.getInstance().subscription.confirmApple(t,r.receipt,0);
- if(!a.success)return void mG.getInstance().showError(a);
- (null==(e=a.body)?void 0:e.user)&&(_L.setUserData(a.body.user),UV.getInstance().updateAll());
- const c=(null==(n=a.body)?void 0:n.transactionId)||r.transactionId;
- c&&await a8.finishTransaction(c);
- const l=EL.getInstance();
- let u=AG.getText("COMMON_493","구독이 활성화되었습니다.")+"\n\n"+AG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
- l.isGoogleClient()||l.isGoogleClientKr()?u+="\n"+AG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):u+="\n"+AG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다."),mG.getInstance().show(u),(null==(h=a.body)?void 0:h.products)&&hK.getInstance().setProducts(a.body.products),s&&s()}
- catch(r){
- mG.getInstance().show((null==r?void 0:r.message)||AG.getText("COMMON_494","구독 결제 오류"))}
- finally{
- this._busy=!1,hz.getInstance().hide()}
- }
- }
- }
- ;
- Kt(d8,"SubscriptionPurchaseManager"),zt(d8,"_instance");
- let f8=d8;
- const p8=class extends tG{
- constructor(t,i=150,s=30){
- super(t,i,s),zt(this,"redRedGemIcon"),zt(this,"redRedGemLabel"),this.color=QL.BROWN,this.redRedGemIcon=new We(ZA.getTexture("UI_Ekkorr","UI_RED_GEM_ICON")),this.redRedGemIcon.y=1,this.container.addChild(this.redRedGemIcon);
- const e=aD.LABEL_OPTION_NO_DROP_SHADOW;
- e.fill=aD.DEFAULT_COLOR,this.redRedGemLabel=new YD("0",e.fill,e),this.redRedGemLabel.y=1,this.container.addChild(this.redRedGemLabel)}
- setData(t,i){
- this.text=t,i?(this.lbl.y=-this.lbl.height-1,this.redRedGemLabel.text=`(      ${
- i}
-  )`,this.redRedGemLabel.x=.5*-this.redRedGemLabel.width,this.redRedGemIcon.x=this.redRedGemLabel.x+7,this.redRedGemIcon.visible=!0,this.redRedGemLabel.visible=!0):(this.redRedGemIcon.visible=!1,this.redRedGemLabel.visible=!1)}
- updateTextColor(){
- super.updateTextColor(),this.redRedGemLabel&&(1==this._activated?(this.redRedGemIcon.alpha=1,this.redRedGemLabel.textColor=this._activatedTextColor):(this.redRedGemIcon.alpha=.7,this.redRedGemLabel.textColor=this._deactivatedTextColor))}
- }
- ;
- Kt(p8,"ShopBuyButton");
- let g8=p8;
- const m8=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","UI_SHOP_GEM"))),zt(this,"limitedBadge",new We(ZA.getTexture("UI_Ekkorr","Shop_Limited"))),zt(this,"lblName"),zt(this,"lblDesc"),zt(this,"rewardContainer",new Be),zt(this,"rewardItems",[]),zt(this,"btnBuy"),zt(this,"purchasing",!1),zt(this,"toolTipShowed",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.x=5,this.bg.width=630,this.bg.height=100,this.addChild(this.bg),this.icon.scale.set(1),this.icon.x=25,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.limitedBadge.scale.set(.8),this.limitedBadge.x=this.icon.x-5,this.limitedBadge.y=this.icon.y+5,this.limitedBadge.visible=!1,this.addChild(this.limitedBadge);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_16;
- t.fill=aD.DEFAULT_COLOR,this.lblName=new YD("",t.fill,t),this.lblName.x=140,this.lblName.y=15,this.addChild(this.lblName);
- const i=aD.DEFAULT_DESC_FONT_OPTION_16;
- i.fill=13421772,this.lblDesc=new YD("",i.fill,i),this.lblDesc.x=140,this.lblDesc.y=45,this.addChild(this.lblDesc),this.rewardContainer.x=140,this.rewardContainer.y=42,this.addChild(this.rewardContainer);
- for(let s=0;
- s<5;
- s++){
- const t=new _K;
- t.scale.set(.7),t.visible=!1,this.rewardItems.push(t),this.rewardContainer.addChild(t)}
- this.btnBuy=new g8("구매",120),this.btnBuy.height=55,this.btnBuy.width=120,this.btnBuy.x=this.bg.width-this.btnBuy.width-6,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.onClick=this.onBuyClick.bind(this),aD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x),aD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x)}
- async onBuyClick(){
- try{
- if(!this.data)return;
- if(this.purchasing)return;
- if(this.purchasing=!0,this.isSubscriptionRow(this.data)){
- if(_L.isAssistantPremium)return this.purchasing=!1,void this.showSubscriptionGuide();
- await this.buySubscription()}
- else{
- if(this.data.productId==eK.Secretary_Day30&&_L.isAssistantPremium){
- let t=AG.getText("GAME_1240","전문비서 고용중입니다.")+"\n"+AG.getText("GAME_1241","전문비서 고용이 만료된 후에 다시 이용하실 수 있습니다.");
- return void mG.getInstance().show(t)}
- "N"==hK.getInstance().nextMarketYn?await cz.getInstance().buyProduct(this.data.productId):h8.getInstance().buyProduct(this.data)}
- this.purchasing=!1}
- catch(_gt){
- this.purchasing=!1}
- }
- isSubscriptionRow(t){
- const i=null==t?void 0:t.rewards;
- return!!Array.isArray(i)&&i.some(t=>"yes"===(null==t?void 0:t.subscribe))}
- async buySubscription(){
- const t=this.data,i=hK.getInstance().getStoreProductIdByProductId(this.data.productId);
- if(!i)return;
- const s=EL.getInstance();
- let e="",n="";
- const h=_L.currentServer;
- if(s.isGoogleClient()||s.isAppleClient()?2==h&&(e=AG.getText("COMMON_546","[오늘도 환생 2] 국내 버전에서 결제를 이용해 주세요."),n=s.isGoogleClient()?s.getGoogleKrLink():s.getAppleKrLink()):(s.isGoogleClientKr()||s.isAppleClientKr())&&3==h&&(e=AG.getText("COMMON_545","[Endless Frontier 2] 글로벌 버전에서 결제를 이용해 주세요."),n=s.isGoogleClientKr()?s.getGoogleGbLink():s.getAppleGbLink()),e){
- const t=oz.getInstance();
- return t.hideCloseBtn(),void t.show(e,()=>{
- n&&window.open(n,"_blank")}
- )}
- const r="1.5.29";
- if("capacitor"==s.envPlatform&&qA.isAppBundleVersionLessThan(r))return void mG.getInstance().show(AG.getText("COMMON_497","최신 버전으로 업데이트 후에 이용해 주세요.")+`\n${
- AG.getText("COMMON_500","최신 버전")}
-  : ${
- r}
- `,()=>{
- const t=EL.getInstance().getStoreLink();
- t&&window.open(t,"_blank")}
- );
- let o;
- try{
- o=structuredClone(t)}
- catch(u){
- o=JSON.parse(JSON.stringify(t))}
- const a=Kt(async()=>{
- lS.getInstance().dispatchCustomEvent("PaymentSuccess",{
- productId:o.productId,productVo:o}
- )}
- ,"onSubscriptionSuccess"),{
- Capacitor:c}
- =await Jt(async()=>{
- const{
- Capacitor:t}
- =await Promise.resolve().then(()=>XK);
- return{
- Capacitor:t}
- }
- ,void 0),l=f8.getInstance();
- "ios"===c.getPlatform()?await l.buyAppleSubscription(this.data.productId,i,a):await l.buyGoogleSubscription(this.data.productId,i,a)}
- setData(t){
- this.data=t,this.toolTipShowed=!1;
- const i=hK.getInstance();
- let s=AG.getText(`PRODUCT_NAME_${
- t.id}
- `,t.name??"");
- TL.getInstance().development&&(s=`${
- t.id}
- . `+s),this.lblName.text=s;
- const e=this.hasDescription(t),n={
- gem:0,honorCoin:1,hammer:2,dungeonTicket:3,hero:4,petTicket:5,ticket:6,pet:7,trans:8}
- ,h=(t.rewards??[]).map(t=>"instant"===t.type&&"dungeonTicket"===t.subType?{
- ...t,type:"dungeonTicket"}
- :"instant"===t.type&&"petTicket"===t.subType?{
- ...t,type:"petTicket"}
- :t).filter(t=>t.type in n).sort((t,i)=>n[t.type]-n[i.type]),r=h.length>0;
- r?this.showRewardMode(h,t.productId):e?this.showDescMode(t):(this.lblDesc.visible=!1,this.rewardContainer.visible=!1),this.lblName.y=r?20-.5*this.lblName.height:e?22-.5*this.lblName.height:.5*(this.bg.height-this.lblName.height),this.icon.texture=ZA.getTexture("UI_Ekkorr",t.iconNames),this.limitedBadge.visible=2===t.sub&&t.maxPurchase>0;
- let o=70,a=i.getPriceStr(t.productId),c=i.getRedGemPrice(t.productId).toString();
- this.isSubscriptionRow(t)?(o=55,c="",_L.isAssistantPremium&&(a=AG.getText("COMMON_547","구독중"))):t.productId==eK.Secretary_Day30&&_L.isAssistantPremium&&(o=55,c="",a=AG.getText("GAME_1239","고용중")),this.btnBuy.height=o,this.btnBuy.setData(a,c),this.btnBuy.x=this.bg.width-this.btnBuy.width-6,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height)}
- hasDescription(t){
- return!!t.descriptionLangIds||!(!t.descriptions||""===t.descriptions.trim())}
- showDescMode(t){
- if(this.lblDesc.visible=!0,this.rewardContainer.visible=!1,t.descriptionLangIds){
- const i=t.descriptionLangIds.split("|").map(t=>AG.getText(t.trim(),""));
- this.lblDesc.text=i.filter(t=>t).join("\n")||t.descriptions||""}
- else this.lblDesc.text=(t.descriptions??"").replace(/\\n/g,"\n");
- let i=45;
- i+this.lblDesc.height>this.bg.y+this.bg.height-3&&(i=this.bg.y+this.bg.height-3-this.lblDesc.height),this.lblDesc.y=i}
- showRewardMode(t,i=-1){
- this.lblDesc.visible=!1,this.rewardContainer.visible=!0;
- const s=Math.min(t.length,5);
- let e=0;
- for(let n=0;
- n<5;
- n++){
- const i=this.rewardItems[n];
- n<s?(i.setDataFrom(t[n]),i.visible=!0,i.x=e,e+=i.width*i.scale.x+5,this.setItemEvent(i,!0)):i.visible=!1}
- }
- onClick(t,i){
- this.data&&(t>=this.btnBuy.x||this.toolTipShowed||h8.getInstance().showProduct(this.data))}
- get height(){
- return this.bg.height+2}
- setDataAndLayout(t){
- t&&(this.setData(t),this.bg.x=0,this.bg.y=0,this.btnBuy.x=this.bg.width-this.btnBuy.width-15,aD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x),aD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x))}
- setItemEvent(t,i){
- t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
- onItemTap(t){
- this.toolTipShowed=!1;
- const i=t.target;
- if(!i)return;
- let s="";
- if(i.type==bK.ticket&&i.subType==bK.heroGacha?s=AG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==bK.ticket&&i.subType==bK.heroSelect?s=AG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==bK.ticket&&i.subType==bK.treasureGacha?s=AG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==bK.ticket&&i.subType==bK.petSelect?s=AG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i.type!=bK.trans||i.subType!=bK.hero&&i.subType!=bK.treasure||(s=AG.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다.")),s){
- this.toolTipShowed=!0;
- const t=H4.getInstance();
- t.text=s;
- let e=this.rewardContainer.x+i.x-20;
- e+t.width+7>this.bg.x+this.bg.width&&(e=this.bg.x+this.bg.width-t.width-7);
- let n=i.y-i.height;
- n<7&&(n=7),t.show(this,e,n)}
- }
- showSubscriptionGuide(){
- const t=EL.getInstance();
- let i=AG.getText("GAME_1240","전문비서 고용중입니다.")+"\n"+AG.getText("GAME_1241","전문비서 고용이 만료된 후에 다시 이용하실 수 있습니다.")+"\n\n"+AG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
- t.isGoogleClient()||t.isGoogleClientKr()?i+="\n"+AG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):(t.isAppleClient()||t.isAppleClientKr())&&(i+="\n"+AG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다."));
- const s=oz.getInstance();
- s.title=AG.getText("COMMON_4","알림"),s.show(i)}
- }
- ;
- Kt(m8,"ShopPayItemRenderer");
- let w8=m8;
- const v8=class t extends O6{
- constructor(){
- super(),zt(this,"btnPackage",new B6(AG.getText("GAME_237","패키지"),150,80)),zt(this,"btnPeriod",new B6(AG.getText("GAME_238","기간상품"),150,80)),zt(this,"btnNormal",new B6(AG.getText("GAME_239","일반상품"),150,80)),zt(this,"tabs"),zt(this,"activeIndex",0),zt(this,"btnLineMarket",new i8),zt(this,"lblRedGem"),zt(this,"list"),zt(this,"productList",null),zt(this,"setDataCallback",null),zt(this,"onPaymentSuccessBind"),this.tabs=[this.btnPackage,this.btnPeriod,this.btnNormal];
- for(let t=0;
- t<this.tabs.length;
- t++){
- const i=this.tabs[t];
- this.addChild(i);
- const s=t;
- i.onClick=()=>this.switchTab(s)}
- this.layoutTabs();
- const i=this.tabs[0];
- this.addChild(this.btnLineMarket),this.btnLineMarket.x=.5*this.btnLineMarket.width+5,this.btnLineMarket.y=i.y+.5*i.height,this.btnLineMarket.onClick=this.onLineMarketBtnClick.bind(this),this.lblRedGem=new GB("UI_RED_GEM_ICON","0",aD.COLOR_RED_GEM,aD.DEFAULT_FONT_OPTION_18),this.lblRedGem.text="0",this.lblRedGem.x=this.btnLineMarket.x+.5*this.btnLineMarket.width+10,this.lblRedGem.y=this.btnLineMarket.y-.5*this.lblRedGem.height+1,this.addChild(this.lblRedGem),"N"==hK.getInstance().nextMarketYn&&(this.btnLineMarket.visible=!1,this.lblRedGem.visible=!1);
- const s=KA.listHeight-t.TAB_HEIGHT;
- this.list=new R3(w8,635,s),this.list.x=0,this.list.y=t.TAB_HEIGHT,this.addChild(this.list),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onAdded(){
- this.setPaymentSuccess(!0)}
- onRemoved(){
- this.setPaymentSuccess(!1)}
- async onLineMarketBtnClick(){
- const t="1.5.31";
- "capacitor"==EL.getInstance().envPlatform&&qA.isAppBundleVersionLessThan(t)?mG.getInstance().show(AG.getText("COMMON_497","최신 버전으로 업데이트 후에 이용해 주세요.")+`\n${
- AG.getText("COMMON_500","최신 버전")}
-  : ${
- t}
- `,()=>{
- const t=EL.getInstance().getStoreLink();
- t&&window.open(t,"_blank")}
- ):e8.getInstance().show("",this.goLineMarket.bind(this))}
- async goLineMarket(){
- var t;
- const i=navigator.userAgent||"",s=/apps-in-toss|supertoss/i.test(i),e=EL.getInstance().isGoogleClient()||EL.getInstance().isGoogleClientKr()||EL.getInstance().isAppleClient()||EL.getInstance().isAppleClientKr();
- let n=null;
- e||s||(n=window.open("about:blank","_blank"));
- try{
- const i=await hD.getInstance().lineNext.getStoreUrl();
- if(!i.success||!(null==(t=i.body)?void 0:t.url)){
- let t=AG.getText("COMMON_83","잠시 후에 이용해 주세요.");
- return mG.getInstance().show(t),void(n&&n.close())}
- const h=i.body.url;
- if(e){
- const{
- Browser:t}
- =await Jt(async()=>{
- const{
- Browser:t}
- =await Promise.resolve().then(()=>Yoi);
- return{
- Browser:t}
- }
- ,void 0);
- return void t.open({
- url:h}
- )}
- if(s)return void(window.location.href=h);
- n?n.location.href=h:window.location.href=h}
- catch(_gt){
- n&&n.close()}
- }
- switchTab(t){
- this.activeIndex=t;
- for(let s=0;
- s<this.tabs.length;
- s++)this.tabs[s].selected=s===t;
- this.productList=null;
- const i=hK.getInstance();
- switch(t){
- case 0:this.productList=i.packageList.filter(t=>t.active&&i.isAvailableForPurchase(t));
- break;
- case 1:this.productList=i.periodList.filter(t=>t.active&&i.isAvailableForPurchase(t));
- break;
- case 2:this.productList=i.normalList.filter(t=>t.active&&i.isAvailableForPurchase(t))}
- this.productList&&(this.list.dataProvider=this.productList),this.list.scrollTo(0)}
- async setData(){
- this.updateRedGem(),await hK.getInstance().getProducts(1),this.switchTab(this.activeIndex),this.updateLanguage(),this.setDataCallback&&(this.setDataCallback(),this.setDataCallback=null)}
- refreshList(){
- this.switchTab(this.activeIndex)}
- layoutTabs(){
- for(const i of this.tabs)i.fitWithinWidth(150,50);
- let t=634;
- for(let i=this.tabs.length-1;
- i>=0;
- i--){
- const s=this.tabs[i];
- t-=152,s.x=t,s.y=3}
- }
- updateLanguage(){
- this.btnPackage.text=AG.getText("GAME_237","패키지"),this.btnPeriod.text=AG.getText("GAME_238","기간상품"),this.btnNormal.text=AG.getText("GAME_239","일반상품"),this.layoutTabs()}
- get className(){
- return"ShopPaySubView"}
- updateRedGem(){
- this.lblRedGem.text=_L.redGem.toFixed(0)}
- getActiveIndex(){
- return this.activeIndex}
- getCurrentProductList(){
- return this.productList}
- clickTab(t){
- t!==this.activeIndex&&(t<0||t>=this.tabs.length||this.switchTab(t))}
- scrollWithProductIds(t){
- if(!this.productList)return;
- if(!t||0==t.length)return;
- const i=this.productList.findIndex(i=>t.includes(i.productId));
- -1!==i&&this.list.scrollTo(i)}
- setPaymentSuccess(t){
- lS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),lS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
- onPaymentSuccess(t){
- this.refreshList(),this.updateRedGem()}
- }
- ;
- Kt(v8,"ShopPaySubView"),zt(v8,"instance"),zt(v8,"TAB_HEIGHT",60);
- let b8=v8;
- const y8=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","UI_SHOP_GEM"))),zt(this,"lblName"),zt(this,"lblDesc"),zt(this,"rewardContainer",new Be),zt(this,"rewardItems",[]),zt(this,"btnBuy",new aK("구매",120)),zt(this,"purchasing",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.x=5,this.bg.width=630,this.bg.height=100,this.addChild(this.bg),this.icon.scale.set(1),this.icon.x=25,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_16;
- t.fill=aD.DEFAULT_COLOR,this.lblName=new YD("",t.fill,t),this.lblName.x=140,this.lblName.y=10,this.addChild(this.lblName);
- const i=aD.DEFAULT_DESC_FONT_OPTION_16;
- i.fill=13421772,this.lblDesc=new YD("",i.fill,i),this.lblDesc.x=140,this.lblDesc.y=45,this.addChild(this.lblDesc),this.rewardContainer.x=140,this.rewardContainer.y=42,this.addChild(this.rewardContainer);
- for(let s=0;
- s<5;
- s++){
- const t=new _K;
- t.scale.set(.7),this.rewardItems.push(t),this.rewardContainer.addChild(t)}
- this.btnBuy.color=QL.BROWN,this.btnBuy.height=55,this.btnBuy.width=120,this.btnBuy.x=this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.onClick=this.onBuy.bind(this),aD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x),aD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x)}
- async onBuy(){
- try{
- if(!this.data)return;
- if(this.purchasing)return;
- this.purchasing=!0,this.isSubscriptionRow(this.data)?await this.buySubscription():await cz.getInstance().buyProduct(this.data.productId),this.purchasing=!1}
- catch(_gt){
- this.purchasing=!1}
- }
- isSubscriptionRow(t){
- const i=null==t?void 0:t.rewards;
- return!!Array.isArray(i)&&i.some(t=>"yes"===(null==t?void 0:t.subscribe))}
- async buySubscription(){
- const t=this.data,i=hK.getInstance().getStoreProductIdByProductId(this.data.productId);
- if(!i)return;
- const s="1.5.29";
- if("capacitor"==EL.getInstance().envPlatform&&qA.isAppBundleVersionLessThan(s))return void mG.getInstance().show(AG.getText("COMMON_497","최신 버전으로 업데이트 후에 이용해 주세요.")+`\n${
- AG.getText("COMMON_500","최신 버전")}
-  : ${
- s}
- `,()=>{
- const t=EL.getInstance().getStoreLink();
- t&&window.open(t,"_blank")}
- );
- let e;
- try{
- e=structuredClone(t)}
- catch(o){
- e=JSON.parse(JSON.stringify(t))}
- const n=Kt(async()=>{
- lS.getInstance().dispatchCustomEvent("PaymentSuccess",{
- productId:e.productId,productVo:e}
- )}
- ,"onSubscriptionSuccess"),{
- Capacitor:h}
- =await Jt(async()=>{
- const{
- Capacitor:t}
- =await Promise.resolve().then(()=>XK);
- return{
- Capacitor:t}
- }
- ,void 0),r=f8.getInstance();
- "ios"===h.getPlatform()?await r.buyAppleSubscription(this.data.productId,i,n):await r.buyGoogleSubscription(this.data.productId,i,n)}
- setData(t){
- this.data=t;
- const i=t;
- this.lblName.text=AG.getText(`PRODUCT_NAME_${
- i.id}
- `,t.name??"");
- const s=i.descriptionLangIds.split("|").map(t=>AG.getText(t.trim(),""));
- this.lblDesc.text=s.filter(t=>t).join("\n")||i.descriptions||"",i.productId==eK.Secretary?this.showDescMode(i):this.showRewardMode(i.rewards);
- let e=i.iconNames;
- e||(e="Package_1"),this.icon.texture=ZA.getTexture("UI_Ekkorr",e),this.btnBuy.text=hK.getInstance().getPriceStr(i.productId),this.btnBuy.x=this.bg.width-this.btnBuy.width-10}
- showRewardMode(t){
- this.lblDesc.visible=!1,this.rewardContainer.visible=!0;
- const i=Math.min(t.length,5);
- let s=0;
- for(let e=0;
- e<5;
- e++){
- const n=this.rewardItems[e];
- e<i?(n.setDataFrom(t[e]),n.visible=!0,n.x=s,s+=n.width*n.scale.x+5):n.visible=!1}
- }
- showDescMode(t){
- if(this.lblDesc.visible=!0,this.rewardContainer.visible=!1,t.descriptionLangIds){
- const i=t.descriptionLangIds.split("|").map(t=>AG.getText(t.trim(),""));
- this.lblDesc.text=i.filter(t=>t).join("\n")||t.descriptions||""}
- else this.lblDesc.text=(t.descriptions??"").replace(/\\n/g,"\n");
- let i=45;
- i+this.lblDesc.height>this.bg.y+this.bg.height-3&&(i=this.bg.y+this.bg.height-3-this.lblDesc.height),this.lblDesc.y=i}
- onClick(t,i){
- this.data&&(t>=this.btnBuy.x||h8.getInstance().showProduct(this.data))}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(y8,"ShopPayItemRendererStage");
- let _8=y8;
- const M8=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"subscribeLabel"),zt(this,"onPaymentSuccessBind");
- const t=KA.listHeight-0;
- this.list=new R3(_8,635,t),this.list.x=0,this.list.y=0,this.addChild(this.list),this.subscribeLabel=new GB("UI_Alarm","0",aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_16),this.subscribeLabel.visible=!1,this.subscribeLabel.textOffsetX=-1,this.subscribeLabel.textOffsetY=-2,this.subscribeLabel.text=AG.getText("COMMON_504","구독"),this.subscribeLabel.x=10,this.subscribeLabel.y=10,this.addChild(this.subscribeLabel),this.subscribeLabel.eventMode="dynamic",this.subscribeLabel.on("pointertap",this.onSubscribeLabelTap,this),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onAdded(){
- this.setPaymentSuccess(!0)}
- onRemoved(){
- this.setPaymentSuccess(!1)}
- get className(){
- return"ShopPaySubViewStage"}
- async setData(){
- this.updateSubscribeLabel();
- let t=0,i=KA.listHeight-t;
- this.subscribeLabel.visible&&(t=this.subscribeLabel.y+this.subscribeLabel.height+5,i=KA.listHeight-t),this.list.y=t,this.list.setListHeight(i);
- const s=hK.getInstance();
- this.list.dataProvider=s.reviewShopList}
- refreshList(){
- this.setData()}
- updateSubscribeLabel(){
- let t=!1;
- _L.isAssistantPremium?t=!0:"capacitor"==EL.getInstance().envPlatform&&(hK.getInstance().getByProductId(eK.Secretary)||(t=!0)),this.subscribeLabel.visible=t}
- onSubscribeLabelTap(t){
- const i=EL.getInstance();
- let s=AG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
- i.isGoogleClient()||i.isGoogleClientKr()?s+="\n\n"+AG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):s+="\n\n"+AG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다.");
- const e=oz.getInstance();
- e.title=AG.getText("COMMON_4","알림"),e.show(s)}
- setPaymentSuccess(t){
- lS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),lS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
- onPaymentSuccess(t){
- this.refreshList()}
- }
- ;
- Kt(M8,"ShopPaySubViewStage"),zt(M8,"instance");
- let E8=M8;
- const A8=class t extends x6{
- constructor(){
- super(),zt(this,"subViews",[]),zt(this,"shopSubMenu",X4.getInstance()),zt(this,"currentIndex",-1),this.shopSubMenu.setTabs([{
- labelKey:"GAME_197",defaultText:"보석상점"}
- ,{
- labelKey:"GAME_198",defaultText:"결제상점"}
- ]),this.subViews=[Z4.getInstance(),b8.getInstance()];
- const t=this.shopSubMenu.height;
- for(const i of this.subViews)i.y=t,i.visible=!1,this.addChild(i);
- if(hK.getInstance().isReviewShop()){
- const i=E8.getInstance();
- i.y=t,i.visible=!1,this.addChild(i)}
- this.addChild(this.shopSubMenu),this.shopSubMenu.onTabChange=t=>this.switchTab(t),this.switchTab(0)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- switchTab(t){
- this.currentIndex=t;
- for(let i=0;
- i<this.subViews.length;
- i++)this.subViews[i].visible=i===t;
- this.checkShopForReview()}
- checkShopForReview(){
- if(hK.getInstance().isReviewShop()){
- const t=E8.getInstance();
- 1==this.currentIndex?(this.subViews[this.currentIndex].visible=!1,t.setData(),t.visible=!0):t.visible=!1}
- }
- setData(){
- this.shopSubMenu.updateLanguage(),this.subViews[0].setData(),this.subViews[1].setData(),this.checkShopForReview()}
- get className(){
- return"ShopView"}
- getCurrentViewClassName(){
- for(let t=0;
- t<this.subViews.length;
- t++)if(this.subViews[t].visible)return this.subViews[t].className;
- return""}
- getCurrentIndex(){
- return this.currentIndex}
- clickTab(t){
- t!==this.currentIndex&&(t<0||t>=this.subViews.length||(this.switchTab(t),this.shopSubMenu.setActiveTab(t)))}
- updateLanguage(){
- this.setData(),this.shopSubMenu.updateLanguage()}
- }
- ;
- Kt(A8,"ShopView"),zt(A8,"instance");
- let S8=A8;
- const T8=class t{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- }
- isQuestView(){
- var t;
- return null!=S4.getInstance().currentView&&"QuestView"==(null==(t=S4.getInstance().currentView)?void 0:t.className)}
- isHeroView(){
- var t;
- return null!=S4.getInstance().currentView&&"HeroView"==(null==(t=S4.getInstance().currentView)?void 0:t.className)}
- isHeroSubView(){
- var t,i;
- return 0!=this.isHeroView()&&"HeroSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isHeroRosterView(){
- var t,i;
- return 0!=this.isHeroView()&&"HeroRosterView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isHeroHireSubView(){
- var t,i;
- return 0!=this.isHeroView()&&"HeroHireSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isCastleView(){
- var t;
- return null!=S4.getInstance().currentView&&"CastleView"==(null==(t=S4.getInstance().currentView)?void 0:t.className)}
- isCastleSubView(){
- var t,i;
- return 0!=this.isCastleView()&&"CastleSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isCastleUpgradeSubView(){
- var t,i;
- return 0!=this.isCastleView()&&"CastleUpgradeSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isTreasureView(){
- var t;
- return null!=S4.getInstance().currentView&&"TreasureView"==(null==(t=S4.getInstance().currentView)?void 0:t.className)}
- isTreasureSubView(){
- var t,i;
- return 0!=this.isTreasureView()&&"TreasureSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isTreasureInventorySubView(){
- var t,i;
- return 0!=this.isTreasureView()&&"TreasureInventorySubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isTreasureShopSubView(){
- var t,i;
- return 0!=this.isTreasureView()&&"TreasureShopSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isBattleView(){
- var t;
- return null!=S4.getInstance().currentView&&"BattleView"==(null==(t=S4.getInstance().currentView)?void 0:t.className)}
- isHonorShopSubView(){
- var t,i;
- return 0!=this.isBattleView()&&"HonorShopSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isDungeonSubView(){
- var t,i;
- if(0==this.isBattleView())return!1;
- const s=null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className;
- return"DungeonSubView"==s||"DungeonDetailSubView"==s}
- isPVPBattlePopup(){
- return this.isDetailPopupView("PVPBattlePopup")}
- isDailyBattleSubView(){
- var t,i;
- return 0!=this.isBattleView()&&"DailyBattleSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isTowerSubView(){
- var t,i;
- return 0!=this.isBattleView()&&"TowerSubView"==(null==(i=null==(t=S4.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- isShopView(){
- var t;
- return null!=S4.getInstance().currentView&&"ShopView"==(null==(t=S4.getInstance().currentView)?void 0:t.className)}
- isShopGemSubView(){
- return 0!=this.isShopView()&&"ShopGemSubView"==S8.getInstance().getCurrentViewClassName()}
- isShopPaySubView(){
- return 0!=this.isShopView()&&"ShopPaySubView"==S8.getInstance().getCurrentViewClassName()}
- isDetailPopupView(t){
- const i=LV.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}
- isPetPopup(){
- return this.isDetailPopupView("PetPopup")}
- isGuildPopup(){
- return this.isDetailPopupView("Guild2Popup")}
- isInventoryPopup(){
- return this.isDetailPopupView("InventoryPopup")}
- }
- ;
- Kt(T8,"ViewUtil"),zt(T8,"instance");
- let C8=T8;
- const k8=class t extends Be{
- constructor(){
- super(),zt(this,"dimOverlay"),zt(this,"bg"),zt(this,"btnClose"),zt(this,"resourceInfoParent",null),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
- ),this.bg.width=640,this.addChild(this.bg),this.y=Math.min(KA.safeHeight-750,KA.viewMainY),this.bg.height=KA.safeHeight-this.y;
- const t=KA.stageWidth,i=KA.stageHeight;
- this.dimOverlay=(new Gf).rect(-t,-i,3*t,3*i).fill({
- color:0,alpha:.5}
- ),this.dimOverlay.y=-this.y,this.dimOverlay.eventMode="static",this.addChildAt(this.dimOverlay,0),this.btnClose=new L6,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.onCloseBtnClick.bind(this),this.addChild(this.btnClose),this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
- onAdded(){
- S4.getInstance().visible=!1,this.resourceInfoParent=UV.getInstance().parent,this.addChild(UV.getInstance()),t.refreshDimVisibility()}
- onRemoved(){
- S4.getInstance().visible=!0,this.resourceInfoParent?(this.resourceInfoParent.addChild(UV.getInstance()),this.resourceInfoParent=null):S4.getInstance().addChild(UV.getInstance()),UV.ensureMounted(S4.getInstance()),0==LV.getInstance().children.length&&(C8.getInstance().isTreasureView()||C8.getInstance().isDungeonSubView()?UV.getInstance().setMode(GV.DUNGEON):UV.getInstance().setMode(GV.NORMAL)),t.refreshDimVisibility()}
- static refreshDimVisibility(){
- const i=LV.getInstance();
- let s=-1;
- for(let e=0;
- e<i.children.length;
- e++){
- const n=i.children[e];
- if(n instanceof t&&n.visible){
- s=e;
- break}
- }
- for(let e=0;
- e<i.children.length;
- e++){
- const n=i.children[e];
- n instanceof t&&(n.dimOverlay.visible=e===s)}
- }
- addResources(){
- this.addChild(UV.getInstance())}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- get activated(){
- return!!this.parent}
- updateLanguage(){
- }
- get className(){
- return""}
- onCloseBtnClick(){
- this.hide()}
- show2(t=null){
- this.parent||(t||(t=LV.getInstance()),t.addChild(this))}
- hide(){
- null!=this.parent&&this.parent.removeChild(this)}
- onBackButton(){
- return!!(this.btnClose&&this.btnClose.parent&&this.btnClose.visible)&&(this.onCloseBtnClick(),!0)}
- }
- ;
- Kt(k8,"BaseDetailViewPopup");
- let O8=k8;
- const I8=class{
- constructor(t){
- zt(this,"state"),zt(this,"initialSeed"),zt(this,"callCount",0),this.initialSeed=t>>>0,this.state=this.initialSeed}
- next(){
- this.state=this.state+1831565813>>>0;
- let t=this.state;
- return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),this.callCount++,((t^t>>>14)>>>0)/4294967296}
- nextInt(t){
- return Math.floor(this.next()*t)}
- range(t,i){
- return t+this.next()*(i-t)}
- chance(t){
- return this.next()<t}
- pick(t){
- return t[this.nextInt(t.length)]}
- getSeed(){
- return this.initialSeed}
- getCallCount(){
- return this.callCount}
- getState(){
- return this.state}
- }
- ;
- Kt(I8,"BattleRandom");
- let x8=I8;
- const N8=class extends We{
- constructor(t,i){
- super(ZA.getTexture(t,i)),this.anchor.set(.5,1),this.eventMode="none"}
- setTexture(t,i){
- this.texture=ZA.getTexture(t,i)}
- }
- ;
- Kt(N8,"MapObject");
- let P8=N8;
- const R8=class{
- constructor(){
- zt(this,"player"),zt(this,"friendList",[]),zt(this,"enemyList",[]),zt(this,"weaponList",[]),zt(this,"effectList",[]),zt(this,"unitScale",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 x8(Date.now())),zt(this,"determinismCaptureEnabled",!1),zt(this,"frameHashes",[]),zt(this,"eventHashes",[]),zt(this,"FRAME_HASH_INTERVAL",60),zt(this,"execute",Kt(()=>{
- const t=performance.now();
- this.executePlayer(),this.executeUnits(this.friendList),this.executeEnemies(),this.executeWeapons(),this.executeEffects(),this.checkProgress(),this.captureFrameHashIfNeeded(),this.updatePerformance(t),this.battleTime++,++this.sortCooldown>=this.SORT_INTERVAL&&(this.sortCooldown=0,this.updateZIndexSorting())}
- ,"execute"))}
- initRandom(t){
- this.random=new x8(t??Date.now())}
- enableDeterminismCapture(){
- this.determinismCaptureEnabled=!0,this.frameHashes=[],this.eventHashes=[]}
- getDeterminismReport(){
- var t,i;
- return{
- seed:(null==(t=this.random)?void 0:t.getSeed())??0,randomCallCount:(null==(i=this.random)?void 0:i.getCallCount())??0,frames:this.frameHashes,events:this.eventHashes}
- }
- captureFrameHashIfNeeded(){
- this.determinismCaptureEnabled&&this.battleTime%this.FRAME_HASH_INTERVAL===0&&this.frameHashes.push({
- frame:this.battleTime,hash:this.computeStateHash()}
- )}
- captureEventHash(t,i){
- this.determinismCaptureEnabled&&this.eventHashes.push({
- frame:this.battleTime,type:t,hash:this.hashString(`${
- t}
- :${
- i}
- `)}
- )}
- computeStateHash(){
- let t=2166136261;
- const i=Kt(i=>{
- t^=0|i,t=Math.imul(t,16777619)>>>0}
- ,"mix"),s=Kt(t=>{
- var s,e,n,h;
- if(!t||t.removed)return;
- const r=t;
- i(100*t.x|0),i(100*t.y|0),i(100*r.hp|0),i(100*r.attackCoolDown|0),i(100*r.skillCoolDown|0),i(0|r.initDelay),i(100*r.mana|0),i(100*r.currentFrame|0),i(0|r.state),i(0|r.stateChangeTimer),i(0|r.numStun),i(0|r.numFreeze),i(0|r.numPoison),i(0|r.numCurse),i(0|r.numBinding),i(0|r.numShock),i(0|r.direction);
- const o=r.target;
- i(o?0|o.id||0|o.kindNum:0),i(0|(null==(s=r.buffList)?void 0:s.length)||0),i(0|(null==(e=r.dotDamageList)?void 0:e.length)||0),i(0|(null==(n=r.dotHealList)?void 0:n.length)||0),i(0|(null==(h=r.effectList)?void 0:h.length)||0)}
- ,"mixUnit");
- this.player&&s(this.player);
- for(let e=0;
- e<this.friendList.length;
- e++)s(this.friendList[e]);
- for(let e=0;
- e<this.enemyList.length;
- e++)s(this.enemyList[e]);
- return this.random&&(i(this.random.getState()),i(this.random.getCallCount())),t>>>0}
- hashString(t){
- let i=2166136261;
- for(let s=0;
- s<t.length;
- s++)i^=t.charCodeAt(s),i=Math.imul(i,16777619)>>>0;
- return i>>>0}
- updateZIndexSorting(){
- const t=tB.getInstance();
- t.sortableChildren||(t.sortableChildren=!0);
- const i=t.children;
- for(let s=0;
- s<i.length;
- s++)i[s].zIndex=i[s].y;
- t.sortChildren()}
- executePlayer(){
- this.player&&this.player.execute()}
- executeUnits(t){
- t.length>0&&(0===this.battleTime||this.battleTime);
- for(let i=t.length-1;
- i>=0;
- i--){
- const s=t[i];
- s.isCastle?(s.removed&&(s.removed=!1),s.execute()):s.removed?(s.remove(),t.splice(i,1)):(s.execute(),s.removed&&(s.remove(),t.splice(i,1)))}
- }
- executeEnemies(){
- this.enemyList.length>0&&(0===this.battleTime||this.battleTime);
- for(let t=this.enemyList.length-1;
- t>=0;
- t--){
- const i=this.enemyList[t];
- i.removed?(this.onEnemyKilled(i),i.remove(),this.enemyList.splice(t,1)):(i.execute(),i.removed&&(this.onEnemyKilled(i),i.remove(),this.enemyList.splice(t,1)))}
- }
- executeWeapons(){
- 60===this.battleTime&&this.weaponList.length;
- for(let t=this.weaponList.length-1;
- t>=0;
- t--){
- const i=this.weaponList[t];
- i.removed?this.weaponList.splice(t,1):(i.execute(),i.removed&&this.weaponList.splice(t,1))}
- }
- executeEffects(){
- for(let t=this.effectList.length-1;
- t>=0;
- t--){
- const i=this.effectList[t];
- i.removed?this.effectList.splice(t,1):(i.execute(),i.removed&&this.effectList.splice(t,1))}
- }
- onEnemyKilled(t){
- this.killCount++}
- cleanup(){
- for(let e=this.weaponList.length-1;
- e>=0;
- e--)this.weaponList[e].remove();
- this.weaponList.length=0;
- const t=lB.getInstance();
- for(let e=t.children.length-1;
- e>=0;
- e--)t.children[e].remove();
- for(let e=this.effectList.length-1;
- e>=0;
- e--)this.effectList[e].remove();
- this.effectList.length=0;
- const i=YG.getInstance();
- for(let e=i.children.length-1;
- e>=0;
- e--){
- const t=i.children[e];
- "function"==typeof(null==t?void 0:t.remove)?t.remove():i.removeChild(t)}
- for(let e=this.friendList.length-1;
- e>=0;
- e--){
- const t=this.friendList[e];
- t.target&&t.target.removeBlockedEnemy(t),t.clearBlockedEnemies(),t.remove()}
- this.friendList.length=0;
- for(let e=this.enemyList.length-1;
- e>=0;
- e--){
- const t=this.enemyList[e];
- t.target&&t.target.removeBlockedEnemy(t),t.clearBlockedEnemies(),t.remove()}
- this.enemyList.length=0,QG.getInstance().removeChildren(),QG.getInstance().visible=!0,qG.getInstance().removeChildren(),qG.getInstance().visible=!0;
- const s=tB.getInstance();
- for(let e=s.children.length-1;
- e>=0;
- e--){
- const t=s.children[e];
- t instanceof S0||t instanceof P8||t.removeFromParent()}
- this.killCount=0,this.battleTime=0,this.sortCooldown=0,this.frameTime=0,this.avgFrameTime=0,this.frameCount=0,this.totalDamageDealt=0,this.totalDamageTaken=0,this.nextSummonedUnitId=1e6}
- allocateSummonedUnitId(){
- return this.nextSummonedUnitId++}
- addWeapon(t){
- this.weaponList.includes(t)||this.weaponList.push(t)}
- removeWeapon(t){
- const i=this.weaponList.indexOf(t);
- -1!==i&&this.weaponList.splice(i,1)}
- addEffect(t){
- this.effectList.includes(t)||this.effectList.push(t)}
- removeEffect(t){
- const i=this.effectList.indexOf(t);
- -1!==i&&this.effectList.splice(i,1)}
- getNearbyUnits(t,i,s,e){
- return s}
- updatePerformance(t){
- this.frameTime=performance.now()-t,this.avgFrameTime=(this.avgFrameTime*this.frameCount+this.frameTime)/(this.frameCount+1),this.frameCount++,this.frameCount%this.PERFORMANCE_LOG_INTERVAL===0&&(this.avgFrameTime,this.avgFrameTime,this.avgFrameTime=0,this.frameCount=0)}
- getPerformanceStats(){
- return{
- avgFrameTime:this.avgFrameTime,fps:1e3/Math.max(this.avgFrameTime,.001),unitCount:this.friendList.length+this.enemyList.length}
- }
- getPlayer(){
- return this.player}
- getEnemyList(){
- return this.enemyList}
- getFriendList(){
- return this.friendList}
- getBattleType(){
- return this.battleType}
- getStatistics(){
- return{
- killCount:this.killCount,surviveTime:this.battleTime,damageDealt:this.totalDamageDealt,damageTaken:this.totalDamageTaken}
- }
- hide(){
- this.player&&(this.player.visible=!1);
- for(const e of this.friendList)e.visible=!1;
- for(const e of this.enemyList)e.visible=!1;
- for(let e=this.weaponList.length-1;
- e>=0;
- e--)this.weaponList[e].remove();
- this.weaponList.length=0;
- const t=lB.getInstance();
- for(let e=t.children.length-1;
- e>=0;
- e--)t.children[e].remove();
- for(let e=this.effectList.length-1;
- e>=0;
- e--)this.effectList[e].remove();
- this.effectList.length=0;
- const i=YG.getInstance();
- for(let e=i.children.length-1;
- e>=0;
- e--)i.children[e].remove();
- qG.getInstance().removeChildren();
- const s=tB.getInstance();
- for(let e=s.children.length-1;
- e>=0;
- e--){
- const t=s.children[e];
- t instanceof P8||(t instanceof S0?t.battleController!==this&&null!=t.battleController||(t.visible=!1):t.removeFromParent())}
- }
- showUnit(t){
- if(!t)return;
- t.visible=!0,t.renderable=!0,t.alpha=1;
- const i=t.sp;
- i&&(i.visible=!0)}
- show(){
- this.showUnit(this.player);
- for(const t of this.friendList)this.showUnit(t);
- for(const t of this.enemyList)this.showUnit(t)}
- }
- ;
- Kt(R8,"BaseBattleController");
- let D8=R8;
- const L8=class extends D8{
- constructor(){
- super(...arguments),zt(this,"battleEnded",!1),zt(this,"battleResult",null)}
- checkProgress(){
- this.battleEnded||(this.checkVictory()?this.handleVictory():this.checkDefeat()&&this.handleDefeat())}
- handleVictory(){
- this.battleEnded||(this.battleEnded=!0,this.battleResult={
- success:!0,statistics:this.getStatistics()}
- ,this.onVictoryCallback(),this.scheduleReturnToMain())}
- handleDefeat(){
- this.battleEnded||(this.battleEnded=!0,this.battleResult={
- success:!1,statistics:this.getStatistics()}
- ,this.onDefeatCallback(),this.scheduleReturnToMain())}
- scheduleReturnToMain(){
- setTimeout(()=>{
- this.returnToMain()}
- ,3e3)}
- cleanup(){
- super.cleanup(),this.battleEnded=!1,this.battleResult=null}
- isBattleEnded(){
- return this.battleEnded}
- getBattleResult(){
- return this.battleResult}
- }
- ;
- Kt(L8,"SingleBattleController");
- let G8=L8;
- const B8=class t{
- constructor(i){
- zt(this,"lsKey"),zt(this,"btnContainer",null),zt(this,"btnLabel",null),zt(this,"cycle",Kt(()=>{
- const i=WD.subBattleSpeed??1,s=t.SPEED_CYCLE,e=s.indexOf(i),n=s[e<0?0:(e+1)%s.length];
- this.apply(n),this.saveSpeed(n)}
- ,"cycle")),this.lsKey=i}
- loadSavedSpeed(){
- try{
- const i=localStorage.getItem(this.lsKey);
- if(!i)return 1;
- const s=Number(i);
- return Number.isFinite(s)?t.SPEED_CYCLE.indexOf(s)<0?1:s:1}
- catch{
- return 1}
- }
- saveSpeed(t){
- try{
- localStorage.setItem(this.lsKey,String(t))}
- catch{
- }
- }
- apply(t){
- WD.subBattleSpeed=t,WD.speedMode=t,WG.getInstance().setSpeed(t),this.btnLabel&&(this.btnLabel.text=`x${
- t}
- `)}
- enter(){
- this.apply(this.loadSavedSpeed())}
- exit(){
- null!=WD.subBattleSpeed&&(WD.subBattleSpeed=null,Jt(async()=>{
- const{
- TopMenu:t}
- =await Promise.resolve().then(()=>_ii);
- return{
- TopMenu:t}
- }
- ,void 0).then(({
- TopMenu:t}
- )=>{
- t.getInstance().updateGameSpeed()}
- ).catch(()=>{
- WD.speedMode=1,WG.getInstance().setSpeed(1)}
- ))}
- attachButton(t,i,s){
- this.detachButton();
- const e=new Be;
- e.x=i,e.y=s;
- const n=new Gf;
- n.roundRect(0,0,66,33,16.5).fill({
- color:0,alpha:.55}
- ).stroke({
- width:1.2,color:16777215,alpha:.4}
- ),e.addChild(n);
- const h=new Wg({
- text:`x${
- WD.subBattleSpeed??1}
- `,style:{
- fontFamily:"Arial",fontSize:21,fontWeight:"700",fill:16777215,stroke:{
- color:0,width:2}
- }
- }
- );
- h.anchor.set(.5,.5),h.x=33,h.y=16.5,e.addChild(h),e.eventMode="static",e.cursor="pointer",e.hitArea=new Pi(0,0,66,33),e.on("pointerup",this.cycle),t.addChild(e),this.btnContainer=e,this.btnLabel=h}
- detachButton(){
- this.btnContainer&&(this.btnContainer.off("pointerup",this.cycle),this.btnContainer.parent&&this.btnContainer.parent.removeChild(this.btnContainer),this.btnContainer.destroy({
- children:!0}
- ),this.btnContainer=null,this.btnLabel=null)}
- }
- ;
- Kt(B8,"BattleSpeedHelper"),zt(B8,"SPEED_CYCLE",[1,2]);
- let U8=B8;
- const F8=class extends _K{
- constructor(){
- super(),zt(this,"receivedIcon"),zt(this,"activatedBg"),zt(this,"_activated",!0),zt(this,"_received",!1),this.activatedBg=new We(ZA.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.activatedBg.visible=!this._activated,this.addChild(this.activatedBg),this.receivedIcon=new We(ZA.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)}
- }
- ;
- Kt(F8,"PvPRewardItem");
- let H8=F8;
- const W8=class t extends aG{
- constructor(){
- super(),zt(this,"reward"),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"btnConfirm",new kU("","","확인",.8,200,70)),zt(this,"onConfirm",null),zt(this,"autoReturnTimer",null),this.title=AG.getText("GAME_76","무한 랭킹전"),this.reward=new H8,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=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!1}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onConfirmClick(){
- this.clearAutoReturnTimer(),N9t.getInstance().returnToIdleBattle(),this.hide(),S4.getInstance().addChild(UV.getInstance()),mnt.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=AG.getText("GAME_76","무한 랭킹전"),this.lblMessage.text=AG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=AG.getText("COMMON_1","확인");
- const i=Number(EL.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()}
- displayGemGathering(t,i){
- let s=t.getGlobalPosition(),e=KA.stage.toLocal(s);
- l5t.getInstance().getGemInAchieve(e.x+.5*t.width-15,e.y+.5*t.height-20,i,Math.min(30,i),this,1.2)}
- showDefeat(t=null){
- this.onConfirm=t,this.title=AG.getText("GAME_76","무한 랭킹전"),this.lblMessage.text=AG.getText("COMMON_387","전투에 패배하였습니다."),this.lblMessage.textColor=16711680,this.btnConfirm.color=kU.RED,this.btnConfirm.text=AG.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}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt(W8,"PVPResultPopup"),zt(W8,"_instance"),zt(W8,"AUTO_RETURN_DELAY",5e3);
- let j8=W8;
- const $8=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblReward",new GB("Core1","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblGemReward",new GB("UI_GEM","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblHonorReward",new GB("PVP_COIN_ON","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnConfirm",new kU("","","확인",.8,200,70)),zt(this,"onConfirm",null),zt(this,"autoReturnTimer",null),this.title=AG.getText("GAME_74","던전"),this.lblMessage.align="center",this.lblMessage.y=85,this.contentContainer.addChild(this.lblMessage,this.lblReward,this.lblGemReward,this.lblHonorReward,this.btnConfirm),this.lblGemReward.visible=!1,this.lblHonorReward.visible=!1,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onConfirmClick(){
- this.hide()}
- hide(){
- this.clearAutoReturnTimer(),N9t.getInstance().returnToIdleBattle(),super.hide(),this.onConfirm&&(this.onConfirm(),this.onConfirm=null)}
- startAutoReturnTimer(){
- this.clearAutoReturnTimer(),this.autoReturnTimer=setTimeout(()=>{
- this.onConfirmClick()}
- ,t.AUTO_RETURN_DELAY)}
- clearAutoReturnTimer(){
- this.autoReturnTimer&&(clearTimeout(this.autoReturnTimer),this.autoReturnTimer=null)}
- showVictory(t=null,i=0,s=0,e=""){
- if(this.onConfirm=t,this.title=e||AG.getText("GAME_74","던전"),this.lblMessage.text=AG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=AG.getText("COMMON_1","확인"),i>0&&s>0){
- this.lblReward.visible=!0,this.lblReward.texture=ZA.getTexture("UI_Ekkorr",`Core${
- i}
- `);
- const t=s,e=KN.getInstance().getGameplayMultiplier(xN.Core),n=Math.floor(t*e)-t;
- this.lblReward.text=n>0?`${
- $D.displayLargeNumberAsAlphabet(t)}
-  + ${
- $D.displayLargeNumberAsAlphabet(n)}
- `:$D.displayLargeNumberAsAlphabet(t)}
- else this.lblReward.visible=!1;
- this.lblGemReward.visible=!1,this.lblHonorReward.visible=!1,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
- showTowerVictory(t=null,i=0,s=0,e=""){
- this.onConfirm=t,this.title=e||AG.getText("GAME_74","던전"),this.lblMessage.text=AG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.lblReward.visible=!1;
- const n=i>0||s>0;
- this.lblGemReward.visible=n,this.lblHonorReward.visible=n,this.lblGemReward.text=`${
- i}
- `,this.lblHonorReward.text=`${
- s}
- `,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
- showGuildWarBattle(t,i=null,s=0,e=0,n=""){
- this.onConfirm=i,this.title=n||AG.getText("GAME_74","던전"),this.lblMessage.text=AG.getText(t?"COMMON_386":"COMMON_387",t?"전투에 승리하였습니다.":"전투에 패배하였습니다."),this.lblMessage.textColor=t?65280:16711680,this.btnConfirm.color=t?kU.GREEN:kU.RED,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.lblReward.visible=!1;
- const h=s>0||e>0;
- this.lblGemReward.visible=h,this.lblHonorReward.visible=h,this.lblGemReward.text=`${
- s}
- `,this.lblHonorReward.text=`${
- e}
- `,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
- showDefeat(t=null,i=""){
- this.onConfirm=t,this.title=i||AG.getText("GAME_74","던전"),this.lblMessage.text=AG.getText("COMMON_387","전투에 패배하였습니다."),this.lblMessage.textColor=16711680,this.btnConfirm.color=kU.RED,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.lblReward.visible=!1,this.lblGemReward.visible=!1,this.lblHonorReward.visible=!1,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85;
- let t=this.lblMessage.y+this.lblMessage.height+20;
- if(this.lblReward.visible&&(this.lblReward.x=.5*(this.width-this.lblReward.width),this.lblReward.y=t,t=this.lblReward.y+this.lblReward.height+20),this.lblGemReward.visible||this.lblHonorReward.visible){
- const i=20,s=this.lblGemReward.width+i+this.lblHonorReward.width,e=.5*(this.width-s);
- this.lblGemReward.x=e,this.lblGemReward.y=t,this.lblHonorReward.x=e+this.lblGemReward.width+i,this.lblHonorReward.y=t,t=t+this.lblGemReward.height+20}
- this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+60}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt($8,"DungeonResultPopup"),zt($8,"_instance"),zt($8,"AUTO_RETURN_DELAY",5e3);
- let V8=$8;
- const K8=class extends Gf{
- render(t,i){
- if(this.clear(),!_0.enabled)return;
- const s=_0.CELL_SIZE,e=Math.ceil(t/s),n=Math.ceil(i/s);
- for(let h=0;
- h<n;
- h++)for(let t=0;
- t<e;
- t++){
- const i=t*s+s/2,e=h*s+s/2;
- _0.isBlocked(i,e)&&this.rect(t*s,h*s,s,s)}
- this.fill({
- color:16724804,alpha:.35}
- )}
- }
- ;
- Kt(K8,"TerrainDebugOverlay");
- let z8=K8;
- const q8=class{
- constructor(){
- zt(this,"dx",null),zt(this,"dy",null),zt(this,"gridW",0),zt(this,"gridH",0),zt(this,"CELL_SIZE",_0.CELL_SIZE)}
- build(t,i,s){
- const e=this.CELL_SIZE;
- this.gridW=Math.ceil(t/e),this.gridH=Math.ceil(i/e);
- const n=this.gridW*this.gridH;
- this.dx=new Int8Array(n),this.dy=new Int8Array(n);
- const h=new Int32Array(n);
- h.fill(2147483647);
- const r=4*n,o=new Int32Array(r),a=new Int32Array(r);
- let c=0;
- const l=Kt((t,i)=>{
- let s=c++;
- for(o[s]=t,a[s]=i;
- s>0;
- ){
- const t=s-1>>1;
- if(o[t]<=o[s])break;
- const i=o[t];
- o[t]=o[s],o[s]=i;
- const e=a[t];
- a[t]=a[s],a[s]=e,s=t}
- }
- ,"push"),u=Math.max(0,Math.floor(s.x/e)),d=Math.max(0,Math.floor(s.y/e)),f=Math.min(this.gridW-1,Math.ceil((s.x+s.w)/e)-1),p=Math.min(this.gridH-1,Math.ceil((s.y+s.h)/e)-1),g=e/2;
- for(let b=d;
- b<=p;
- b++)for(let t=u;
- t<=f;
- t++){
- const i=t*e+g,s=b*e+g;
- if(_0.isBlocked(i,s))continue;
- const n=b*this.gridW+t;
- h[n]=0,l(0,n)}
- const m=[1,-1,0,0,1,1,-1,-1],w=[0,0,1,-1,1,-1,1,-1],v=[10,10,10,10,14,14,14,14];
- for(;
- c>0;
- ){
- const t=o[0],i=a[0];
- if(c--,c>0){
- o[0]=o[c],a[0]=a[c];
- let t=0;
- for(;
- ;
- ){
- const i=2*t+1,s=2*t+2;
- let e=t;
- if(i<c&&o[i]<o[e]&&(e=i),s<c&&o[s]<o[e]&&(e=s),e===t)break;
- const n=o[e];
- o[e]=o[t],o[t]=n;
- const h=a[e];
- a[e]=a[t],a[t]=h,t=e}
- }
- if(t>h[i])continue;
- const s=i%this.gridW,n=(i-s)/this.gridW;
- for(let o=0;
- o<8;
- o++){
- const i=s+m[o],a=n+w[o];
- if(i<0||i>=this.gridW||a<0||a>=this.gridH)continue;
- if(_0.isBlocked(i*e+g,a*e+g))continue;
- const u=a*this.gridW+i,d=t+v[o];
- d<h[u]&&(h[u]=d,this.dx[u]=-m[o],this.dy[u]=-w[o],c<r&&l(d,u))}
- }
- }
- sample(t,i){
- if(null===this.dx||null===this.dy)return{
- dx:0,dy:0}
- ;
- const s=Math.floor(t/this.CELL_SIZE),e=Math.floor(i/this.CELL_SIZE);
- if(s<0||s>=this.gridW||e<0||e>=this.gridH)return{
- dx:0,dy:0}
- ;
- const n=e*this.gridW+s;
- return{
- dx:this.dx[n],dy:this.dy[n]}
- }
- dispose(){
- this.dx=null,this.dy=null,this.gridW=0,this.gridH=0}
- }
- ;
- Kt(q8,"FlowField");
- let X8=q8;
- var Y8=(t=>(t[t.HORIZONTAL=1]="HORIZONTAL",t[t.VERTICAL=2]="VERTICAL",t))(Y8||{
- }
- );
- const J8=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.GUILD_WAR),zt(this,"currentAllyOffsets",[]),zt(this,"currentEnemyOffsets",[]),zt(this,"battleMode",1),zt(this,"mapIndex",1),zt(this,"zoomLevel",.7),zt(this,"prevGameScale",1),zt(this,"prevGameX",0),zt(this,"prevGameY",0),zt(this,"prevBackgroundVisible",!0),zt(this,"prevZoomEnabled",!0),zt(this,"hasViewStateBackup",!1),zt(this,"heroKindNums",[60,58,78,54,56]),zt(this,"soldierKindNums",[1,4,7,20,13]),zt(this,"enemyHeroKindNums",[78,78,78,78,78]),zt(this,"enemySoldierKindNums",[20,9,14,8,21]),zt(this,"allyCorpSoldierTiers",[null,null,null,null,null]),zt(this,"enemyCorpSoldierTiers",[null,null,null,null,null]),zt(this,"allyKnightLevel",1),zt(this,"enemyKnightLevel",1),zt(this,"enemyHeroLevelBonus",0),zt(this,"onComplete",null),zt(this,"onAfterReturnToIdle",null),zt(this,"lastReward",{
- gem:0,honorCoin:0}
- ),zt(this,"spawnedVOs",[]),zt(this,"allyHeroes",[]),zt(this,"enemyHeroes",[]),zt(this,"initialAllyCount",0),zt(this,"initialEnemyCount",0),zt(this,"terrainOverlay",null),zt(this,"allyFlowField",null),zt(this,"enemyFlowField",null),zt(this,"aliveCounter",null),zt(this,"hudAllyText",null),zt(this,"hudEnemyText",null),zt(this,"hudTimerText",null),zt(this,"hudAllyFill",null),zt(this,"hudEnemyFill",null),zt(this,"hudBarDivider",null),zt(this,"hudBarInnerX",0),zt(this,"hudBarInnerY",0),zt(this,"hudBarInnerW",0),zt(this,"hudBarInnerH",0),zt(this,"damageMeterRaised",!1),zt(this,"meterToggleBtnArrow",null),zt(this,"damageMeter",null),zt(this,"meterEntries",[]),zt(this,"separationGrid",new Map),zt(this,"separationFlatList",[]),zt(this,"antijamTimer",0),zt(this,"numBlockReleased",!1),zt(this,"btnSpeed",null),zt(this,"btnSpeedLabel",null)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- setMode(t){
- this.battleMode=t,this.mapIndex=2===t?2:1}
- setMapIndex(t){
- this.mapIndex=t,this.battleMode=2===t||3===t?2:1}
- setZoomLevel(t){
- this.zoomLevel=t,this.unitScale=t,this.applyZoom()}
- cycleZoom(){
- const i=t.ZOOM_LEVELS;
- let s=i.indexOf(this.zoomLevel);
- s<0&&(s=0);
- const e=(s+1)%i.length;
- this.setZoomLevel(i[e])}
- applyZoom(){
- const t=this.zoomLevel;
- this.unitScale=t;
- const i=DB.getInstance();
- i.scale.set(1,1),i.x=0,i.y=KA.SAFE_AREA_TOP;
- const s=KG.getInstance();
- s.scale.set(1,1),s.x=0,s.y=0;
- for(const e of this.friendList)e.scale.set(t,t);
- for(const e of this.enemyList)e.scale.set(t,t)}
- captureViewState(){
- const t=DB.getInstance();
- this.prevGameScale=t.scale.x,this.prevGameX=t.x,this.prevGameY=t.y,this.prevBackgroundVisible=KG.getInstance().visible,this.prevZoomEnabled=zii.zoomEnabled,this.hasViewStateBackup=!0}
- restoreViewState(){
- if(!this.hasViewStateBackup)return;
- const t=DB.getInstance();
- t.scale.set(this.prevGameScale,this.prevGameScale),t.x=this.prevGameX,t.y=this.prevGameY;
- const i=KG.getInstance();
- i.visible=this.prevBackgroundVisible,i.scale.set(1,1),i.x=0,i.y=0,zii.zoomEnabled=this.prevZoomEnabled,this.hasViewStateBackup=!1}
- async setupTestTerrain(){
- const i=t.FIELD_WIDTH,s=t.FIELD_HEIGHT,e=2===this.battleMode,n=1/_0.CELL_SIZE,h=`mask${
- this.mapIndex}
- `,r=ZA.getTexture("GW_BG2",h);
- if(!r)return;
- if(!_0.loadFromTexture(i,s,r,n,0,0))return;
- _0.enabled=!0,_0.pruneTrappedIslands();
- const o=60,a=e?{
- x:0,y:0,w:i,h:o}
- :{
- x:i-o,y:0,w:o,h:s}
- ,c=e?{
- x:0,y:s-o,w:i,h:o}
- :{
- x:0,y:0,w:o,h:s}
- ;
- this.allyFlowField=new X8,this.allyFlowField.build(i,s,a),this.enemyFlowField=new X8,this.enemyFlowField.build(i,s,c),this.terrainOverlay=new z8,this.terrainOverlay.render(i,s),this.terrainOverlay.visible=!1,DB.getInstance().addChild(this.terrainOverlay)}
- teardownTerrain(){
- this.terrainOverlay&&(this.terrainOverlay.removeFromParent(),this.terrainOverlay.destroy({
- children:!0}
- ),this.terrainOverlay=null),this.allyFlowField&&(this.allyFlowField.dispose(),this.allyFlowField=null),this.enemyFlowField&&(this.enemyFlowField.dispose(),this.enemyFlowField=null),_0.unload()}
- snapUnitsToTerrain(){
- if(!_0.enabled)return;
- const t=Kt(t=>{
- if(!t.isAir&&!t.isCastle){
- if(_0.isBlocked(t.x,t.y)){
- const i=_0.snapToNearestPassable(t.x,t.y,160);
- t.x=i.x,t.y=i.y}
- if(_0.isBlocked(t.xDefault,t.yDefault)){
- const i=_0.snapToNearestPassable(t.xDefault,t.yDefault,160);
- t.xDefault=i.x,t.yDefault=i.y}
- if(t.isPatrolMode&&_0.isBlocked(t.patrolPoint.x,t.patrolPoint.y)){
- const i=_0.snapToNearestPassable(t.patrolPoint.x,t.patrolPoint.y,160);
- t.patrolPoint.x=i.x,t.patrolPoint.y=i.y}
- if(t.needsReposition&&_0.isBlocked(t.repositionX,t.repositionY)){
- const i=_0.snapToNearestPassable(t.repositionX,t.repositionY,160);
- t.repositionX=i.x,t.repositionY=i.y}
- }
- }
- ,"snap");
- for(const i of this.friendList)t(i),i.flowField=this.allyFlowField;
- for(const i of this.enemyList)t(i),i.flowField=this.enemyFlowField}
- setTeams(i){
- const s=t.CORP_COUNT;
- if(i.allyHeroes)for(let t=0;
- t<s;
- t++)t<i.allyHeroes.length&&(this.heroKindNums[t]=i.allyHeroes[t]);
- if(i.allySoldiers)for(let t=0;
- t<s;
- t++)t<i.allySoldiers.length&&(this.soldierKindNums[t]=i.allySoldiers[t]);
- if(i.enemyHeroes)for(let t=0;
- t<s;
- t++)t<i.enemyHeroes.length&&(this.enemyHeroKindNums[t]=i.enemyHeroes[t]);
- if(i.enemySoldiers)for(let t=0;
- t<s;
- t++)t<i.enemySoldiers.length&&(this.enemySoldierKindNums[t]=i.enemySoldiers[t]);
- if(i.allyCorpSoldierTiers)for(let t=0;
- t<s;
- t++)this.allyCorpSoldierTiers[t]=i.allyCorpSoldierTiers[t]??null;
- else for(let t=0;
- t<s;
- t++)this.allyCorpSoldierTiers[t]=null;
- if(i.enemyCorpSoldierTiers)for(let t=0;
- t<s;
- t++)this.enemyCorpSoldierTiers[t]=i.enemyCorpSoldierTiers[t]??null;
- else for(let t=0;
- t<s;
- t++)this.enemyCorpSoldierTiers[t]=null;
- this.allyKnightLevel=Math.max(0,i.allyKnightLevel??1),this.enemyKnightLevel=Math.max(0,i.enemyKnightLevel??1),this.enemyHeroLevelBonus=Math.max(0,i.enemyHeroLevelBonus??0)}
- async startBattle(){
- this.cleanup(),this.lastReward={
- gem:0,honorCoin:0}
- ,KN.getInstance().setBattleContext(NN.GuildPvp),this.initRandom(),DB.getInstance().setDay();
- const i=[t.OFFSET_FRONT,t.OFFSET_FRONT,t.OFFSET_FRONT,t.OFFSET_REAR,t.OFFSET_REAR];
- this.currentAllyOffsets=[...i],this.currentEnemyOffsets=[...i],this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.captureViewState();
- const s=2===this.battleMode,e=`gwbg${
- this.mapIndex}
- `;
- KG.getInstance().setMapBackground("GW_BG2",e),KG.getInstance().visible=!0,zii.zoomEnabled=!1,await this.setupTestTerrain();
- for(let n=0;
- n<t.CORP_COUNT;
- n++)s?await this.setupCorpVertical(n,!0):await this.setupCorp(n,!0);
- for(let n=0;
- n<t.CORP_COUNT;
- n++)s?await this.setupCorpVertical(n,!1):await this.setupCorp(n,!1);
- this.setupEnemyLists(),this.snapUnitsToTerrain(),this.initialAllyCount=this.friendList.length,this.initialEnemyCount=this.enemyList.length,N9t.getInstance().switchToBattle(this),KG.getInstance().setMapBackground("GW_BG2",e),KG.getInstance().visible=!0,zii.zoomEnabled=!1,this.applyZoom(),this.updateZIndexSorting(),this.enterGuildWarSpeed(),this.setupDamageMeter(),this.setupAliveCounter(),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),WG.getInstance().add(this.execute,this),WG.getInstance().add(this.clampHeroPosition,this)}
- clampHeroPosition(){
- if(2===this.battleMode){
- const i=t.CORP_X_MIN,s=t.CORP_X_MAX;
- for(const t of this.allyHeroes)t.x<i?t.x=i:t.x>s&&(t.x=s);
- for(const t of this.enemyHeroes)t.x<i?t.x=i:t.x>s&&(t.x=s)}
- else{
- const t=200,i=920;
- for(const s of this.allyHeroes)s.y<t?s.y=t:s.y>i&&(s.y=i);
- for(const s of this.enemyHeroes)s.y<t?s.y=t:s.y>i&&(s.y=i)}
- }
- computeCorpY(i,s){
- const e=t.CORP_COUNT,n=(t.SOLDIER_ROWS-1)*t.SOLDIER_Y_SPACING/2,h=200+n,r=940-n;
- return h+(t.HORIZONTAL_CORP_ROW[i]??0)/(e-1)*(r-h)}
- async setupCorp(i,s){
- const e=this.computeCorpY(i,s),n=s?this.heroKindNums[i]:this.enemyHeroKindNums[i],h=s?this.soldierKindNums[i]:this.enemySoldierKindNums[i],r=s?this.allyKnightLevel:this.enemyKnightLevel,o=s?r:r+this.enemyHeroLevelBonus,a=s?this.currentAllyOffsets[i]:this.currentEnemyOffsets[i];
- if(n>0){
- const i=t.ALLY_HERO_X+a-t.HORIZONTAL_START_OFFSET,h=s?i:t.FIELD_WIDTH-i+t.HORIZONTAL_ENEMY_EXTRA_OFFSET,r=await this.spawnUnit(n,h,e,s,!1,o);
- r&&(s?this.allyHeroes.push(r):this.enemyHeroes.push(r))}
- const c=s?this.allyCorpSoldierTiers[i]:this.enemyCorpSoldierTiers[i],l=Array.isArray(c),u=[];
- for(let d=0;
- d<t.SOLDIER_COLS;
- d++)for(let i=0;
- i<t.SOLDIER_ROWS;
- i++){
- const n=t.ALLY_SOLDIER_X_START+d*t.SOLDIER_X_SPACING+a-t.HORIZONTAL_START_OFFSET,h=s?n:t.FIELD_WIDTH-n+t.HORIZONTAL_ENEMY_EXTRA_OFFSET,r=e+-108+i*t.SOLDIER_Y_SPACING;
- u.push({
- x:h,y:r}
- )}
- if(l){
- let t=0;
- const i=u.length;
- for(const e of c){
- if(!e||e.kindNum<=0||e.count<=0)continue;
- const n=r+(e.plusLevel||0),h=Math.min(e.count,i-t);
- for(let i=0;
- i<h;
- i++){
- const i=u[t++];
- await this.spawnUnit(e.kindNum,i.x,i.y,s,!0,n)}
- if(t>=i)break}
- }
- else if(h>0)for(const t of u)await this.spawnUnit(h,t.x,t.y,s,!0)}
- async setupCorpVertical(i,s){
- const e=s?this.heroKindNums[i]:this.enemyHeroKindNums[i],n=s?this.soldierKindNums[i]:this.enemySoldierKindNums[i],h=s?this.allyKnightLevel:this.enemyKnightLevel,r=s?h:h+this.enemyHeroLevelBonus,o=i>=t.REAR_CORP_START_INDEX_M2,a=o?t.REAR_CORP_PERP_COUNT_M2:t.FRONT_CORP_PERP_COUNT_M2,c=o?t.REAR_CORP_ALONG_COUNT_M2:t.FRONT_CORP_ALONG_COUNT_M2,l=o?t.REAR_CORP_X_SPACING_M2:t.FRONT_CORP_X_SPACING_M2,u=o?t.REAR_CORP_Y_SPACING_M2:t.FRONT_CORP_Y_SPACING_M2,d=t.SOLDIER_HERO_GAP_M2,f=t.CORP_X_START_M2[i],p=f+(a-1)*l/2,g=o?t.OFFSET_REAR:t.OFFSET_FRONT,m=s?t.ALLY_FRONT_Y_M2-g:t.ENEMY_FRONT_Y_M2+g,w=(c-1)*u+d,v=s?m+w:m-w;
- if(e>0){
- const t=await this.spawnUnit(e,p,v,s,!1,r);
- t&&(s?this.allyHeroes.push(t):this.enemyHeroes.push(t))}
- const b=[];
- for(let t=c-1;
- t>=0;
- t--)for(let i=0;
- i<a;
- i++){
- const e=f+i*l,n=t*u,h=s?m+n:m-n;
- b.push({
- x:e,y:h}
- )}
- const y=s?this.allyCorpSoldierTiers[i]:this.enemyCorpSoldierTiers[i];
- if(Array.isArray(y)){
- let t=0;
- const i=b.length;
- for(const e of y){
- if(!e||e.kindNum<=0||e.count<=0)continue;
- const n=h+(e.plusLevel||0),r=Math.min(e.count,i-t);
- for(let i=0;
- i<r;
- i++){
- const i=b[t++];
- await this.spawnUnit(e.kindNum,i.x,i.y,s,!0,n)}
- if(t>=i)break}
- }
- else if(n>0)for(const t of b)await this.spawnUnit(n,t.x,t.y,s,!0)}
- async spawnUnit(i,s,e,n,h,r){
- const o=vx.getInstance().getBookVO(i);
- if(!o)return null;
- const a=await g3.getInstance().getUnit(o.className);
- a.battleController=this;
- const c=t.TRANS_OVERRIDES.get(i)??0;
- let l;
- l="number"==typeof r&&Number.isFinite(r)?Math.max(0,r):(n?t.ALLY_LEVEL_OVERRIDES:t.ENEMY_LEVEL_OVERRIDES).get(i)??1;
- const u=yx.getVO();
- if(u.id=-1,u.kindNum=i,u.trans=c,u.level=l,u.enhance=0,this.spawnedVOs.push(u),a.setData(u),this.applyRawBvoStats(a,i,c,l),a.numBlock=0,a.initDelay=0,a.showTombstone=!1,a.maxRevive=0,a.reviveInterval=0,a.totalDamageDealt=0,a.aggressiveRetarget=!0,a.detectRange=h?1333:1500,a.detectRange2=a.detectRange*a.detectRange,h&&a.unitType===sx.RANGE){
- const i=t.SOLDIER_RANGE_MULT_MIN,s=t.SOLDIER_RANGE_MULT_MAX,e=i+this.random.next()*(s-i);
- a.atkRange=a.atkRange*e,a.atkRange2=a.atkRange*a.atkRange;
- const n=t.RANGE_SOLDIER_MOVE_SPD_MULT_MIN,h=t.RANGE_SOLDIER_MOVE_SPD_MULT_MAX,r=n+this.random.next()*(h-n);
- a.orgMoveSpd=a.moveSpd=a.moveSpd*r}
- if(!h&&a.unitType===sx.MELEE){
- const i=t.MELEE_HERO_HP_MULT;
- a.baseMaxHp*=i,a.orgMaxHp*=i,a.maxHp*=i,a.hp=a.maxHp,a.health=a.maxHp}
- if(h&&a.unitType===sx.MELEE){
- const i=t.MELEE_SOLDIER_HP_MULT;
- a.baseMaxHp*=i,a.orgMaxHp*=i,a.maxHp*=i,a.hp=a.maxHp,a.health=a.maxHp}
- if(a.unitType===sx.MELEE){
- const i=h?t.MELEE_SOLDIER_ATK_RANGE_BONUS:t.MELEE_HERO_ATK_RANGE_BONUS;
- a.atkRange=t.MELEE_ATK_RANGE+i,a.atkRange2=a.atkRange*a.atkRange}
- if(a.unitType===sx.MELEE){
- const i=t.MELEE_MOVE_SPD_MULT_MIN,s=t.MELEE_MOVE_SPD_MULT_MAX,e=i+this.random.next()*(s-i);
- a.orgMoveSpd=a.moveSpd=a.moveSpd*e}
- if(!h&&a.unitType===sx.RANGE){
- const i=t.RANGE_HERO_ATK_RANGE_MULT;
- a.atkRange=a.atkRange*i,a.atkRange2=a.atkRange*a.atkRange}
- a.attackCoolDown=0,a.skillCallIndex=0,a.attackCallIndex=0,a.attackIndex=0,2===this.battleMode&&(s=Math.max(t.CORP_X_MIN,Math.min(t.CORP_X_MAX,s))),a.x=s,a.y=e;
- const d=t.MARCH_ADVANCE_DISTANCE;
- let f=0;
- if(h&&a.unitType===sx.MELEE){
- const i=t.MELEE_SOLDIER_LANE_OFFSET;
- f=(2*this.random.next()-1)*i,a.__antiJamDir=this.random.next()<.5?-1:1,a.__antiJamDriftFrames=0}
- const p=t.FIELD_WIDTH,g=t.FIELD_HEIGHT,m=10;
- if(2===this.battleMode){
- const i=s+f,h=n?e-d:e+d;
- a.xDefault=Math.max(t.CORP_X_MIN,Math.min(t.CORP_X_MAX,i)),a.yDefault=Math.max(m,Math.min(g-m,h))}
- else{
- const t=n?s+d:s-d,i=e+f;
- a.xDefault=Math.max(m,Math.min(p-m,t)),a.yDefault=Math.max(m,Math.min(g-m,i))}
- return a.lookAt(n?1:-1),a.healthBar.setHealthColor(n),a.isAir&&a.onFlyEnter(!0),tB.getInstance().addChild(a),n?this.friendList.push(a):this.enemyList.push(a),a}
- applyRawBvoStats(t,i,s=0,e=1){
- const n=vx.getInstance().getBookVO(i);
- if(!n)return;
- const h=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1));
- t.baseMaxHp=n.hp*h,t.baseAtkDmg=n.atkDmg*h,t.baseDef=n.def*h,t.orgMaxHp=t.maxHp=n.hp*h,t.orgAtkDmg=t.atkDmg=n.atkDmg*h,t.orgDef=t.def=n.def*h,t.phyDef=n.phyDef*h,t.magDef=n.magDef*h,t.hp=t.maxHp,t.health=t.maxHp}
- 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}
- checkProgress(){
- if(this.applySoftSeparation(),++this.antijamTimer>=t.ANTIJAM_CHECK_INTERVAL&&(this.antijamTimer=0,this.applyAntiJam()),this.applyJamDrift(),this.damageMeter&&this.battleTime%t.METER_UPDATE_INTERVAL===0&&this.updateDamageMeter(),this.aliveCounter&&this.battleTime%t.COUNTER_UPDATE_INTERVAL===0&&this.updateAliveCounter(),!this.numBlockReleased&&this.battleTime%60==0){
- const i=t.FREE_COMBAT_THRESHOLD;
- if(this.friendList.length<=i||this.enemyList.length<=i){
- for(let t=0;
- t<this.friendList.length;
- t++)this.friendList[t].numBlock=0;
- for(let t=0;
- t<this.enemyList.length;
- t++)this.enemyList[t].numBlock=0;
- this.numBlockReleased=!0}
- }
- super.checkProgress()}
- applyAntiJam(){
- const t=2===this.battleMode;
- this.applyAntiJamForTeam(this.friendList,!0,t),this.applyAntiJamForTeam(this.enemyList,!1,t)}
- applyAntiJamForTeam(i,s,e){
- const n=e?0:s?1:-1,h=e?s?-1:1:0,r=t.ANTIJAM_FRONT_DIST,o=t.ANTIJAM_BLOCKED_RADIUS,a=o*o,c=t.ANTIJAM_DRIFT_FRAMES,l=s?new Set(this.allyHeroes):new Set(this.enemyHeroes);
- for(let t=0;
- t<i.length;
- t++){
- const s=i[t];
- if(!s.isAlive||s.removed)continue;
- if(s.unitType!==sx.MELEE)continue;
- if(l.has(s))continue;
- const e=s.x+n*r,o=s.y+h*r;
- let u=!1;
- for(let t=0;
- t<i.length;
- t++){
- const n=i[t];
- if(n===s)continue;
- if(!n.isAlive||n.removed)continue;
- const h=n.x-e,r=n.y-o;
- if(h*h+r*r<a){
- u=!0;
- break}
- }
- u&&(s.__antiJamDriftFrames=c)}
- }
- applyJamDrift(){
- const i=2===this.battleMode,s=t.ANTIJAM_DRIFT_PER_FRAME;
- this.applyJamDriftForTeam(this.friendList,i,s),this.applyJamDriftForTeam(this.enemyList,i,s)}
- applyJamDriftForTeam(t,i,s){
- for(let e=0;
- e<t.length;
- e++){
- const n=t[e];
- if(!n.isAlive||n.removed)continue;
- const h=n.__antiJamDriftFrames;
- if(!h||h<=0)continue;
- const r=n.__antiJamDir;
- r&&(i?n.x+=r*s:n.y+=r*s,n.__antiJamDriftFrames=h-1)}
- }
- applySoftSeparation(){
- const i=t.SEPARATION_CELL,s=this.separationGrid,e=this.separationFlatList;
- s.clear(),e.length=0;
- let n=0;
- const h=Kt(t=>{
- if(!t.isAlive||t.removed||t.isImmovable||t.isCastle)return;
- t.__sepIdx=n++,e.push(t);
- const h=1e5*Math.floor(t.x/i)+Math.floor(t.y/i);
- let r=s.get(h);
- r||(r=[],s.set(h,r)),r.push(t)}
- ,"addUnit");
- for(let t=0;
- t<this.friendList.length;
- t++)h(this.friendList[t]);
- for(let t=0;
- t<this.enemyList.length;
- t++)h(this.enemyList[t]);
- for(let r=0;
- r<e.length;
- r++){
- const n=e[r],h=Math.floor(n.x/i),o=Math.floor(n.y/i),a=n.__sepIdx;
- for(let i=-1;
- i<=1;
- i++)for(let e=-1;
- e<=1;
- e++){
- const r=s.get(1e5*(h+e)+(o+i));
- if(r)for(let i=0;
- i<r.length;
- i++){
- const s=r[i];
- if(s.__sepIdx<=a)continue;
- if(_0.enabled&&n.isAir!==s.isAir)continue;
- const e=n.x-s.x,h=n.y-s.y,o=n.radius+s.radius+t.SEPARATION_BUFFER,c=e*e+h*h;
- if(c>=o*o)continue;
- if(c<.01){
- _0.enabled&&!s.isAir&&_0.isBlocked(s.x+.5,s.y)?!n.isAir&&_0.isBlocked(n.x-.5,n.y)||(n.x-=.5):s.x+=.5;
- continue}
- const l=Math.sqrt(c),u=.5*(o-l)*t.SEPARATION_STRENGTH,d=e/l,f=h/l;
- if(_0.enabled){
- const t=!n.isAir&&_0.isBlocked(n.x,n.y),i=!s.isAir&&_0.isBlocked(s.x,s.y);
- t||!n.isAir&&_0.isBlocked(n.x+d*u,n.y+f*u)||(n.x+=d*u,n.y+=f*u),i||!s.isAir&&_0.isBlocked(s.x-d*u,s.y-f*u)||(s.x-=d*u,s.y-=f*u)}
- else n.x+=d*u,n.y+=f*u,s.x-=d*u,s.y-=f*u}
- }
- }
- }
- countAlive(t){
- let i=0;
- for(const s of t)s.isAlive&&!s.removed&&i++;
- return i}
- checkVictory(){
- return 0!==this.initialEnemyCount&&0===this.countAlive(this.enemyList)}
- checkDefeat(){
- return 0!==this.initialAllyCount&&(0===this.countAlive(this.friendList)||this.battleTime>=t.TIME_LIMIT_FRAMES)}
- onVictoryCallback(){
- const i=this.fireOnComplete("WIN");
- setTimeout(async()=>{
- if(i)try{
- await i}
- catch{
- }
- WG.getInstance().remove(this.execute,this),V8.getInstance().showGuildWarBattle(!0,()=>this.returnToIdleAndFireAfter(),this.lastReward.gem,this.lastReward.honorCoin,AG.getText("GAME_502","길드전"))}
- ,t.RESULT_POPUP_DELAY_MS)}
- onDefeatCallback(){
- const i=this.fireOnComplete("LOSE");
- setTimeout(async()=>{
- if(i)try{
- await i}
- catch{
- }
- WG.getInstance().remove(this.execute,this),V8.getInstance().showGuildWarBattle(!1,()=>this.returnToIdleAndFireAfter(),this.lastReward.gem,this.lastReward.honorCoin,AG.getText("GAME_502","길드전"))}
- ,t.RESULT_POPUP_DELAY_MS)}
- returnToIdleAndFireAfter(){
- N9t.getInstance().returnToIdleBattle();
- const t=this.onAfterReturnToIdle;
- if(this.onAfterReturnToIdle=null,t)try{
- t()}
- catch(_gt){
- }
- }
- fireOnComplete(t){
- const i=this.onComplete;
- if(this.onComplete=null,i)try{
- const s=i(t);
- if(s&&"function"==typeof s.then)return s.then(()=>{
- }
- ,t=>{
- }
- )}
- catch(_gt){
- }
- }
- returnToMain(){
- }
- scheduleReturnToMain(){
- }
- setupAliveCounter(){
- this.cleanupAliveCounter();
- const i=t.FIELD_WIDTH;
- this.aliveCounter=new Be;
- const s=i-24,e=new Gf;
- e.roundRect(12,4,s,24,12).fill({
- color:0,alpha:.5}
- ),this.aliveCounter.addChild(e),this.hudBarInnerX=13,this.hudBarInnerY=5,this.hudBarInnerW=s-2,this.hudBarInnerH=22,this.hudAllyFill=new Gf,this.aliveCounter.addChild(this.hudAllyFill),this.hudEnemyFill=new Gf,this.aliveCounter.addChild(this.hudEnemyFill),this.hudBarDivider=new Gf,this.aliveCounter.addChild(this.hudBarDivider),this.hudAllyText=new Wg({
- text:"0/0",style:t.HUD_COUNT_STYLE_ALLY}
- ),this.hudAllyText.anchor.set(0,.5),this.hudAllyText.x=24,this.hudAllyText.y=16,this.aliveCounter.addChild(this.hudAllyText),this.hudEnemyText=new Wg({
- text:"0/0",style:t.HUD_COUNT_STYLE_ENEMY}
- ),this.hudEnemyText.anchor.set(1,.5),this.hudEnemyText.x=12+s-12,this.hudEnemyText.y=16,this.aliveCounter.addChild(this.hudEnemyText);
- const n=new Wg({
- text:"VS",style:t.HUD_VS_STYLE}
- );
- n.anchor.set(.5,.5),n.x=i/2,n.y=16,this.aliveCounter.addChild(n);
- const h=new Gf;
- h.roundRect(12,4,s,24,12).stroke({
- width:1.5,color:16777215,alpha:.3}
- ),this.aliveCounter.addChild(h),this.hudTimerText=new Wg({
- text:"0:00",style:t.HUD_TIMER_VALUE_STYLE}
- ),this.hudTimerText.anchor.set(.5,0),this.hudTimerText.x=i/2,this.hudTimerText.y=31,this.aliveCounter.addChild(this.hudTimerText),this.aliveCounter.x=0,this.aliveCounter.y=KA.SAFE_AREA_TOP+7,Det.getInstance().addChild(this.aliveCounter),this.setupSpeedButton(12,s,4,24),this.updateAliveCounter()}
- loadSavedBattleSpeed(){
- try{
- const i=localStorage.getItem(t.SPEED_LS_KEY);
- if(!i)return 1;
- const s=Number(i);
- return Number.isFinite(s)?t.SPEED_CYCLE.indexOf(s)<0?1:s:1}
- catch{
- return 1}
- }
- saveBattleSpeed(i){
- try{
- localStorage.setItem(t.SPEED_LS_KEY,String(i))}
- catch{
- }
- }
- setupSpeedButton(t,i,s,e){
- if(!this.aliveCounter)return;
- const n=t+i-44,h=s+e+3,r=new Be;
- r.x=n,r.y=h;
- const o=new Gf;
- o.roundRect(0,0,44,22,11).fill({
- color:0,alpha:.55}
- ).stroke({
- width:1.2,color:16777215,alpha:.4}
- ),r.addChild(o);
- const a=new Wg({
- text:`x${
- WD.guildWarSpeed??1}
- `,style:{
- fontFamily:"Arial",fontSize:14,fontWeight:"700",fill:16777215,stroke:{
- color:0,width:2}
- }
- }
- );
- a.anchor.set(.5,.5),a.x=22,a.y=11,r.addChild(a),r.eventMode="static",r.cursor="pointer",r.hitArea=new Pi(0,0,44,22),r.on("pointerup",this.cycleBattleSpeed,this),this.btnSpeed=r,this.btnSpeedLabel=a,this.aliveCounter.addChild(r)}
- cycleBattleSpeed(){
- const i=WD.guildWarSpeed??1,s=t.SPEED_CYCLE,e=s.indexOf(i),n=s[e<0?0:(e+1)%s.length];
- this.applyBattleSpeed(n),this.saveBattleSpeed(n)}
- applyBattleSpeed(t){
- WD.guildWarSpeed=t,WD.speedMode=t,WG.getInstance().setSpeed(t),this.btnSpeedLabel&&(this.btnSpeedLabel.text=`x${
- t}
- `)}
- enterGuildWarSpeed(){
- this.applyBattleSpeed(this.loadSavedBattleSpeed())}
- exitGuildWarSpeed(){
- null!=WD.guildWarSpeed&&(WD.guildWarSpeed=null,Jt(async()=>{
- const{
- TopMenu:t}
- =await Promise.resolve().then(()=>_ii);
- return{
- TopMenu:t}
- }
- ,void 0).then(({
- TopMenu:t}
- )=>{
- t.getInstance().updateGameSpeed()}
- ).catch(()=>{
- WD.speedMode=1,WG.getInstance().setSpeed(1)}
- ))}
- updateAliveCounter(){
- if(!this.aliveCounter)return;
- let i=0,s=0;
- for(let t=0;
- t<this.friendList.length;
- t++)this.friendList[t].isAlive&&i++;
- for(let t=0;
- t<this.enemyList.length;
- t++)this.enemyList[t].isAlive&&s++;
- const e=Math.max(0,t.TIME_LIMIT_FRAMES-this.battleTime),n=Math.ceil(e/60),h=`${
- Math.floor(n/60)}
- :${
- (n%60).toString().padStart(2,"0")}
- `;
- if(this.hudAllyText&&(this.hudAllyText.text=`${
- i}
- /${
- this.initialAllyCount}
- `),this.hudEnemyText&&(this.hudEnemyText.text=`${
- s}
- /${
- this.initialEnemyCount}
- `),this.hudTimerText&&(this.hudTimerText.text=h,this.hudTimerText.style.fill=n<=10?16733536:n<=20?16758861:16777215),this.hudAllyFill&&this.hudEnemyFill&&this.hudBarDivider){
- const t=i+s,e=t>0?i/t:.5,n=this.hudBarInnerX,h=this.hudBarInnerY,r=this.hudBarInnerW,o=this.hudBarInnerH,a=Math.round(r*e),c=r-a,l=n+a;
- this.hudAllyFill.clear(),a>0&&(this.hudAllyFill.roundRect(n,h,a,o,o/2).fill({
- color:1997567,alpha:1}
- ),a>o/2&&this.hudAllyFill.rect(l-o/2,h,o/2,o).fill({
- color:1997567,alpha:1}
- )),this.hudEnemyFill.clear(),c>0&&(this.hudEnemyFill.roundRect(l,h,c,o,o/2).fill({
- color:16719920,alpha:1}
- ),c>o/2&&this.hudEnemyFill.rect(l,h,o/2,o).fill({
- color:16719920,alpha:1}
- )),this.hudBarDivider.clear(),this.hudBarDivider.rect(l-1,h,2,o).fill({
- color:16777215,alpha:.6}
- )}
- }
- cleanupAliveCounter(){
- this.aliveCounter&&(this.aliveCounter.removeFromParent(),this.aliveCounter.destroy({
- children:!0}
- ),this.aliveCounter=null),this.hudAllyText=null,this.hudEnemyText=null,this.hudTimerText=null,this.hudAllyFill=null,this.hudEnemyFill=null,this.hudBarDivider=null,this.btnSpeed=null,this.btnSpeedLabel=null}
- setupDamageMeter(){
- this.cleanupDamageMeter();
- const i=Kt((t,i)=>{
- const s=new Set(i),e=new Map;
- for(const n of t){
- if(s.has(n))continue;
- let t=e.get(n.kindNum);
- t||(t=[],e.set(n.kindNum,t)),t.push(n)}
- return e}
- ,"groupSoldiers"),s=i(this.friendList,this.allyHeroes),e=i(this.enemyList,this.enemyHeroes);
- this.damageMeter=new Be;
- const n=t.METER_COL_W,h=2*n,r=t.METER_HEADER_H,o=t.METER_ROW_H,a=[];
- for(const t of this.allyHeroes)a.push(this.createMeterEntry([t],!0,!0,t.kindNum,1));
- for(const[t,y]of s)a.push(this.createMeterEntry(y,!0,!1,t,y.length));
- const c=[];
- for(const t of this.enemyHeroes)c.push(this.createMeterEntry([t],!1,!0,t.kindNum,1));
- for(const[t,y]of e)c.push(this.createMeterEntry(y,!1,!1,t,y.length));
- const l=8+r+Math.max(a.length,c.length)*o+8,u=this.resolvePanelY(),d=Math.max(l,KA.stageHeight-t.DAMAGE_METER_Y_RAISED),f=new Gf;
- f.rect(0,0,h,d).fill({
- color:856343,alpha:.95}
- ),f.rect(0,0,h,1).fill({
- color:16777215,alpha:.1}
- ),this.damageMeter.addChild(f);
- const p=new Wg({
- text:`${
- AG.getText("GAME_1059","아군")}
-  DPS Top `+a.length,style:t.METER_HEADER_STYLE}
- );
- p.x=12,p.y=8,this.damageMeter.addChild(p);
- const g=new Wg({
- text:`${
- AG.getText("GAME_1060","적군")}
-  DPS Top `+c.length,style:t.METER_HEADER_STYLE}
- );
- g.x=n+12,g.y=8,this.damageMeter.addChild(g);
- const m=8+r;
- for(let t=0;
- t<a.length;
- t++){
- const i=a[t];
- i.rowContainer.x=0,i.rowContainer.y=m+t*o,this.damageMeter.addChild(i.rowContainer),this.meterEntries.push(i)}
- for(let t=0;
- t<c.length;
- t++){
- const i=c[t];
- i.rowContainer.x=n,i.rowContainer.y=m+t*o,this.damageMeter.addChild(i.rowContainer),this.meterEntries.push(i)}
- const w=new Be;
- w.x=h-28-6,w.y=4,w.eventMode="static",w.cursor="pointer";
- const v=new Gf;
- v.roundRect(0,0,28,20,4).fill({
- color:1975600,alpha:.9}
- ).stroke({
- width:1,color:16777215,alpha:.25}
- ),w.addChild(v);
- const b=new Wg({
- text:this.damageMeterRaised?"▼":"▲",style:{
- fontFamily:"Arial",fontSize:12,fontWeight:"700",fill:16777215}
- }
- );
- b.anchor.set(.5,.5),b.x=14,b.y=10,w.addChild(b),w.on("pointertap",()=>this.toggleDamageMeterPosition()),this.damageMeter.addChild(w),this.meterToggleBtnArrow=b,this.damageMeter.x=0,this.damageMeter.y=u,Det.getInstance().addChild(this.damageMeter),this.updateDamageMeter()}
- createMeterEntry(i,s,e,n,h){
- const r=t.METER_COL_W,o=t.METER_ROW_H,a=t.METER_RANK_W,c=t.METER_ICON_H,l=t.METER_COUNT_W,u=t.METER_VALUE_W,d=new Be,f=new Wg({
- text:"1",style:t.METER_RANK_STYLE}
- );
- f.anchor.set(.5,.5),f.x=6+a/2,f.y=o/2,d.addChild(f);
- const p=6+a+4;
- let g=0;
- const m=vx.getInstance().getBookVO(n);
- if(m){
- const t=new We(ZA.getTexture("UI_Ekkorr",`Hero${
- m.base}
- `)),i=c/(t.texture.height||1);
- t.scale.set(i),t.x=p,t.y=(o-c)/2,g=t.width,d.addChild(t)}
- else g=c;
- const w=p+g+4,v=new Wg({
- text:`×${
- h}
- `,style:t.METER_COUNT_STYLE}
- );
- v.anchor.set(0,.5),v.x=w,v.y=o/2,d.addChild(v);
- const b=w+l,y=r-6-b-4-u-6,_=(o-8)/2,M=new Gf;
- M.roundRect(b,_,y,8,4).fill({
- color:16777215,alpha:.05}
- ),d.addChild(M);
- const E=new Gf;
- E.x=b,E.y=_,d.addChild(E);
- const A=new Wg({
- text:"0",style:t.METER_VALUE_STYLE}
- );
- return A.anchor.set(1,.5),A.x=r-6,A.y=o/2,d.addChild(A),{
- units:i,isAlly:s,isHero:e,kindNum:n,soldierCount:h,rowContainer:d,rankText:f,barFill:E,barTrack:M,barAvailW:y,valueText:A}
- }
- updateDamageMeter(){
- if(!this.damageMeter)return;
- const i=new Array(this.meterEntries.length);
- let s=0,e=0;
- for(let t=0;
- t<this.meterEntries.length;
- t++){
- const n=this.meterEntries[t];
- let h=0;
- for(let t=0;
- t<n.units.length;
- t++)h+=n.units[t].totalDamageDealt;
- i[t]=h,n.isAlly?h>s&&(s=h):h>e&&(e=h)}
- const n=[],h=[];
- for(let t=0;
- t<this.meterEntries.length;
- t++)this.meterEntries[t].isAlly?n.push(t):h.push(t);
- n.sort((t,s)=>i[s]-i[t]),h.sort((t,s)=>i[s]-i[t]);
- const r=t.METER_ROW_H,o=8+t.METER_HEADER_H,a=t.METER_COL_W,c=Kt((s,e,n,h,c)=>{
- const l=this.meterEntries[e],u=i[e];
- l.rankText.text=String(n);
- let d=9081763;
- 1===n?d=t.METER_RANK_TOP1:2===n?d=t.METER_RANK_TOP2:3===n&&(d=t.METER_RANK_TOP3),l.rankText.style.fill=d,l.rowContainer.x=h?0:a,l.rowContainer.y=o+s*r,l.valueText.text=u>=1e3?Math.floor(u/100)/10+"k":""+(0|u);
- const f=c>0?u/c:0,p=l.barAvailW*f;
- l.barFill.clear(),p>0&&l.barFill.roundRect(0,0,p,8,4).fill({
- color:h?5219327:16733536,alpha:1}
- )}
- ,"applyRow");
- for(let t=0;
- t<n.length;
- t++)c(t,n[t],t+1,!0,s);
- for(let t=0;
- t<h.length;
- t++)c(t,h[t],t+1,!1,e)}
- cleanupDamageMeter(){
- this.damageMeter&&(this.damageMeter.removeFromParent(),this.damageMeter.destroy({
- children:!0}
- ),this.damageMeter=null),this.meterEntries.length=0,this.meterToggleBtnArrow=null}
- resolvePanelY(){
- const i=this.damageMeterRaised?t.DAMAGE_METER_Y_RAISED:t.DAMAGE_METER_Y_DEFAULT;
- return Math.min(i,KA.stageHeight-40)}
- toggleDamageMeterPosition(){
- this.damageMeterRaised=!this.damageMeterRaised,this.damageMeter&&(this.damageMeter.y=this.resolvePanelY()),this.meterToggleBtnArrow&&(this.meterToggleBtnArrow.text=this.damageMeterRaised?"▼":"▲")}
- cleanup(){
- KN.getInstance().setBattleContext(NN.Normal),this.exitGuildWarSpeed(),this.cleanupAliveCounter(),this.cleanupDamageMeter(),this.teardownTerrain(),WG.getInstance().remove(this.clampHeroPosition,this),this.restoreViewState(),this.allyHeroes.length=0,this.enemyHeroes.length=0,this.initialAllyCount=0,this.initialEnemyCount=0,this.currentAllyOffsets.length=0,this.currentEnemyOffsets.length=0,this.numBlockReleased=!1;
- for(const t of this.spawnedVOs)t.remove();
- this.spawnedVOs.length=0;
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- super.cleanup()}
- }
- ;
- Kt(J8,"GuildWarBattleController"),zt(J8,"instance"),zt(J8,"FIELD_WIDTH",640),zt(J8,"FIELD_HEIGHT",1160),zt(J8,"CORP_COUNT",5),zt(J8,"SOLDIER_ROWS",10),zt(J8,"SOLDIER_COLS",3),zt(J8,"HORIZONTAL_CORP_ROW",[0,2,4,1,3]),zt(J8,"SOLDIER_X_SPACING",35),zt(J8,"SOLDIER_Y_SPACING",24),zt(J8,"ALLY_HERO_X",40),zt(J8,"ALLY_SOLDIER_X_START",90),zt(J8,"HORIZONTAL_START_OFFSET",40),zt(J8,"HORIZONTAL_ENEMY_EXTRA_OFFSET",0),zt(J8,"CORP_X_MIN",110),zt(J8,"CORP_X_MAX",550),zt(J8,"CORP_X_START_M2",[110,270,430,130,340]),zt(J8,"REAR_CORP_START_INDEX_M2",3),zt(J8,"FRONT_CORP_PERP_COUNT_M2",6),zt(J8,"FRONT_CORP_ALONG_COUNT_M2",5),zt(J8,"FRONT_CORP_X_SPACING_M2",24),zt(J8,"FRONT_CORP_Y_SPACING_M2",20),zt(J8,"REAR_CORP_PERP_COUNT_M2",10),zt(J8,"REAR_CORP_ALONG_COUNT_M2",3),zt(J8,"REAR_CORP_X_SPACING_M2",20),zt(J8,"REAR_CORP_Y_SPACING_M2",20),zt(J8,"ALLY_FRONT_Y_M2",980),zt(J8,"ENEMY_FRONT_Y_M2",180),zt(J8,"SOLDIER_HERO_GAP_M2",35),zt(J8,"OFFSET_REAR",-250),zt(J8,"OFFSET_FRONT",0),zt(J8,"MARCH_ADVANCE_DISTANCE",1e3),zt(J8,"TIME_LIMIT_FRAMES",7200),zt(J8,"ZOOM_LEVELS",[1,.7,.4]),zt(J8,"COUNTER_UPDATE_INTERVAL",15),zt(J8,"DAMAGE_METER_Y_DEFAULT",1160),zt(J8,"DAMAGE_METER_Y_RAISED",910),zt(J8,"METER_ICON_H",18),zt(J8,"METER_ROW_H",19),zt(J8,"METER_RANK_W",18),zt(J8,"METER_COUNT_W",28),zt(J8,"METER_VALUE_W",50),zt(J8,"METER_COL_W",320),zt(J8,"METER_HEADER_H",20),zt(J8,"METER_UPDATE_INTERVAL",30),zt(J8,"METER_RANK_STYLE",{
- fontFamily:"Arial",fontSize:11,fontWeight:"700",fill:9081763}
- ),zt(J8,"METER_RANK_TOP1",16766282),zt(J8,"METER_RANK_TOP2",12896980),zt(J8,"METER_RANK_TOP3",14059861),zt(J8,"METER_VALUE_STYLE",{
- fontFamily:"Arial",fontSize:11,fontWeight:"700",fill:16777215}
- ),zt(J8,"METER_COUNT_STYLE",{
- fontFamily:"Arial",fontSize:10,fontWeight:"600",fill:9081763}
- ),zt(J8,"METER_HEADER_STYLE",{
- fontFamily:"Arial",fontSize:10,fontWeight:"600",fill:9081763,letterSpacing:1}
- ),zt(J8,"SOLDIER_RANGE_MULT_MIN",1.2),zt(J8,"SOLDIER_RANGE_MULT_MAX",1.5),zt(J8,"RANGE_SOLDIER_MOVE_SPD_MULT_MIN",1),zt(J8,"RANGE_SOLDIER_MOVE_SPD_MULT_MAX",1.25),zt(J8,"MELEE_HERO_HP_MULT",2),zt(J8,"MELEE_SOLDIER_HP_MULT",1.5),zt(J8,"MELEE_HERO_ATK_RANGE_BONUS",16),zt(J8,"MELEE_SOLDIER_ATK_RANGE_BONUS",12),zt(J8,"MELEE_ATK_RANGE",32),zt(J8,"RANGE_HERO_ATK_RANGE_MULT",1.5),zt(J8,"MELEE_MOVE_SPD_MULT_MIN",1.2),zt(J8,"MELEE_MOVE_SPD_MULT_MAX",1.7),zt(J8,"MELEE_SOLDIER_LANE_OFFSET",140),zt(J8,"ANTIJAM_CHECK_INTERVAL",10),zt(J8,"ANTIJAM_FRONT_DIST",42),zt(J8,"ANTIJAM_BLOCKED_RADIUS",22),zt(J8,"ANTIJAM_DRIFT_FRAMES",18),zt(J8,"ANTIJAM_DRIFT_PER_FRAME",.7),zt(J8,"TRANS_OVERRIDES",new Map([[88,3]])),zt(J8,"ALLY_LEVEL_OVERRIDES",new Map([[4,7]])),zt(J8,"ENEMY_LEVEL_OVERRIDES",new Map([[78,5],[20,5],[9,5],[14,5],[8,5],[21,5]])),zt(J8,"SEPARATION_CELL",28),zt(J8,"SEPARATION_BUFFER",3),zt(J8,"SEPARATION_STRENGTH",.5),zt(J8,"FREE_COMBAT_THRESHOLD",30),zt(J8,"RESULT_POPUP_DELAY_MS",1500),zt(J8,"HUD_LABEL_STYLE",{
- fontFamily:"Arial",fontSize:11,fontWeight:"600",fill:9081763,letterSpacing:.5}
- ),zt(J8,"HUD_COUNT_STYLE_ALLY",{
- fontFamily:"Arial",fontSize:14,fontWeight:"700",fill:16777215,stroke:{
- color:0,width:2}
- }
- ),zt(J8,"HUD_COUNT_STYLE_ENEMY",{
- fontFamily:"Arial",fontSize:14,fontWeight:"700",fill:16777215,stroke:{
- color:0,width:2}
- }
- ),zt(J8,"HUD_TIMER_VALUE_STYLE",{
- fontFamily:"Arial",fontSize:15,fontWeight:"700",fill:16777215,letterSpacing:1,dropShadow:{
- color:0,alpha:.85,blur:4,angle:Math.PI/4,distance:2}
- }
- ),zt(J8,"HUD_VS_STYLE",{
- fontFamily:"Arial",fontSize:13,fontWeight:"900",fill:16777215,stroke:{
- color:0,width:3}
- ,letterSpacing:1}
- ),zt(J8,"SPEED_CYCLE",[1,2]),zt(J8,"SPEED_LS_KEY","ef2.gw.battleSpeed");
- let Q8=J8;
- const Z8=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.PVP),zt(this,"ALLY_CASTLE_X",48),zt(this,"ALLY_CASTLE_Y",521),zt(this,"ENEMY_CASTLE_X",575),zt(this,"ENEMY_CASTLE_Y",100),zt(this,"enemyCenterX",575),zt(this,"enemyCenterY",100),zt(this,"allyCenterX",48),zt(this,"allyCenterY",521),zt(this,"ENEMY_COUNT",10),zt(this,"PVP_HP_MULTIPLIER",5),zt(this,"PVP_MOVE_SPD_MULTIPLIER",1.4),zt(this,"PVP_TIME_LIMIT",90),zt(this,"pvpStartTime",0),zt(this,"enemyCastle",null),zt(this,"allyCastle",null),zt(this,"timerText",null),zt(this,"spawnedVOs",[]),zt(this,"pvpTeamVOs",[])}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- initCenterPositions(){
- this.allyCenterX=this.ALLY_CASTLE_X,this.allyCenterY=this.ALLY_CASTLE_Y,this.enemyCenterX=this.ENEMY_CASTLE_X,this.enemyCenterY=this.ENEMY_CASTLE_Y}
- async startBattleWith(t,i,s,e,n=10,h){
- this.cleanup(),KN.getInstance().setBattleContext(NN.Pvp),DB.getInstance().setDay(),this.initCenterPositions(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- for(const o of this.pvpTeamVOs)o.remove();
- this.pvpTeamVOs.length=0;
- const r=Math.min(t.length,10);
- for(let o=0;
- o<r;
- o++){
- const s=t[o];
- if(s>=1e4)continue;
- const e=yx.getVO();
- e.id=-1,e.kindNum=s,e.trans=i[o],e.level=Math.floor(_L.maxWave/100),e.enhance=0,this.pvpTeamVOs.push(e)}
- await this.setupEnemiesWith(s,e,n),await this.setupHeroTeam(),await this.setupCastles(n),this.setupEnemyLists(),this.createTimerUI(),N9t.getInstance().switchToBattle(this),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),this.pvpStartTime=Date.now(),WG.getInstance().add(this.execute,this)}
- async startBattle(t=10,i){
- this.cleanup(),KN.getInstance().setBattleContext(NN.Pvp),DB.getInstance().setDay(),this.initCenterPositions(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- for(const n of this.pvpTeamVOs)n.remove();
- this.pvpTeamVOs.length=0;
- const s=vx.getInstance().list,e=Math.min(s.length,10);
- for(let n=0;
- n<e;
- n++){
- const i=s[n];
- if(i.kindNum>=1e4)continue;
- const e=yx.getVO();
- e.id=-1,e.kindNum=i.kindNum,e.trans=i.trans,e.level=t,e.enhance=0,this.pvpTeamVOs.push(e)}
- await this.setupEnemies(t),await this.setupHeroTeam(),await this.setupCastles(t),this.setupEnemyLists(),this.createTimerUI(),N9t.getInstance().switchToBattle(this),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),this.pvpStartTime=Date.now(),WG.getInstance().add(this.execute,this)}
- createTimerUI(){
- this.removeTimerUI(),this.timerText=new Wg({
- text:this.formatTime(this.PVP_TIME_LIMIT),style:t.TIMER_STYLE}
- ),this.timerText.anchor.set(.5,0),this.timerText.x=320,this.timerText.y=8,Det.getInstance().addChild(this.timerText)}
- removeTimerUI(){
- this.timerText&&(this.timerText.parent&&this.timerText.parent.removeChild(this.timerText),this.timerText.destroy(),this.timerText=null)}
- formatTime(t){
- return`${
- Math.floor(t/60)}
- :${
- (t%60).toString().padStart(2,"0")}
- `}
- getRemainingSeconds(){
- if(0===this.pvpStartTime)return this.PVP_TIME_LIMIT;
- const t=(Date.now()-this.pvpStartTime)/1e3;
- return Math.max(0,Math.ceil(this.PVP_TIME_LIMIT-t))}
- isTimeExpired(){
- return 0!==this.pvpStartTime&&(Date.now()-this.pvpStartTime)/1e3>=this.PVP_TIME_LIMIT}
- async setupEnemiesWith(i,s,e){
- const n=i.length;
- for(let h=0;
- h<n;
- h++){
- const n=i[h],r=vx.getInstance().getBookVO(n);
- if(!r)continue;
- const o=await g3.getInstance().getUnit(r.className);
- o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,n,e,s[h]),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange;
- const a=t.ENEMY_POSITIONS[h%t.ENEMY_POSITIONS.length];
- o.x=a.x,o.y=a.y,o.xDefault=this.allyCenterX,o.yDefault=this.allyCenterY,o.lookAt(-1),o.healthBar.setHealthColor(!1),tB.getInstance().addChild(o),this.enemyList.push(o)}
- }
- async setupEnemies(i){
- const s=vx.getInstance().bookList.filter(t=>t.kindNum<1e4);
- if(0===s.length)return;
- const e=[];
- for(let t=0;
- t<this.ENEMY_COUNT;
- t++){
- const t=s[this.random.nextInt(s.length)];
- e.push(t.kindNum)}
- for(let n=0;
- n<this.ENEMY_COUNT;
- n++){
- const s=e[n],h=vx.getInstance().getBookVO(s);
- if(!h)continue;
- const r=await g3.getInstance().getUnit(h.className);
- r.battleController=this,r.totalDamageDealt=0,this.initializeUnitByKindNum(r,s,i),r.detectRange=600,r.detectRange2=r.detectRange*r.detectRange;
- const o=t.ENEMY_POSITIONS[n%t.ENEMY_POSITIONS.length];
- r.x=o.x,r.y=o.y,r.xDefault=this.allyCenterX,r.yDefault=this.allyCenterY,r.lookAt(-1),r.healthBar.setHealthColor(!1),tB.getInstance().addChild(r),this.enemyList.push(r)}
- }
- async setupHeroTeam(){
- const i=this.pvpTeamVOs;
- if(!i||0===i.length)return;
- const s=i.length;
- for(let e=0;
- e<s;
- e++){
- const s=i[e],n=s.kindNum,h=vx.getInstance().getBookVO(n);
- if(!h)continue;
- const r=await g3.getInstance().getUnit(h.className);
- r.battleController=this,this.initializeUnitByKindNum(r,n,s.level,s.trans),r.initDelay=0,r.showTombstone=!1,r.totalDamageDealt=0,r.detectRange=600,r.detectRange2=r.detectRange*r.detectRange,r.numBlock=0;
- const o=t.ALLY_POSITIONS[e%t.ALLY_POSITIONS.length];
- r.x=o.x,r.y=o.y,r.xDefault=this.enemyCenterX,r.yDefault=this.enemyCenterY,r.lookAt(1),r.healthBar.setHealthColor(!0),r.isAir&&r.onFlyEnter(!0),tB.getInstance().addChild(r),this.friendList.push(r)}
- }
- async setupCastles(t){
- const i=await g3.getInstance().getUnit(ox.ElfTown5);
- i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=600,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.enemyCenterX,i.y=i.yDefault=this.enemyCenterY,i.healthBar.setHealthColor(!1),tB.getInstance().addChildAt(i,0),this.enemyList.push(i),this.enemyCastle=i;
- const s=await g3.getInstance().getUnit(ox.ElfTown5);
- s.battleController=this,s.totalDamageDealt=0,this.initializeUnitByKindNum(s,10001,t),s.detectRange=600,s.detectRange2=s.detectRange*s.detectRange,s.atkRange=250,s.atkRange2=s.atkRange*s.atkRange,s.numShot=1,s.x=s.xDefault=this.allyCenterX,s.y=s.yDefault=this.allyCenterY,s.healthBar.setHealthColor(!0),tB.getInstance().addChildAt(s,0),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){
- const n=yx.getVO();
- n.id=-1,n.kindNum=i,n.level=s,n.enhance=0,n.trans=e,this.spawnedVOs.push(n),t.setData(n),t.isCastle||(t.baseMaxHp*=this.PVP_HP_MULTIPLIER,t.orgMaxHp*=this.PVP_HP_MULTIPLIER,t.maxHp*=this.PVP_HP_MULTIPLIER,t.hp=t.maxHp,t.baseMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.orgMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.moveSpd*=this.PVP_MOVE_SPD_MULTIPLIER),t.initDelay=0,t.showTombstone=!1}
- checkProgress(){
- if(this.timerText&&!this.battleEnded){
- const t=this.getRemainingSeconds();
- this.timerText.text=this.formatTime(t),this.timerText.style.fill=t<=10?16724787:t<=20?16755200:16777215}
- super.checkProgress()}
- cleanup(){
- KN.getInstance().setBattleContext(NN.Normal),this.removeTimerUI(),this.enemyCastle=null,this.allyCastle=null,this.pvpStartTime=0;
- for(const t of this.pvpTeamVOs)t.remove();
- this.pvpTeamVOs.length=0;
- for(const t of this.spawnedVOs)t.remove();
- this.spawnedVOs.length=0;
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- super.cleanup()}
- checkVictory(){
- return!(!this.enemyCastle||this.enemyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp>this.enemyCastle.hp/this.enemyCastle.maxHp}
- checkDefeat(){
- return!(!this.allyCastle||this.allyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp<=this.enemyCastle.hp/this.enemyCastle.maxHp}
- onVictoryCallback(){
- mnt.getInstance().endBattle(!0),setTimeout(()=>{
- WG.getInstance().remove(this.execute,this),j8.getInstance().showVictory()}
- ,2e3)}
- onDefeatCallback(){
- mnt.getInstance().endBattle(!1),setTimeout(()=>{
- WG.getInstance().remove(this.execute,this),j8.getInstance().showDefeat()}
- ,2e3)}
- returnToMain(){
- }
- scheduleReturnToMain(){
- }
- pause(){
- WG.getInstance().remove(this.execute,this)}
- resume(){
- WG.getInstance().add(this.execute,this)}
- giveUp(){
- this.handleDefeat()}
- }
- ;
- Kt(Z8,"PVPBattleController"),zt(Z8,"instance"),zt(Z8,"ALLY_POSITIONS",(()=>{
- const t=Math.sqrt(454970),i=527/t,s=-421/t,e=-s,n=i,h=[{
- dist:130,count:3}
- ,{
- dist:90,count:3}
- ,{
- dist:40,count:4}
- ],r=[];
- for(const o of h){
- const t=48+i*o.dist,h=521+s*o.dist,a=.5*(o.count-1);
- for(let i=0;
- i<o.count;
- i++){
- const s=45*(i-a);
- r.push({
- x:Math.round(t+e*s),y:Math.round(h+n*s)}
- )}
- }
- return r}
- )()),zt(Z8,"ENEMY_POSITIONS",Z8.ALLY_POSITIONS.map(t=>({
- x:623-t.x,y:621-t.y}
- ))),zt(Z8,"TIMER_STYLE",new Sg({
- fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
- color:"#000000",width:5,join:"round"}
- }
- ));
- let t7=Z8;
- var i7="in vec2 aPosition;
- \nout vec2 vTextureCoord;
- \n\nuniform vec4 uInputSize;
- \nuniform vec4 uOutputFrame;
- \nuniform vec4 uOutputTexture;
- \n\nvec4 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\nvec2 filterTextureCoord( void )\n{
- \n    return aPosition * (uOutputFrame.zw * uInputSize.zw);
- \n}
- \n\nvoid main(void)\n{
- \n    gl_Position = filterVertexPosition();
- \n    vTextureCoord = filterTextureCoord();
- \n}
- \n",s7="struct 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\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
- \n\nstruct VSOutput {
- \n    @builtin(position) position: vec4<f32>,\n    @location(0) uv : vec2<f32>\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@vertex\nfn mainVertex(\n  @location(0) aPosition : vec2<f32>, \n) -> VSOutput {
- \n  return VSOutput(\n   filterVertexPosition(aPosition),\n   filterTextureCoord(aPosition)\n  );
- \n}
- ",e7=Object.defineProperty,n7=Kt((t,i,s)=>i in t?e7(t,i,{
- enumerable:!0,configurable:!0,writable:!0,value:s}
- ):t[i]=s,"__defNormalProp$2"),h7=Kt((t,i,s)=>(n7(t,"symbol"!=typeof i?i+"":i,s),s),"__publicField$2");
- const r7=(Kt(Q=class extends or{
- constructor(t){
- const i=(t={
- ...Q.DEFAULT_OPTIONS,...t}
- ).distance??10,s=t.quality??.1;
- super({
- gpuProgram:Kh.from({
- vertex:{
- source:s7,entryPoint:"mainVertex"}
- ,fragment:{
- source:"struct GlowUniforms {
- \n  uDistance: f32,\n  uStrength: vec2<f32>,\n  uColor: vec3<f32>,\n  uAlpha: f32,\n  uQuality: f32,\n  uKnockout: f32,\n}
- ;
- \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\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
- \n\n@group(0) @binding(1) var uTexture: texture_2d<f32>;
-  \n@group(0) @binding(2) var uSampler: sampler;
- \n@group(1) @binding(0) var<uniform> glowUniforms : GlowUniforms;
- \n\n@fragment\nfn mainFragment(\n  @builtin(position) position: vec4<f32>,\n  @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {
- \n  let quality = glowUniforms.uQuality;
- \n  let distance = glowUniforms.uDistance;
- \n\n  let dist: f32 = glowUniforms.uDistance;
- \n  let angleStepSize: f32 = min(1. / quality / distance, PI * 2.0);
- \n  let angleStepNum: f32 = ceil(PI * 2.0 / angleStepSize);
- \n\n  let px: vec2<f32> = vec2<f32>(1.0 / gfu.uInputSize.xy);
- \n\n  var totalAlpha: f32 = 0.0;
- \n\n  var direction: vec2<f32>;
- \n  var displaced: vec2<f32>;
- \n  var curColor: vec4<f32>;
- \n\n  for (var angle = 0.0;
-  angle < PI * 2.0;
-  angle += angleStepSize) {
- \n    direction = vec2<f32>(cos(angle), sin(angle)) * px;
- \n    for (var curDistance = 0.0;
-  curDistance < dist;
-  curDistance+=1) {
- \n      displaced = vec2<f32>(clamp(uv + direction * (curDistance + 1.0), gfu.uInputClamp.xy, gfu.uInputClamp.zw));
- \n      curColor = textureSample(uTexture, uSampler, displaced);
- \n      totalAlpha += (dist - curDistance) * curColor.a;
- \n    }
- \n  }
- \n    \n  curColor = textureSample(uTexture, uSampler, uv);
- \n\n  let glowColorRGB = glowUniforms.uColor;
- \n  let glowAlpha = glowUniforms.uAlpha;
- \n  let glowColor = vec4<f32>(glowColorRGB, glowAlpha);
- \n  let knockout: bool = glowUniforms.uKnockout > 0.5;
- \n  let innerStrength = glowUniforms.uStrength[0];
- \n  let outerStrength = glowUniforms.uStrength[1];
- \n\n  let alphaRatio: f32 = (totalAlpha / (angleStepNum * dist * (dist + 1.0) / 2.0));
- \n  let innerGlowAlpha: f32 = (1.0 - alphaRatio) * innerStrength * curColor.a * glowAlpha;
- \n  let innerGlowStrength: f32 = min(1.0, innerGlowAlpha);
- \n  \n  let innerColor: vec4<f32> = mix(curColor, glowColor, innerGlowStrength);
- \n  let outerGlowAlpha: f32 = alphaRatio * outerStrength * (1. - curColor.a) * glowAlpha;
- \n  let outerGlowStrength: f32 = min(1.0 - innerColor.a, outerGlowAlpha);
- \n  let outerGlowColor: vec4<f32> = outerGlowStrength * glowColor.rgba;
- \n  \n  if (knockout) {
- \n    let resultAlpha: f32 = outerGlowAlpha + innerGlowAlpha;
- \n    return vec4<f32>(glowColor.rgb * resultAlpha, resultAlpha);
- \n  }
- \n  else {
- \n    return innerColor + outerGlowColor;
- \n  }
- \n}
- \n\nconst PI: f32 = 3.14159265358979323846264;
- ",entryPoint:"mainFragment"}
- }
- ),glProgram:xh.from({
- vertex:i7,fragment:"precision highp float;
- \nin vec2 vTextureCoord;
- \nout vec4 finalColor;
- \n\nuniform sampler2D uTexture;
- \nuniform vec2 uStrength;
- \nuniform vec3 uColor;
- \nuniform float uKnockout;
- \nuniform float uAlpha;
- \n\nuniform vec4 uInputSize;
- \nuniform vec4 uInputClamp;
- \n\nconst float PI = 3.14159265358979323846264;
- \n\n// Hard-assignment of DIST and ANGLE_STEP_SIZE instead of using uDistance and uQuality to allow them to be use on GLSL loop conditions\nconst float DIST = __DIST__;
- \nconst float ANGLE_STEP_SIZE = min(__ANGLE_STEP_SIZE__, PI * 2.);
- \nconst float ANGLE_STEP_NUM = ceil(PI * 2. / ANGLE_STEP_SIZE);
- \nconst float MAX_TOTAL_ALPHA = ANGLE_STEP_NUM * DIST * (DIST + 1.) / 2.;
- \n\nvoid main(void) {
- \n    vec2 px = vec2(1.) / uInputSize.xy;
- \n\n    float totalAlpha = 0.;
- \n\n    vec2 direction;
- \n    vec2 displaced;
- \n    vec4 curColor;
- \n\n    for (float angle = 0.;
-  angle < PI * 2.;
-  angle += ANGLE_STEP_SIZE) {
- \n      direction = vec2(cos(angle), sin(angle)) * px;
- \n\n      for (float curDistance = 0.;
-  curDistance < DIST;
-  curDistance++) {
- \n          displaced = clamp(vTextureCoord + direction * (curDistance + 1.), uInputClamp.xy, uInputClamp.zw);
- \n          curColor = texture(uTexture, displaced);
- \n          totalAlpha += (DIST - curDistance) * curColor.a;
- \n      }
- \n    }
- \n    \n    curColor = texture(uTexture, vTextureCoord);
- \n\n    vec4 glowColor = vec4(uColor, uAlpha);
- \n    bool knockout = uKnockout > .5;
- \n    float innerStrength = uStrength[0];
- \n    float outerStrength = uStrength[1];
- \n\n    float alphaRatio = totalAlpha / MAX_TOTAL_ALPHA;
- \n    float innerGlowAlpha = (1. - alphaRatio) * innerStrength * curColor.a * uAlpha;
- \n    float innerGlowStrength = min(1., innerGlowAlpha);
- \n    \n    vec4 innerColor = mix(curColor, glowColor, innerGlowStrength);
- \n    float outerGlowAlpha = alphaRatio * outerStrength * (1. - curColor.a) * uAlpha;
- \n    float outerGlowStrength = min(1. - innerColor.a, outerGlowAlpha);
- \n    vec4 outerGlowColor = outerGlowStrength * glowColor.rgba;
- \n\n    if (knockout) {
- \n      float resultAlpha = outerGlowAlpha + innerGlowAlpha;
- \n      finalColor = vec4(glowColor.rgb * resultAlpha, resultAlpha);
- \n    }
- \n    else {
- \n      finalColor = innerColor + outerGlowColor;
- \n    }
- \n}
- \n".replace(/__ANGLE_STEP_SIZE__/gi,`${
- (1/s/i).toFixed(7)}
- `).replace(/__DIST__/gi,`${
- i.toFixed(0)}
- .0`),name:"glow-filter"}
- ),resources:{
- glowUniforms:{
- uDistance:{
- value:i,type:"f32"}
- ,uStrength:{
- value:[t.innerStrength,t.outerStrength],type:"vec2<f32>"}
- ,uColor:{
- value:new Float32Array(3),type:"vec3<f32>"}
- ,uAlpha:{
- value:t.alpha,type:"f32"}
- ,uQuality:{
- value:s,type:"f32"}
- ,uKnockout:{
- value:(null==t?void 0:t.knockout)?1:0,type:"f32"}
- }
- }
- ,padding:i}
- ),h7(this,"uniforms"),h7(this,"_color"),this.uniforms=this.resources.glowUniforms.uniforms,this._color=new Bs,this.color=t.color??16777215}
- get distance(){
- return this.uniforms.uDistance}
- set distance(t){
- this.uniforms.uDistance=this.padding=t}
- get innerStrength(){
- return this.uniforms.uStrength[0]}
- set innerStrength(t){
- this.uniforms.uStrength[0]=t}
- get outerStrength(){
- return this.uniforms.uStrength[1]}
- set outerStrength(t){
- this.uniforms.uStrength[1]=t}
- get color(){
- return this._color.value}
- set color(t){
- this._color.setValue(t);
- const[i,s,e]=this._color.toArray();
- this.uniforms.uColor[0]=i,this.uniforms.uColor[1]=s,this.uniforms.uColor[2]=e}
- get alpha(){
- return this.uniforms.uAlpha}
- set alpha(t){
- this.uniforms.uAlpha=t}
- get quality(){
- return this.uniforms.uQuality}
- set quality(t){
- this.uniforms.uQuality=t}
- get knockout(){
- return 1===this.uniforms.uKnockout}
- set knockout(t){
- this.uniforms.uKnockout=t?1:0}
- }
- ,"_GlowFilter"),Q);
- h7(r7,"DEFAULT_OPTIONS",{
- distance:10,outerStrength:4,innerStrength:0,color:16777215,alpha:1,quality:.1,knockout:!1}
- );
- let o7=r7;
- var a7=Object.defineProperty,c7=Kt((t,i,s)=>i in t?a7(t,i,{
- enumerable:!0,configurable:!0,writable:!0,value:s}
- ):t[i]=s,"__defNormalProp$1"),l7=Kt((t,i,s)=>(c7(t,"symbol"!=typeof i?i+"":i,s),s),"__publicField$1");
- const u7=(Kt(Z=class extends or{
- constructor(...t){
- let i=t[0]??{
- }
- ;
- "number"==typeof i&&(Fi("6.0.0","OutlineFilter constructor params are now options object. See params: {
-  thickness, color, quality, alpha, knockout }
- "),i={
- thickness:i}
- ,void 0!==t[1]&&(i.color=t[1]),void 0!==t[2]&&(i.quality=t[2]),void 0!==t[3]&&(i.alpha=t[3]),void 0!==t[4]&&(i.knockout=t[4])),i={
- ...Z.DEFAULT_OPTIONS,...i}
- ;
- const s=i.quality??.1;
- super({
- gpuProgram:Kh.from({
- vertex:{
- source:s7,entryPoint:"mainVertex"}
- ,fragment:{
- source:"struct OutlineUniforms {
- \n  uThickness:vec2<f32>,\n  uColor:vec3<f32>,\n  uAlpha:f32,\n  uAngleStep:f32,\n  uKnockout:f32,\n}
- ;
- \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\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
- \n\n@group(0) @binding(1) var uTexture: texture_2d<f32>;
-  \n@group(0) @binding(2) var uSampler: sampler;
- \n@group(1) @binding(0) var<uniform> outlineUniforms : OutlineUniforms;
- \n\n@fragment\nfn mainFragment(\n  @builtin(position) position: vec4<f32>,\n  @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {
- \n  let sourceColor: vec4<f32> = textureSample(uTexture, uSampler, uv);
- \n  let contentColor: vec4<f32> = sourceColor * (1. - outlineUniforms.uKnockout);
- \n  \n  let outlineAlpha: f32 = outlineUniforms.uAlpha * outlineMaxAlphaAtPos(uv) * (1. - sourceColor.a);
- \n  let outlineColor: vec4<f32> = vec4<f32>(vec3<f32>(outlineUniforms.uColor) * outlineAlpha, outlineAlpha);
- \n  \n  return contentColor + outlineColor;
- \n}
- \n\nfn outlineMaxAlphaAtPos(uv: vec2<f32>) -> f32 {
- \n  let thickness = outlineUniforms.uThickness;
- \n\n  if (thickness.x == 0. || thickness.y == 0.) {
- \n    return 0.;
- \n  }
- \n  \n  let angleStep = outlineUniforms.uAngleStep;
- \n\n  var displacedColor: vec4<f32>;
- \n  var displacedPos: vec2<f32>;
- \n\n  var maxAlpha: f32 = 0.;
- \n  var displaced: vec2<f32>;
- \n  var curColor: vec4<f32>;
- \n\n  for (var angle = 0.;
-  angle <= DOUBLE_PI;
-  angle += angleStep)\n  {
- \n    displaced.x = uv.x + thickness.x * cos(angle);
- \n    displaced.y = uv.y + thickness.y * sin(angle);
- \n    curColor = textureSample(uTexture, uSampler, clamp(displaced, gfu.uInputClamp.xy, gfu.uInputClamp.zw));
- \n    maxAlpha = max(maxAlpha, curColor.a);
- \n  }
- \n\n  return maxAlpha;
- \n}
- \n\nconst DOUBLE_PI: f32 = 3.14159265358979323846264 * 2.;
- ",entryPoint:"mainFragment"}
- }
- ),glProgram:xh.from({
- vertex:i7,fragment:"precision highp float;
- \nin vec2 vTextureCoord;
- \nout vec4 finalColor;
- \n\nuniform sampler2D uTexture;
- \nuniform vec2 uThickness;
- \nuniform vec3 uColor;
- \nuniform float uAlpha;
- \nuniform float uKnockout;
- \n\nuniform vec4 uInputClamp;
- \n\nconst float DOUBLE_PI = 2. * 3.14159265358979323846264;
- \nconst float ANGLE_STEP = ${
- ANGLE_STEP}
- ;
- \n\nfloat outlineMaxAlphaAtPos(vec2 pos) {
- \n    if (uThickness.x == 0. || uThickness.y == 0.) {
- \n        return 0.;
- \n    }
- \n\n    vec4 displacedColor;
- \n    vec2 displacedPos;
- \n    float maxAlpha = 0.;
- \n\n    for (float angle = 0.;
-  angle <= DOUBLE_PI;
-  angle += ANGLE_STEP) {
- \n        displacedPos.x = vTextureCoord.x + uThickness.x * cos(angle);
- \n        displacedPos.y = vTextureCoord.y + uThickness.y * sin(angle);
- \n        displacedColor = texture(uTexture, clamp(displacedPos, uInputClamp.xy, uInputClamp.zw));
- \n        maxAlpha = max(maxAlpha, displacedColor.a);
- \n    }
- \n\n    return maxAlpha;
- \n}
- \n\nvoid main(void) {
- \n    vec4 sourceColor = texture(uTexture, vTextureCoord);
- \n    vec4 contentColor = sourceColor * float(uKnockout < 0.5);
- \n    float outlineAlpha = uAlpha * outlineMaxAlphaAtPos(vTextureCoord.xy) * (1.-sourceColor.a);
- \n    vec4 outlineColor = vec4(vec3(uColor) * outlineAlpha, outlineAlpha);
- \n    finalColor = contentColor + outlineColor;
- \n}
- \n".replace(/\$\{
- ANGLE_STEP\}
- /,Z.getAngleStep(s).toFixed(7)),name:"outline-filter"}
- ),resources:{
- outlineUniforms:{
- uThickness:{
- value:new Float32Array(2),type:"vec2<f32>"}
- ,uColor:{
- value:new Float32Array(3),type:"vec3<f32>"}
- ,uAlpha:{
- value:i.alpha,type:"f32"}
- ,uAngleStep:{
- value:0,type:"f32"}
- ,uKnockout:{
- value:i.knockout?1:0,type:"f32"}
- }
- }
- }
- ),l7(this,"uniforms"),l7(this,"_thickness"),l7(this,"_quality"),l7(this,"_color"),this.uniforms=this.resources.outlineUniforms.uniforms,this.uniforms.uAngleStep=Z.getAngleStep(s),this._color=new Bs,this.color=i.color??0,Object.assign(this,i)}
- apply(t,i,s,e){
- this.uniforms.uThickness[0]=this.thickness/i.source.width,this.uniforms.uThickness[1]=this.thickness/i.source.height,t.applyFilter(this,i,s,e)}
- static getAngleStep(t){
- return parseFloat((2*Math.PI/Math.max(t*Z.MAX_SAMPLES,Z.MIN_SAMPLES)).toFixed(7))}
- get thickness(){
- return this._thickness}
- set thickness(t){
- this._thickness=this.padding=t}
- get color(){
- return this._color.value}
- set color(t){
- this._color.setValue(t);
- const[i,s,e]=this._color.toArray();
- this.uniforms.uColor[0]=i,this.uniforms.uColor[1]=s,this.uniforms.uColor[2]=e}
- get alpha(){
- return this.uniforms.uAlpha}
- set alpha(t){
- this.uniforms.uAlpha=t}
- get quality(){
- return this._quality}
- set quality(t){
- this._quality=t,this.uniforms.uAngleStep=Z.getAngleStep(t)}
- get knockout(){
- return 1===this.uniforms.uKnockout}
- set knockout(t){
- this.uniforms.uKnockout=t?1:0}
- }
- ,"_OutlineFilter"),Z);
- l7(u7,"DEFAULT_OPTIONS",{
- thickness:1,color:0,alpha:1,quality:.1,knockout:!1}
- ),l7(u7,"MIN_SAMPLES",1),l7(u7,"MAX_SAMPLES",100);
- let d7=u7;
- const f7=1e-5;
- function p7(t,i,s,e){
- return t*e-i*s}
- Kt(p7,"det");
- const g7={
- x:0,y:0}
- ,m7=[];
- function w7(t,i,s,e,n){
- const h=m7;
- let r=0;
- for(let a=0;
- a<s;
- a++){
- const s=i[a],o=s.x-t.x,c=s.y-t.y,l=t.vx-s.vx,u=t.vy-s.vy,d=o*o+c*c,f=t.radius+s.radius,p=f*f;
- let g,m,w,v;
- if(d>p){
- const t=l-e*o,i=u-e*c,s=t*t+i*i,n=t*o+i*c;
- if(n<0&&n*n>p*s){
- const n=Math.sqrt(s),h=n>f7?t/n:0,r=n>f7?i/n:0;
- g=r,m=-h;
- const o=f*e-n;
- w=o*h,v=o*r}
- else{
- const s=Math.sqrt(d-p);
- p7(o,c,t,i)>0?(g=(o*s-c*f)/d,m=(o*f+c*s)/d):(g=-(o*s+c*f)/d,m=-(-o*f+c*s)/d);
- const e=l*g+u*m;
- w=e*g-l,v=e*m-u}
- }
- else{
- const t=l-n*o,i=u-n*c,s=Math.sqrt(t*t+i*i),e=s>f7?t/s:0,h=s>f7?i/s:0;
- g=h,m=-e;
- const r=f*n-s;
- w=r*e,v=r*h}
- const b=v7(h,r);
- b.px=t.vx+.5*w,b.py=t.vy+.5*v,b.dx=g,b.dy=m,r++}
- const o=y7(h,r,t.maxSpeed,t.prefVx,t.prefVy,!1,g7);
- o<r&&_7(h,r,o,t.maxSpeed,g7),t.newVx=g7.x,t.newVy=g7.y}
- function v7(t,i){
- let s=t[i];
- return s||(s={
- px:0,py:0,dx:0,dy:0}
- ,t[i]=s),s}
- function b7(t,i,s,e,n,h,r){
- const o=t[i],a=o.px*o.dx+o.py*o.dy,c=a*a+s*s-(o.px*o.px+o.py*o.py);
- if(c<0)return!1;
- const l=Math.sqrt(c);
- let u=-a-l,d=-a+l;
- for(let f=0;
- f<i;
- f++){
- const i=t[f],s=p7(o.dx,o.dy,i.dx,i.dy),e=p7(i.dx,i.dy,o.px-i.px,o.py-i.py);
- if(s<f7&&s>-1e-5){
- if(e<0)return!1;
- continue}
- const n=e/s;
- if(s>=0?n<d&&(d=n):n>u&&(u=n),u>d)return!1}
- if(h)e*o.dx+n*o.dy>0?(r.x=o.px+d*o.dx,r.y=o.py+d*o.dy):(r.x=o.px+u*o.dx,r.y=o.py+u*o.dy);
- else{
- const t=o.dx*(e-o.px)+o.dy*(n-o.py);
- t<u?(r.x=o.px+u*o.dx,r.y=o.py+u*o.dy):t>d?(r.x=o.px+d*o.dx,r.y=o.py+d*o.dy):(r.x=o.px+t*o.dx,r.y=o.py+t*o.dy)}
- return!0}
- function y7(t,i,s,e,n,h,r){
- if(h)r.x=e*s,r.y=n*s;
- else if(e*e+n*n>s*s){
- const t=Math.sqrt(e*e+n*n);
- r.x=e/t*s,r.y=n/t*s}
- else r.x=e,r.y=n;
- for(let o=0;
- o<i;
- o++){
- const i=t[o];
- if(p7(i.dx,i.dy,i.px-r.x,i.py-r.y)>0){
- const i=r.x,a=r.y;
- if(!b7(t,o,s,e,n,h,r))return r.x=i,r.y=a,o}
- }
- return i}
- function _7(t,i,s,e,n){
- let h=0;
- const r=[];
- for(let o=s;
- o<i;
- o++){
- const i=t[o];
- if(p7(i.dx,i.dy,i.px-n.x,i.py-n.y)>h){
- r.length=0;
- for(let e=0;
- e<o;
- e++){
- const s=t[e],n=p7(i.dx,i.dy,s.dx,s.dy),h={
- px:0,py:0,dx:0,dy:0}
- ;
- if(n<f7&&n>-1e-5){
- if(i.dx*s.dx+i.dy*s.dy>0)continue;
- h.px=.5*(i.px+s.px),h.py=.5*(i.py+s.py)}
- else{
- const t=p7(s.dx,s.dy,i.px-s.px,i.py-s.py)/n;
- h.px=i.px+t*i.dx,h.py=i.py+t*i.dy}
- let o=s.dx-i.dx,a=s.dy-i.dy;
- const c=Math.sqrt(o*o+a*a);
- c>f7&&(o/=c,a/=c),h.dx=o,h.dy=a,r.push(h)}
- const s=n.x,a=n.y;
- y7(r,r.length,e,-i.dy,i.dx,!0,n)<r.length&&(n.x=s,n.y=a),h=p7(i.dx,i.dy,i.px-n.x,i.py-n.y)}
- }
- }
- Kt(w7,"orcaComputeNewVelocity"),Kt(v7,"getLine"),Kt(b7,"linearProgram1"),Kt(y7,"linearProgram2"),Kt(_7,"linearProgram3");
- const M7=class t extends Be{
- constructor(i,s={
- }
- ){
- super(),zt(this,"corpIndex"),zt(this,"onDrop",null),zt(this,"validate",null),zt(this,"snap",null),zt(this,"onDragStart",null),zt(this,"onDragMove",null),zt(this,"onDragEnd",null),zt(this,"sprite"),zt(this,"numText"),zt(this,"iconBadge"),zt(this,"iconHidden",!1),zt(this,"dragging",!1),zt(this,"lastValid",!0),zt(this,"targetX",0),zt(this,"targetY",0),this.corpIndex=i,this.sprite=new We(ZA.getTexture("UI_Ekkorr","Icon_Flag_Green")),this.sprite.anchor.set(.5,1),this.sprite.scale.set(s.scale??t.SCALE),null!=s.tint&&(this.sprite.tint=s.tint),this.addChild(this.sprite),this.alpha=s.alpha??1,this.numText=new Wg({
- text:String(i+1),style:{
- fontSize:s.fontSize??15,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:3}
- }
- }
- ),this.numText.anchor.set(.5,.5),this.numText.position.set(0,.62*-this.sprite.height),this.addChild(this.numText),this.iconBadge=new We,this.iconBadge.anchor.set(.5,.5),this.iconBadge.visible=!1,this.addChild(this.iconBadge),s.iconKindNum&&this.setIconBadge(s.iconKindNum,s.iconSize??24),this.eventMode="static",this.cursor="pointer";
- const e=this.sprite.width,n=this.sprite.height,h=s.hitPad??t.HIT_PAD;
- this.hitArea=new Pi(-e/2-h,-n-h,e+2*h,n+2*h),this.on("pointerdown",this.onDown,this)}
- get isDragging(){
- return this.dragging}
- updateFollow(t){
- if(!t||!t.isAlive||t.removed)return this.visible=!1,void(this.eventMode="none");
- this.visible=!0,this.eventMode=this.iconHidden?"none":"static",this.position.set(t.x,t.y)}
- setIconHidden(t){
- this.iconHidden=t,this.sprite.visible=!t,this.numText.visible=!t,t&&(this.iconBadge.visible=!1)}
- updateFollowPoint(t,i,s){
- if(!s)return this.visible=!1,void(this.eventMode="none");
- this.visible=!0,this.eventMode="static",this.position.set(t,i)}
- setIconBadge(t,i){
- const s=vx.getInstance().getBookVO(t);
- s&&(this.iconBadge.texture=ZA.getTexture("UI_Ekkorr",`Hero${
- s.base}
- `),this.iconBadge.width=i,this.iconBadge.height=i,this.iconBadge.position.set(0,.62*-this.sprite.height),this.iconBadge.visible=!0,this.numText.visible=!1)}
- onDown(t){
- if(!this.visible)return;
- this.dragging=!0,t.stopPropagation(),this.onDragStart&&this.onDragStart(this.corpIndex,this.x,this.y);
- const i=KA.stage;
- i&&(i.on("globalpointermove",this.onMove,this),i.on("pointerup",this.onUp,this),i.on("pointerupoutside",this.onUp,this)),this.moveTo(t)}
- onMove(t){
- this.dragging&&this.moveTo(t)}
- startDragExternal(t,i){
- if(!this.visible||this.dragging)return;
- this.dragging=!0,this.onDragStart&&this.onDragStart(this.corpIndex,this.x,this.y);
- const s=KA.stage;
- s&&(s.on("globalpointermove",this.onMove,this),s.on("pointerup",this.onUp,this),s.on("pointerupoutside",this.onUp,this)),this.moveToGlobal(t,i)}
- onUp(t){
- if(!this.dragging)return;
- if(this.dragging=!1,this.detachStageListeners(),this.onDragEnd&&this.onDragEnd(),!this.onDrop)return;
- let i=this.targetX,s=this.targetY;
- if(!this.lastValid&&this.snap){
- const t=this.snap(i,s);
- i=t.x,s=t.y}
- this.onDrop(i,s)}
- detachStageListeners(){
- const t=KA.stage;
- t&&(t.off("globalpointermove",this.onMove,this),t.off("pointerup",this.onUp,this),t.off("pointerupoutside",this.onUp,this))}
- moveTo(t){
- this.moveToGlobal(t.global.x,t.global.y)}
- moveToGlobal(t,i){
- if(!this.parent)return;
- const s=this.parent.toLocal({
- x:t,y:i}
- );
- this.targetX=s.x,this.targetY=s.y;
- const e=!this.validate||this.validate(s.x,s.y);
- this.lastValid=e,this.onDragMove&&this.onDragMove(s.x,s.y,e)}
- dispose(){
- this.detachStageListeners(),this.dragging=!1,this.removeAllListeners(),this.removeFromParent(),this.destroy({
- children:!0}
- )}
- }
- ;
- Kt(M7,"CorpFlag"),zt(M7,"SCALE",1.3),zt(M7,"HIT_PAD",18);
- let E7=M7;
- const A7=class t extends Be{
- constructor(){
- super(),zt(this,"line",new Gf),zt(this,"flag"),zt(this,"numText"),zt(this,"heroIcon",new vK),zt(this,"soldierIcon",new vK),zt(this,"originX",0),zt(this,"originY",0),this.visible=!1,this.eventMode="none",this.addChild(this.line),this.flag=new We(ZA.getTexture("UI_Ekkorr","Icon_Flag_Green")),this.flag.anchor.set(.5,1),this.flag.scale.set(t.FLAG_SCALE),this.flag.alpha=t.FLAG_ALPHA,this.addChild(this.flag),this.numText=new Wg({
- text:"1",style:{
- fontSize:15,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:3}
- }
- }
- ),this.numText.anchor.set(.5,.5),this.addChild(this.numText),this.heroIcon.scale.set(t.ICON_SCALE),this.soldierIcon.scale.set(t.ICON_SCALE),this.addChild(this.heroIcon),this.addChild(this.soldierIcon)}
- begin(t,i,s,e,n){
- this.numText.text=String(t+1),this.heroIcon.visible=i>0,this.soldierIcon.visible=s>0,i>0&&this.heroIcon.setDataWithKindNum(i),s>0&&this.soldierIcon.setDataWithKindNum(s),this.originX=e,this.originY=n,this.visible=!0}
- update(t,i,s){
- this.flag.texture=ZA.getTexture("UI_Ekkorr",s?"Icon_Flag_Green":"Icon_Flag_Red"),this.flag.position.set(t,i),this.numText.position.set(t,i-.62*this.flag.height);
- const e=this.heroIcon.visible,n=this.soldierIcon.visible,h=e?this.heroIcon.width:0,r=n?this.soldierIcon.width:0,o=e&&n?4:0,a=i-this.flag.height-6;
- let c=t-(h+r+o)/2;
- e&&(this.heroIcon.position.set(c,a-this.heroIcon.height),c+=h+o),n&&this.soldierIcon.position.set(c,a-this.soldierIcon.height),this.drawDashedLine(this.originX,this.originY,t,i,s)}
- hide(){
- this.visible=!1,this.line.clear()}
- drawDashedLine(i,s,e,n,h){
- this.line.clear();
- const r=e-i,o=n-s,a=Math.sqrt(r*r+o*o);
- if(a<1)return;
- const c=r/a,l=o/a,u=t.DASH+t.GAP;
- for(let d=0;
- d<a;
- d+=u){
- const e=Math.min(d+t.DASH,a);
- this.line.moveTo(i+c*d,s+l*d),this.line.lineTo(i+c*e,s+l*e)}
- this.line.stroke({
- width:4,color:h?4513109:14500932,alpha:.9}
- )}
- dispose(){
- this.removeFromParent(),this.destroy({
- children:!0}
- )}
- }
- ;
- Kt(A7,"CorpFlagGhost"),zt(A7,"FLAG_SCALE",1.3),zt(A7,"FLAG_ALPHA",.6),zt(A7,"ICON_SCALE",.5),zt(A7,"DASH",12),zt(A7,"GAP",8);
- let S7=A7;
- const T7=class t{
- constructor(t){
- zt(this,"corpUnits"),zt(this,"corpHero"),zt(this,"corpHeroKind"),zt(this,"corpSoldierKind"),zt(this,"commandFlow"),zt(this,"heroFlags",[]),zt(this,"flagLayer",null),zt(this,"ghost",null),zt(this,"fieldW",0),zt(this,"fieldH",0),this.corpCount=t,this.corpUnits=Array.from({
- length:t}
- ,()=>[]),this.corpHero=Array.from({
- length:t}
- ,()=>null),this.corpHeroKind=Array.from({
- length:t}
- ,()=>0),this.corpSoldierKind=Array.from({
- length:t}
- ,()=>0),this.commandFlow=Array.from({
- length:t}
- ,()=>null)}
- reset(t,i){
- this.destroy();
- for(let s=0;
- s<this.corpCount;
- s++)this.corpUnits[s]=[],this.corpHero[s]=null,this.corpHeroKind[s]=0,this.corpSoldierKind[s]=0;
- this.fieldW=t,this.fieldH=i}
- register(t,i,s){
- t<0||t>=this.corpCount||(this.corpUnits[t].push(i),s?(this.corpHero[t]=i,this.corpHeroKind[t]=i.kindNum):0===this.corpSoldierKind[t]&&(this.corpSoldierKind[t]=i.kindNum))}
- createFlags(){
- this.destroyFlagsOnly();
- const t=new Be;
- t.label="CorpFlagLayer",DB.getInstance().addChild(t),this.flagLayer=t;
- for(let i=0;
- i<this.corpCount;
- i++){
- const s=this.corpHero[i];
- if(!s)continue;
- const e=new E7(i,{
- iconKindNum:this.corpSoldierKind[i],iconSize:28}
- );
- this.bindFlagCallbacks(e,i),e.setIconHidden(!0),e.position.set(s.x,s.y),t.addChild(e),this.heroFlags.push(e)}
- this.ghost=new S7,t.addChild(this.ghost)}
- bringToTop(){
- const t=this.flagLayer;
- t&&t.parent&&t.parent.addChild(t)}
- startCorpDragAt(t,i,s){
- const e=this.heroFlags.find(i=>i.corpIndex===t);
- return!!e&&(e.startDragExternal(i,s),e.isDragging)}
- update(){
- for(const t of this.heroFlags)t.updateFollow(this.corpHero[t.corpIndex])}
- accumulateAliveHeroes(t){
- let i=0;
- for(const s of this.corpHero)s&&s.isAlive&&!s.removed&&(t(s.x,s.y),i++);
- return i}
- isDragging(){
- for(const t of this.heroFlags)if(t.isDragging)return!0;
- return!1}
- getCorpAnchor(t){
- if(t<0||t>=this.corpCount)return null;
- const i=this.corpHero[t];
- if(i&&i.isAlive&&!i.removed)return{
- x:i.x,y:i.y}
- ;
- let s=0,e=0,n=0;
- for(const h of this.corpUnits[t])h.isAlive&&!h.removed&&(s+=h.x,e+=h.y,n++);
- return n>0?{
- x:s/n,y:e/n}
- :null}
- isWaypointValid(i,s){
- const e=t.EDGE_MARGIN;
- return!(i<e||i>this.fieldW-e||s<e||s>this.fieldH-e||_0.enabled&&_0.isBlocked(i,s))}
- snapWaypoint(i,s){
- const e=t.EDGE_MARGIN;
- let n=Math.max(e,Math.min(this.fieldW-e,i)),h=Math.max(e,Math.min(this.fieldH-e,s));
- if(_0.enabled&&_0.isBlocked(n,h)){
- const t=_0.snapToNearestPassable(n,h,240);
- n=t.x,h=t.y}
- return{
- x:n,y:h}
- }
- issueCorpWaypoint(i,s,e){
- const n=this.corpUnits[i];
- if(!n||0===n.length)return;
- const h=[];
- for(const t of n)t.isAlive&&!t.removed&&h.push(t);
- if(0===h.length)return;
- const r=this.snapWaypoint(s,e);
- this.disposeCommandFlow(i);
- let o=null;
- if(_0.enabled){
- const s=t.COMMAND_GOAL_SIZE;
- o=new X8,o.build(this.fieldW,this.fieldH,{
- x:r.x-s/2,y:r.y-s/2,w:s,h:s}
- ),this.commandFlow[i]=o}
- for(const a of h)a.target&&(a.target.removeBlockedEnemy(a),a.target=null),a.beginCommandMove(r.x,r.y,o,t.COMMAND_SPEED_MULT,t.COMMAND_WAIT_FRAMES)}
- disposeCommandFlow(t){
- const i=this.commandFlow[t];
- i&&(i.dispose(),this.commandFlow[t]=null)}
- bindFlagCallbacks(t,i){
- t.validate=(t,i)=>this.isWaypointValid(t,i),t.snap=(t,i)=>this.snapWaypoint(t,i),t.onDrop=(t,s)=>this.issueCorpWaypoint(i,t,s),t.onDragStart=(t,i,s)=>{
- var e;
- return null==(e=this.ghost)?void 0:e.begin(t,this.corpHeroKind[t],this.corpSoldierKind[t],i,s)}
- ,t.onDragMove=(t,i,s)=>{
- var e;
- return null==(e=this.ghost)?void 0:e.update(t,i,s)}
- ,t.onDragEnd=()=>{
- var t;
- return null==(t=this.ghost)?void 0:t.hide()}
- }
- destroyFlagsOnly(){
- for(const t of this.heroFlags)t.dispose();
- this.heroFlags.length=0,this.ghost=null,this.flagLayer&&(this.flagLayer.removeFromParent(),this.flagLayer.destroy({
- children:!0}
- ),this.flagLayer=null)}
- destroy(){
- this.destroyFlagsOnly();
- for(let t=0;
- t<this.corpCount;
- t++)this.disposeCommandFlow(t)}
- }
- ;
- Kt(T7,"CorpFlagCommander"),zt(T7,"COMMAND_SPEED_MULT",2.5),zt(T7,"COMMAND_WAIT_FRAMES",60),zt(T7,"COMMAND_GOAL_SIZE",64),zt(T7,"EDGE_MARGIN",8);
- let C7=T7;
- const k7=class t{
- constructor(t){
- zt(this,"opt"),zt(this,"mode","follow"),zt(this,"target","center"),zt(this,"panCatcher",null),zt(this,"panning",!1),zt(this,"lastPanX",0),zt(this,"lastPanY",0),zt(this,"freeIdleFrames",0),this.opt=t}
- setup(){
- this.createPanCatcher(),this.setTarget("center"),this.snapToTarget()}
- update(){
- if(this.opt.isFlagDragging())return;
- if(this.panning)return;
- if("free"===this.mode){
- if(++this.freeIdleFrames<t.FREE_RETURN_DELAY)return;
- this.mode="follow"}
- const i=this.opt.getAnchor(this.target);
- if(!i)return;
- const s=this.clampOffset(i.x,i.y),e=DB.getInstance();
- e.x+=(s.x-e.x)*t.FOLLOW_LERP,e.y+=(s.y-e.y)*t.FOLLOW_LERP}
- setTarget(t){
- this.mode="follow",this.target=t}
- snapToTarget(){
- const t=this.opt.getAnchor(this.target);
- if(!t)return;
- const i=this.clampOffset(t.x,t.y),s=DB.getInstance();
- s.x=i.x,s.y=i.y}
- clampOffset(t,i){
- const s=KA.stageWidth||640,e=KA.stageHeight||1130,n=s-this.opt.fieldW,h=e-this.opt.fieldH;
- let r=s/2-t,o=e/2-i;
- return r=Math.min(0,Math.max(n,r)),o=Math.min(0,Math.max(h,o)),{
- x:r,y:o}
- }
- createPanCatcher(){
- const t=new Gf;
- t.label="CamPanCatcher",t.hitArea=new Pi(0,0,this.opt.fieldW,this.opt.fieldH),t.eventMode="static",t.on("pointerdown",this.onPanDown,this),DB.getInstance().addChild(t),this.panCatcher=t}
- onPanDown(t){
- if(this.opt.isFlagDragging())return;
- if(this.opt.onFieldDown&&this.opt.onFieldDown(t.global.x,t.global.y))return;
- this.panning=!0,this.mode="free",this.freeIdleFrames=0,this.lastPanX=t.global.x,this.lastPanY=t.global.y;
- const i=KA.stage;
- i&&(i.on("globalpointermove",this.onPanMove,this),i.on("pointerup",this.onPanUp,this),i.on("pointerupoutside",this.onPanUp,this))}
- onPanMove(t){
- if(!this.panning)return;
- const i=t.global.x-this.lastPanX,s=t.global.y-this.lastPanY;
- this.lastPanX=t.global.x,this.lastPanY=t.global.y;
- const e=KA.stageWidth||640,n=KA.stageHeight||1130,h=e-this.opt.fieldW,r=n-this.opt.fieldH,o=DB.getInstance();
- o.x=Math.min(0,Math.max(h,o.x+i)),o.y=Math.min(0,Math.max(r,o.y+s))}
- onPanUp(t){
- this.panning&&(this.panning=!1,this.detachPanListeners())}
- detachPanListeners(){
- const t=KA.stage;
- t&&(t.off("globalpointermove",this.onPanMove,this),t.off("pointerup",this.onPanUp,this),t.off("pointerupoutside",this.onPanUp,this))}
- destroy(){
- this.detachPanListeners(),this.panning=!1,this.panCatcher&&(this.panCatcher.off("pointerdown",this.onPanDown,this),this.panCatcher.removeFromParent(),this.panCatcher.destroy(),this.panCatcher=null)}
- }
- ;
- Kt(k7,"CorpCameraController"),zt(k7,"FOLLOW_LERP",.05),zt(k7,"FREE_RETURN_DELAY",150);
- let O7=k7;
- const I7=class t{
- constructor(i,s,e,n){
- zt(this,"root"),zt(this,"inputZone"),zt(this,"arrowLayer"),zt(this,"spine",null),zt(this,"controlBone",null),zt(this,"arrowTexture",null),zt(this,"aim",0),zt(this,"baseX",0),zt(this,"baseY",0),zt(this,"fieldW",0),zt(this,"fieldH",0),zt(this,"dragging",!1),zt(this,"down",!1),zt(this,"phase","idle"),zt(this,"cooldownTimer",t.GAUGE_FULL_FRAMES),zt(this,"gauge",null),zt(this,"arrows",[]),zt(this,"hitCheck",null),this.baseX=i,this.baseY=s,this.fieldW=e,this.fieldH=n;
- const h=DB.getInstance();
- this.arrowLayer=new Be,this.arrowLayer.label="RaidCrossbowArrows",this.arrowLayer.eventMode="none",h.addChild(this.arrowLayer),this.root=new Be,this.root.label="RaidCrossbow",this.root.position.set(this.baseX,this.baseY),this.root.eventMode="none",tB.getInstance().addChild(this.root),this.inputZone=new Be,this.inputZone.position.set(this.baseX,this.baseY),this.inputZone.eventMode="static",this.inputZone.cursor="pointer",this.inputZone.hitArea=new Pi(t.HIT_X,t.HIT_Y,t.HIT_W,t.HIT_H),this.inputZone.on("pointerdown",this.onDown,this),h.addChild(this.inputZone),this.gauge=new Gf,this.gauge.eventMode="none",this.gauge.position.set(-60,t.GAUGE_Y),this.root.addChild(this.gauge),this.loadSpine()}
- async loadSpine(){
- const i=YA.getBase(),s=t.SPINE_KEY,e=`weapon_${
- s}
- _json`,n=`weapon_${
- s}
- _atlas`;
- try{
- od.add({
- alias:e,src:`${
- i}
- assets/spines/${
- s}
- .json`}
- ),od.add({
- alias:n,src:`${
- i}
- assets/spines/${
- s}
- .atlas`}
- )}
- catch{
- }
- try{
- await od.load([e,n])}
- catch(_gt){
- return}
- const h=Y$.from({
- skeleton:e,atlas:n}
- );
- h.scale.set(t.SCALE),h.autoUpdate=!0,h.rotation=this.down?Math.PI:0,this.spine=h,this.controlBone=h.skeleton.findBone("control"),h.beforeUpdateWorldTransforms=()=>{
- if(this.controlBone&&(this.controlBone.rotation=t.CONTROL_BASE_DEG+this.aim*t.RAD2DEG*t.AIM_SIGN*(this.down?-1:1)),"charging"===this.phase){
- const i=h.state.getCurrent(0);
- i&&i.trackTime>=t.CHARGE_MAX_TIME&&(i.timeScale=0)}
- }
- ,h.state.addListener({
- event:Kt((t,i)=>{
- "hit"===i.data.name&&"firing"===this.phase&&(this.spawnArrow(),this.phase="recoil")}
- ,"event"),complete:Kt(t=>{
- var i;
- "shot"===(null==(i=t.animation)?void 0:i.name)&&this.onShotComplete()}
- ,"complete")}
- ),this.root.addChildAt(h,0),this.loadArrowTexture(`${
- i}
- assets/spines/${
- s}
- .png`)}
- async loadArrowTexture(i){
- try{
- const s=await od.load(i),e=t.ARROW_FRAME;
- this.arrowTexture=new ss({
- source:s.source,frame:new Pi(e.x,e.y,e.w,e.h)}
- )}
- catch(_gt){
- }
- }
- onDown(i){
- if("idle"!==this.phase||!this.spine)return;
- if(this.cooldownTimer<t.GAUGE_FULL_FRAMES)return;
- i.stopPropagation(),this.dragging=!0,this.aim=this.aimToward(i.global.x,i.global.y),this.phase="charging",this.spine.state.setAnimation(0,"shot",!1).timeScale=t.CHARGE_TIME_SCALE;
- const s=KA.stage;
- s&&(s.on("globalpointermove",this.onMove,this),s.on("pointerup",this.onUp,this),s.on("pointerupoutside",this.onUp,this))}
- onMove(t){
- this.dragging&&(this.aim=this.aimToward(t.global.x,t.global.y))}
- aimToward(i,s){
- const e=this.root.getGlobalPosition(),n=i-e.x,h=s-e.y,r=this.down?Math.atan2(n,h):Math.atan2(n,-h);
- return Math.max(-t.AIM_MAX_RAD,Math.min(t.AIM_MAX_RAD,r))}
- onUp(i){
- var s;
- if(this.dragging&&(this.dragging=!1,this.detachStageListeners(),"charging"===this.phase)){
- this.phase="firing";
- const i=null==(s=this.spine)?void 0:s.state.getCurrent(0);
- i&&(i.timeScale=t.CHARGE_TIME_SCALE)}
- }
- detachStageListeners(){
- const t=KA.stage;
- t&&(t.off("globalpointermove",this.onMove,this),t.off("pointerup",this.onUp,this),t.off("pointerupoutside",this.onUp,this))}
- spawnArrow(){
- if(!this.arrowTexture)return;
- const i=Math.sin(this.aim),s=this.down?Math.cos(this.aim):-Math.cos(this.aim),e=new We(this.arrowTexture);
- e.anchor.set(.5,.5),e.scale.set(t.SCALE),e.position.set(this.baseX+i*t.ARROW_SPAWN_OFFSET,this.baseY+s*t.ARROW_SPAWN_OFFSET),e.rotation=this.down?Math.PI-this.aim:this.aim,this.arrowLayer.addChild(e),this.arrows.push({
- sp:e,vx:i*t.ARROW_SPEED,vy:s*t.ARROW_SPEED}
- ),this.cooldownTimer=0}
- drawGauge(){
- if(!this.gauge)return;
- const i=Math.min(1,this.cooldownTimer/t.GAUGE_FULL_FRAMES),s=i>=1,e=t.GAUGE_W,n=t.GAUGE_H,h=n/2,r=this.gauge;
- r.clear(),r.roundRect(0,0,e,n,h).fill({
- color:1710618,alpha:.85}
- );
- const o=i*e;
- o>.5&&r.roundRect(0,0,o,n,h).fill({
- color:s?3855962:16757051}
- ),r.roundRect(0,0,e,n,h).stroke({
- width:2,color:0,alpha:.8}
- )}
- onShotComplete(){
- this.phase="idle",this.spine&&this.spine.state.clearTrack(0)}
- setHitCheck(t){
- this.hitCheck=t}
- setFacingDown(t){
- this.down=t,this.spine&&(this.spine.rotation=t?Math.PI:0)}
- setChargeSeconds(i){
- const s=Math.round(60*i);
- this.cooldownTimer=Math.max(0,Math.min(t.GAUGE_FULL_FRAMES,s))}
- update(){
- if(this.cooldownTimer<t.GAUGE_FULL_FRAMES&&this.cooldownTimer++,this.drawGauge(),0===this.arrows.length)return;
- const i=200;
- for(let t=this.arrows.length-1;
- t>=0;
- t--){
- const s=this.arrows[t],e=s.sp.x,n=s.sp.y;
- s.sp.x+=s.vx,s.sp.y+=s.vy,this.hitCheck&&this.hitCheck(e,n,s.sp.x,s.sp.y),(s.sp.y<-i||s.sp.y>this.fieldH+i||s.sp.x<-i||s.sp.x>this.fieldW+i)&&(s.sp.removeFromParent(),s.sp.destroy(),this.arrows.splice(t,1))}
- }
- destroy(){
- this.detachStageListeners(),this.dragging=!1;
- for(const t of this.arrows)t.sp.removeFromParent(),t.sp.destroy();
- this.arrows.length=0,this.inputZone.removeAllListeners(),this.inputZone.removeFromParent(),this.inputZone.destroy(),this.root.removeFromParent(),this.root.destroy({
- children:!0}
- ),this.arrowLayer.removeFromParent(),this.arrowLayer.destroy({
- children:!0}
- )}
- }
- ;
- Kt(I7,"RaidCrossbow"),zt(I7,"SPINE_KEY","raids/weapon/crossbow_tank"),zt(I7,"AIM_MAX_RAD",60*Math.PI/180),zt(I7,"CONTROL_BASE_DEG",0),zt(I7,"AIM_SIGN",-1),zt(I7,"RAD2DEG",180/Math.PI),zt(I7,"SCALE",1),zt(I7,"HIT_X",-60),zt(I7,"HIT_Y",-120),zt(I7,"HIT_W",120),zt(I7,"HIT_H",110),zt(I7,"ARROW_SPEED",26),zt(I7,"ARROW_SPAWN_OFFSET",60),zt(I7,"CHARGE_MAX_TIME",2.6),zt(I7,"GAUGE_FULL_FRAMES",2400),zt(I7,"CHARGE_TIME_SCALE",2),zt(I7,"GAUGE_W",120),zt(I7,"GAUGE_H",12),zt(I7,"GAUGE_Y",50),zt(I7,"ARROW_FRAME",{
- x:48,y:168,w:28,h:111}
- );
- let x7=I7;
- const N7={
- tank:{
- type:"tank",label:"탱커의 휘장",shortLabel:"탱커",color:14175295,cooldownFrames:1800,activeDurationFrames:300,passive:{
- incomingDamageMult:.8,maxHpMult:1.3,aggroDamageMult:1.8}
- ,active:{
- aggroDamageMult:1.5,forceBossTargetFrames:300}
- }
- ,rogue:{
- type:"rogue",label:"로그의 휘장",shortLabel:"로그",color:3063663,cooldownFrames:2100,activeDurationFrames:600,passive:{
- attackSpeedMult:1.3,moveSpeedMult:1.2,maxHpMult:.8}
- ,active:{
- attackSpeedBuff:.3,attackDamageBuff:.2,aggroDamageMult:.8}
- }
- ,mage:{
- type:"mage",label:"마법사의 휘장",shortLabel:"마법",color:5994751,cooldownFrames:2400,activeDurationFrames:600,passive:{
- manaGainMult:1.3,attackDamageMult:1.3,maxHpMult:.8,moveSpeedMult:.9}
- ,active:{
- bossAttackSpeedDebuff:-.3,bossDefenseDebuff:-.2}
- }
- ,healer:{
- type:"healer",label:"치유의 휘장",shortLabel:"치유",color:16763212,cooldownFrames:3e3,activeDurationFrames:600,passive:{
- attackDamageMult:1.1,maxHpMult:1.2,healIntervalFrames:300,healPercent:10}
- ,active:{
- raidHealIntervalFrames:60,raidHealPercent:5}
- }
- }
- ,P7=["tank","rogue","mage","healer","rogue"],R7=class t{
- constructor(i,s,e,n,h,r=[],o,a){
- zt(this,"root"),zt(this,"bossFace",new vK),zt(this,"bossName"),zt(this,"bossMult"),zt(this,"bossBar",new Gf),zt(this,"timerText"),zt(this,"lastTimerStr",""),zt(this,"closeButton"),zt(this,"hpGauges",[]),zt(this,"hpTexts",[]),zt(this,"lastHpStr",[]),zt(this,"aggroGauges",[]),zt(this,"aggroIcons",[]),zt(this,"aggroTexts",[]),zt(this,"lastAggroStr",[]),zt(this,"dmgGauges",[]),zt(this,"dmgTexts",[]),zt(this,"lastDmgStr",[]),zt(this,"emblemDefs",[]),zt(this,"emblemButtonBgs",[]),zt(this,"emblemCooldownTexts",[]),zt(this,"onCorpClick"),zt(this,"whiteFill",1),zt(this,"lastN",-1),zt(this,"lastMultStr",""),this.onCorpClick=a,this.root=new Be,this.root.label="RaidHud",this.root.eventMode="passive",Det.getInstance().addChild(this.root),this.closeButton=this.createCloseButton(h);
- const c=new Sg({
- fontSize:20,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:4}
- }
- ),l=new Sg({
- fontSize:16,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:4}
- }
- ),u=new Sg({
- fontSize:11,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:3}
- }
- ),d=t.BOSS_X,f=t.BOSS_Y;
- this.bossFace.scale.set(t.FACE_SCALE),this.bossFace.position.set(d,f),s>0&&this.bossFace.setDataWithKindNum(s),this.root.addChild(this.bossFace);
- const p=d+this.bossFace.width+10;
- this.bossName=new Wg({
- text:i||"BOSS",style:c}
- ),this.bossName.position.set(p,f),this.root.addChild(this.bossName);
- const g=p,m=f+30;
- this.bossBar.position.set(g,m),this.root.addChild(this.bossBar),this.bossMult=new Wg({
- text:"×100",style:l}
- ),this.bossMult.anchor.set(.5,.5),this.bossMult.position.set(g+t.BAR_W/2,m+t.BAR_H/2),this.root.addChild(this.bossMult);
- const w=KA.stageWidth||640;
- this.timerText=new Wg({
- text:"3:00",style:new Sg({
- fontSize:24,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:4}
- }
- )}
- ),this.timerText.anchor.set(.5,0),this.timerText.position.set(w/2,18),this.root.addChild(this.timerText);
- const v=(KA.stageHeight||1130)-t.CORP_TOP_FROM_BOTTOM,b=Math.max(e.length,n.length),y=b*t.CORP_PANEL_W+Math.max(0,b-1)*t.CORP_COL_GAP,_=Math.max(8,((KA.stageWidth||640)-y)/2);
- for(let M=0;
- M<b;
- M++){
- const i=_+M*(t.CORP_PANEL_W+t.CORP_COL_GAP),s=i+t.CORP_PANEL_W/2,h=i+(t.CORP_PANEL_W-t.CORP_GAUGE_W)/2,a=new vK;
- a.scale.set(t.HERO_ICON_SCALE);
- const c=e[M]??0;
- c>0&&a.setDataWithKindNum(c);
- const l=a.width,d=a.height,f=new vK;
- f.scale.set(t.HERO_ICON_SCALE*t.SOLDIER_ICON_RATIO);
- const p=n[M]??0;
- p>0&&f.setDataWithKindNum(p);
- const g=f.width,m=f.height,w=s-(l+t.ICON_GAP+g)/2,b=v+Math.max(d,m);
- a.position.set(w,b-d),f.position.set(w+l+t.ICON_GAP,b-m),this.root.addChild(f),this.root.addChild(a);
- const y=M;
- for(const t of[a,f])t.eventMode="static",t.cursor="pointer",t.on("pointerup",()=>{
- var t;
- return null==(t=this.onCorpClick)?void 0:t.call(this,y)}
- );
- const E=new Gf;
- E.position.set(h,v+t.HP_GAUGE_Y),this.root.addChild(E),this.hpGauges.push(E);
- const A=new Wg({
- text:"",style:u}
- );
- A.anchor.set(.5,.5),A.position.set(i+t.CORP_PANEL_W/2,v+t.HP_GAUGE_Y+t.HP_GAUGE_H/2),this.root.addChild(A),this.hpTexts.push(A),this.lastHpStr.push("");
- const S=new Gf;
- S.position.set(h,v+t.AGGRO_GAUGE_Y),this.root.addChild(S),this.aggroGauges.push(S);
- const T=new Wg({
- text:"",style:u}
- );
- T.anchor.set(.5,.5),T.position.set(i+t.CORP_PANEL_W/2,v+t.AGGRO_GAUGE_Y+t.AGGRO_GAUGE_H/2),this.root.addChild(T),this.aggroTexts.push(T),this.lastAggroStr.push("");
- const C=new We(ZA.getTexture("UI_Ekkorr","Icon_Monster"));
- C.anchor.set(.5,.5),C.scale.set(.65),C.position.set(h,v+t.AGGRO_GAUGE_Y+t.AGGRO_GAUGE_H/2),C.visible=!1,this.root.addChild(C),this.aggroIcons.push(C);
- const k=new Gf;
- k.position.set(h,v+t.DMG_GAUGE_Y),this.root.addChild(k),this.dmgGauges.push(k);
- const O=new Wg({
- text:"",style:u}
- );
- O.anchor.set(.5,.5),O.position.set(i+t.CORP_PANEL_W/2,v+t.DMG_GAUGE_Y+t.DMG_GAUGE_H/2),this.root.addChild(O),this.dmgTexts.push(O),this.lastDmgStr.push("");
- const I=r[M]??null,x=this.createEmblemButton(M,h,v+t.EMBLEM_BUTTON_Y,I,o);
- this.root.addChild(x)}
- }
- update(i){
- var s,e;
- const n=i.bossMaxHp>0?i.bossMaxHp:1,h=Math.max(0,Math.min(100,i.bossHp/n*100));
- let r=Math.ceil(h);
- r>100&&(r=100),r<0&&(r=0);
- let o=h-(r-1);
- o<0&&(o=0),o>1&&(o=1),r!==this.lastN?(this.whiteFill=o,this.lastN=r):(this.whiteFill<o&&(this.whiteFill=o),this.whiteFill+=(o-this.whiteFill)*t.WHITE_EASE,this.whiteFill<o&&(this.whiteFill=o)),this.drawBossBar(o,this.whiteFill);
- const a="×"+r;
- a!==this.lastMultStr&&(this.bossMult.text=a,this.lastMultStr=a);
- const c=Math.max(0,Math.floor(i.remainSec)),l=c%60,u=`${
- Math.floor(c/60)}
- :${
- l<10?"0"+l:l}
- `;
- u!==this.lastTimerStr&&(this.timerText.text=u,this.lastTimerStr=u);
- let d=0,f=0,p=-1;
- for(let t=0;
- t<i.corps.length;
- t++){
- const s=i.corps[t];
- s&&(s.dmg>d&&(d=s.dmg),s.alive>0&&s.aggro>f&&(f=s.aggro,p=t))}
- for(let t=0;
- t<this.aggroGauges.length;
- t++){
- const n=i.corps[t];
- if(!n){
- this.drawHpGauge(this.hpGauges[t],0),this.hpTexts[t].text="",this.lastHpStr[t]="",this.drawAggroGauge(this.aggroGauges[t],0,!1),this.aggroIcons[t].visible=!1,this.aggroTexts[t].text="",this.lastAggroStr[t]="",this.drawDmgGauge(this.dmgGauges[t],0),this.dmgTexts[t].text="",this.lastDmgStr[t]="",this.updateEmblemButton(t,(null==(s=i.emblems)?void 0:s[t])??null);
- continue}
- const h=n.maxHp>0?Math.min(1,Math.max(0,n.hp/n.maxHp)):0;
- this.drawHpGauge(this.hpGauges[t],h);
- const r=`${
- Math.round(100*h)}
- %`;
- r!==this.lastHpStr[t]&&(this.hpTexts[t].text=r,this.lastHpStr[t]=r);
- const o=f>0?Math.min(1,n.aggro/f):0,a=t===p;
- this.drawAggroGauge(this.aggroGauges[t],o,a),this.aggroIcons[t].visible=a;
- const c=$D.displayLargeNumberAsAlphabet(Math.max(0,Math.round(n.aggro)));
- c!==this.lastAggroStr[t]&&(this.aggroTexts[t].text=c,this.lastAggroStr[t]=c);
- const l=d>0?Math.min(1,n.dmg/d):0;
- this.drawDmgGauge(this.dmgGauges[t],l);
- const u=$D.displayLargeNumberAsAlphabet(Math.max(0,n.dmg));
- u!==this.lastDmgStr[t]&&(this.dmgTexts[t].text=u,this.lastDmgStr[t]=u),this.updateEmblemButton(t,(null==(e=i.emblems)?void 0:e[t])??null)}
- }
- createEmblemButton(i,s,e,n,h){
- const r=t.EMBLEM_BUTTON_W,o=t.EMBLEM_BUTTON_H,a=new Be;
- a.position.set(s,e),a.label=`RaidEmblemButton${
- i}
- `;
- const c=new Gf;
- a.addChild(c),this.emblemButtonBgs.push(c),this.emblemDefs.push(n);
- const l=new Wg({
- text:(null==n?void 0:n.shortLabel)??"휘장",style:new Sg({
- fontSize:17,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:4}
- }
- )}
- );
- l.anchor.set(.5,.5),l.position.set(r/2,o/2),a.addChild(l);
- const u=new Wg({
- text:"",style:new Sg({
- fontSize:14,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:3}
- }
- )}
- );
- return u.anchor.set(1,.5),u.position.set(r-8,o/2),a.addChild(u),this.emblemCooldownTexts.push(u),n&&h?(a.eventMode="static",a.cursor="pointer",a.hitArea=new Pi(0,0,r,o),a.on("pointerup",()=>h(i))):(a.eventMode="none",a.alpha=.4),this.drawEmblemButtonBg(c,n,!1,!1),a}
- updateEmblemButton(t,i){
- const s=this.emblemButtonBgs[t],e=this.emblemDefs[t],n=this.emblemCooldownTexts[t];
- if(!s||!n)return;
- const h=Math.max(0,(null==i?void 0:i.cooldownRemainingFrames)??0),r=h>0,o=Math.max(0,(null==i?void 0:i.activeRemainingFrames)??0)>0;
- this.drawEmblemButtonBg(s,e,r,o),n.text=r?String(Math.ceil(h/60)):o?"ON":""}
- drawEmblemButtonBg(i,s,e,n){
- const h=t.EMBLEM_BUTTON_W,r=t.EMBLEM_BUTTON_H;
- i.clear(),i.roundRect(0,0,h,r,8).fill({
- color:(null==s?void 0:s.color)??3814181,alpha:s?.9:.45}
- ),e&&i.roundRect(0,0,h,r,8).fill({
- color:0,alpha:.45}
- ),i.roundRect(0,0,h,r,8).stroke({
- width:n?3:2,color:n?8257418:16777215,alpha:n?.95:.55}
- )}
- drawAggroGauge(i,s,e){
- const n=t.CORP_GAUGE_W,h=t.AGGRO_GAUGE_H,r=h/2;
- i.clear(),i.roundRect(0,0,n,h,r).fill({
- color:1710618,alpha:.85}
- );
- const o=s*n;
- o>.5&&i.roundRect(0,0,o,h,r).fill({
- color:e?t.AGGRO_TOP_COLOR:t.AGGRO_COLOR}
- ),i.roundRect(0,0,n,h,r).stroke({
- width:e?2:1,color:e?16777215:0,alpha:e?.95:.7}
- )}
- drawHpGauge(i,s){
- const e=t.CORP_GAUGE_W,n=t.HP_GAUGE_H,h=.5*n;
- i.clear(),i.roundRect(0,0,e,n,h).fill({
- color:1710618,alpha:.9}
- );
- const r=Math.max(0,Math.min(1,s))*e;
- r>.5&&i.roundRect(0,0,r,n,h).fill({
- color:t.HP_GAUGE_COLOR}
- ),i.roundRect(0,0,e,n,h).stroke({
- width:2,color:0,alpha:.8}
- )}
- drawBossBar(i,s){
- const e=t.BAR_W,n=t.BAR_H,h=.4*n,r=this.bossBar;
- r.clear(),r.roundRect(0,0,e,n,h).fill({
- color:1710618,alpha:.92}
- );
- const o=i*e,a=s*e;
- a>o+.5&&r.rect(o,0,a-o,n).fill({
- color:16777215,alpha:.95}
- ),o>.5&&r.rect(0,0,o,n).fill({
- color:t.BOSS_COLOR}
- ),r.roundRect(0,0,e,n,h).stroke({
- width:2,color:0,alpha:.85}
- )}
- drawDmgGauge(i,s){
- const e=t.CORP_GAUGE_W,n=t.DMG_GAUGE_H,h=.5*n;
- i.clear(),i.roundRect(0,0,e,n,h).fill({
- color:1710618,alpha:.9}
- );
- const r=Math.max(0,Math.min(1,s))*e;
- r>.5&&i.roundRect(0,0,r,n,h).fill({
- color:t.DMG_GAUGE_COLOR}
- ),i.roundRect(0,0,e,n,h).stroke({
- width:2,color:0,alpha:.8}
- )}
- createCloseButton(i){
- const s=KA.stageWidth||640,e=t.CLOSE_SIZE,n=t.CLOSE_MARGIN,h=new Be;
- h.position.set(s-n-e,n);
- const r=new Gf;
- r.roundRect(0,0,e,e,10).fill({
- color:0,alpha:.55}
- ).stroke({
- width:2,color:16777215,alpha:.6}
- ),h.addChild(r);
- const o=new Wg({
- text:"X",style:new Sg({
- fontSize:28,fill:16777215,fontWeight:"bold",stroke:{
- color:0,width:3}
- }
- )}
- );
- return o.anchor.set(.5,.5),o.position.set(e/2,e/2),h.addChild(o),h.eventMode="static",h.cursor="pointer",h.hitArea=new Pi(0,0,e,e),h.on("pointerup",()=>queueMicrotask(i)),Det.getInstance().addChild(h),h}
- destroy(){
- this.closeButton.removeAllListeners(),this.closeButton.removeFromParent(),this.closeButton.destroy({
- children:!0}
- ),this.root.removeFromParent(),this.root.destroy({
- children:!0}
- )}
- }
- ;
- Kt(R7,"RaidHud"),zt(R7,"BOSS_X",16),zt(R7,"BOSS_Y",26),zt(R7,"FACE_SCALE",.6),zt(R7,"BAR_W",280),zt(R7,"BAR_H",20),zt(R7,"CORP_TOP_FROM_BOTTOM",196),zt(R7,"CORP_PANEL_W",118),zt(R7,"CORP_COL_GAP",6),zt(R7,"HERO_ICON_SCALE",.504),zt(R7,"SOLDIER_ICON_RATIO",.72),zt(R7,"ICON_GAP",-3),zt(R7,"HP_GAUGE_Y",49),zt(R7,"AGGRO_GAUGE_Y",64),zt(R7,"DMG_GAUGE_Y",79),zt(R7,"CORP_GAUGE_W",100),zt(R7,"HP_GAUGE_H",10),zt(R7,"HP_GAUGE_COLOR",4641641),zt(R7,"DMG_GAUGE_H",12),zt(R7,"DMG_GAUGE_COLOR",16757051),zt(R7,"EMBLEM_BUTTON_Y",104),zt(R7,"EMBLEM_BUTTON_W",100),zt(R7,"EMBLEM_BUTTON_H",42),zt(R7,"AGGRO_GAUGE_H",9),zt(R7,"AGGRO_COLOR",11549230),zt(R7,"AGGRO_TOP_COLOR",16726832),zt(R7,"WHITE_EASE",.1),zt(R7,"BOSS_COLOR",15087916),zt(R7,"CLOSE_SIZE",48),zt(R7,"CLOSE_MARGIN",16);
- let D7=R7;
- const L7=class t{
- constructor(){
- zt(this,"root"),zt(this,"veil"),zt(this,"far"),zt(this,"near"),zt(this,"farP",[]),zt(this,"nearP",[]),zt(this,"w"),zt(this,"h"),zt(this,"phase",0),zt(this,"wdx"),zt(this,"wdy"),this.w=KA.stageWidth||640,this.h=KA.stageHeight||1136;
- const i=Math.hypot(t.WIND_DX,t.WIND_DY)||1;
- this.wdx=t.WIND_DX/i,this.wdy=t.WIND_DY/i,this.root=new Be,this.root.eventMode="none",this.root.zIndex=-1,this.veil=(new Gf).rect(0,0,this.w,this.h).fill(t.VEIL_COLOR),this.veil.alpha=t.VEIL_ALPHA,this.veil.eventMode="none",this.root.addChild(this.veil),this.far=new Gf,this.far.eventMode="none",this.root.addChild(this.far),this.near=new Gf,this.near.eventMode="none",this.root.addChild(this.near),this.farP=this.spawnParticles(t.FAR_COUNT,t.FAR_SPEED_MIN,t.FAR_SPEED_MAX,t.FAR_LEN_MIN,t.FAR_LEN_MAX),this.nearP=this.spawnParticles(t.NEAR_COUNT,t.NEAR_SPEED_MIN,t.NEAR_SPEED_MAX,t.NEAR_LEN_MIN,t.NEAR_LEN_MAX);
- const s=new We(this.buildVignetteTexture());
- s.width=this.w,s.height=this.h,s.eventMode="none",this.root.addChild(s),Det.getInstance().addChildAt(this.root,0),GM.getInstance().add(this.update,this)}
- spawnParticles(t,i,s,e,n){
- const h=[];
- for(let r=0;
- r<t;
- r++)h.push({
- x:Math.random()*this.w,y:Math.random()*this.h,speed:i+Math.random()*(s-i),len:e+Math.random()*(n-e)}
- );
- return h}
- respawn(t){
- const i=this.wdx>=0,s=this.wdy>=0;
- Math.random()<.5?(t.x=i?-5-30*Math.random():this.w+5+30*Math.random(),t.y=Math.random()*this.h):(t.x=Math.random()*this.w,t.y=s?-5-30*Math.random():this.h+5+30*Math.random())}
- buildVignetteTexture(){
- const i=256,s=document.createElement("canvas");
- s.width=i,s.height=i;
- const e=s.getContext("2d"),n=e.createRadialGradient(128,117.76,46.08,128,128,158.72);
- return n.addColorStop(0,"rgba(255,200,120,0)"),n.addColorStop(.7,"rgba(150,80,25,0.10)"),n.addColorStop(1,`rgba(110,55,18,${
- t.VIGNETTE_EDGE_ALPHA}
- )`),e.fillStyle=n,e.fillRect(0,0,i,i),ss.from(s)}
- updateLayer(t,i,s,e,n){
- t.clear();
- const h=this.wdx,r=this.wdy;
- for(const o of i)o.x+=h*o.speed,o.y+=r*o.speed,(o.x<-50||o.x>this.w+50||o.y<-50||o.y>this.h+50)&&this.respawn(o),t.moveTo(o.x,o.y),t.lineTo(o.x-h*o.len,o.y-r*o.len);
- t.stroke({
- width:n,color:s,alpha:e}
- )}
- update(){
- this.phase+=.04,this.veil.alpha=t.VEIL_ALPHA+Math.sin(this.phase)*t.VEIL_PULSE,this.updateLayer(this.far,this.farP,t.FAR_COLOR,t.FAR_ALPHA,t.FAR_WIDTH),this.updateLayer(this.near,this.nearP,t.NEAR_COLOR,t.NEAR_ALPHA,t.NEAR_WIDTH)}
- destroy(){
- GM.getInstance().remove(this.update,this),this.root.removeFromParent(),this.root.destroy({
- children:!0}
- )}
- }
- ;
- Kt(L7,"RaidMapEffect"),zt(L7,"WIND_DX",-1),zt(L7,"WIND_DY",.15),zt(L7,"VIGNETTE_EDGE_ALPHA",.55),zt(L7,"VEIL_COLOR",13479795),zt(L7,"VEIL_ALPHA",.18),zt(L7,"VEIL_PULSE",.07),zt(L7,"FAR_COUNT",420),zt(L7,"FAR_SPEED_MIN",6),zt(L7,"FAR_SPEED_MAX",10),zt(L7,"FAR_LEN_MIN",6),zt(L7,"FAR_LEN_MAX",14),zt(L7,"FAR_COLOR",16115912),zt(L7,"FAR_ALPHA",.22),zt(L7,"FAR_WIDTH",1.5),zt(L7,"NEAR_COUNT",320),zt(L7,"NEAR_SPEED_MIN",11),zt(L7,"NEAR_SPEED_MAX",16),zt(L7,"NEAR_LEN_MIN",10),zt(L7,"NEAR_LEN_MAX",22),zt(L7,"NEAR_COLOR",16773330),zt(L7,"NEAR_ALPHA",.52),zt(L7,"NEAR_WIDTH",2.5);
- let G7=L7;
- const B7=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.RAID),zt(this,"boss",null),zt(this,"terrainOverlay",null),zt(this,"allyFlowField",null),zt(this,"enemyFlowField",null),zt(this,"separationGrid",new Map),zt(this,"separationFlatList",[]),zt(this,"rvoPool",[]),zt(this,"rvoNbAgents",[]),zt(this,"rvoNbDist",[]),zt(this,"rvoNbIdx",[]),zt(this,"heroKindNums",[...t.DEFAULT_HERO_KINDS]),zt(this,"soldierKindNums",[...t.DEFAULT_SOLDIER_KINDS]),zt(this,"raidOptions",null),zt(this,"bossKindNum",t.BOSS_KIND_NUM),zt(this,"bossStartHp",0),zt(this,"resultReported",!1),zt(this,"spawnedVOs",[]),zt(this,"speedHelper",new U8("ef2.raid.battleSpeed")),zt(this,"corpCommander",new C7(t.CORP_COUNT)),zt(this,"camera",null),zt(this,"mapEffect",null),zt(this,"hud",null),zt(this,"corpUnits",[]),zt(this,"selectedCorpIndex",-1),zt(this,"corpAggro",[]),zt(this,"prevCorpDmg",[]),zt(this,"corpHero",[]),zt(this,"aggroLeader",-1),zt(this,"aggroChallenger",-1),zt(this,"aggroChallengerFrames",0),zt(this,"aggroTargetCorp",-1),zt(this,"forcedAggroCorp",-1),zt(this,"forcedAggroFrames",0),zt(this,"raidEmblemStates",[]),zt(this,"crossbows",[]),zt(this,"crossbowDebug",null),zt(this,"rangedByCorp",[]),zt(this,"meleeSoldiers",[])}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- getRaidBossDamageMultiplier(){
- for(const i of t.BOSS_DAMAGE_SCALE_STEPS)if(this.battleTime>=i.frame)return i.multiplier;
- return 1}
- async startBattle(i){
- var s,e;
- this.cleanup(),this.raidOptions=i??null,this.resultReported=!1,this.bossKindNum=(null==i?void 0:i.bossKindNum)&&i.bossKindNum>0?i.bossKindNum:t.BOSS_KIND_NUM,(null==i?void 0:i.squads)?this.applySquads(i.squads):(this.heroKindNums=[...t.DEFAULT_HERO_KINDS],this.soldierKindNums=[...t.DEFAULT_SOLDIER_KINDS]),DB.getInstance().setDay(),DB.getInstance().scale.set(1,1),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.rangedByCorp=Array.from({
- length:t.CORP_COUNT}
- ,()=>[]),this.meleeSoldiers=[],this.corpUnits=Array.from({
- length:t.CORP_COUNT}
- ,()=>[]),this.corpAggro=new Array(t.CORP_COUNT).fill(0),this.prevCorpDmg=new Array(t.CORP_COUNT).fill(0),this.corpHero=new Array(t.CORP_COUNT).fill(null),this.aggroLeader=-1,this.aggroChallenger=-1,this.aggroChallengerFrames=0,this.aggroTargetCorp=-1,this.forcedAggroCorp=-1,this.forcedAggroFrames=0,this.initializeRaidEmblems(),this.unitScale=.7,this.applyBackground(),await this.loadRaidBattleAssets(),KG.getInstance().visible=!0,await this.setupTerrain(),this.corpCommander.reset(t.FIELD_WIDTH,t.FIELD_HEIGHT);
- for(let h=0;
- h<t.CORP_COUNT;
- h++)await this.setupCorp(h);
- await this.setupBoss(),this.setupEnemyLists(),this.snapUnitsToTerrain(),N9t.getInstance().switchToBattle(this),this.mapEffect=new G7,this.speedHelper.enter(),this.applyBackground(),KG.getInstance().visible=!0,this.updateZIndexSorting(),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),WG.getInstance().add(this.execute,this),this.camera=new O7({
- corpCount:t.CORP_COUNT,fieldW:t.FIELD_WIDTH,fieldH:t.FIELD_HEIGHT,getAnchor:Kt(t=>this.getCameraAnchor(t),"getAnchor"),isFlagDragging:Kt(()=>this.corpCommander.isDragging(),"isFlagDragging"),onFieldDown:Kt((t,i)=>this.tryStartCorpDragAt(t,i),"onFieldDown")}
- ),this.camera.setup(),this.corpCommander.createFlags();
- const n=(null==(s=this.raidOptions)?void 0:s.bossName)??(null==(e=vx.getInstance().getBookVO(this.bossKindNum))?void 0:e.name)??"BOSS";
- this.hud=new D7(n,this.bossKindNum,this.heroKindNums,this.soldierKindNums,()=>this.returnToMain(),this.getRaidEmblemDefinitionsForHud(),t=>this.activateRaidEmblem(t),t=>this.onCorpSelect(t)),this.speedHelper.attachButton(Det.getInstance(),16,88),this.crossbows=[{
- x:500,y:200,chargeSec:15}
- ,{
- x:1e3,y:300,chargeSec:30}
- ,{
- x:700,y:1e3,chargeSec:0}
- ].map(i=>{
- var s;
- const e=new x7(i.x,i.y,t.FIELD_WIDTH,t.FIELD_HEIGHT);
- return e.setHitCheck((t,i,s,e)=>this.testArrowHit(t,i,s,e)),e.setChargeSeconds(i.chargeSec),e.setFacingDown(i.y<((null==(s=this.boss)?void 0:s.y)??600)),e}
- ),this.crossbowDebug=new Gf,this.crossbowDebug.eventMode="none",DB.getInstance().addChild(this.crossbowDebug),this.corpCommander.bringToTop()}
- applyBackground(){
- const i=ZA.getTexture("BgRaid2","raid1"),s=t.BG_SCALE;
- KG.getInstance().setMapBackground("BgRaid2","raid1",i.width*s,i.height*s)}
- async loadRaidBattleAssets(){
- ZA.hasSheet("RaidBattle")||await ZA.generateTexture("RaidBattle","ktx2",!1)}
- async setupTerrain(){
- _0.enabled=!1}
- teardownTerrain(){
- this.terrainOverlay&&(this.terrainOverlay.removeFromParent(),this.terrainOverlay.destroy({
- children:!0}
- ),this.terrainOverlay=null),this.allyFlowField&&(this.allyFlowField.dispose(),this.allyFlowField=null),this.enemyFlowField&&(this.enemyFlowField.dispose(),this.enemyFlowField=null),_0.unload()}
- snapUnitsToTerrain(){
- const t=Kt(t=>{
- if(!t.isAir&&!t.isCastle&&_0.enabled){
- if(_0.isBlocked(t.x,t.y)){
- const i=_0.snapToNearestPassable(t.x,t.y,160);
- t.x=i.x,t.y=i.y}
- if(_0.isBlocked(t.xDefault,t.yDefault)){
- const i=_0.snapToNearestPassable(t.xDefault,t.yDefault,160);
- t.xDefault=i.x,t.yDefault=i.y}
- }
- }
- ,"snap");
- for(const i of this.friendList)t(i),i.flowField=this.allyFlowField;
- for(const i of this.enemyList)t(i),i.flowField=this.enemyFlowField}
- async setupBoss(){
- var i,s;
- const e=vx.getInstance().getBookVO(this.bossKindNum),n=t.BOSS_CLASS_BY_KIND[this.bossKindNum]??(null==e?void 0:e.className)??ox.HarpyKing,h=g3.getInstance().getUnitSync(n);
- h.battleController=this,h instanceof i3&&await h.ensureSpineReady();
- const r=e?this.bossKindNum:t.GOLEM_KIND_NUM;
- if(e??vx.getInstance().getBookVO(r)){
- const t=yx.getVO();
- t.id=-1,t.kindNum=r,t.level=1,t.enhance=0,this.spawnedVOs.push(t),h.setData(t),h.kindNum=this.bossKindNum}
- (null==(i=this.raidOptions)?void 0:i.bossHp)&&this.raidOptions.bossHp>0?h.baseMaxHp=this.raidOptions.bossHp:h.baseMaxHp*=t.BOSS_HP_MULT,h.orgMaxHp=h.maxHp=h.baseMaxHp,h.hp=h.maxHp,h.health=h.maxHp,this.bossStartHp=h.maxHp,h.orgMoveSpd=h.moveSpd=1.8*h.moveSpd*1.6*2*.7,h instanceof i3&&h.immobile?(h.orgMoveSpd=h.moveSpd=0,h.atkRange=t.IMMOBILE_BOSS_ATK_RANGE,h.atkRange2=h.atkRange*h.atkRange):h.moveSpd<=0&&(h.orgMoveSpd=h.moveSpd=3),h.blowImmune=!0,h.stunImmune=!0,h.freezeImmune=!0,h.knockImmune=!0,h.isAir=!1,h.scale.set(1,1),h instanceof i3&&(h.wanderMinX=250,h.wanderMaxX=790,h.wanderMinY=250,h.wanderMaxY=850,this.bossKindNum===t.HARPY_KIND_NUM&&(h.wanderMinX=300,h.wanderMaxX=1100,h.wanderMinY=250,h.wanderMaxY=800),this.bossKindNum===t.BERIAL_KIND_NUM&&(h.wanderMinY=450),this.bossKindNum===t.SCORPION_KIND_NUM&&h.setRaidTint(t.getScorpionTint((null==(s=this.raidOptions)?void 0:s.bossSub)??1))),h.x=t.BOSS_X,h.y=t.BOSS_Y,h.tx=h.x,h.ty=h.y,h.xDefault=h.x,h.yDefault=h.y,h.ground=h.y,h.lookAt(-1),h.initDelay=0,h.showTombstone=!1,h.maxRevive=0,h.reviveInterval=0,h.totalDamageDealt=0,h.numBlock=0,h.radius=t.BOSS_RADIUS,h.aggressiveRetarget=!1,h instanceof i3&&(h.targetSwapChance=0),h.detectRange=t.BOSS_DETECT_RANGE,h.detectRange2=h.detectRange*h.detectRange,tB.getInstance().addChild(h),this.enemyList.push(h),this.boss=h,h instanceof i3&&h.createHitBox()}
- static getScorpionTint(i){
- const s=(Math.max(1,Math.floor(i))-1)%4+1;
- return t.SCORPION_TINT_BY_SUB[s]??t.SCORPION_TINT_BY_SUB[1]}
- async setupCorp(i){
- const s=this.computeCorpY(i),e=this.heroKindNums[i],n=this.soldierKindNums[i];
- e>0&&await this.spawnAlly(e,t.ALLY_HERO_X,s,!1,i);
- for(let h=0;
- h<t.SOLDIER_COLS;
- h++)for(let e=0;
- e<t.SOLDIER_ROWS;
- e++){
- const r=t.ALLY_SOLDIER_X_START+h*t.SOLDIER_X_SPACING,o=s+-162+e*t.SOLDIER_Y_SPACING;
- n>0&&await this.spawnAlly(n,r,o,!0,i)}
- }
- computeCorpY(i){
- const s=(t.SOLDIER_ROWS-1)*t.SOLDIER_Y_SPACING/2,e=225+s,n=1470-s;
- return e+i/(t.CORP_COUNT-1)*(n-e)}
- async spawnAlly(i,s,e,n,h=-1){
- const r=vx.getInstance().getBookVO(i);
- if(!r)return null;
- const o=await g3.getInstance().getUnit(r.className);
- o.battleController=this;
- const a=yx.getVO();
- if(a.id=-1,a.kindNum=i,a.level=1,a.enhance=0,this.spawnedVOs.push(a),o.setData(a),o.numBlock=0,o.initDelay=0,o.showTombstone=!1,o.maxRevive=0,o.reviveInterval=0,o.totalDamageDealt=0,o.aggressiveRetarget=!0,o.detectRange=n?1333:1500,o.detectRange2=o.detectRange*o.detectRange,n&&o.unitType===sx.RANGE){
- const i=t.SOLDIER_RANGE_MULT_MIN,s=t.SOLDIER_RANGE_MULT_MAX,e=i+this.random.next()*(s-i);
- o.atkRange=o.atkRange*e,o.atkRange2=o.atkRange*o.atkRange;
- const n=t.RANGE_SOLDIER_MOVE_SPD_MULT_MIN,h=t.RANGE_SOLDIER_MOVE_SPD_MULT_MAX,r=n+this.random.next()*(h-n);
- o.orgMoveSpd=o.moveSpd=o.moveSpd*r}
- if(!n&&o.unitType===sx.MELEE){
- const i=t.MELEE_HERO_HP_MULT;
- o.baseMaxHp*=i,o.orgMaxHp*=i,o.maxHp*=i,o.hp=o.maxHp,o.health=o.maxHp}
- if(n&&o.unitType===sx.MELEE){
- const i=t.MELEE_SOLDIER_HP_MULT;
- o.baseMaxHp*=i,o.orgMaxHp*=i,o.maxHp*=i,o.hp=o.maxHp,o.health=o.maxHp}
- if(o.unitType===sx.MELEE&&(o.atkRange=o.atkRange+t.MELEE_ATK_RANGE_BONUS,o.atkRange2=o.atkRange*o.atkRange),o.unitType===sx.MELEE){
- const i=t.MELEE_MOVE_SPD_MULT_MIN,s=t.MELEE_MOVE_SPD_MULT_MAX,e=i+this.random.next()*(s-i);
- o.orgMoveSpd=o.moveSpd=o.moveSpd*e}
- if(!n&&o.unitType===sx.RANGE){
- const i=t.RANGE_HERO_ATK_RANGE_MULT;
- o.atkRange=o.atkRange*i,o.atkRange2=o.atkRange*o.atkRange}
- o.attackCoolDown=0,o.skillCallIndex=0,o.attackCallIndex=0,o.attackIndex=0,o.__formSettled=!1;
- let c=0;
- if(n&&o.unitType===sx.MELEE){
- const i=t.MELEE_SOLDIER_LANE_OFFSET;
- c=(2*this.random.next()-1)*i,o.__antiJamDir=this.random.next()<.5?-1:1,o.__antiJamDriftFrames=0}
- o.x=s,o.y=e;
- const l=t.FIELD_WIDTH,u=t.FIELD_HEIGHT;
- o.xDefault=Math.max(10,Math.min(l-10,s+t.MARCH_DISTANCE)),o.yDefault=Math.max(10,Math.min(u-10,e+c)),o.lookAt(1),o.healthBar.setHealthColor(!0),o.isAir&&o.onFlyEnter(!0),tB.getInstance().addChild(o),this.friendList.push(o),h>=0&&h<this.corpUnits.length&&(this.corpUnits[h].push(o),n||(this.corpHero[h]=o));
- let d=1;
- return 1===h?d=t.CORP2_TEST_DMG_MULT:0===h&&n&&(d=t.CORP1_SOLDIER_DMG_MULT),1!==d&&(o.orgAtkDmg*=d,o.atkDmg*=d),this.applyRaidEmblemPassive(o,h),n&&o.unitType===sx.RANGE?h>=0&&h<this.rangedByCorp.length&&this.rangedByCorp[h].push(o):n&&o.unitType===sx.MELEE&&this.meleeSoldiers.push(o),this.corpCommander.register(h,o,!n),o}
- initializeRaidEmblems(){
- this.raidEmblemStates=Array.from({
- length:t.CORP_COUNT}
- ,(t,i)=>{
- const s=P7[i]??P7[i%P7.length];
- return{
- type:s,cooldownRemainingFrames:0,activeRemainingFrames:0,passiveTickFrames:N7[s].passive.healIntervalFrames??0,activeTickFrames:0}
- }
- )}
- getRaidEmblemDefinition(t){
- const i=this.raidEmblemStates[t];
- return i?N7[i.type]??null:null}
- getRaidEmblemDefinitionsForHud(){
- return this.raidEmblemStates.map(t=>N7[t.type]??null)}
- applyRaidEmblemPassive(t,i){
- const s=this.getRaidEmblemDefinition(i);
- if(!s)return;
- const e=s.passive,n=e.maxHpMult??1;
- 1!==n&&(t.baseMaxHp*=n,t.orgMaxHp*=n,t.maxHp*=n,t.hp=t.maxHp,t.health=t.maxHp);
- const h=e.attackDamageMult??1;
- 1!==h&&(t.orgAtkDmg*=h,t.atkDmg*=h);
- const r=e.attackSpeedMult??1;
- 1!==r&&(t.orgAtkSpd*=r,t.atkSpd*=r,t.atkDuration=1e4/t.atkSpd);
- const o=e.moveSpeedMult??1;
- 1!==o&&(t.orgMoveSpd*=o,t.moveSpd*=o);
- const a=e.incomingDamageMult??1;
- 1!==a&&(t.raidIncomingDamageMult*=a)}
- updateRaidEmblems(){
- this.forcedAggroFrames>0&&(this.forcedAggroFrames--,this.forcedAggroFrames<=0&&(this.forcedAggroCorp=-1));
- for(let t=0;
- t<this.raidEmblemStates.length;
- t++){
- const i=this.raidEmblemStates[t],s=this.getRaidEmblemDefinition(t);
- if(!i||!s)continue;
- i.cooldownRemainingFrames>0&&i.cooldownRemainingFrames--;
- const e=s.passive.manaGainMult??1;
- if(e>1){
- const i=e-1;
- for(const s of this.corpUnits[t]??[])s.isAlive&&!s.removed&&(s.mana+=i)}
- const n=s.passive.healIntervalFrames??0;
- if(n>0&&(i.passiveTickFrames--,i.passiveTickFrames<=0&&(this.healLowestCorpUnit(t,s.passive.healPercent??0),i.passiveTickFrames=n)),i.activeRemainingFrames<=0)continue;
- const h=s.active.raidHealIntervalFrames??0;
- h>0&&(i.activeTickFrames--,i.activeTickFrames<=0&&(this.healAllRaidAllies(s.active.raidHealPercent??0),i.activeTickFrames=h)),i.activeRemainingFrames--,i.activeRemainingFrames<=0&&(i.activeTickFrames=0)}
- }
- tryStartCorpDragAt(t,i){
- const s=tB.getInstance().toLocal({
- x:t,y:i}
- ),e=this.pickCorpAt(s.x,s.y);
- return!(e<0||(this.setSelectedCorp(e),this.corpCommander.startCorpDragAt(e,t,i),0))}
- setSelectedCorp(t){
- this.selectedCorpIndex!==t&&(this.selectedCorpIndex>=0&&this.setCorpOutline(this.selectedCorpIndex,!1),this.selectedCorpIndex=t,this.setCorpOutline(t,!0))}
- pickCorpAt(i,s){
- let e=-1,n=t.UNIT_SELECT_RADIUS*t.UNIT_SELECT_RADIUS;
- for(let t=0;
- t<this.corpUnits.length;
- t++)for(const h of this.corpUnits[t]){
- if(!h.isAlive||h.removed)continue;
- const r=h.getHitCenter(),o=r.x-i,a=r.y-s,c=o*o+a*a;
- c<n&&(n=c,e=t)}
- return e}
- onCorpSelect(t){
- this.selectedCorpIndex>=0&&this.setCorpOutline(this.selectedCorpIndex,!1),this.selectedCorpIndex!==t?(this.selectedCorpIndex=t,this.setCorpOutline(t,!0)):this.selectedCorpIndex=-1}
- setCorpOutline(i,s){
- const e=this.corpUnits[i];
- if(e)for(const n of e)n.filters=s?[new d7({
- thickness:3,color:t.CORP_OUTLINE_COLOR,quality:.5}
- )]:[]}
- activateRaidEmblem(i){
- const s=this.raidEmblemStates[i],e=this.getRaidEmblemDefinition(i);
- if(!s||!e)return;
- if(s.cooldownRemainingFrames>0||s.activeRemainingFrames>0)return;
- if(!this.hasAliveCorpUnit(i))return;
- s.cooldownRemainingFrames=e.cooldownFrames,s.activeRemainingFrames=e.activeDurationFrames,s.activeTickFrames=e.active.raidHealIntervalFrames??0;
- const n=e.activeDurationFrames;
- if(e.active.attackSpeedBuff)for(const t of this.getAliveCorpUnits(i))t.addAttackSpeedBuff(RZ.RaidEmblemRogue_ACTIVE_ATKSPD,e.active.attackSpeedBuff,n,!0);
- if(e.active.attackDamageBuff)for(const t of this.getAliveCorpUnits(i))t.addAttackDamageBuff(RZ.RaidEmblemRogue_ACTIVE_ATKDMG,e.active.attackDamageBuff,n);
- const h=this.boss;
- if(h&&h.isAlive&&!h.removed&&(e.active.bossAttackSpeedDebuff&&h.addAttackSpeedBuff(RZ.RaidEmblemMage_BOSS_ATKSPD,e.active.bossAttackSpeedDebuff,n,!0),e.active.bossDefenseDebuff&&(h.removeDefenseBuff(RZ.RaidEmblemMage_BOSS_DEFENSE),h.addDefenseBuff(RZ.RaidEmblemMage_BOSS_DEFENSE,e.active.bossDefenseDebuff,n))),e.active.forceBossTargetFrames){
- this.forcedAggroCorp=i,this.forcedAggroFrames=e.active.forceBossTargetFrames;
- const s=this.corpAggro.reduce((t,i)=>Math.max(t,i),0);
- this.corpAggro[i]=Math.max(this.corpAggro[i]??0,s*t.AGGRO_SWITCH_MARGIN+t.AGGRO_MIN)}
- }
- getCorpAggroMultiplier(i){
- let s=t.CORP_AGGRO_MULT[i]??1;
- const e=this.raidEmblemStates[i],n=this.getRaidEmblemDefinition(i);
- return e&&n?(s*=n.passive.aggroDamageMult??1,e.activeRemainingFrames>0&&(s*=n.active.aggroDamageMult??1),s):s}
- getAliveCorpUnits(t){
- return(this.corpUnits[t]??[]).filter(t=>t.isAlive&&!t.removed)}
- hasAliveCorpUnit(t){
- return this.getAliveCorpUnits(t).length>0}
- healLowestCorpUnit(t,i){
- if(i<=0)return;
- let s=null,e=1;
- for(const n of this.getAliveCorpUnits(t)){
- const t=Math.max(1,n.maxHp||n.orgMaxHp||1),i=Math.max(0,Math.min(1,n.hp/t));
- i<e&&(e=i,s=n)}
- null==s||s.heal(i,null,!0)}
- healAllRaidAllies(t){
- if(!(t<=0))for(const i of this.friendList)i.isAlive&&!i.removed&&i.heal(t,null,!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}
- checkProgress(){
- var t;
- this.snapshotCrowdPositions(),null==(t=this.camera)||t.update(),this.corpCommander.update(),super.checkProgress(),this.applyRangedFormation(),this.applyMeleeSurround(),this.applyOrca(),this.applyBossPostFormationEffects(),this.faceMeleeSurroundToBoss(),this.updateRaidEmblems();
- const i=this.updateAggro();
- this.updateHud(i);
- for(const s of this.crossbows)s.update();
- this.drawCrossbowDebug()}
- applyBossPostFormationEffects(){
- var t;
- const i=this.boss;
- null==(t=null==i?void 0:i.applyRaidPostFormationEffects)||t.call(i)}
- updateAggro(){
- var i;
- const s=t.AGGRO_DECAY,e=[];
- let n=-1,h=0;
- for(let t=0;
- t<this.corpUnits.length;
- t++){
- const i=this.corpUnits[t];
- let r=0,o=0,a=0,c=0;
- for(const t of i){
- const i=Math.max(0,t.maxHp||t.orgMaxHp||0);
- a+=i,t.isAlive&&!t.removed&&(r++,o+=Math.max(0,Math.min(t.hp,i))),c+=t.totalDamageDealt}
- const l=Math.max(0,c-this.prevCorpDmg[t]);
- this.prevCorpDmg[t]=c,this.corpAggro[t]=this.corpAggro[t]*s+l*this.getCorpAggroMultiplier(t);
- const u=this.corpAggro[t];
- e.push({
- alive:r,total:i.length,hp:o,maxHp:a,dmg:c,aggro:u}
- ),r>0&&u>h&&(h=u,n=t)}
- if(this.aggroLeader>=0&&e[this.aggroLeader].alive>0?n>=0&&n!==this.aggroLeader&&this.corpAggro[n]>this.corpAggro[this.aggroLeader]*t.AGGRO_SWITCH_MARGIN?(n===this.aggroChallenger?this.aggroChallengerFrames++:(this.aggroChallenger=n,this.aggroChallengerFrames=1),this.aggroChallengerFrames>=t.AGGRO_SWITCH_DWELL&&(this.aggroLeader=n,this.aggroChallenger=-1,this.aggroChallengerFrames=0)):(this.aggroChallenger=-1,this.aggroChallengerFrames=0):(this.aggroLeader=n,this.aggroChallenger=-1,this.aggroChallengerFrames=0),this.forcedAggroCorp>=0&&this.forcedAggroFrames>0&&(null==(i=e[this.forcedAggroCorp])?void 0:i.alive)>0){
- const i=this.forcedAggroCorp,s=Math.max(this.corpAggro[i]??0,h+t.AGGRO_MIN);
- this.corpAggro[i]=s,e[i].aggro=s,this.aggroLeader=i,this.aggroChallenger=-1,this.aggroChallengerFrames=0}
- const r=this.boss,o=this.aggroLeader;
- if(r instanceof i3)if(r.isAlive&&!r.removed&&!r.isUntagetable&&o>=0&&e[o].alive>0&&(this.corpAggro[o]>=t.AGGRO_MIN||this.forcedAggroCorp===o&&this.forcedAggroFrames>0)){
- const i=r.target;
- if(this.aggroTargetCorp!==o||!i||!i.isAlive||i.removed){
- const t=this.nearestCorpUnit(o,r);
- t&&(r.setAggroTarget(t),this.aggroTargetCorp=o)}
- const s=this.corpHero[o],e=s&&s.isAlive&&!s.removed?s:null,n=e?e.x:r.target?r.target.x:null;
- r.aggroFaceX=n;
- const h=r.immobile||r.state!==ex.ATTACK&&r.state!==ex.SKILL;
- null!==n&&h&&Math.abs(n-r.x)>t.AGGRO_FACE_DEADZONE&&r.lookAt(n<r.x?-1:1)}
- else r.aggroFaceX=null,this.aggroTargetCorp=-1;
- return e}
- nearestCorpUnit(t,i){
- let s=null,e=1/0;
- for(const n of this.corpUnits[t]){
- if(!n.isAlive||n.removed)continue;
- const t=n.x-i.x,h=n.y-i.y,r=t*t+h*h;
- r<e&&(e=r,s=n)}
- return s}
- getHighestAggroCorpUnits(){
- let t=-1,i=-1;
- for(let s=0;
- s<this.corpUnits.length;
- s++){
- if(!this.corpUnits[s].some(t=>t.isAlive&&!t.removed&&!t.isUntagetable))continue;
- const e=this.corpAggro[s]??0;
- e>i&&(i=e,t=s)}
- return t<0?[]:this.corpUnits[t].filter(t=>t.isAlive&&!t.removed&&!t.isUntagetable)}
- getBattleTimeFrames(){
- return this.battleTime}
- getCorpCount(){
- return this.corpUnits.length}
- getHighestAggroCorpIndex(){
- let t=-1,i=-1;
- for(let s=0;
- s<this.corpUnits.length;
- s++){
- if(!this.corpUnits[s].some(t=>t.isAlive&&!t.removed&&!t.isUntagetable))continue;
- const e=this.corpAggro[s]??0;
- e>i&&(i=e,t=s)}
- return t}
- getRandomRangedCorpCenter(){
- var t;
- const i=Kt(t=>(this.corpUnits[t]??[]).some(t=>t.isAlive&&!t.removed&&!t.isUntagetable),"isAliveCorp"),s=[];
- for(let n=0;
- n<this.corpUnits.length;
- n++)(null==(t=this.corpHero[n])?void 0:t.unitType)===sx.RANGE&&i(n)&&s.push(n);
- const e=s.length>0?s:Array.from({
- length:this.corpUnits.length}
- ,(t,i)=>i).filter(i);
- return 0===e.length?null:this.getCorpCenter(e[this.random.nextInt(e.length)])}
- getCorpCenter(t){
- const i=this.corpUnits[t];
- if(!i)return null;
- let s=0,e=0,n=0;
- for(const h of i)!h.isAlive||h.removed||h.isUntagetable||(s+=h.x,e+=h.y,n++);
- return 0===n?null:{
- x:s/n,y:e/n}
- }
- getRaidCorpUnitsAroundTarget(t){
- const i=this.resolveCorpIndexForTarget(t);
- if(i<0)return[];
- const s=[];
- for(let e=i-1;
- e<=i+1;
- e++)if(!(e<0||e>=this.corpUnits.length))for(const t of this.corpUnits[e])!t.isAlive||t.removed||t.isUntagetable||s.push(t);
- return s}
- resolveCorpIndexForTarget(t){
- if(t)for(let e=0;
- e<this.corpUnits.length;
- e++)if(this.corpUnits[e].includes(t))return e;
- if(this.aggroTargetCorp>=0)return this.aggroTargetCorp;
- if(this.aggroLeader>=0)return this.aggroLeader;
- if(!t)return-1;
- let i=-1,s=1/0;
- for(let e=0;
- e<this.corpUnits.length;
- e++)for(const n of this.corpUnits[e]){
- if(!n.isAlive||n.removed||n.isUntagetable)continue;
- const h=n.x-t.x,r=n.y-t.y,o=h*h+r*r;
- o<s&&(s=o,i=e)}
- return i}
- updateHud(t){
- if(!this.hud)return;
- const i=this.boss,s=i?i.maxHp:1,e=i?Math.max(0,i.hp):0;
- this.hud.update({
- bossHp:e,bossMaxHp:s,corps:t,remainSec:this.getRemainingTimeSeconds(),emblems:this.raidEmblemStates.map(t=>{
- const i=N7[t.type];
- return{
- cooldownRemainingFrames:t.cooldownRemainingFrames,cooldownFrames:i.cooldownFrames,activeRemainingFrames:t.activeRemainingFrames,activeDurationFrames:i.activeDurationFrames}
- }
- )}
- )}
- getSurroundScale(){
- return this.bossKindNum===t.SCORPION_KIND_NUM?{
- x:t.SCORPION_SURROUND_X_SCALE,y:t.SCORPION_SURROUND_Y_SCALE}
- :this.bossKindNum===t.GOLEM_KIND_NUM?{
- x:t.GOLEM_SURROUND_X_SCALE,y:t.GOLEM_SURROUND_Y_SCALE}
- :this.bossKindNum===t.BERIAL_KIND_NUM?{
- x:t.BERIAL_SURROUND_X_SCALE,y:t.BERIAL_SURROUND_Y_SCALE}
- :this.bossKindNum===t.DRAGON_KNIGHT_KIND_NUM?{
- x:t.DRAGON_KNIGHT_SURROUND_X_SCALE,y:t.DRAGON_KNIGHT_SURROUND_Y_SCALE}
- :{
- x:1,y:1}
- }
- applyMeleeSurround(){
- const i=this.boss;
- if(!i||!i.isAlive||i.removed||i.isUntagetable)return;
- const s=i.radius>0?i.radius:t.BOSS_RADIUS,e=t.GOLDEN_ANGLE,n=this.getSurroundScale(),h=n.x,r=n.y;
- for(let o=0;
- o<this.meleeSoldiers.length;
- o++){
- const n=this.meleeSoldiers[o];
- if(!n.isAlive||n.removed)continue;
- if("none"!==n.commandPhase)continue;
- const a=o*e,c=s+n.radius+t.MELEE_HUG_MARGIN,l=i.x+Math.cos(a)*c*h,u=i.y+Math.sin(a)*c*r;
- this.pullToSlot(n,l,u)}
- }
- pullToSlot(i,s,e){
- const n=s-i.x,h=e-i.y,r=n*n+h*h,o=t.FORM_SETTLE_DIST,a=t.FORM_RELEASE_DIST;
- if(i.__formSettled){
- if(r<=a*a)return;
- i.__formSettled=!1}
- else if(r<=o*o)return void(i.__formSettled=!0);
- const c=Math.sqrt(r),l=Math.min(c,i.moveSpd);
- i.x+=n/c*l,i.y+=h/c*l}
- faceMeleeSurroundToBoss(){
- const t=this.boss;
- if(t&&t.isAlive&&!t.removed&&!t.isUntagetable)for(let i=0;
- i<this.meleeSoldiers.length;
- i++){
- const s=this.meleeSoldiers[i];
- if(!s.isAlive||s.removed)continue;
- if("none"!==s.commandPhase)continue;
- const e=t.x-s.x;
- Math.abs(e)>1&&s.lookAt(e)}
- }
- applyRangedFormation(){
- const i=this.boss;
- if(!i||!i.isAlive||i.removed||i.isUntagetable)return;
- const s=t.FAN_HALF_WIDTH,e=t.FAN_WING_CURVE,n=1/3;
- for(let t=0;
- t<this.rangedByCorp.length;
- t++){
- const h=this.rangedByCorp[t];
- if(!h||0===h.length)continue;
- const r=[];
- for(let t=0;
- t<h.length;
- t++){
- const i=h[t];
- i.isAlive&&!i.removed&&"none"===i.commandPhase&&r.push(i)}
- const o=r.length;
- if(0===o)continue;
- let a=0,c=0;
- for(let t=0;
- t<o;
- t++)a+=r[t].x,c+=r[t].y;
- a/=o,c/=o;
- let l=i.x-a,u=i.y-c;
- const d=Math.sqrt(l*l+u*u);
- if(d<.001)continue;
- l/=d,u/=d;
- const f=-u,p=l;
- for(let t=0;
- t<o;
- t++){
- const i=r[t],h=o>1?t/(o-1)*2-1:0,d=h*s,g=(h*h-n)*e,m=a+f*d+l*g,w=c+p*d+u*g;
- this.pullToSlot(i,m,w)}
- }
- }
- testArrowHit(i,s,e,n){
- const h=this.boss;
- if(!h||!h.isAlive||h.removed||h.isUntagetable)return null;
- if(!(h instanceof i3))return null;
- const r=h.getWeakPointWorld();
- if((s-r.y)*(n-r.y)>0)return null;
- const o=this.segPointDist(i,s,e,n,r.x,r.y),a=t.CROSSBOW_RING_RADII;
- let c=0;
- if(o<=a[0]?c=4:o<=a[1]?c=3:o<=a[2]?c=2:o<=a[3]&&(c=1),0===c)return null;
- const l=t.CROSSBOW_STUN_FRAMES[c-1];
- h.applyRaidStun(l),h.flashHit(c>=t.CROSSBOW_HEAD_TIER);
- let u=e-i,d=n-s;
- const f=Math.sqrt(u*u+d*d);
- return f>.001&&h.applyHitKnockback(u/f,d/f,t.CROSSBOW_KNOCKBACK),c}
- drawCrossbowDebug(){
- const i=this.crossbowDebug;
- if(!i)return;
- i.clear();
- const s=this.boss;
- if(!s||!s.isAlive||s.removed||s.isUntagetable)return;
- if(!(s instanceof i3))return;
- const e=s.getWeakPointWorld(),n=t.CROSSBOW_RING_RADII;
- i.rect(e.x-n[3],e.y-n[3],2*n[3],2*n[3]).stroke({
- width:2,color:65535,alpha:.5}
- ),i.circle(e.x,e.y,n[3]).stroke({
- width:2,color:16777215,alpha:.5}
- ),i.circle(e.x,e.y,n[2]).stroke({
- width:2,color:16776960,alpha:.6}
- ),i.circle(e.x,e.y,n[1]).stroke({
- width:2,color:16746496,alpha:.8}
- ),i.circle(e.x,e.y,n[0]).stroke({
- width:2,color:16711680,alpha:.95}
- ),i.moveTo(e.x-12,e.y).lineTo(e.x+12,e.y),i.moveTo(e.x,e.y-12).lineTo(e.x,e.y+12),i.stroke({
- width:2,color:65280}
- )}
- segPointDist(t,i,s,e,n,h){
- const r=s-t,o=e-i,a=r*r+o*o;
- let c=a>0?((n-t)*r+(h-i)*o)/a:0;
- c<0?c=0:c>1&&(c=1);
- const l=n-(t+c*r),u=h-(i+c*o);
- return Math.sqrt(l*l+u*u)}
- getCameraAnchor(t){
- const i=this.boss,s=!!i&&i.isAlive&&!i.removed&&!i.isUntagetable;
- if("boss"===t)return s?{
- x:i.x,y:i.y}
- :null;
- if("center"===t){
- let t=0,e=0;
- const n=this.corpCommander.accumulateAliveHeroes((i,s)=>{
- t+=i,e+=s}
- ),h=n>0,r=h?t/n:0,o=h?e/n:0;
- return s&&h?{
- x:(i.x+r)/2,y:(i.y+o)/2}
- :s?{
- x:i.x,y:i.y}
- :h?{
- x:r,y:o}
- :null}
- return this.corpCommander.getCorpAnchor(t)}
- snapshotCrowdPositions(){
- const t=this.boss,i=Kt(i=>{
- i!==t&&(i.__rvoPrevX=i.x,i.__rvoPrevY=i.y,i.__rvoPrevDir=i.direction)}
- ,"snap");
- for(let s=0;
- s<this.friendList.length;
- s++)i(this.friendList[s]);
- for(let s=0;
- s<this.enemyList.length;
- s++)i(this.enemyList[s])}
- applyOrca(){
- const i=t.SEPARATION_CELL,s=this.separationGrid,e=this.separationFlatList;
- s.clear(),e.length=0;
- const n=this.boss,h=t.RVO_TELEPORT_FACTOR;
- let r=0;
- const o=Kt(t=>{
- if(!t.isAlive||t.removed||t.isImmovable||t.isCastle)return;
- if(t===n)return;
- const o=t.__rvoPrevX,a=t.__rvoPrevY;
- if(void 0===o)return;
- const c=r++;
- t.__sepIdx=c,e.push(t);
- const l=t.x-o,u=t.y-a,d=l*l+u*u,f=t.moveSpd>.001?t.moveSpd:.001,p=f*h,g=d>p*p;
- t.__rvoSkip=g;
- let m=this.rvoPool[c];
- m||(m={
- x:0,y:0,vx:0,vy:0,prefVx:0,prefVy:0,radius:0,maxSpeed:0,newVx:0,newVy:0}
- ,this.rvoPool[c]=m),g?(m.x=t.x,m.y=t.y,m.vx=0,m.vy=0,m.prefVx=0,m.prefVy=0,m.radius=t.radius,m.maxSpeed=0,m.newVx=0,m.newVy=0):(t.x=o,t.y=a,m.x=o,m.y=a,m.vx=l,m.vy=u,m.prefVx=l,m.prefVy=u,m.radius=t.radius,m.maxSpeed=Math.max(f,Math.sqrt(d)),m.newVx=l,m.newVy=u),t.__rvoAgent=m;
- const w=1e5*Math.floor(m.x/i)+Math.floor(m.y/i);
- let v=s.get(w);
- v||(v=[],s.set(w,v)),v.push(t)}
- ,"addUnit");
- for(let t=0;
- t<this.friendList.length;
- t++)o(this.friendList[t]);
- for(let t=0;
- t<this.enemyList.length;
- t++)o(this.enemyList[t]);
- const a=1/t.RVO_TIME_HORIZON,c=t.RVO_NEIGHBOR_DIST*t.RVO_NEIGHBOR_DIST,l=t.RVO_MAX_NEIGHBORS,u=this.rvoNbAgents,d=this.rvoNbDist,f=this.rvoNbIdx;
- for(let t=0;
- t<e.length;
- t++){
- const n=e[t];
- if(n.__rvoSkip)continue;
- const h=n.__rvoAgent;
- let r=0;
- const o=Math.floor(h.x/i),p=Math.floor(h.y/i);
- for(let t=-1;
- t<=1;
- t++)for(let i=-1;
- i<=1;
- i++){
- const e=s.get(1e5*(o+i)+(p+t));
- if(e)for(let t=0;
- t<e.length;
- t++){
- const i=e[t];
- if(i===n)continue;
- if(_0.enabled&&n.isAir!==i.isAir)continue;
- const s=i.__rvoAgent,o=s.x-h.x,a=s.y-h.y,p=o*o+a*a;
- p>c||(r=this.insertRvoNeighbor(u,d,f,r,l,s,p,i.__sepIdx))}
- }
- this.applyBoids(h,u,r),w7(h,u,r,a,1)}
- for(let p=0;
- p<e.length;
- p++){
- const i=e[p];
- if(i.__rvoSkip)continue;
- const s=i.__rvoAgent;
- let n=s.newVx,h=s.newVy,r=s.x+n,o=s.y+h;
- _0.enabled&&!i.isAir&&_0.isBlocked(r,o)&&(_0.isBlocked(s.x+n,s.y)?_0.isBlocked(s.x,s.y+h)?(r=s.x,o=s.y):r=s.x:o=s.y),i.x=r,i.y=o;
- const a=r-s.x,c=o-s.y,l=i.moveSpd*t.RVO_FACING_DZ_FACTOR;
- if(a*a+c*c>l*l)if(a>l)i.lookAt(1);
- else if(a<-l)i.lookAt(-1);
- else{
- const t=i.__rvoPrevDir;
- 1!==t&&-1!==t||i.lookAt(t)}
- }
- if(n&&n.isAlive&&!n.removed&&n.radius>0&&!n.isUntagetable){
- const i=n.x,s=n.y,h=n.radius,r=this.getSurroundScale(),o=r.x,a=r.y;
- for(let c=0;
- c<e.length;
- c++){
- const r=e[c];
- if(_0.enabled&&r.isAir!==n.isAir)continue;
- const l=r.x-i,u=r.y-s,d=h+r.radius+t.SEPARATION_BUFFER,f=d*o,p=l/f,g=u/(d*a),m=p*p+g*g;
- if(m>=1)continue;
- let w,v;
- if(m<1e-4)w=i+f,v=s;
- else{
- const t=1/Math.sqrt(m);
- w=i+l*t,v=s+u*t}
- _0.enabled&&!r.isAir&&_0.isBlocked(w,v)||(r.x=w,r.y=v)}
- }
- }
- applyBoids(i,s,e){
- if(0===e)return;
- const n=i.prefVx,h=i.prefVy,r=i.maxSpeed*t.RVO_BOIDS_MIN_SPEED_FACTOR,o=r*r;
- if(n*n+h*h<o)return;
- let a=0,c=0,l=0,u=0,d=0;
- for(let t=0;
- t<e;
- t++){
- const i=s[t];
- u+=i.x,d+=i.y,i.vx*i.vx+i.vy*i.vy>=o&&(a+=i.vx,c+=i.vy,l++)}
- let f=n,p=h;
- if(l>0){
- const i=t.RVO_ALIGN_WEIGHT;
- f+=i*(a/l-n),p+=i*(c/l-h)}
- const g=t.RVO_COHESION_WEIGHT;
- f+=g*(u/e-i.x),p+=g*(d/e-i.y);
- const m=f*f+p*p,w=i.maxSpeed;
- if(m>w*w&&m>1e-6){
- const t=w/Math.sqrt(m);
- f*=t,p*=t}
- i.prefVx=f,i.prefVy=p}
- insertRvoNeighbor(t,i,s,e,n,h,r,o){
- if(e>=n){
- const t=i[n-1];
- if(r>t||r===t&&o>=s[n-1])return e}
- let a=e<n?e:n-1;
- for(;
- a>0&&(r<i[a-1]||r===i[a-1]&&o<s[a-1]);
- )t[a]=t[a-1],i[a]=i[a-1],s[a]=s[a-1],a--;
- return t[a]=h,i[a]=r,s[a]=o,e<n?e+1:e}
- checkVictory(){
- return!!this.boss&&!this.boss.isAlive}
- checkDefeat(){
- if(this.battleTime>=t.TIME_LIMIT_FRAMES)return!0;
- if(0===this.friendList.length)return!1;
- for(const t of this.friendList)if(t.isAlive)return!1;
- return!0}
- onVictoryCallback(){
- this.reportRaidResult(!0)}
- onDefeatCallback(){
- this.battleTime,t.TIME_LIMIT_FRAMES,this.reportRaidResult(!1)}
- reportRaidResult(t){
- var i;
- if(!(null==(i=this.raidOptions)?void 0:i.onBattleEnd)||this.resultReported)return;
- this.resultReported=!0;
- const s=this.boss?Math.max(0,this.boss.hp):this.bossStartHp,e=Math.max(0,Math.min(this.bossStartHp,Math.round(this.bossStartHp-s))),n=Math.max(3,Math.min(300,Math.round(this.battleTime/60)));
- this.raidOptions.onBattleEnd(e,n,t)}
- applySquads(i){
- const s=[],e=[],n=i.split("|"),h=kG.getInstance(),r=ON.getAwakenedBarrackTribes();
- for(let o=0;
- o<t.CORP_COUNT;
- o++){
- const t=(n[o]??"").split("-"),i=Number(t[0])||0,a=Number(t[2])||0;
- s.push(i>0?i:0);
- const c=h.getBook(a);
- if(c){
- const t=r.has(c.tribe),{
- kindNum:i}
- =ON.getShiftedSoldierTier(c.unitKindNums,c.plusLevel,0,t);
- e.push(i)}
- else e.push(0)}
- this.heroKindNums=s,this.soldierKindNums=e}
- returnToMain(){
- this.reportRaidResult(!1),N9t.getInstance().returnToIdleBattle()}
- scheduleReturnToMain(){
- }
- getRemainingTimeSeconds(){
- const i=t.TIME_LIMIT_FRAMES-this.battleTime;
- return Math.max(0,Math.ceil(i/60))}
- cleanup(){
- var t,i,s;
- WG.getInstance().remove(this.execute,this),this.corpCommander.destroy(),null==(t=this.camera)||t.destroy(),this.camera=null,null==(i=this.hud)||i.destroy(),this.hud=null,this.selectedCorpIndex=-1;
- for(const n of this.crossbows)n.destroy();
- this.crossbows.length=0,this.crossbowDebug&&(this.crossbowDebug.removeFromParent(),this.crossbowDebug.destroy(),this.crossbowDebug=null),null==(s=this.mapEffect)||s.destroy(),this.mapEffect=null,this.speedHelper.detachButton(),this.speedHelper.exit();
- for(const n of this.spawnedVOs)n.remove();
- this.spawnedVOs.length=0,this.teardownTerrain();
- const e=DB.getInstance();
- e.x=0,e.y=0,e.scale.set(1,1),super.cleanup(),this.boss=null;
- for(let n=0;
- n<this.rangedByCorp.length;
- n++)this.rangedByCorp[n]=[];
- this.meleeSoldiers=[];
- for(let n=0;
- n<this.corpUnits.length;
- n++)this.corpUnits[n]=[];
- this.corpAggro=[],this.prevCorpDmg=[],this.corpHero=[],this.aggroLeader=-1,this.aggroChallenger=-1,this.aggroChallengerFrames=0,this.aggroTargetCorp=-1,this.forcedAggroCorp=-1,this.forcedAggroFrames=0,this.raidEmblemStates=[]}
- getBoss(){
- return this.boss}
- }
- ;
- Kt(B7,"RaidBattleController"),zt(B7,"instance"),zt(B7,"FIELD_WIDTH",1433.6),zt(B7,"FIELD_HEIGHT",1433.6),zt(B7,"BG_SCALE",1.4),zt(B7,"TIME_LIMIT_FRAMES",10800),zt(B7,"BOSS_DAMAGE_SCALE_STEPS",[{
- frame:9e3,multiplier:4}
- ,{
- frame:7200,multiplier:3}
- ,{
- frame:5400,multiplier:2.5}
- ,{
- frame:3600,multiplier:2}
- ,{
- frame:1800,multiplier:1.5}
- ]),zt(B7,"SCORPION_KIND_NUM",1e5),zt(B7,"HARPY_KIND_NUM",100001),zt(B7,"GOLEM_KIND_NUM",100002),zt(B7,"BERIAL_KIND_NUM",100003),zt(B7,"DRAGON_KNIGHT_KIND_NUM",100004),zt(B7,"BOSS_KIND_NUM",B7.SCORPION_KIND_NUM),zt(B7,"BOSS_CLASS_BY_KIND",{
- [B7.SCORPION_KIND_NUM]:ox.ScorpionKing,100001:ox.HarpyKing,100002:ox.GolemKing,100003:ox.BerialKing,[B7.DRAGON_KNIGHT_KIND_NUM]:ox.DragonKnight}
- ),zt(B7,"BOSS_X",1050),zt(B7,"BOSS_Y",848),zt(B7,"BOSS_HP_MULT",1e4),zt(B7,"CROSSBOW_RING_RADII",[25,55,100,200]),zt(B7,"CROSSBOW_STUN_FRAMES",[0,180,240,300]),zt(B7,"CROSSBOW_HEAD_TIER",2),zt(B7,"CROSSBOW_KNOCKBACK",7),zt(B7,"CROSSBOW_DEBUG",!0),zt(B7,"BOSS_RADIUS",70),zt(B7,"IMMOBILE_BOSS_ATK_RANGE",400),zt(B7,"FAN_HALF_WIDTH",119),zt(B7,"FAN_WING_CURVE",80),zt(B7,"FORM_SETTLE_DIST",30),zt(B7,"FORM_RELEASE_DIST",64),zt(B7,"MELEE_HUG_MARGIN",4),zt(B7,"SCORPION_SURROUND_X_SCALE",1.2),zt(B7,"SCORPION_SURROUND_Y_SCALE",.4),zt(B7,"GOLEM_SURROUND_X_SCALE",1),zt(B7,"GOLEM_SURROUND_Y_SCALE",.5),zt(B7,"BERIAL_SURROUND_X_SCALE",1.2),zt(B7,"BERIAL_SURROUND_Y_SCALE",.6),zt(B7,"DRAGON_KNIGHT_SURROUND_X_SCALE",.765),zt(B7,"DRAGON_KNIGHT_SURROUND_Y_SCALE",.34),zt(B7,"SCORPION_TINT_BY_SUB",{
- 1:12946687,2:9240460,3:16742263,4:16777072}
- ),zt(B7,"GOLDEN_ANGLE",2.399963),zt(B7,"CORP_COUNT",5),zt(B7,"CORP_AGGRO_MULT",[1,1,1,1,1]),zt(B7,"AGGRO_HALFLIFE_SEC",4),zt(B7,"AGGRO_DECAY",Math.pow(.5,1/(60*B7.AGGRO_HALFLIFE_SEC))),zt(B7,"AGGRO_MIN",1),zt(B7,"AGGRO_SWITCH_MARGIN",1.2),zt(B7,"AGGRO_SWITCH_DWELL",36),zt(B7,"AGGRO_FACE_DEADZONE",50),zt(B7,"CORP2_TEST_DMG_MULT",3),zt(B7,"CORP1_SOLDIER_DMG_MULT",.5),zt(B7,"BOSS_DETECT_RANGE",4e3),zt(B7,"SOLDIER_ROWS",10),zt(B7,"SOLDIER_COLS",3),zt(B7,"SOLDIER_X_SPACING",52),zt(B7,"SOLDIER_Y_SPACING",36),zt(B7,"ALLY_HERO_X",60),zt(B7,"ALLY_SOLDIER_X_START",135),zt(B7,"MARCH_DISTANCE",1500),zt(B7,"SOLDIER_RANGE_MULT_MIN",1.3),zt(B7,"SOLDIER_RANGE_MULT_MAX",1.7),zt(B7,"RANGE_SOLDIER_MOVE_SPD_MULT_MIN",1),zt(B7,"RANGE_SOLDIER_MOVE_SPD_MULT_MAX",1.25),zt(B7,"MELEE_HERO_HP_MULT",2),zt(B7,"MELEE_SOLDIER_HP_MULT",1.5),zt(B7,"MELEE_ATK_RANGE_BONUS",20),zt(B7,"RANGE_HERO_ATK_RANGE_MULT",1.7),zt(B7,"MELEE_MOVE_SPD_MULT_MIN",1.2),zt(B7,"MELEE_MOVE_SPD_MULT_MAX",1.7),zt(B7,"MELEE_SOLDIER_LANE_OFFSET",210),zt(B7,"TERRAIN_MASK_ENABLED",!1),zt(B7,"SEPARATION_CELL",28),zt(B7,"SEPARATION_BUFFER",3),zt(B7,"RVO_TIME_HORIZON",8),zt(B7,"RVO_NEIGHBOR_DIST",48),zt(B7,"RVO_MAX_NEIGHBORS",10),zt(B7,"RVO_TELEPORT_FACTOR",3),zt(B7,"RVO_FACING_DZ_FACTOR",.3),zt(B7,"RVO_ALIGN_WEIGHT",.4),zt(B7,"RVO_COHESION_WEIGHT",.02),zt(B7,"RVO_BOIDS_MIN_SPEED_FACTOR",.5),zt(B7,"DEFAULT_HERO_KINDS",[60,58,78,54,56]),zt(B7,"DEFAULT_SOLDIER_KINDS",[20,4,7,1,13]),zt(B7,"CORP_OUTLINE_COLOR",16724787),zt(B7,"UNIT_SELECT_RADIUS",50);
- let U7=B7;
- const F7=class t{
- constructor(){
- zt(this,"overlay"),zt(this,"bg",new Gf),zt(this,"contentRoot"),zt(this,"txtWaveLabel"),zt(this,"txtWaveNumber"),zt(this,"txtGold"),zt(this,"txtElapsed"),zt(this,"txtTouch"),zt(this,"txtDestroyed"),zt(this,"_active",!1),zt(this,"_castleDestroyed",!1),zt(this,"updateIntervalId",null),zt(this,"activateTime",0),zt(this,"normalGroup"),zt(this,"destroyedGroup"),zt(this,"glow"),zt(this,"gameContainer",null),zt(this,"wakeLock",null),zt(this,"visibilityHandler",null),zt(this,"sliderTrack",new Gf),zt(this,"sliderFill",new Gf),zt(this,"sliderHandle",new Be),zt(this,"sliderDragging",!1),zt(this,"sliderGrabOffset",0),this.overlay=new Be,this.overlay.visible=!1,this.bg=new Gf,this.overlay.addChild(this.bg),this.contentRoot=new Be,this.overlay.addChild(this.contentRoot),this.glow=new Gf,this.glow.circle(0,0,180),this.glow.fill({
- color:1714762}
- ),this.glow.x=320,this.glow.y=320,this.glow.alpha=.35,this.contentRoot.addChild(this.glow),this.normalGroup=new Be,this.contentRoot.addChild(this.normalGroup);
- const i=[{
- x:120,y:190,r:2,a:.5}
- ,{
- x:480,y:210,r:1.5,a:.35}
- ,{
- x:220,y:170,r:1.5,a:.4}
- ,{
- x:420,y:240,r:2,a:.25}
- ,{
- x:160,y:270,r:1,a:.3}
- ,{
- x:510,y:270,r:1.5,a:.3}
- ,{
- x:350,y:180,r:1,a:.2}
- ,{
- x:90,y:240,r:1.5,a:.25}
- ],s=new Gf;
- for(const t of i)s.circle(t.x,t.y,t.r),s.fill({
- color:16777215,alpha:t.a}
- );
- this.normalGroup.addChild(s);
- const e=new Gf;
- e.circle(0,0,16),e.fill({
- color:16772795}
- ),e.x=320,e.y=220,e.alpha=.6,this.normalGroup.addChild(e);
- const n=new Gf;
- n.circle(5,-3,13),n.fill({
- color:658970}
- ),n.x=e.x,n.y=e.y,n.alpha=.8,this.normalGroup.addChild(n),this.destroyedGroup=new Be,this.destroyedGroup.visible=!1,this.contentRoot.addChild(this.destroyedGroup);
- const h=new Wg({
- text:"⚠",style:new Sg({
- fontSize:44,fill:16763904,stroke:{
- color:"#000000",width:3,join:"round"}
- }
- )}
- );
- h.anchor.set(.5),h.x=320,h.y=215,this.destroyedGroup.addChild(h),this.txtWaveLabel=new Wg({
- text:"W A V E",style:new Sg({
- fontFamily:"Arial",fontSize:16,fontWeight:"bold",fill:5601194,letterSpacing:6}
- )}
- ),this.txtWaveLabel.anchor.set(.5),this.txtWaveLabel.x=320,this.txtWaveLabel.y=270,this.contentRoot.addChild(this.txtWaveLabel),this.txtWaveNumber=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:56,fontWeight:"bold",fill:16777215,stroke:{
- color:"#0a1428",width:4,join:"round"}
- ,dropShadow:{
- color:3368618,blur:20,angle:0,distance:0}
- }
- )}
- ),this.txtWaveNumber.anchor.set(.5),this.txtWaveNumber.x=320,this.txtWaveNumber.y=325,this.contentRoot.addChild(this.txtWaveNumber);
- const r=new Gf;
- r.rect(270,370,100,1),r.fill({
- color:3359846,alpha:.4}
- ),this.contentRoot.addChild(r),this.txtGold=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:18,fill:11176004}
- )}
- ),this.txtGold.anchor.set(.5),this.txtGold.x=320,this.txtGold.y=395,this.contentRoot.addChild(this.txtGold),this.txtElapsed=new Wg({
- text:"00:00:00",style:new Sg({
- fontFamily:"Arial",fontSize:22,fontWeight:"bold",fill:4478310}
- )}
- ),this.txtElapsed.anchor.set(.5),this.txtElapsed.x=320,this.txtElapsed.y=440,this.contentRoot.addChild(this.txtElapsed),this.txtDestroyed=new Wg({
- text:AG.getText("GAME_40","성이 파괴되었습니다."),style:new Sg({
- fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:16737894,stroke:{
- color:"#2a0000",width:3,join:"round"}
- ,wordWrap:!0,wordWrapWidth:500,align:"center"}
- )}
- ),this.txtDestroyed.anchor.set(.5),this.txtDestroyed.x=320,this.txtDestroyed.y=560,this.txtDestroyed.visible=!1,this.contentRoot.addChild(this.txtDestroyed),this.txtTouch=new Wg({
- text:AG.getText("GAME_531","화면을 스와이프하면 복귀합니다."),style:new Sg({
- fontFamily:"Arial",fontSize:17,fill:2765636,wordWrap:!0,wordWrapWidth:500,align:"center"}
- )}
- ),this.txtTouch.anchor.set(.5),this.txtTouch.x=320,this.txtTouch.y=595,this.contentRoot.addChild(this.txtTouch);
- const o=t.SLIDER_X,a=t.SLIDER_Y,c=t.SLIDER_W,l=t.SLIDER_H,u=t.HANDLE_W,d=l-8;
- this.sliderTrack.roundRect(o,a,c,l,l/2),this.sliderTrack.fill({
- color:1318970,alpha:.95}
- ),this.sliderTrack.stroke({
- color:3362938,width:2,alpha:.85}
- ),this.contentRoot.addChild(this.sliderTrack),this.contentRoot.addChild(this.sliderFill);
- const f=new Gf;
- f.roundRect(0,0,u,d,d/2),f.fill({
- color:3825558}
- ),f.stroke({
- color:7315414,width:2}
- ),this.sliderHandle.addChild(f);
- const p=new Wg({
- text:"›››",style:new Sg({
- fontFamily:"Arial",fontSize:24,fontWeight:"bold",fill:13624063}
- )}
- );
- p.anchor.set(.5),p.x=u/2,p.y=d/2,this.sliderHandle.addChild(p),this.sliderHandle.x=this.sliderMinX,this.sliderHandle.y=a+4,this.sliderHandle.eventMode="static",this.sliderHandle.cursor="pointer",this.contentRoot.addChild(this.sliderHandle),this.updateSliderFill(),this.overlay.eventMode="static",this.sliderHandle.on("pointerdown",this.onSliderDown,this),this.overlay.on("pointermove",this.onSliderMove,this),this.overlay.on("pointerup",this.onSliderUp,this),this.overlay.on("pointerupoutside",this.onSliderUp,this)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- get sliderMinX(){
- return t.SLIDER_X+t.HANDLE_PAD}
- get sliderMaxX(){
- return t.SLIDER_X+t.SLIDER_W-t.HANDLE_W-t.HANDLE_PAD}
- onSliderDown(t){
- if(!this._active)return;
- HI.killTweensOf(this.sliderHandle),this.sliderDragging=!0;
- const i=this.contentRoot.toLocal(t.global).x;
- this.sliderGrabOffset=i-this.sliderHandle.x,hS.app.ticker.maxFPS=30}
- onSliderMove(t){
- if(!this.sliderDragging)return;
- let i=this.contentRoot.toLocal(t.global).x-this.sliderGrabOffset;
- const s=this.sliderMinX,e=this.sliderMaxX;
- i<s&&(i=s),i>e&&(i=e),this.sliderHandle.x=i,this.updateSliderFill(),i>=e-1&&(this.sliderDragging=!1,this.resetSlider(),this.deactivate())}
- onSliderUp(){
- this.sliderDragging&&(this.sliderDragging=!1,HI.killTweensOf(this.sliderHandle),HI.to(this.sliderHandle,{
- x:this.sliderMinX,duration:.18,ease:"power2.out",onUpdate:Kt(()=>this.updateSliderFill(),"onUpdate"),onComplete:Kt(()=>{
- this.updateSliderFill(),this._active&&!this.sliderDragging&&(hS.app.ticker.maxFPS=1)}
- ,"onComplete")}
- ))}
- resetSlider(){
- HI.killTweensOf(this.sliderHandle),this.sliderHandle.x=this.sliderMinX,this.updateSliderFill()}
- updateSliderFill(){
- const i=t.SLIDER_X,s=t.SLIDER_Y,e=t.SLIDER_H,n=t.HANDLE_W,h=this.sliderHandle.x-i+n;
- this.sliderFill.clear(),h>e&&(this.sliderFill.roundRect(i,s,Math.min(h,t.SLIDER_W),e,e/2),this.sliderFill.fill({
- color:2771578,alpha:.55}
- ))}
- get isActive(){
- return this._active}
- activate(){
- if(this._active)return;
- this._active=!0,this._castleDestroyed=!1,this.activateTime=Date.now(),this.setNormalMode(),this.resetSlider();
- const t=KA.stageHeight||1400;
- this.bg.clear(),this.bg.rect(0,-100,640,t+200),this.bg.fill({
- color:658970}
- );
- const i=t/3;
- this.contentRoot.y=i-320,this.gameContainer=KA.stage.children[0]||null,this.gameContainer&&(this.gameContainer.visible=!1),this.txtTouch.text=AG.getText("GAME_531","화면을 스와이프하면 복귀합니다."),this.txtDestroyed.text=AG.getText("GAME_40","성이 파괴되었습니다."),this.overlay.visible=!0,KA.stage.addChild(this.overlay),hS.app.ticker.maxFPS=1,this.requestWakeLock(),this.updateInfo(),this.updateIntervalId=setInterval(()=>this.updateInfo(),1e3)}
- async requestWakeLock(){
- var t,i;
- try{
- const s=navigator;
- s.wakeLock&&"function"==typeof s.wakeLock.request&&(this.wakeLock=await s.wakeLock.request("screen"),this.visibilityHandler=()=>{
- this._active&&"visible"===document.visibilityState&&null===this.wakeLock&&this.requestWakeLock()}
- ,document.addEventListener("visibilitychange",this.visibilityHandler),null==(i=(t=this.wakeLock).addEventListener)||i.call(t,"release",()=>{
- this.wakeLock=null}
- ))}
- catch(_gt){
- }
- }
- async releaseWakeLock(){
- if(this.visibilityHandler&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.wakeLock){
- try{
- await this.wakeLock.release()}
- catch(_gt){
- }
- this.wakeLock=null}
- }
- deactivate(){
- this._active&&(this._active=!1,this._castleDestroyed=!1,this.updateIntervalId&&(clearInterval(this.updateIntervalId),this.updateIntervalId=null),this.overlay.visible=!1,this.overlay.parent&&this.overlay.parent.removeChild(this.overlay),this.gameContainer&&(this.gameContainer.visible=!0,this.gameContainer=null),hS.app.ticker.maxFPS=45,this.releaseWakeLock())}
- onCastleDestroyed(){
- if(!this._active)return;
- if(this._castleDestroyed)return;
- this._castleDestroyed=!0;
- const t=KA.stageHeight||1400;
- this.bg.clear(),this.bg.rect(0,-100,640,t+200),this.bg.fill({
- color:1706506}
- ),this.glow.clear(),this.glow.circle(0,0,180),this.glow.fill({
- color:4856346}
- ),this.normalGroup.visible=!1,this.destroyedGroup.visible=!0,this.txtDestroyed.visible=!0,this.txtWaveLabel.style.fill=8934741,this.txtWaveNumber.style.fill=16746632,this.txtWaveNumber.style.dropShadow.color=11154227,this.txtElapsed.style.fill=6702148,this.txtTouch.style.fill=5583667,hS.app.ticker.maxFPS=2,setTimeout(()=>{
- this._active&&(hS.app.ticker.maxFPS=1)}
- ,1e3)}
- setNormalMode(){
- this.normalGroup.visible=!0,this.destroyedGroup.visible=!1,this.txtDestroyed.visible=!1,this.glow.clear(),this.glow.circle(0,0,180),this.glow.fill({
- color:1714762}
- ),this.txtWaveLabel.style.fill=5601194,this.txtWaveNumber.style.fill=16777215,this.txtWaveNumber.style.dropShadow.color=3368618,this.txtElapsed.style.fill=4478310,this.txtTouch.style.fill=2765636}
- formatElapsed(){
- const t=Math.floor((Date.now()-this.activateTime)/1e3),i=Math.floor(t/3600),s=Math.floor(t%3600/60),e=t%60;
- return`${
- String(i).padStart(2,"0")}
- :${
- String(s).padStart(2,"0")}
- :${
- String(e).padStart(2,"0")}
- `}
- updateInfo(){
- this.txtWaveNumber.text=`${
- _L.wave.toLocaleString()}
- `,this.txtGold.text=`Gold  ${
- $D.displayLargeNumberAsAlphabet(_L.gold)}
- `,this.txtElapsed.text=this.formatElapsed()}
- }
- ;
- Kt(F7,"PowerSaveManager"),zt(F7,"instance"),zt(F7,"SLIDER_X",140),zt(F7,"SLIDER_Y",632),zt(F7,"SLIDER_W",360),zt(F7,"SLIDER_H",56),zt(F7,"HANDLE_W",66),zt(F7,"HANDLE_PAD",4);
- let H7=F7;
- const W7=Object.freeze(Object.defineProperty({
- __proto__:null,PowerSaveManager:H7}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),j7=class t extends Be{
- constructor(){
- super(),zt(this,"orbBg"),zt(this,"orbFill"),zt(this,"orbHighlight"),zt(this,"orbFrame"),zt(this,"fillMask",new Gf),zt(this,"lblHp"),zt(this,"lblPercent"),zt(this,"currentHp",0),zt(this,"currentMaxHp",1),zt(this,"displayRatio",1),zt(this,"lastHp",-1),zt(this,"lastMaxHp",-1),zt(this,"animating",!1);
- const i=t.SHEET;
- this.orbBg=new We(ZA.getTexture(i,"HealthBG")),this.orbBg.anchor.set(.5),this.orbBg.x=-5,this.addChild(this.orbBg),this.orbFill=new We(ZA.getTexture(i,"HealthRed")),this.orbFill.anchor.set(.5),this.orbFill.x=-5,this.addChild(this.orbFill),this.fillMask.x=-5,this.addChild(this.fillMask),this.orbFill.mask=this.fillMask,this.orbHighlight=new We(ZA.getTexture(i,"HealthRight")),this.orbHighlight.anchor.set(.5),this.orbHighlight.x=-6,this.orbHighlight.y=-21,this.addChild(this.orbHighlight),this.orbFrame=new We(ZA.getTexture(i,"HealthFrame")),this.orbFrame.anchor.set(.5),this.addChild(this.orbFrame);
- const s=aD.WHITE_OUTLINE_FONT_OPTION_16;
- s.fontSize=16,this.lblPercent=new YD("100%",16768426,s),this.lblPercent.y=-11,this.addChild(this.lblPercent);
- const e=aD.WHITE_OUTLINE_FONT_OPTION_16;
- e.fontSize=13,this.lblHp=new YD("",16777215,e),this.lblHp.y=4,this.addChild(this.lblHp),this.drawFillMask(1),this.lblPercent.x=-this.lblPercent.width/2-5,this.lblHp.x=-this.lblHp.width/2-5,this.scale.set(.7)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- drawFillMask(t){
- const i=this.fillMask;
- if(i.clear(),t<=0)return;
- const s=this.orbFill.texture.width,e=this.orbFill.texture.height,n=s/2,h=e*t,r=e/2-h;
- i.rect(-n,r,s,h),i.fill({
- color:16777215}
- )}
- updateInfo(t,i){
- if(i<=0)return;
- const s=Math.max(0,t);
- if(s===this.lastHp&&i===this.lastMaxHp&&!this.animating)return;
- this.lastHp=s,this.lastMaxHp=i,this.currentHp=s,this.currentMaxHp=i;
- const e=this.currentHp/this.currentMaxHp;
- this.displayRatio+=.3*(e-this.displayRatio),Math.abs(this.displayRatio-e)<.005?(this.displayRatio=e,this.animating=!1):this.animating=!0,this.drawFillMask(this.displayRatio);
- const n=Math.floor(100*e);
- this.lblPercent.text=`${
- n}
- %`,this.lblHp.text=`${
- $D.displayLargeNumberAsAlphabet(this.currentHp)}
- `,this.lblHp.x=-this.lblHp.width/2-5,this.lblPercent.x=-this.lblPercent.width/2-5,this.lblPercent.textColor=n<=20?16729156:n<=50?16755268:16768426}
- }
- ;
- Kt(j7,"CastleHealthOrb"),zt(j7,"instance"),zt(j7,"SHEET","UI_Ekkorr");
- let $7=j7;
- const V7=class t extends XI{
- constructor(){
- super(),zt(this,"background",new We),zt(this,"lblBuffName",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblValue",new YD("",16768324,aD.DEFAULT_FONT_OPTION_16)),zt(this,"iconContainer",new Be),this.background=new We(ZA.getTexture("UI_Ekkorr","whiteRect")),this.background.width=560,this.background.height=28,this.background.x=0,this.background.y=0,this.addChild(this.background),this.lblBuffName.x=10,this.lblBuffName.y=6,this.addChild(this.lblBuffName),this.lblValue.x=t.COL_VALUE,this.lblValue.y=6,this.addChild(this.lblValue),this.iconContainer.x=t.COL_ICON,this.iconContainer.y=2,this.addChild(this.iconContainer)}
- setData(t){
- if(this.data=t,this.iconContainer.removeChildren(),t.isSection)return this.background.tint=3359795,this.background.alpha=.5,this.lblBuffName.text=t.buffName,void(this.lblValue.text="");
- const i=t.rowIndex%2==0?2763306:1710618;
- this.background.tint=i,this.background.alpha=.3,this.lblBuffName.text=t.buffName;
- const s=t.value;
- if(this.lblValue.text=`${
- s>0?"+":""}
- ${
- s}
- %`,t.contributors&&t.contributors.length>0){
- let i=0;
- for(const s of t.contributors){
- const t=vx.getInstance().getBookVO(s);
- if(t&&t.base)try{
- const s=new We;
- s.texture=ZA.getTexture("UI_Ekkorr",`Hero${
- t.base}
- `);
- const e=24/s.texture.height;
- s.scale.set(e),s.x=i,s.y=0,this.iconContainer.addChild(s),i+=s.width+4}
- catch(_gt){
- }
- }
- }
- }
- get height(){
- return 30}
- }
- ;
- Kt(V7,"BuffItemRenderer"),zt(V7,"COL_VALUE",260),zt(V7,"COL_ICON",360);
- let K7=V7;
- const z7=class t extends XI{
- constructor(){
- super(),zt(this,"background",new We),zt(this,"lblName",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMelee",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblRange",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),this.background=new We(ZA.getTexture("UI_Ekkorr","whiteRect")),this.background.width=560,this.background.height=28,this.addChild(this.background),this.lblName.x=t.COL_NAME,this.lblName.y=6,this.addChild(this.lblName),this.lblMelee.x=t.COL_MELEE,this.lblMelee.y=6,this.addChild(this.lblMelee),this.lblRange.x=t.COL_RANGE,this.lblRange.y=6,this.addChild(this.lblRange)}
- setData(t){
- if(this.data=t,t.isHeader)return this.background.tint=3359795,this.background.alpha=.5,this.lblName.text=t.buffName,this.lblMelee.text=t.meleeLabel,void(this.lblRange.text=t.rangeLabel);
- const i=t.rowIndex%2==0?2763306:1710618;
- this.background.tint=i,this.background.alpha=.3,this.lblName.text=t.buffName,this.lblMelee.text=this.formatValue(t.meleeValue),this.lblRange.text=this.formatValue(t.rangeValue),this.lblMelee.tint=0!==t.meleeValue?16768324:aD.DEFAULT_COLOR,this.lblRange.tint=0!==t.rangeValue?16768324:aD.DEFAULT_COLOR}
- formatValue(t){
- return t>0?`+${
- t}
- %`:t<0?`${
- t}
- %`:"0%"}
- get height(){
- return 30}
- }
- ;
- Kt(z7,"CombatBuffItemRenderer"),zt(z7,"COL_NAME",10),zt(z7,"COL_MELEE",230),zt(z7,"COL_RANGE",400);
- let q7=z7;
- const X7=[{
- label:"인간",tribe:1}
- ,{
- label:"엘프",tribe:2}
- ,{
- label:"언데드",tribe:3}
- ,{
- label:"오크",tribe:4}
- ],Y7=[{
- label:"공격력",code:IN.Damage}
- ,{
- label:"체력",code:IN.Hp}
- ,{
- label:"방어력",code:IN.Defense}
- ,{
- label:"공격속도",code:IN.AttackSpeed}
- ,{
- label:"이동속도",code:IN.MoveSpeed}
- ,{
- label:"치명타 확률",code:IN.CriticalPercent}
- ,{
- label:"치명타 대미지",code:IN.CriticalDamage}
- ,{
- label:"부활시간",code:IN.ReviveTime}
- ,{
- label:"공격범위",code:IN.AttackRange}
- ,{
- label:"전투시간",code:IN.UnitBattleTime}
- ,{
- label:"아군 타워 체력",code:IN.OurTowerHp}
- ,{
- label:"던전 일반병사 체력",code:IN.DungeonNormalHp}
- ],J7={
- monstergold:"몬스터 골드 증가",wavecleargold:"웨이브 클리어 골드 증가",startwave:"환생 시작 층 증가",elfsecret:"엘프의 비술 확률",godbless:"신의 축복 확률",medal:"환생 훈장 증가",offlinespeed:"오프라인 속도 증가",offlinemax:"오프라인 최고층 상한 증가",gamespeed:"게임 속도 증가",retreat:"퇴각 기능",humansecret:"인간의 비술",undeadsecret:"언데드의 비술",orcsecret:"오크의 비술",questgoldgain:"퀘스트 골드 획득 증가",questopengold:"퀘스트 오픈 골드 감소",questupgradegold:"퀘스트 업그레이드 골드 감소",questcompletetime:"퀘스트 완료 시간 단축",unitupgradegold:"병사 업그레이드 골드 감소"}
- ,Q7=class t extends aG{
- constructor(){
- super(),zt(this,"catCombat",new B6("전투 버프",200)),zt(this,"catGameplay",new B6("게임플레이",200)),zt(this,"selectedCategory",-1),zt(this,"combatArea",new Be),zt(this,"combatSubTabs",[]),zt(this,"combatList"),zt(this,"lblNoCombat",new YD("활성화된 전투 버프가 없습니다.",aD.COLOR_GRAY,aD.DEFAULT_FONT_OPTION_16)),zt(this,"selectedCombatSub",-1),zt(this,"gameplayArea",new Be),zt(this,"gpSubTabs",[]),zt(this,"gpContainers",[]),zt(this,"gpLists",[]),zt(this,"gpNoLabels",[]),zt(this,"selectedGpSub",-1),zt(this,"mainContainer",new Be),this.title=AG.getText("GAME_164","버프 상태"),this.catCombat.text=AG.getText("GAME_165","전투 버프"),this.catCombat.width=280,this.catCombat.x=20,this.catCombat.y=65,this.contentContainer.addChild(this.catCombat),this.catGameplay.text=AG.getText("GAME_166","게임플레이"),this.catGameplay.width=280,this.catGameplay.x=300,this.catGameplay.y=65,this.contentContainer.addChild(this.catGameplay),this.catCombat.onClick=()=>this.selectCategory(0),this.catGameplay.onClick=()=>this.selectCategory(1),this.mainContainer.x=10,this.mainContainer.y=65+this.catCombat.height+10,this.contentContainer.addChild(this.mainContainer),this.initCombatArea(),this.initGameplayArea(),this.width=600,this.height=650,this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- initCombatArea(){
- let t=10;
- for(let s=0;
- s<X7.length;
- s++){
- const i=new B6(AG.getText(`TRIBE_${
- X7[s].tribe}
- `,X7[s].label),120);
- i.width=140,i.x=t,i.y=0,this.combatArea.addChild(i),this.combatSubTabs.push(i);
- const e=s;
- i.onClick=()=>this.selectCombatSub(e),t+=140}
- const i=this.combatSubTabs[0].height+10;
- this.combatList=new zI(q7,560,430),this.combatList.x=10,this.combatList.y=i,this.combatArea.addChild(this.combatList),this.lblNoCombat.text=AG.getText("GAME_170","활성화된 전투 버프가 없습니다."),this.lblNoCombat.x=10,this.lblNoCombat.y=i+5,this.lblNoCombat.visible=!1,this.combatArea.addChild(this.lblNoCombat)}
- initGameplayArea(){
- const t=[AG.getText("GAME_4","유물"),AG.getText("GAME_175","병사"),AG.getText("GAME_176","캐슬"),AG.getText("GAME_177","합산")],i=[AG.getText("GAME_171","활성화된 유물 버프가 없습니다."),AG.getText("GAME_172","활성화된 병사 버프가 없습니다."),AG.getText("GAME_173","활성화된 캐슬 버프가 없습니다."),AG.getText("GAME_174","활성화된 버프가 없습니다.")];
- let s=10;
- for(let e=0;
- e<4;
- e++){
- const n=new B6(t[e],120);
- n.width=140,n.x=s,n.y=0,this.gameplayArea.addChild(n),this.gpSubTabs.push(n);
- const h=e;
- n.onClick=()=>this.selectGpSub(h),s+=140;
- const r=new Be;
- this.gpContainers.push(r);
- const o=new zI(K7,560,430);
- o.x=0,o.y=0,r.addChild(o),this.gpLists.push(o);
- const a=new YD(i[e],aD.COLOR_GRAY,aD.DEFAULT_FONT_OPTION_16);
- a.x=10,a.y=10,a.visible=!1,r.addChild(a),this.gpNoLabels.push(a)}
- }
- selectCategory(t){
- t!==this.selectedCategory&&(this.selectedCategory=t,this.catCombat.selected=0===t,this.catGameplay.selected=1===t,this.mainContainer.removeChildren(),0===t?(this.mainContainer.addChild(this.combatArea),this.selectedCombatSub=-1,this.selectCombatSub(0)):(this.mainContainer.addChild(this.gameplayArea),this.selectedGpSub=-1,this.selectGpSub(0)))}
- selectCombatSub(t){
- if(t!==this.selectedCombatSub){
- this.selectedCombatSub=t;
- for(let i=0;
- i<this.combatSubTabs.length;
- i++)this.combatSubTabs[i].selected=i===t;
- this.updateCombatList()}
- }
- updateCombatList(){
- const t=X7[this.selectedCombatSub],i=KN.getInstance(),s=[];
- s.push({
- buffName:AG.getText("GAME_167","버프"),meleeLabel:AG.getText("GAME_168","근거리"),rangeLabel:AG.getText("GAME_169","원거리"),isHeader:!0,rowIndex:0}
- );
- let e=!1;
- for(let n=0;
- n<Y7.length;
- n++){
- const h=Y7[n],r=i.getMultiplier(sx.MELEE,t.tribe,h.code),o=i.getMultiplier(sx.RANGE,t.tribe,h.code),a=Math.round(100*(r-1)),c=Math.round(100*(o-1));
- 0===a&&0===c||(e=!0),s.push({
- buffName:AG.getText(`CombatBuffType_${
- h.code.toUpperCase()}
- `,h.label),meleeValue:a,rangeValue:c,rowIndex:n}
- )}
- this.combatList.visible=e,this.lblNoCombat.visible=!e,e&&(this.combatList.dataProvider=s)}
- selectGpSub(t){
- if(t===this.selectedGpSub)return;
- this.selectedGpSub=t;
- for(let s=0;
- s<this.gpSubTabs.length;
- s++)this.gpSubTabs[s].selected=s===t;
- const i=this.gpSubTabs[0].height+10;
- for(let s=0;
- s<this.gpContainers.length;
- s++)s===t?(this.gpContainers[s].y=i,this.gpContainers[s].parent||this.gameplayArea.addChild(this.gpContainers[s])):this.gpContainers[s].parent&&this.gameplayArea.removeChild(this.gpContainers[s])}
- updateGameplayData(){
- const t=KN.getInstance();
- this.updateGpTab(0,t.getSourceGameplayBuffs("treasure"));
- const i=new Map(t.getSourceGameplayBuffs("HeroUniqueSkill"));
- this.applyPetAwakeningContributions(i),this.updateGpTab(1,i),this.updateGpTab(2,t.getSourceGameplayBuffs("castle"));
- const s=new Map(t.getAllGameplayBuffs());
- this.applyPetAwakeningContributions(s),this.updateGpTab(3,s)}
- applyPetAwakeningContributions(t){
- const i=t.get(kx.QuestGold)??0,s=ON.applyQuestGoldAwakeningBonus(i);
- s!==i&&t.set(kx.QuestGold,s);
- const e=ON.getColdOwnedGodBlessContribution();
- e>0&&t.set(kx.GodBless,(t.get(kx.GodBless)??0)+e);
- const n=t.get(kx.StartWave)??0,h=ON.applyMoonStartWaveCap(n);
- h>0&&h!==n&&t.set(kx.StartWave,h);
- const r=ON.getWaterDragonTeamMedalBonus(vx.getInstance().getTeamIds());
- r>0&&t.set(kx.MedalBuff,(t.get(kx.MedalBuff)??0)+r);
- const o=ON.getTingkeyOwnedElfSecretContribution();
- o>0&&t.set(kx.ElfSecret,(t.get(kx.ElfSecret)??0)+o);
- for(const a of[kx.OfflineMax,kx.OfflineSpeed,kx.CastleLevelUp]){
- const i=ON.getCitadelOwnershipTotalWithAwakening(a);
- i>0&&t.set(a,i)}
- }
- updateGpTab(t,i){
- const s=[];
- let e=0;
- const n=1===t;
- for(const[o,a]of i){
- let t=[];
- if(n)if(t=[...Ix.getInstance().getContributors(o)],o===kx.GodBless){
- const i=ON.getColdOwnedGodBlessContributors();
- for(const s of i)t.includes(s)||t.push(s)}
- else if(o===kx.StartWave){
- const i=ON.getMoonOwnedStartWaveContributors();
- for(const s of i)t.includes(s)||t.push(s)}
- else if(o===kx.ElfSecret){
- const i=ON.getTingkeyOwnedElfSecretContributors();
- for(const s of i)t.includes(s)||t.push(s)}
- else if(o===kx.QuestGold){
- const i=ON.getQuestGoldOwnedContributors();
- for(const s of i)t.includes(s)||t.push(s)}
- s.push({
- buffName:AG.getText(`GameplayBuffType_${
- o.toLowerCase()}
- `,J7[o.toLowerCase()])||o,value:a,contributors:t,rowIndex:e++}
- )}
- const h=this.gpLists[t],r=this.gpNoLabels[t];
- 0===s.length?(h.visible=!1,r.visible=!0):(h.visible=!0,r.visible=!1,h.dataProvider=s)}
- show(){
- this.updateLanguage(),this.updateGameplayData(),this.selectedCategory=-1,this.selectedCombatSub=-1,this.selectedGpSub=-1,this.selectCategory(0),super.show()}
- getDefaultPositionY(){
- return.65*KA.stageHeight}
- updateLanguage(){
- this.title=AG.getText("GAME_164","버프 상태");
- const t=this.catCombat.width;
- this.catCombat.text=AG.getText("GAME_165","전투 버프"),this.catGameplay.text=AG.getText("GAME_166","게임플레이"),this.catCombat.width=t,this.catGameplay.width=t;
- for(let e=0;
- e<X7.length;
- e++){
- const t=this.combatSubTabs[e],i=t.width;
- t.text=AG.getText(`TRIBE_${
- X7[e].tribe}
- `,X7[e].label),t.width=i}
- this.lblNoCombat.text=AG.getText("GAME_170","활성화된 전투 버프가 없습니다.");
- const i=[AG.getText("GAME_4","유물"),AG.getText("GAME_175","병사"),AG.getText("GAME_176","캐슬"),AG.getText("GAME_177","합산")],s=[AG.getText("GAME_171","활성화된 유물 버프가 없습니다."),AG.getText("GAME_172","활성화된 병사 버프가 없습니다."),AG.getText("GAME_173","활성화된 캐슬 버프가 없습니다."),AG.getText("GAME_174","활성화된 버프가 없습니다.")];
- for(let e=0;
- e<this.gpSubTabs.length;
- e++){
- const t=this.gpSubTabs[e],n=t.width;
- t.text=i[e],t.width=n,this.gpNoLabels[e].text=s[e]}
- }
- }
- ;
- Kt(Q7,"BuffStatusPopup"),zt(Q7,"_instance");
- let Z7=Q7;
- var t9=(t=>(t.GEM="gem",t.HONOR="honor",t))(t9||{
- }
- );
- const i9=class t{
- constructor(){
- zt(this,"slots",[]),zt(this,"canRefresh",!1),zt(this,"isLoaded",!1),zt(this,"lastFetchUtcDate","")}
- static getInstance(){
- return t._instance||(t._instance=new t),t._instance}
- setData(i){
- if(i){
- if(this.isLoaded=!0,this.lastFetchUtcDate=t.getCurrentUtcDateKey(),this.slots=[],Array.isArray(i.slots))for(const t of i.slots)this.slots.push({
- slotIndex:Number(t.slotIndex)||0,kindNum:Number(t.kindNum)||0,currency:"gem"===t.currency?"gem":"honor",price:Number(t.price)||0,piece:Number(t.piece)||0}
- );
- this.canRefresh=!!i.canRefresh}
- }
- isStale(){
- return!this.isLoaded||this.lastFetchUtcDate!==t.getCurrentUtcDateKey()}
- invalidate(){
- this.isLoaded=!1,this.lastFetchUtcDate=""}
- static getCurrentUtcDateKey(){
- const t=new Date(ix.time);
- return`${
- t.getUTCFullYear()}
- -${
- (t.getUTCMonth()+1).toString().padStart(2,"0")}
- -${
- t.getUTCDate().toString().padStart(2,"0")}
- `}
- getMsUntilNextResetUTC(){
- const t=new Date,i=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+1,0,0,0,0);
- return Math.max(0,i-t.getTime())}
- getRemainingTimeText(){
- const t=this.getMsUntilNextResetUTC(),i=Math.floor(t/6e4),s=i%60;
- return`${
- Math.floor(i/60).toString().padStart(2,"0")}
- :${
- s.toString().padStart(2,"0")}
- `}
- }
- ;
- Kt(i9,"PetShopDataManager"),zt(i9,"_instance");
- let s9=i9;
- const e9=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage"),zt(this,"gemLabel"),zt(this,"btnConfirm"),zt(this,"btnCancel"),zt(this,"onConfirm",null),zt(this,"onCancel",null),this.title="",this.lblMessage=new YD("",aD.DEFAULT_COLOR,aD.ERROR_POPUP_LABEL_OPTION),this.lblMessage.y=90,this.gemLabel=new GB("UI_GEM_ICON","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.gemLabel.iconScale=.8,this.btnConfirm=new sG("확인"),this.btnCancel=new lK("취소"),this.addChild(this.lblMessage,this.gemLabel,this.btnConfirm,this.btnCancel),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.btnClose.onClick=this.onCancelClick.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()}
- onCancelClick(){
- this.hide();
- let t=this.onCancel;
- this.onCancel=null,null!==t&&t()}
- setData(t,i,s="UI_GEM_ICON"){
- this.lblMessage.text=i,this.gemLabel.texture=ZA.getTexture("UI_Ekkorr",s),this.gemLabel.text=String(t),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout()}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.gemLabel.x=.5*(this.width-this.gemLabel.width),this.gemLabel.y=this.lblMessage.y+this.lblMessage.height+20,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnConfirm.y=this.gemLabel.y+this.gemLabel.height+30,this.btnCancel.y=this.btnConfirm.y,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
- getDefaultPositionY(){
- return.3*KA.stageHeight}
- onBackButton(){
- return this.onCancelClick(),!0}
- }
- ;
- Kt(e9,"PetTicketPopup"),zt(e9,"_instance");
- let n9=e9;
- const h9=class t{
- constructor(){
- zt(this,"acc",[0])}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t,i){
- "1"===EL.getInstance().getClientData("MEDAL_ENHANCE_USE_FORMULA")&&i&&i.length>0?this.buildFromSegments(i):this.acc=[0,...String(t[0].medal).split("|").map(Number)]}
- buildFromSegments(t){
- const i=[...t].map(t=>({
- startLevel:Number(t.startLevel??1),exp:Number(t.exp??1),offset:Number(t.offset??0)}
- )).sort((t,i)=>t.startLevel-i.startLevel),s=vx.HERO_MAX_ENHANCE,e=new Array(s+1);
- e[0]=0;
- let n=0;
- for(let h=1;
- h<=s;
- h++){
- for(;
- n+1<i.length&&i[n+1].startLevel<=h;
- )n++;
- const t=i[n],s=Math.round(Math.pow(t.exp,h/5)+3*h)+t.offset;
- e[h]=e[h-1]+s}
- this.acc=e}
- init(){
- }
- getCost(t){
- return t<1||t>=this.acc.length?0:this.acc[t]-this.acc[t-1]}
- getTotalCost(t,i){
- return t>=i?0:(i>=this.acc.length&&(i=this.acc.length-1),t<0&&(t=0),this.acc[i]-this.acc[t])}
- getMaxAffordableLevel(t,i){
- let s=t,e=this.acc.length-1;
- for(;
- s<e;
- ){
- const n=Math.floor((s+e+1)/2);
- this.acc[n]-this.acc[t]<=i?s=n:e=n-1}
- return s}
- getMaxLevel(){
- return this.acc.length-1}
- }
- ;
- Kt(h9,"HeroMedalEnhanceManager"),zt(h9,"instance");
- let r9=h9;
- const o9=class t extends O8{
- constructor(){
- var i;
- super(),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblCapacity",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"allyBtns",[]),zt(this,"battleContainer",new Be),zt(this,"btnSave",new QL("저장")),zt(this,"heroList"),zt(this,"selectedSlot",-1),zt(this,"teamKindNums",[]),zt(this,"teamTrans",[]),zt(this,"heroVOs",[]),zt(this,"onSaved",null),zt(this,"buffContainer",new Be),zt(this,"bgMedal",new CM({
- texture:ZA.getTexture("UI_Ekkorr","Base_Time_Bg_Orange"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
- )),zt(this,"bgStartwave",new CM({
- texture:ZA.getTexture("UI_Ekkorr","Base_Time_Bg_Blue"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
- )),zt(this,"iconMedal",new We(ZA.getTexture("UI_Ekkorr","Icon_Medalbuff_01"))),zt(this,"iconStartwave",new We(ZA.getTexture("UI_Ekkorr","Icon_Startwave_01"))),zt(this,"lblMedalName",new YD("훈장 버프",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblMedalBuff",new YD("+0%",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblStartwaveName",new YD("시작 웨이브",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblStartwaveBuff",new YD("+0%",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"filterBtns",[]),zt(this,"filterNorNames",["Btn_All_nor","Btn_Medabuffl_nor","Btn_Startwave_nor"]),zt(this,"filterActNames",["Btn_All","Btn_Medalbuff","Btn_Startwave"]),zt(this,"currentFilter",0),this.bg.height=850,this.y=KA.safeHeight-850,this.lblTitle.text=AG.getText("GAME_607","환생팀 편성"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.lblCapacity.y=this.lblTitle.y,this.addChild(this.lblCapacity);
- const s=this.lblTitle.y+this.lblTitle.height+20;
- this.battleContainer.y=s,this.addChild(this.battleContainer);
- for(let u=0;
- u<t.MAX_ALLIES;
- u++){
- const t=u%5,i=Math.floor(u/5),s=new O4;
- s.scale=.65,s.x=85*t,s.y=62*i,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
- const e=340+((null==(i=this.allyBtns[0])?void 0:i.width)??50);
- this.battleContainer.x=.5*(this.bg.width-e);
- const n=s+124+10;
- this.buffContainer.y=n,this.addChild(this.buffContainer);
- const h=this.bg.width-15-108,r=h-15-10,o=Math.floor(r/2)-5;
- this.bgMedal.x=0,this.bgMedal.y=0,this.bgMedal.width=o,this.bgMedal.height=37,this.buffContainer.addChild(this.bgMedal),this.iconMedal.x=this.bgMedal.x+6,this.iconMedal.y=this.bgMedal.y+6.5,this.iconMedal.width=24,this.iconMedal.height=24,this.buffContainer.addChild(this.iconMedal);
- const a=this.bgMedal.y+9.5-1;
- this.lblMedalName.x=this.iconMedal.x+25,this.lblMedalName.y=a,this.buffContainer.addChild(this.lblMedalName),this.lblMedalBuff.y=a,this.buffContainer.addChild(this.lblMedalBuff),this.bgStartwave.x=o+10,this.bgStartwave.y=0,this.bgStartwave.width=o,this.bgStartwave.height=37,this.buffContainer.addChild(this.bgStartwave),this.iconStartwave.x=this.bgStartwave.x+6,this.iconStartwave.y=this.bgStartwave.y+6.5,this.iconStartwave.width=24,this.iconStartwave.height=24,this.buffContainer.addChild(this.iconStartwave),this.lblStartwaveName.x=this.iconStartwave.x+25,this.lblStartwaveName.y=a,this.lblStartwaveName.textColor=10079487,this.buffContainer.addChild(this.lblStartwaveName),this.lblStartwaveBuff.y=a,this.lblStartwaveBuff.textColor=10079487,this.buffContainer.addChild(this.lblStartwaveBuff);
- for(let t=0;
- t<3;
- t++){
- const i=new We(ZA.getTexture("UI_Ekkorr",this.filterActNames[t]));
- i.x=h+36*t,i.y=2.5,i.width=32,i.height=32,i.eventMode="static",i.cursor="pointer";
- const s=t;
- i.on("pointerdown",()=>this.onFilterClick(s)),this.buffContainer.addChild(i),this.filterBtns.push(i)}
- this.buffContainer.x=15,this.updateFilterButtons();
- const c=n+43,l=this.bg.height-c-90;
- P4.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new R3(P4,630,l),this.heroList.x=5,this.heroList.y=c,this.addChild(this.heroList),this.btnSave.color=QL.GREEN,this.btnSave.width=200,this.btnSave.height=45,this.btnSave.x=.5*(this.bg.width-this.btnSave.width),this.btnSave.y=this.bg.height-65,this.btnSave.onClick=this.onSaveClick.bind(this),this.addChild(this.btnSave)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateCapacityPosition(){
- this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15}
- onFilterClick(t){
- this.currentFilter=t,this.updateFilterButtons(),this.updateHeroList()}
- updateFilterButtons(){
- for(let t=0;
- t<this.filterBtns.length;
- t++){
- const i=t===this.currentFilter;
- this.filterBtns[t].texture=ZA.getTexture("UI_Ekkorr",i?this.filterActNames[t]:this.filterNorNames[t]),this.filterBtns[t].alpha=i?1:.8}
- }
- updateBuffSummary(){
- const t=Ix.getInstance(),i=vx.getInstance(),s=this.teamKindNums.filter(t=>t>0),e=t.calcTotalForKindNums(s,kx.MedalBuff)+ON.getWaterDragonTeamMedalBonus(s)+i.calcTeamTransMedalBonusPct(this.teamKindNums,this.teamTrans),n=t.calcTotalForKindNums(s,kx.StartWave),h=ON.applyMoonStartWaveCap(n);
- this.lblMedalBuff.text=`+${
- e}
- %`,this.lblMedalBuff.x=this.bgMedal.x+this.bgMedal.width-this.lblMedalBuff.width-8,this.lblStartwaveBuff.text=`+${
- h}
- %`,this.lblStartwaveBuff.x=this.bgStartwave.x+this.bgStartwave.width-this.lblStartwaveBuff.width-8}
- getHeroSkillCode(t){
- const i=vx.getInstance().getBookVO(t);
- if(!i||!i.uniqueSkill)return"";
- const s=Ix.getInstance().getByKindNum(i.uniqueSkill);
- if(!s||!s.code)return"";
- const e=s.code.toLowerCase();
- return"medalbuff"===e?kx.MedalBuff:e}
- async setData(){
- var t;
- this.lblTitle.text=AG.getText("GAME_607","환생팀 편성"),this.lblMedalName.text=AG.getText("GAME_608","훈장 버프"),this.lblStartwaveName.text=AG.getText("GAME_609","시작 웨이브"),this.btnSave.text=AG.getText("GAME_527","저장");
- try{
- const i=await hD.getInstance().user.getReviveTeam(!0);
- (null==i?void 0:i.success)&&(null==(t=i.body)?void 0:t.team)?this.parseTeam(i.body.team):this.initEmptyTeam()}
- catch{
- this.initEmptyTeam()}
- this.validateTeam(),this.selectedSlot=-1,this.currentFilter=0,this.updateFilterButtons(),this.updateAllyButtons(),this.updateBuffSummary(),this.updateHeroList()}
- parseTeam(i){
- this.teamKindNums=new Array(t.MAX_ALLIES).fill(-1),this.teamTrans=new Array(t.MAX_ALLIES).fill(0);
- const s=i.split("|");
- for(let e=0;
- e<Math.min(s.length,t.MAX_ALLIES);
- e++){
- const[t,i]=s[e].split("-").map(Number);
- this.teamKindNums[e]=t>0?t:-1,this.teamTrans[e]=t>0&&i||0}
- }
- validateTeam(){
- if(this.teamKindNums.length<t.MAX_ALLIES)return;
- const i=this.calcTotalInventory();
- if(0===i.size)return;
- const s=new Map;
- let e=!1;
- const n=[];
- for(let h=0;
- h<t.MAX_ALLIES;
- h++){
- const t=this.teamKindNums[h],r=this.teamTrans[h];
- if(null==t||!Number.isFinite(t)||t<=0)continue;
- const o=`${
- t}
- _${
- r??0}
- `,a=s.get(o)||0;
- a>=(i.get(o)||0)?(this.teamKindNums[h]=-1,this.teamTrans[h]=0,e=!0,n.push(`slot${
- h}
- :${
- o}
- `)):s.set(o,a+1)}
- }
- initEmptyTeam(){
- this.teamKindNums=new Array(t.MAX_ALLIES).fill(-1),this.teamTrans=new Array(t.MAX_ALLIES).fill(0)}
- getPlacedCount(){
- let i=0;
- for(let s=0;
- s<t.MAX_ALLIES;
- s++)this.teamKindNums[s]>0&&i++;
- return i}
- updateAllyButtons(){
- const i=Math.max(1,_L.maxWave/10),s=this.getPlacedCount(),e=s>=t.MAX_ALLIES;
- this.lblCapacity.text=`${
- s}
-  / ${
- t.MAX_ALLIES}
- `,this.lblCapacity.textColor=e?16729156:16777215,this.updateCapacityPosition();
- for(let n=0;
- n<t.MAX_ALLIES;
- n++){
- const t=this.allyBtns[n],s=yx.getVO();
- if(this.teamKindNums[n]>0){
- t.visible=!0,s.kindNum=this.teamKindNums[n],s.trans=this.teamTrans[n],s.level=i,t.setDataWith(n,s),t.hideLevel(),t.hideEnhance();
- const e=n===this.selectedSlot;
- t.setAlphaToFrame(e?1:.85),t.selected=e}
- else if(e)t.visible=!1,t.selected=!1;
- else{
- t.visible=!0,s.kindNum=-1,t.setDataWith(n,s),t.hideBackground();
- const i=n===this.selectedSlot;
- t.setAlphaToFrame(i?.9:.4),t.selected=!1}
- }
- }
- calcTotalInventory(){
- const t=new Map,i=vx.getInstance().list;
- for(const e of i){
- if(e.kindNum>=1e4)continue;
- const i=`${
- e.kindNum}
- _${
- e.trans}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const s=vx.getInstance().ownedUnitList;
- for(const e of s)if(!(e.kindNum>=1e4)){
- if(e.count>0){
- const i=`${
- e.kindNum}
- _0`;
- t.set(i,(t.get(i)||0)+e.count)}
- for(let i=0;
- i<3;
- i++)if(e.trans[i]>0){
- const s=`${
- e.kindNum}
- _${
- i+1}
- `;
- t.set(s,(t.get(s)||0)+e.trans[i])}
- }
- return t}
- updateHeroList(){
- x4.removeAll(this.heroVOs);
- const i=new Map;
- for(let h=0;
- h<t.MAX_ALLIES;
- h++){
- if(this.teamKindNums[h]<=0)continue;
- const t=`${
- this.teamKindNums[h]}
- _${
- this.teamTrans[h]}
- `;
- i.set(t,(i.get(t)||0)+1)}
- const s=this.calcTotalInventory(),e=vx.getInstance();
- this.heroVOs.push(x4.set(x4.getVO(),-1,0,0,0));
- for(const[t,h]of s){
- const[s,e]=t.split("_"),n=Number(s);
- if(0!==this.currentFilter){
- const t=this.getHeroSkillCode(n);
- if(1===this.currentFilter&&t!==kx.MedalBuff)continue;
- if(2===this.currentFilter&&t!==kx.StartWave)continue}
- const r=i.get(t)||0;
- this.heroVOs.push(x4.set(x4.getVO(),n,Number(e),h-r,h))}
- this.heroVOs.sort((t,i)=>{
- if(t.kindNum<=0)return-1;
- if(i.kindNum<=0)return 1;
- const s=e.getBookVO(t.kindNum),n=e.getBookVO(i.kindNum);
- if(!s||!n)return 0;
- const h=1e12*s.grade-1e9*s.evolStage+1e6*t.trans-s.tribe;
- return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
- );
- const n=new Map;
- for(const t of this.heroVOs){
- if(t.kindNum<=0)continue;
- const i=this.getHeroSkillCode(t.kindNum);
- i!==kx.MedalBuff&&i!==kx.StartWave||n.set(t.kindNum,i)}
- P4.skillCodeMap=n,this.heroList.dataProvider=ZI.chunkArray(this.heroVOs,7)}
- onClickAllyHero(i){
- const s=this.teamKindNums[i]<=0,e=this.getPlacedCount()>=t.MAX_ALLIES;
- s&&e||(this.selectedSlot===i?this.selectedSlot=-1:this.selectedSlot=i,this.updateAllyButtons())}
- onClickHeroFromList(i,s){
- if(i<=0){
- if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
- const i=this.selectedSlot;
- this.teamKindNums[i]=-1,this.teamTrans[i]=0;
- let s=-1;
- for(let e=1;
- e<=t.MAX_ALLIES;
- e++){
- const n=(i+e)%t.MAX_ALLIES;
- if(this.teamKindNums[n]>0){
- s=n;
- break}
- }
- this.selectedSlot=s}
- }
- else{
- const e=`${
- i}
- _${
- s}
- `;
- let n=0;
- for(let h=0;
- h<t.MAX_ALLIES;
- h++)this.teamKindNums[h]===i&&this.teamTrans[h]===s&&n++;
- if(n>=(this.calcTotalInventory().get(e)||0))return;
- if(this.selectedSlot>=0){
- if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=t.MAX_ALLIES)return;
- this.teamKindNums[this.selectedSlot]=i,this.teamTrans[this.selectedSlot]=s,this.selectedSlot=-1}
- else{
- if(this.getPlacedCount()>=t.MAX_ALLIES)return;
- for(let e=0;
- e<t.MAX_ALLIES;
- e++)if(this.teamKindNums[e]<=0){
- this.teamKindNums[e]=i,this.teamTrans[e]=s;
- break}
- }
- }
- this.updateAllyButtons(),this.updateBuffSummary(),this.updateHeroList()}
- buildTeamStr(){
- const i=[];
- for(let s=0;
- s<t.MAX_ALLIES;
- s++)this.teamKindNums[s]>0?i.push(`${
- this.teamKindNums[s]}
- -${
- this.teamTrans[s]}
- `):i.push("0-0");
- return i.join("|")}
- async onSaveClick(){
- const t=this.buildTeamStr();
- try{
- const i=await hD.getInstance().user.setReviveTeam(t,!0);
- if(!1===(null==i?void 0:i.success))return void vV.getInstance().showMessage(AG.getText("GAME_616","저장에 실패했습니다."))}
- catch{
- return void vV.getInstance().showMessage(AG.getText("GAME_616","저장에 실패했습니다."))}
- vV.getInstance().showMessage(AG.getText("GAME_617","환생팀이 저장되었습니다.")),this.onSaved&&this.onSaved(),this.hide()}
- show(){
- P4.showAttackType=!1,P4.onHeroClick=this.onClickHeroFromList.bind(this);
- const t=IL.getInstance();
- for(const i of t.children)if(i!==this&&"position"in i&&"height"in i){
- const t=i;
- if(t.pivot&&t.pivot.y>0){
- const i=t.position.y-t.pivot.y-100;
- this.y=Math.max(0,i),this.bg.height=KA.safeHeight-this.y;
- break}
- }
- t.addPopup(this)}
- hide(){
- P4.skillCodeMap=null,IL.getInstance().removePopup(this)}
- }
- ;
- Kt(o9,"ReviveTeamPopup"),zt(o9,"_instance"),zt(o9,"MAX_ALLIES",10);
- let a9=o9;
- const c9=Object.freeze(Object.defineProperty({
- __proto__:null,ReviveTeamPopup:a9}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),l9=class extends q3{
- constructor(t){
- super(t),zt(this,"bgOff"),zt(this,"lblOff"),this.width=50,this.height=35,this.minWidth=50,this.outlineText=!0,this.setTexture({
- texture:ZA.getTexture("UI_Ekkorr","Progress_Bar_Bg_LightGreen"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
- ),this.bgOff=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Progress_Bar_Bg_LightGray"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
- ),this.bgOff.visible=!1,this.bgOff.width=this._width,this.bgOff.height=this._height,this.container.addChildAt(this.bgOff,0);
- const i=aD.DEFAULT_OUTLINE_FONT_OPTION_17;
- i.fill=16777135,i.stroke={
- color:"#33872a",width:4,join:"round"}
- ,this.lbl.setStyle(i);
- const s=aD.DEFAULT_OUTLINE_FONT_OPTION_17;
- s.fill=15790320,s.stroke={
- color:"#535353",width:4,join:"round"}
- ,this.lblOff=new YD(t,s.fill,s),this.lblOff.visible=!1,this.container.addChild(this.lblOff),this._activated=!1,this.activated=!0,this.updateLayout()}
- updateLayout(){
- super.updateLayout(),this.lbl.x=.5*(this._width-this.lbl.width)+1,this.lblOff&&(this.lblOff.x=this.lbl.x,this.lblOff.y=this.lbl.y)}
- set activated(t){
- super.activated=t,this._activated?(this.bg.visible=!0,this.lbl.visible=!0,this.bgOff.visible=!1,this.lblOff.visible=!1):(this.bg.visible=!1,this.lbl.visible=!1,this.bgOff.visible=!0,this.lblOff.visible=!0)}
- onDown(t){
- this.container.scale=.95}
- onUp(t){
- this.container.scale=1}
- onTap(t){
- KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),WL(),this.onClick&&this.onClick()}
- }
- ;
- Kt(l9,"HeroTranscendModeButton");
- let u9=l9;
- const d9=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_384","영웅 영입 안내");
- const t=[`1. ${
- AG.getText("GAME_385","일반, 진화, 초월 영웅들을 모두 가지고 있을 경우에는, 배치하기 전에 영웅을 먼저 선택해주세요.")}
- `,`2. ${
- AG.getText("GAME_386","영웅 아이콘을 오랫동안 꾹 누르고 있으면, 영웅 상세 팝업이 표시됩니다.")}
- `];
- this.lblGuide.text=t.join("\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.4*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(d9,"HeroHireGuidePopup"),zt(d9,"_instance");
- let f9=d9;
- const p9=class extends Be{
- constructor(t){
- super(),zt(this,"bg"),zt(this,"icon"),zt(this,"cover"),zt(this,"container"),zt(this,"_tribe",0),zt(this,"_selected",!0),zt(this,"onClick"),this._tribe=t,this.container=new Be,this.addChild(this.container),this.bg=new We(ZA.getTexture("UI_Ekkorr","Frame_Reward_01")),this.container.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Ekkorr",`TRIBE_${
- this._tribe}
- _Icon`)),this.container.addChild(this.icon),this.cover=new We(ZA.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.cover.visible=!1,this.container.addChild(this.cover),this.eventMode="dynamic",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this),this.container.pivot.set(.5*this.bg.width,.5*this.bg.height)}
- get tribe(){
- return this._tribe}
- set tribe(t){
- t!=this._tribe&&(this._tribe=t,this.icon.texture=ZA.getTexture("UI_Ekkorr",`TRIBE_${
- this._tribe}
- _Icon`))}
- get selected(){
- return this._selected}
- set selected(t){
- t!=this._selected&&(this._selected=t,this._selected?this.cover.visible=!1:this.cover.visible=!0)}
- reset(){
- this._selected=!0,this.cover.visible=!1}
- onDown(t){
- this.container.scale=.9}
- onUp(t){
- this.container.scale=1}
- onTap(t){
- KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),this.selected=!this._selected,this.onClick&&this.onClick(this._tribe,this._selected)}
- }
- ;
- Kt(p9,"HeroTribeFilterIcon");
- let g9=p9;
- const m9=class t extends x6{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- super(),this.currentSubView=dtt.getInstance()}
- setData(){
- dtt.getInstance().setData(),this.currentSubView=dtt.getInstance()}
- get className(){
- return"HeroView"}
- }
- ;
- Kt(m9,"HeroView"),zt(m9,"instance");
- let w9=m9;
- const v9=class extends XI{
- constructor(){
- let t;
- super(),zt(this,"bg"),zt(this,"icons"),zt(this,"labels"),zt(this,"posList",[0,1,2,3,4,5,640]),zt(this,"kindNumArray",[]),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=75,this.bg.visible=!1,this.addChild(this.bg),this.icons=[],this.labels=[];
- for(let i=0;
- i<6;
- ++i)t=new vK,t.scale=.81,t.x=7+i*(t.width+1),t.y=8,this.addChild(t),this.icons.push(t),this.posList[i]=t.x;
- this.posList.push(640)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- setData(t){
- const i=t;
- if(!i)return;
- let s;
- this.kindNumArray=i;
- const e=i.length;
- for(let n=0;
- n<this.icons.length;
- ++n)s=this.icons[n],n<e?(s.setDataWithKindNum(i[n]),s.visible=!0):s.visible=!1}
- onClick(t,i){
- this.kindNumArray.length;
- let s=-1;
- for(let e=0;
- e<this.icons.length;
- ++e)if(t>this.posList[e]&&t<this.posList[e+1]){
- s=e;
- break}
- -1!=s&&s<this.kindNumArray.length&&this.icons[s].visible&&this.goDetail(this.kindNumArray[s])}
- goDetail(t){
- _9.getInstance().hide(),ett.getInstance().showInBook(t)}
- }
- ;
- Kt(v9,"HeroBookItemRenderer");
- let b9=v9;
- const y9=class t extends O8{
- constructor(){
- let t;
- super(),zt(this,"lblTitle"),zt(this,"filterIcons"),zt(this,"list"),zt(this,"_selectedTribes",[1,2,3,4]),this.lblTitle=new YD(AG.getText("GAME_220","도감"),16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20),this.addChild(this.lblTitle),this.filterIcons=[];
- for(let s=0;
- s<4;
- ++s)t=new g9(s),t.scale=.8,this.addChild(t),this.filterIcons.push(t),t.onClick=this.onFilterIconClick.bind(this);
- const i=Math.min(KA.safeHeight-750,KA.viewMainY);
- this.list=new R3(b9,630,KA.getBookListHeight(i)),this.addChild(this.list),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get className(){
- return"HeroBookPopup"}
- updateLayout(){
- let t=UV.getInstance().height;
- t+=.5*this.filterIcons[0].height+5;
- let i,s=this.bg.width+.5*this.filterIcons[0].width-10;
- for(let e=this.filterIcons.length-1;
- e>-1;
- --e)i=this.filterIcons[e],i.x=s-i.width-1,i.y=t,s=i.x;
- i=this.filterIcons[0],this.lblTitle.x=10,this.lblTitle.y=Math.floor(i.y-.5*this.lblTitle.height),this.list.x=5,this.list.y=Math.floor(t+.5*this.filterIcons[0].height+5),this.list.setListHeight(this.bg.height-this.list.y-15)}
- setData(){
- this.lblTitle.text=AG.getText("GAME_220","도감"),this._selectedTribes=[1,2,3,4];
- const t=this._selectedTribes.length;
- for(let i=0;
- i<t;
- ++i)this.filterIcons[i].reset();
- this.updateList(),this.updateLayout()}
- updateList(){
- const t=vx.getInstance();
- let i,s=[];
- const e=t.bookList.length;
- for(let h=0;
- h<e;
- ++h)i=t.bookList[h],i.kindNum>1e3||i.tribe>4||0!=this._selectedTribes.includes(i.tribe)&&s.push(i.kindNum);
- s.sort((i,s)=>{
- const e=t.getBookVO(i),n=t.getBookVO(s);
- return e&&n?e.tribe!=n.tribe?e.tribe-n.tribe:e.base!=n.base?n.base-e.base:n.grade-e.grade:1}
- );
- const n=this.list.getDataLen();
- if(this.list.dataProvider=ZI.chunkArray(s,6),n>this.list.getDataLen()){
- const t=Math.floor(Math.abs(this.list.getContainerY())/80);
- this.list.scrollTo(t)}
- }
- onFilterIconClick(t,i){
- this._selectedTribes.length=0;
- const s=this.filterIcons.length;
- for(let e=0;
- e<s;
- ++e)this.filterIcons[e].selected&&this._selectedTribes.push(e+1);
- this.updateList()}
- }
- ;
- Kt(y9,"HeroBookPopup"),zt(y9,"_instance");
- let _9=y9;
- const M9=class t extends Be{
- constructor(){
- super(),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","Base_Check01"))),this.icon.x=0,this.icon.y=0,this.addChild(this.icon)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- }
- ;
- Kt(M9,"HeroCheckIcon"),zt(M9,"_instance");
- let E9=M9;
- const A9=new Sg({
- fontFamily:"Arial",fill:13421772,fontSize:13,fontWeight:"bold"}
- ),S9=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),zt(this,"detectContainer",new Be),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.contentContainer.addChild(this.detectContainer),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_370","영웅 안내");
- const t=[`[ ${
- AG.getText("COMMON_40","레벨")}
- ]`,`1. ${
- AG.getText("GAME_371","골드레벨")}
-  : ${
- AG.getText("GAME_372","골드로 올리는 레벨로, 환생하면 초기화 됩니다.")}
- `,`2. ${
- AG.getText("GAME_373","강화레벨")}
-  : ${
- AG.getText("GAME_374","훈장으로 올리는 레벨로, 환생해도 초기화 되지 않습니다.")}
- `,"",`[ ${
- AG.getText("GAME_68","편성 해제")}
-  ]`,`1. ${
- AG.getText("GAME_375","영웅을 편성해제하면, 강화레벨을 0으로 초기화하고, 강화에 들어간 모든 훈장을 돌려줍니다.")}
- `,`2. ${
- AG.getText("GAME_376","골드레벨도 1로 초기화 되지만, 레벨업에 들어간 골드는 되돌려주지 않습니다.")}
- `,"",AG.getText("GAME_377","[ 아이콘 설명 ]")];
- this.lblGuide.text=t.join("\n"),this.lblGuide.x=30,this.lblGuide.y=80;
- let i=this.lblGuide.y+this.lblGuide.height+10;
- this.detectContainer.removeChildren(),this.detectContainer.x=30,this.detectContainer.y=i;
- let s=0;
- s=this.addIconDesc(s,"ICON_UNIT",AG.getText("GAME_378","적들이 성으로 돌진하지 못하도록 막아설 수 있는 최대 병사수입니다.")),s=this.addMultiIconDesc(s,["MALE_ICON","FEMALE_ICON","NEUTRAL_ICON"],AG.getText("GAME_379","남성, 여성, 중성을 표시합니다.")),s=this.addMultiIconDesc(s,["HUMAN_ICON","ELF_ICON","UNDEAD_ICON","ORC_ICON"],AG.getText("GAME_380","인간, 엘프, 언데드, 오크 종족을 표시합니다.")),s=this.addIconDesc(s,"DETECT_ICON",AG.getText("GAME_381","은신한 적을 감지할 수 있음을 표시합니다.")),s+=10;
- const e=new YD(`[ ${
- AG.getText("GAME_383","은신 감지 영웅")}
-  ]`,aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16);
- e.y=s,this.detectContainer.addChild(e),s+=e.height+8;
- const n=vx.getInstance().bookList.filter(t=>1===t.evolStage&&t.kindNum<1e3&&t.detect),h=[{
- tribe:1,label:AG.getText("TRIBE_1","인간")}
- ,{
- tribe:2,label:AG.getText("TRIBE_2","엘프")}
- ,{
- tribe:3,label:AG.getText("TRIBE_3","언데드")}
- ,{
- tribe:4,label:AG.getText("TRIBE_4","오크")}
- ];
- let r=0;
- for(const u of h){
- const t=new Wg({
- text:`${
- u.label}
-  :`,style:A9}
- );
- t.width>r&&(r=t.width),t.destroy()}
- const o=r+8,a=this.width-100;
- for(const u of h){
- const t=n.filter(t=>t.tribe===u.tribe).sort((t,i)=>i.grade-t.grade);
- if(0===t.length)continue;
- const i=new Wg({
- text:`${
- u.label}
-  :`,style:A9}
- );
- i.y=s+.5*(36-i.height),this.detectContainer.addChild(i);
- let e=o;
- for(const n of t)try{
- const t=new We(ZA.getTexture("UI_Ekkorr",`Hero${
- n.base}
- `));
- if(t.scale.set(.35),t.x=e,t.y=s+.5*(36-t.height),this.detectContainer.addChild(t),e+=t.width+2,e>a)break}
- catch(l){
- }
- s+=36}
- const c=this.detectContainer.y+s+40;
- this.height=c,await this.loadImage(),super.show()}
- addIconDesc(t,i,s){
- const e=new We(ZA.getTexture("UI_Ekkorr",i));
- e.scale.set(.8),e.x=0,e.y=t,this.detectContainer.addChild(e);
- const n=new YD(s,aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16);
- return aD.setLabelWrapWidth(n,this.width-100),n.x=.8*e.width+8,n.y=t+.5*(.8*e.height-n.height),this.detectContainer.addChild(n),t+Math.max(.8*e.height,n.height)+6}
- addMultiIconDesc(t,i,s){
- let e=0,n=0;
- for(const r of i){
- const i=new We(ZA.getTexture("UI_Ekkorr",r));
- i.scale.set(.8),i.x=e,i.y=t,this.detectContainer.addChild(i),e+=.8*i.width+3,n=Math.max(n,.8*i.height)}
- const h=new YD(s,aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16);
- return aD.setLabelWrapWidth(h,this.width-100),h.x=e+5,h.y=t+.5*(n-h.height),this.detectContainer.addChild(h),t+Math.max(n,h.height)+6}
- getDefaultPositionY(){
- return.47*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(S9,"HeroGuidePopup"),zt(S9,"_instance");
- let T9=S9;
- const C9=class t extends aG{
- constructor(){
- super(),zt(this,"listBg"),zt(this,"listContainer",new Be),zt(this,"heroCheckBoxes",[]),zt(this,"heroNameLabels",[]),zt(this,"heroLevelLabels",[]),zt(this,"rowHitAreas",[]),zt(this,"sortedHeroes",[]),zt(this,"btn1"),zt(this,"btn10"),zt(this,"btn100"),zt(this,"btn1000"),zt(this,"frameCounter",0),zt(this,"FRAME_INTERVAL",30),zt(this,"lastGoldValue",-1),this.title=AG.getText("GAME_254","일괄 레벨업");
- const i=t.POPUP_W,s=i-40,e=t.MAX_HEROES*t.ROW_H+12;
- this.listBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.listBg.x=30,this.listBg.y=80,this.listBg.width=s,this.listBg.height=e,this.contentContainer.addChild(this.listBg),this.listContainer.x=45,this.listContainer.y=86;
- for(let c=0;
- c<t.MAX_HEROES;
- c++){
- const i=c*t.ROW_H+4,e=new I9;
- e.x=0,e.y=i,e.onClick=()=>this.refreshButtons(),this.listContainer.addChild(e),this.heroCheckBoxes.push(e);
- const n=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17);
- n.x=34,n.y=i,this.listContainer.addChild(n),this.heroNameLabels.push(n);
- const h=new YD("",16766720,aD.DEFAULT_OUTLINE_FONT_OPTION_17);
- h.x=s-70,h.y=i,this.listContainer.addChild(h),this.heroLevelLabels.push(h);
- const r=new Be;
- r.hitArea=new Pi(-10,i-2,s+10,t.ROW_H),r.eventMode="static",r.cursor="pointer",r.on("pointertap",()=>e.toggle()),this.listContainer.addChild(r),this.rowHitAreas.push(r)}
- this.contentContainer.addChild(this.listContainer);
- const{
- BTN_W:n,BTN_H:h,BTN_GAP:r}
- =t,o=80+e+20;
- let a=10+.5*(i-(4*n+3*r));
- this.btn1000=this.makeButton("+1000",a,o),this.btn1000.onClick=()=>this.onBulkUpgrade(1e3),this.contentContainer.addChild(this.btn1000),a+=n+r,this.btn100=this.makeButton("+100",a,o),this.btn100.onClick=()=>this.onBulkUpgrade(100),this.contentContainer.addChild(this.btn100),a+=n+r,this.btn10=this.makeButton("+10",a,o),this.btn10.onClick=()=>this.onBulkUpgrade(10),this.contentContainer.addChild(this.btn10),a+=n+r,this.btn1=this.makeButton("+1",a,o),this.btn1.onClick=()=>this.onBulkUpgrade(1),this.contentContainer.addChild(this.btn1),this.height=o+h+40,this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- makeButton(i,s,e){
- const{
- BTN_W:n,BTN_H:h}
- =t,r=new kU("UI_GOLD","0",i,.7,n,h);
- return r.labelOrder=kU.TEXT_FIRST,r.textLabel.textSize=16,r.color=kU.BROWN,r.showIconLabel=!0,r.showTextLabel=!0,r.x=s,r.y=e,r}
- show(t){
- this.title=AG.getText("GAME_254","일괄 레벨업"),this.lastGoldValue=-1,this.frameCounter=0;
- for(const i of this.heroCheckBoxes)i.selected=!0;
- this.refreshHeroList(),this.refreshButtons(),GM.getInstance().add(this.onFrame,this),super.show()}
- getDefaultPositionY(){
- return 420+.5*this.height}
- hide(){
- GM.getInstance().remove(this.onFrame,this),super.hide()}
- onFrame(){
- if(this.frameCounter-- >0)return;
- this.frameCounter=this.FRAME_INTERVAL;
- const t=_L.gold;
- t!==this.lastGoldValue&&(this.lastGoldValue=t,this.refreshButtons())}
- refreshHeroList(){
- this.sortedHeroes=vx.getInstance().list.filter(t=>t&&t.kindNum>0&&t.getBookVo()).sort((t,i)=>t.enhance!==i.enhance?i.enhance-t.enhance:t.level!==i.level?i.level-t.level:t.grade!==i.grade?i.grade-t.grade:t.tribe-i.tribe);
- for(let i=0;
- i<t.MAX_HEROES;
- i++){
- const t=this.sortedHeroes[i];
- t?(this.heroCheckBoxes[i].visible=!0,this.heroNameLabels[i].text=AG.getText(t.getBookVo().getNameKey(),t.name),this.heroLevelLabels[i].text=`Lv.${
- t.level}
- `,this.heroLevelLabels[i].x=this.listBg.width-this.heroLevelLabels[i].width-40,this.heroNameLabels[i].visible=!0,this.heroLevelLabels[i].visible=!0,this.rowHitAreas[i].visible=!0):(this.heroCheckBoxes[i].visible=!1,this.heroNameLabels[i].visible=!1,this.heroLevelLabels[i].visible=!1,this.rowHitAreas[i].visible=!1)}
- }
- refreshButtons(){
- const t=_L.gold,i=this.calcTotalCost(1);
- this.btn1.iconText=$D.displayLargeNumberAsAlphabet(i),this.btn1.activated=t>=i;
- const s=this.calcTotalCost(10);
- this.btn10.iconText=$D.displayLargeNumberAsAlphabet(s),this.btn10.activated=t>=s;
- const e=this.calcTotalCost(100);
- this.btn100.iconText=$D.displayLargeNumberAsAlphabet(e),this.btn100.activated=t>=e;
- const n=this.calcTotalCost(1e3);
- this.btn1000.iconText=$D.displayLargeNumberAsAlphabet(n),this.btn1000.activated=t>=n}
- getNextBoundary(t,i){
- const s=t%i;
- return 0===s?t+i:t+(i-s)}
- getCheckedHeroes(){
- return this.sortedHeroes.filter((i,s)=>s<t.MAX_HEROES&&this.heroCheckBoxes[s].selected)}
- getTargetBoundary(t){
- const i=this.getCheckedHeroes();
- if(0===i.length)return 0;
- const s=Math.min(...i.map(t=>t.level)),e=MV.getInstance().getMaxLevel();
- return Math.min(this.getNextBoundary(s,t),e)}
- calcTotalCost(t){
- const i=this.getCheckedHeroes(),s=MV.getInstance(),e=KN.getInstance().getGameplayMultiplier(xN.UnitUpgradeGold);
- let n=0;
- for(const h of i){
- const i=s.getMaxLevel(h.grade,h.trans),e=Math.min(h.level+t,i);
- h.level<e&&(n+=s.getTotalGold(h.level,e))}
- return Math.floor(n/e)}
- onBulkUpgrade(t){
- const i=this.getCheckedHeroes();
- if(0===i.length)return;
- const s=this.calcTotalCost(t);
- if(_L.gold<s)return void vV.getInstance().showMessage(AG.getText("COMMON_359","골드가 부족합니다."));
- _L.gold-=s,UV.getInstance().updateGold();
- const e=MV.getInstance();
- let n=!1;
- for(const h of i){
- const i=e.getMaxLevel(h.grade,h.trans),s=Math.min(h.level+t,i);
- if(h.level<s){
- const t=h.level;
- h.level=s,rtt.registerTargetLevel(h.id,s),zii.getInstance().udpateHero(h),n||(n=dN.some(i=>t<i&&s>=i))}
- }
- n&&KN.getInstance().recalculate(),rtt.markDirtyAndSchedule(),this.refreshHeroList(),this.refreshButtons(),dtt.getInstance().setData()}
- }
- ;
- Kt(C9,"HeroMultiLevelPopup"),zt(C9,"_instance"),zt(C9,"MAX_HEROES",10),zt(C9,"ROW_H",43),zt(C9,"BTN_W",123),zt(C9,"BTN_H",70),zt(C9,"BTN_GAP",8),zt(C9,"POPUP_W",560);
- let k9=C9;
- const O9=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"check"),zt(this,"_selected",!1),zt(this,"onClick"),this.bg=new We(ZA.getTexture("UI_Ekkorr","UI_CheckBg")),this.bg.width=this.bg.height=22,this.bg.eventMode="none",this.addChild(this.bg),this.check=new We(ZA.getTexture("UI_Ekkorr","UI_Check1")),this.check.width=this.check.height=22,this.check.eventMode="none",this.addChild(this.check),this.selected=!1}
- toggle(){
- this.selected=!this._selected,KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),this.onClick&&this.onClick()}
- get selected(){
- return this._selected}
- set selected(t){
- this._selected=t,this.check.visible=t}
- }
- ;
- Kt(O9,"HeroCheckBox");
- let I9=O9;
- const x9=class t extends aG{
- constructor(){
- super(),zt(this,"onConfirmed",null),zt(this,"lblQuestion",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblCost",new GB("UI_GEM","0",16768256,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnCancel",new kU("","","취소",.8,150,70)),zt(this,"btnConfirm",new kU("UI_GEM","200","확인",.8,180,70)),this.contentContainer.addChild(this.lblQuestion,this.lblCost,this.btnCancel,this.btnConfirm),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.outSideClickHide=!0}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- showConfirm(t,i){
- this.onConfirmed=i,this.title=AG.getText("GAME_14","영웅 슬롯 확장"),this.lblQuestion.text=AG.getText("GAME_241","영웅 슬롯을 추가하시겠습니까? "),this.lblCost.text=`${
- t.toLocaleString()}
- `,this.btnConfirm.iconText=String(t),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
- onConfirmClick(){
- this.hide(),this.onConfirmed&&(this.onConfirmed(),this.onConfirmed=null)}
- updateLayout(){
- const t=.5*this.width;
- this.lblQuestion.x=t-.5*this.lblQuestion.width,this.lblQuestion.y=90,this.lblCost.x=t-.5*this.lblCost.width,this.lblCost.y=this.lblQuestion.y+this.lblQuestion.height+25;
- const i=this.lblCost.y+this.lblCost.height+40,s=this.btnConfirm.width+16+this.btnCancel.width;
- this.btnConfirm.x=t-.5*s,this.btnConfirm.y=i,this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+16,this.btnCancel.y=i,this.height=i+this.btnConfirm.height+50}
- }
- ;
- Kt(x9,"HeroSlotExpandPopup"),zt(x9,"instance");
- let N9=x9;
- const P9=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("늑대전사 ",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblHp",new GB("UI_HEART","100",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblAtk",new GB("UI_MAGIC_WAND","20",39423,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblDef",new GB("UI_PHY_DEFENSE","20",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblBlock",new GB("ICON_UNIT","0",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnHire",new UB("UI_GEM","고용")),zt(this,"icon",new vK),zt(this,"mainContainer",new Be),zt(this,"requestPending",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideBackground(),this.icon.x=-1,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=13,this.mainContainer.addChild(this.lblName),this.lblHp.x=this.lblName.x,this.lblHp.y=this.lblName.y+this.lblName.height+8,this.mainContainer.addChild(this.lblHp),this.lblAtk.x=this.lblHp.x+100,this.lblAtk.y=this.lblHp.y,this.mainContainer.addChild(this.lblAtk),this.lblDef.x=this.lblAtk.x+100,this.lblDef.y=this.lblHp.y,this.mainContainer.addChild(this.lblDef),this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblDef.x+95,this.lblBlock.y=this.lblHp.y,this.mainContainer.addChild(this.lblBlock),this.btnHire.lbl.iconScale=.8,this.btnHire.color=UB.BROWN,this.btnHire.height=58,this.btnHire.width=120,this.btnHire.x=this.bg.width-this.btnHire.width-10,this.btnHire.y=.5*(this.bg.height-this.btnHire.height),this.mainContainer.addChild(this.btnHire),this.btnHire.on("pointertap",this.onHire,this),this.addChild(this.mainContainer)}
- async onHire(t){
- if("gem"===this.data.payType){
- const t=AG.getValueReplace("GAME_640","##",this.data.gem,`보석 ${
- this.data.gem}
- 개를 소모하여 영웅을 고용하시겠습니까?`),i=dK.getInstance();
- i.title=AG.getText("COMMON_4","알림"),i.show(t,()=>{
- this.buyHero()}
- ),i.y=480}
- else this.buyHero()}
- async buyHero(){
- if("medal"===this.data.payType){
- if(_L.medal<this.data.medal)return void vV.getInstance().showMessage(AG.getText("GAME_48","훈장이 부족합니다."))}
- else if(_L.gem<this.data.gem)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."));
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- let t=await hD.getInstance().hero.buyHero(this.data.id);
- if(0==t.success)return this.setRequestPending(!1),void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),UV.getInstance().updateAll(),F9.getInstance().setData();
- const i=t.body.addedHeroId;
- if(-1!==i){
- const t=vx.getInstance().getVOWithId(i);
- t&&zii.getInstance().hireHero(t),vV.getInstance().showMessage(AG.getText("GAME_300","슬롯에 추가되었습니다."))}
- else vV.getInstance().showMessage(AG.getText("GAME_301","[내 영웅]으로 이동했습니다."));
- this.setRequestPending(!1),nV.getInstance().getStatus()}
- setRequestPending(t){
- this.requestPending=t}
- setData(t){
- this.data=t;
- let i=t;
- this.icon.setData(i);
- const s=AG.getText(i.getBookVo().getNameKey(),i.name);
- this.lblName.text=s,this.lblHp.text=`${
- $D.displayLargeNumberAsAlphabet(i.maxHp)}
- `,this.lblAtk.text=`${
- $D.displayLargeNumberAsAlphabet(i.atkDmg)}
- `,this.lblDef.text=`${
- $D.displayLargeNumberAsAlphabet(i.def)}
- `,this.lblBlock.text=`${
- i.numBlock}
- `,i.dmgType==nx.MAGICAL?this.lblAtk.texture=ZA.getTexture("UI_Ekkorr","ICON_ATTACK2"):this.lblAtk.texture=ZA.getTexture("UI_Ekkorr","UI_SWORD"),"medal"===i.payType?(this.btnHire.lbl.texture=ZA.getTexture("UI_Ekkorr","UI_STAR_ICON"),this.btnHire.text=`${
- i.medal}
- `):(this.btnHire.lbl.texture=ZA.getTexture("UI_Ekkorr","UI_GEM"),this.btnHire.text=`${
- i.gem}
- `),this.updateCache()}
- updateCache(){
- }
- clearCache(){
- }
- onClick(t,i){
- t>=this.btnHire.x-10||this.data&&ett.getInstance().showInBook(this.data.kindNum,ntt.shop)}
- }
- ;
- Kt(P9,"HeroHireItemRenderer");
- let R9=P9;
- const D9=class t extends aG{
- constructor(){
- super(),zt(this,"infoBg"),zt(this,"lblMessage1"),zt(this,"lblMessage2"),zt(this,"lblMessage3"),this.title=AG.getText("GAME_258","영웅 영입 지원 이벤트"),this.width=580,this.outSideClickHide=!0,this.infoBg=new yB,this.infoBg.setIndex(2),this.infoBg.width=this.width-46,this.infoBg.x=23,this.contentContainer.addChild(this.infoBg),this.lblMessage1=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage1),this.lblMessage2=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage2),this.lblMessage3=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage3)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- show(){
- this.updateLayout(),super.show()}
- updateLayout(){
- this.title=AG.getText("GAME_546","영입 지원 이벤트");
- const t=fU.currentHeroResetEvent;
- if(t){
- this.lblMessage1.text=AG.getText("GAME_547","유료 갱신 비용 감소")+" : 100 ➜ "+100/t.divide,this.lblMessage2.text=AG.getText("GAME_548","무료 충전 시간 감소 (분)")+" : 60 ➜ "+60/t.divide;
- const i=(new Date).toISOString().slice(0,10);
- this.lblMessage3.text=AG.getText("GAME_545","이벤트 기간")+` : ${
- i}
-  ~ ${
- i}
- `}
- 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}
- }
- ;
- Kt(D9,"HeroResetEventPopup"),zt(D9,"_instance");
- let L9=D9;
- const G9=class t extends D4{
- constructor(){
- super(),zt(this,"lblTime",new YD("04:00",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblCost",new GB("UI_GEM","100",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnRefresh",new aK("새로고침",110)),zt(this,"btnClose",new L6),zt(this,"btnMedalBuy",new aK("훈장구매",110)),zt(this,"btnResetEvent",new mB("UI_Ekkorr","UI_Question",1)),zt(this,"cnt",0),zt(this,"duration",3600),zt(this,"lastUpdateTime",0),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.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=()=>{
- dtt.getInstance().updateLanguage(),w9.getInstance().currentSubView=dtt.getInstance()}
- ,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()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onResetEventClick(){
- L9.getInstance().show()}
- updateLayout(){
- this.btnMedalBuy.visible=_L.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}
- onAdded(){
- this.lastUpdateTime=vx.getInstance().lastBuyRefreshTime,GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- if(this.cnt-- >0)return;
- this.cnt=5;
- let t=this.duration-.001*(ix.time-this.lastUpdateTime);
- t<=0&&(t=0),this.updateCostLabel(t),this.lblTime.text=uU.displayTimeAsMMSS(t/this.divide),this.updateResetEvent(),this.updateLayout()}
- updateCostLabel(t){
- if(t>0)this.lblCost.text=String(100/this.divide),this.lblCost.textColor=aD.DEFAULT_COLOR,this.btnRefresh.hideRedDot();
- else{
- this.lblCost.text="FREE",this.lblCost.textColor=aD.COLOR_DEEP_SKYBLUE,this.btnRefresh.showRedDot();
- const t=5-Math.floor(.5*this.btnRefresh.width),i=-Math.floor(.5*this.btnRefresh.height)-7;
- this.btnRefresh.updateRedDotPos(t,i)}
- }
- async onRefresh(){
- if(this.duration-.001*(ix.time-this.lastUpdateTime)>0)return dK.getInstance().show(AG.getValueReplace("GAME_53","##",100/this.divide,"보석 100개를 사용하고, 영웅목록을 새로 갱신하겠습니다.")+"\n("+AG.getValueReplace("GAME_54","##",Math.floor(60/this.divide),"60분마다 무료로 목록을 갱신할 수 있습니다.")+")",()=>this.onRefleshHeroes(!0)),void(dK.getInstance().y=480);
- this.onRefleshHeroes(!1)}
- updateResetEvent(){
- if(fU.isValidEvent(pU.HERO_RESET_EVENT)){
- this.btnResetEvent.visible=!0,this.btnRefresh.showEventTag(-2,2);
- const t=fU.currentHeroResetEvent;
- t&&(this.divide=t.divide)}
- else this.divide=1,this.btnResetEvent.visible=!1,this.btnRefresh.hideEventTag()}
- async onRefleshHeroes(t){
- let i=await hD.getInstance().hero.refreshBuyableHeroes(t);
- 0!=i.success?(_L.setUserInfo(i.body),F9.getInstance().setData(),UV.getInstance().updateAll(),this.lastUpdateTime=vx.getInstance().lastBuyRefreshTime):mG.getInstance().showError(i)}
- setData(){
- this.updateLanguage(),this.updateMedalBuyBtn()}
- updateMedalBuyBtn(){
- if(this.btnMedalBuy.visible){
- const t=vx.getInstance().getBuyableKindNumsByMedal();
- this.btnMedalBuy.activated=t.length>0}
- }
- async onMedalBuy(){
- if(!this.btnMedalBuy.activated)return void vV.getInstance().showMessage(AG.getText("GAME_1201","훈장으로 구매 가능한 영웅이 없습니다."));
- const t=vx.getInstance().getBuyableTotalMedalsByMedal();
- if(_L.medal<t)return void vV.getInstance().showMessage(AG.getText("GAME_48","훈장이 부족합니다."));
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- const i=await hD.getInstance().hero.buyHeroAllByMedal();
- if(!1===i.success)return this.setRequestPending(!1),void mG.getInstance().showError(i);
- const s=vx.getInstance().getTeamIds(),e=vx.getInstance().getBuyableKindNumsByMedal();
- _L.setUserInfo(i.body),F9.getInstance().setData(),UV.getInstance().updateAll(),this.setRequestPending(!1);
- const n=vx.getInstance().getTeamIds(),h=[];
- for(let l=s.length;
- l<n.length;
- ++l){
- const t=vx.getInstance().getVOWithId(n[l]);
- t&&(h.push(AG.getText(t.getBookVo().getNameKey(),t.getBookVo().name)),zii.getInstance().hireHero(t))}
- let r="";
- h.length>0&&(r=AG.getText("GAME_1199","슬롯")+" : "+h.join(", "));
- const o=[];
- for(let l=n.length-s.length;
- l<e.length;
- ++l){
- const t=vx.getInstance().getBookVO(e[l]);
- t&&o.push(AG.getText(t.getNameKey(),t.name))}
- let a="";
- o.length>0&&(a=AG.getText("GAME_65","병영")+" : "+o.join(", "));
- let c=AG.getText("GAME_1198","획득한 영웅이 슬롯 또는 병영에 추가되었습니다.");
- r&&(c+="\n - "+r),a&&(c+="\n - "+a),vV.getInstance().showMessage(c)}
- setRequestPending(t){
- this.requestPending=t}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_13","영웅 고용")),this.btnRefresh.text=AG.getText("COMMON_60","새로고침"),this.btnMedalBuy.text=AG.getText("GAME_1197","훈장구매"),this.updateLayout()}
- }
- ;
- Kt(G9,"HeroHireSubMenu"),zt(G9,"instance");
- let B9=G9;
- const U9=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"unitVOList",[]),this.list=new R3(R9,630,KA.listHeight),this.list.x=5,this.list.y=B9.getInstance().height;
- for(let t=0;
- t<5;
- t++){
- let t=yx.getVO();
- t.kindNum=Math.floor(4*Math.random()+1),t.level=1,t.enhance=0,t.trans=0,this.unitVOList.push(t)}
- this.addChild(this.list),this.addChild(B9.getInstance()),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onRemoved(){
- }
- setData(){
- B9.getInstance().setData();
- let t=[],i=vx.getInstance().buyableUnitList.length;
- for(let e=0;
- e<5;
- e++){
- let s=this.unitVOList[e];
- if(e<i){
- let i=vx.getInstance().buyableUnitList[e];
- if(s.kindNum=i.kindNum,s.id=i.id,s.payType=i.payType,s.gem=i.gem,s.medal=i.medal,-1==s.id)continue;
- t.push(s)}
- }
- t.sort((t,i)=>t.grade-i.grade);
- const s=this.list.getDataLen();
- if(this.list.dataProvider=t,s>t.length){
- const t=Math.floor(Math.abs(this.list.getContainerY())/80+1);
- this.list.scrollTo(t)}
- }
- get className(){
- return"HeroHireSubView"}
- updateLanguage(){
- this.setData(),B9.getInstance().updateLanguage()}
- }
- ;
- Kt(U9,"HeroHireSubView"),zt(U9,"instance");
- let F9=U9;
- const H9=class t extends D4{
- constructor(){
- super(),zt(this,"lblMaxCapacity",new GB("menu_icon_03_on","0/10",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnRoster",new aK("고용",110)),zt(this,"btnRoaster",new aK("내영웅",110)),zt(this,"btnMultiLevel",new B6("+",40)),zt(this,"btnPreset",new aK("프리셋",90)),zt(this,"btnGuide"),zt(this,"btnSlotAdd"),zt(this,"cnt",0),zt(this,"requestPending",!1),zt(this,"btnRosterPoint",new mi),zt(this,"btnRosterlPointInitialized",!1),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnRoster.width=110,this.btnRoster.height=45,this.btnRoster.y=.5*(this.bg.height-this.btnRoster.height),this.addChild(this.btnRoster),this.btnRoaster.width=110,this.btnRoaster.height=45,this.btnRoaster.y=.5*(this.bg.height-this.btnRoaster.height),this.addChild(this.btnRoaster),this.btnMultiLevel.height=42,this.btnMultiLevel.width=50,this.btnMultiLevel.y=.5*(this.bg.height-this.btnMultiLevel.height),this.addChild(this.btnMultiLevel),this.btnPreset.width=90,this.btnPreset.height=45,this.btnPreset.y=.5*(this.bg.height-this.btnPreset.height),this.addChild(this.btnPreset),this.btnRoster.on("pointertap",this.onHire,this),this.btnRoaster.on("pointertap",this.onRoaster,this),this.btnMultiLevel.on("pointertap",this.onMultiLevelPopup,this),this.btnPreset.on("pointertap",this.onPresetToggle,this),this.btnSlotAdd=new mB("UI_Ekkorr","Btn_Plus"),this.btnSlotAdd.y=this.lblMaxCapacity.y+.5*(this.lblMaxCapacity.height-this.btnSlotAdd.height),this.addChild(this.btnSlotAdd),this.btnSlotAdd.onClick=this.onSlotAddBtnClick.bind(this),this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- T9.getInstance().showGuide()}
- ),this.updateLanguage(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onAdded(){
- GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- this.cnt-- >0||(this.cnt=30,this.updateResetEvent())}
- updateLayout(){
- this.btnPreset.visible=_L.maxWave>=300,this.btnRoster.x=640-this.btnRoster.width-6,this.btnRoaster.x=this.btnRoster.x-this.btnRoaster.width-2,this.btnPreset.visible?(this.btnPreset.x=this.btnRoaster.x-this.btnPreset.width-2,this.btnMultiLevel.x=this.btnPreset.x-this.btnMultiLevel.width-4):this.btnMultiLevel.x=this.btnRoaster.x-this.btnMultiLevel.width-4,_L.maxWave<50?this.btnMultiLevel.visible=!1:this.btnMultiLevel.visible=!0,this.btnSlotAdd.x=this.lblMaxCapacity.x+this.lblMaxCapacity.width+5,this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3}
- onMultiLevelPopup(){
- k9.getInstance().show()}
- onPresetToggle(){
- dtt.getInstance().togglePresetBar()}
- update(){
- const t=_L.maxTeamSlots,i=vx.getInstance().list.length;
- this.lblMaxCapacity.text=`${
- i}
- /${
- t}
- `,this.btnSlotAdd.visible=t<10}
- onHire(){
- F9.getInstance().setData(),w9.getInstance().currentSubView=F9.getInstance()}
- onRoaster(){
- K9.getInstance().setData(),w9.getInstance().currentSubView=K9.getInstance(),Zti.getInstance().isRunning&&Zti.getInstance().tutorialIndex==Zti.TUTORIAL_INDEX_WAVE0&&Zti.getInstance().highlightHeroHireButton()}
- async onSlotAddBtnClick(){
- const t=EL.getInstance().getClientData("HERO_SLOT_EXPAND_SLOTS"),i=EL.getInstance().getClientData("HERO_SLOT_EXPAND_WAVES"),s=EL.getInstance().getClientData("HERO_SLOT_EXPAND_GEMS");
- let e=500;
- if(t&&i&&s){
- const n=t.split("|").map(Number),h=i.split("|").map(Number),r=s.split("|").map(Number),o=n.findIndex(t=>t>_L.maxTeamSlots);
- if(o>=0){
- if(e=r[o],_L.maxWave<h[o])return void vV.getInstance().showMessage(AG.getValueReplace("GAME_211","##",h[o],`웨이브 ${
- h[o]}
-  이상 환생해야 확장이 가능합니다.`));
- if(_L.gem<r[o])return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."))}
- }
- else if(_L.gem<e)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."));
- N9.getInstance().showConfirm(e,()=>{
- this.executeExpandSlot()}
- )}
- async executeExpandSlot(){
- if(this.requestPending)return;
- this.setRequestPending(!0);
- let t=await hD.getInstance().hero.expandSlot();
- if(0==t.success)return this.setRequestPending(!1),void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),UV.getInstance().updateGem(),dtt.getInstance().setData(),this.setRequestPending(!1),nV.getInstance().getStatus()}
- setRequestPending(t){
- this.requestPending=t}
- updateResetEvent(){
- fU.isValidEvent(pU.HERO_RESET_EVENT)?this.btnRoster.showEventTag(-2,2):this.btnRoster.hideEventTag()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_3","영웅")),this.btnRoster.text=AG.getText("GAME_311","영입"),this.btnRoaster.text=AG.getText("GAME_65","내영웅"),this.btnPreset.text=AG.getText("GAME_742","프리셋"),this.updateLayout()}
- getBtnRosterPoint(){
- if(0==this.btnRosterlPointInitialized){
- this.btnRosterlPointInitialized=!0;
- const t=this.btnRoaster;
- this.btnRosterPoint.x=S4.getInstance().x+t.x,this.btnRosterPoint.y=S4.getInstance().y+40+t.y}
- return this.btnRosterPoint}
- }
- ;
- Kt(H9,"HeroSubMenu"),zt(H9,"instance");
- let W9=H9;
- const j9=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"btnHire",new aK("고용",120)),zt(this,"icons",[]),zt(this,"vos",[]),zt(this,"mainContainer",new Be),zt(this,"costList",[300,600,900,1200,1500]),zt(this,"posList",[0,1,2,3,4]),zt(this,"selectedIndex",-1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=74,this.mainContainer.addChild(this.bg);
- let t=2;
- for(let i=0;
- i<5;
- i++){
- const s=new vK;
- s.setMode(mK.ROSTER),s.scale=.85,s.x=t,s.y=.5*(this.bg.height-s.height),this.mainContainer.addChildAt(s,1),this.icons.push(s),this.vos.push(yx.getVO()),t+=s.width-10,this.posList[i]=t}
- this.btnHire.text=AG.getText("GAME_64","배치"),this.btnHire.height=60,this.btnHire.x=this.bg.width-this.btnHire.width-5,this.btnHire.y=.5*(this.bg.height-this.btnHire.height)-3,this.mainContainer.addChild(this.btnHire),this.btnHire.on("pointertap",this.onHire,this),this.addChild(this.mainContainer)}
- setHireEnabled(t){
- this.btnHire.activated=t}
- static refreshAllHireButtons(){
- const i=K9.getInstance().getItems(),s=!t.isHiring;
- for(const t of i)t.setHireEnabled(s)}
- async onHire(i){
- if(t.isHiring)return;
- let s=-1;
- for(let t=this.icons.length-1;
- t>=0;
- t--)if(this.icons[t].active){
- s=t;
- break}
- if(-1===s)return void vV.getInstance().showMessage(AG.getText("GAME_49","보유한 영웅이 없습니다."));
- this.selectedIndex=s;
- const e=this.getHireKindnumAndTrans(this.selectedIndex),n=e.hireKindNum,h=e.hireTrans;
- e.baseKindNum;
- const r=vx.getInstance();
- if(0!==n)if(r.list.length>=_L.maxTeamSlots)_L.maxTeamSlots<10?vV.getInstance().showMessage(AG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+AG.getText("GAME_51","슬롯을 추가로 확장해주세요.")):vV.getInstance().showMessage(AG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+AG.getValueReplace("GAME_52","##",10,"최대 10명까지 배치할 수 있습니다."));
- else{
- t.isHiring=!0,t.refreshAllHireButtons();
- try{
- const t=await hD.getInstance().hero.addToTeam(n,h,!0);
- if(0==t.success)return void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),UV.getInstance().updateAll(),K9.getInstance().setData(),W9.getInstance().update();
- const i=t.body.addedHeroId,s=r.getVOWithId(i);
- s&&zii.getInstance().hireHero(s),dtt.getInstance().setData()}
- finally{
- t.isHiring=!1,t.refreshAllHireButtons()}
- Zti.getInstance().isRunning&&Zti.getInstance().tutorialIndex==Zti.TUTORIAL_INDEX_WAVE0&&Zti.getInstance().highlightHeroHireButton()}
- else vV.getInstance().showMessage(AG.getText("GAME_49","보유한 영웅이 없습니다."))}
- getHireKindnumAndTrans(t){
- var i;
- const s=this.data,e=vx.getInstance(),n=e.getBookVO(s),h=(null==n?void 0:n.evolKindNum)??0,r=(null==(i=e.getOwnedUnitVO(s))?void 0:i.count)??0,o=e.getOwnedUnitVO(h),a=(null==o?void 0:o.count)??0;
- let c=0,l=0;
- if(0===t)r>0&&(c=s,l=0);
- else if(1===t)a>0&&(c=h,l=0);
- else{
- const i=t-2;
- ((null==o?void 0:o.trans[i])??0)>0&&(c=h,l=i+1)}
- return 0===c&&r>0&&(c=s,l=0),{
- hireKindNum:c,hireTrans:l,baseKindNum:s}
- }
- setData(i){
- this.data=i;
- const s=i,e=vx.getInstance(),n=e.getBookVO(s),h=(null==n?void 0:n.evolKindNum)??0,r=e.getOwnedUnitVO(s),o=h>0?e.getOwnedUnitVO(h):void 0,a=(null==r?void 0:r.count)??0,c=(null==o?void 0:o.count)??0;
- if(this.vos[0].kindNum=s,this.icons[0].setData(this.vos[0]),this.icons[0].setNumber(a),this.icons[0].active=a>0,h>0){
- this.vos[1].kindNum=h,this.vos[1].trans=0,this.icons[1].setData(this.vos[1]),this.icons[1].setNumber(c),this.icons[1].active=c>0;
- for(let t=0;
- t<3;
- t++){
- this.vos[2+t].kindNum=h,this.vos[2+t].trans=t+1,this.icons[2+t].setData(this.vos[2+t]);
- const i=(null==o?void 0:o.trans[t])??0;
- this.icons[2+t].setNumber(i),this.icons[2+t].active=i>0}
- }
- else for(let t=1;
- t<5;
- t++)this.icons[t].active=!1;
- if(0===this.selectedIndex&&0===a)this.selectedIndex=-1;
- else if(1===this.selectedIndex&&0===c)this.selectedIndex=-1;
- else if(this.selectedIndex>=2&&this.selectedIndex<=4){
- const t=this.selectedIndex-2;
- 0===((null==o?void 0:o.trans[t])??0)&&(this.selectedIndex=-1)}
- -1==this.selectedIndex&&E9.getInstance().parent&&this.removeChild(E9.getInstance()),this.btnHire.text=AG.getText("GAME_64","배치"),this.btnHire.x=this.bg.width-this.btnHire.width-5,this.btnHire.activated=!t.isHiring,this.updateCache()}
- updateCache(){
- }
- clearCache(){
- }
- get height(){
- return this.bg.height+3}
- onClick(t,i){
- for(let s=0;
- s<this.posList.length;
- s++)if(this.posList[s]>t&&this.icons[s].active){
- const t=this.getHireKindnumAndTrans(s);
- return void ett.getInstance().showInRoster(t.hireKindNum,t.hireTrans)}
- }
- reset(){
- this.selectedIndex=-1}
- onLongClick(t,i){
- for(let s=0;
- s<this.posList.length;
- s++)if(this.posList[s]>t&&this.icons[s].active){
- const t=this.getHireKindnumAndTrans(s);
- ett.getInstance().showInRoster(t.hireKindNum,t.hireTrans);
- break}
- }
- }
- ;
- Kt(j9,"HeroRosterItemRenderer"),zt(j9,"isHiring",!1);
- let $9=j9;
- const V9=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"emptyLabel"),zt(this,"btnHirePoint",new mi),zt(this,"btnHirelPointInitialized",!1),this.list=new R3($9,630,KA.listHeight),this.list.x=5,this.list.y=q9.getInstance().height,this.emptyLabel=new YD(AG.getText("GAME_337","병영에 대기중인 영웅이 없습니다."),10066329,aD.MENU_LABEL_OPTION),this.emptyLabel.x=320-this.emptyLabel.width/2,this.emptyLabel.y=this.list.y+80,this.emptyLabel.visible=!1,this.addChild(this.list),this.addChild(this.emptyLabel),this.addChild(q9.getInstance()),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onRemoved(){
- q9.getInstance().resetFilter()}
- get className(){
- return"HeroRosterView"}
- getItems(){
- return this.list.getItemList()}
- setData(){
- q9.getInstance().setData(),this.updateList()}
- updateList(){
- const t=q9.getInstance().selectedTribes,i=vx.getInstance(),s=new Set;
- for(const r of i.ownedUnitList){
- const e=i.getBookVO(r.kindNum);
- e&&0!=t.includes(e.tribe)&&e.base>0&&s.add(e.base)}
- const e=vx.getInstance(),n=Array.from(s).sort((t,i)=>{
- const s=e.getBookVO(t),n=e.getBookVO(i);
- return s&&n?s.tribe!=n.tribe?s.tribe-n.tribe:n.grade-s.grade:1}
- ),h=this.list.getDataLen();
- if(this.list.dataProvider=n,this.emptyLabel.visible=0===n.length,h>this.list.getDataLen()){
- const t=Math.floor(Math.abs(this.list.getContainerY())/74);
- this.list.scrollTo(t)}
- }
- onFilterChanged(){
- const t=this.list.getItemList(),i=t.length;
- for(let s=0;
- s<i;
- ++s)t[s].reset();
- this.updateList()}
- updateLanguage(){
- this.emptyLabel.text=AG.getText("GAME_337","병영에 대기중인 영웅이 없습니다."),this.emptyLabel.x=320-this.emptyLabel.width/2,this.setData()}
- getBtnHirePoint(){
- if(0==this.btnHirelPointInitialized){
- this.btnHirelPointInitialized=!0;
- const t=this.getItems()[0].btnHire;
- this.btnHirePoint.x=S4.getInstance().x+this.list.x+t.x,this.btnHirePoint.y=S4.getInstance().y+40+this.list.y+t.y}
- return this.btnHirePoint}
- }
- ;
- Kt(V9,"HeroRosterView"),zt(V9,"instance");
- let K9=V9;
- const z9=class t extends D4{
- constructor(){
- let t;
- super(),zt(this,"btnBook",new aK("Book",110)),zt(this,"btnClose",new L6),zt(this,"btnGuide"),zt(this,"lblMaxCapacity",new GB("menu_icon_03_on","0/10",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"filterIcons"),zt(this,"_selectedTribes",[1,2,3,4]),zt(this,"btnClosePoint",new mi),zt(this,"btnClosePointInitialized",!1),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.addChild(this.btnClose),this.btnBook.width=110,this.btnBook.height=45,this.btnBook.y=.5*(this.bg.height-this.btnBook.height),this.addChild(this.btnBook),this.btnBook.on("pointertap",this.onBook,this),this.btnClose.onClick=()=>{
- dtt.getInstance().updateLanguage(),w9.getInstance().currentSubView=dtt.getInstance(),Zti.getInstance().isRunning&&Zti.getInstance().tutorialIndex==Zti.TUTORIAL_INDEX_WAVE0&&Zti.getInstance().clearTutorialWave0()}
- ,this.filterIcons=[];
- for(let i=0;
- i<4;
- ++i)t=new g9(i),t.scale=.8,t.y=.5*this.bg.height,this.addChild(t),this.filterIcons.push(t),t.onClick=this.onFilterIconClick.bind(this);
- this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- f9.getInstance().showGuide()}
- ),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.btnBook.x=this.btnClose.x-this.btnBook.width-5;
- const t=this.filterIcons.length;
- let i=this.btnBook.x+.5*this.filterIcons[t-1].width-5;
- for(let s=t-1;
- s>-1;
- --s)this.filterIcons[s].x=i-this.filterIcons[s].width-1,i=this.filterIcons[s].x}
- update(){
- const t=_L.maxTeamSlots,i=vx.getInstance().list.length;
- this.lblMaxCapacity.text=`${
- i}
- /${
- t}
- `}
- setData(){
- this.update(),this.updateLanguage()}
- resetFilter(){
- this._selectedTribes=[1,2,3,4];
- const t=this.filterIcons.length;
- for(let i=0;
- i<t;
- ++i)this.filterIcons[i].reset()}
- onBook(){
- _9.getInstance().setData(),_9.getInstance().show2()}
- get selectedTribes(){
- return this._selectedTribes}
- onFilterIconClick(t,i){
- this._selectedTribes.length=0;
- const s=this.filterIcons.length;
- for(let e=0;
- e<s;
- ++e)this.filterIcons[e].selected&&this._selectedTribes.push(e+1);
- K9.getInstance().onFilterChanged()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_13","영웅목록")),this.btnBook.text=AG.getText("GAME_220","도감"),this.updateLayout()}
- getBtnClosePoint(){
- if(0==this.btnClosePointInitialized){
- this.btnClosePointInitialized=!0;
- const t=this.btnClose;
- this.btnClosePoint.x=S4.getInstance().x+t.x,this.btnClosePoint.y=S4.getInstance().y+40+t.y}
- return this.btnClosePoint}
- }
- ;
- Kt(z9,"HeroRosterSubMenu"),zt(z9,"instance");
- let q9=z9;
- const X9={
- 1:200,2:300,3:500,4:1e3,5:2e3}
- ,Y9=class t extends aG{
- constructor(){
- super(),zt(this,"onEvolved",null),zt(this,"lblQuestion",new YD("보석을 사용하여 진화하시겠습니까?",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblHeaderCurrent",new YD("현재",11184810,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHeaderArrow",new YD("→",16777215,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHeaderEvolved",new YD("진화 후",16768324,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHpCurrent",new GB("UI_HEART","0",11184810,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHpArrow",new YD("→",16777215,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHpEvolved",new GB("UI_HEART","0",8978312,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblAtkCurrent",new GB("UI_SWORD","0",11184810,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblAtkArrow",new YD("→",16777215,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblAtkEvolved",new GB("UI_SWORD","0",8978312,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblDefCurrent",new GB("UI_PHY_DEFENSE","0",11184810,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblDefArrow",new YD("→",16777215,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblDefEvolved",new GB("UI_PHY_DEFENSE","0",8978312,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblTribeTitle",new YD("# 종족 특성",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblTribeDesc",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblUniqueTitle",new YD("# 고유스킬",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblUniqueDesc",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"btnCancel",new kU("UI_CLOSE_BTN","","취소",.7,160,70)),zt(this,"btnConfirm",new kU("UI_GEM","200","진화",.8,200,70)),zt(this,"vo"),zt(this,"isBusy",!1),zt(this,"isRosterMode",!1),zt(this,"count",1),zt(this,"particleContainer",new Be),zt(this,"particleList",[]),zt(this,"particleFrame",0),zt(this,"PARTICLE_DURATION",55),this.title=AG.getText("GAME_145","진화 확인"),this.lblQuestion.text=AG.getText("GAME_142","보석을 사용하여 진화하시겠습니까?"),this.lblQuestion.y=95,this.contentContainer.addChild(this.lblQuestion),this.lblHeaderCurrent.text=AG.getText("GAME_152","현재"),this.lblHeaderEvolved.text=AG.getText("GAME_153","진화 후"),this.contentContainer.addChild(this.lblHeaderCurrent,this.lblHeaderArrow,this.lblHeaderEvolved),this.contentContainer.addChild(this.lblHpCurrent,this.lblHpArrow,this.lblHpEvolved),this.contentContainer.addChild(this.lblAtkCurrent,this.lblAtkArrow,this.lblAtkEvolved),this.contentContainer.addChild(this.lblDefCurrent,this.lblDefArrow,this.lblDefEvolved),aD.setLabelWrapWidth(this.lblTribeDesc,430),aD.setLabelWrapWidth(this.lblUniqueDesc,430),this.contentContainer.addChild(this.lblTribeTitle,this.lblTribeDesc,this.lblUniqueTitle,this.lblUniqueDesc),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.btnCancel.color=kU.RED,this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.text=AG.getText("GAME_67","진화"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.addChild(this.particleContainer),this.updateLayout()}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- updateLayout(){
- const t=.5*this.width,i=120,s=250,e=340;
- this.lblQuestion.x=t-.5*this.lblQuestion.width;
- let n=this.lblQuestion.y+this.lblQuestion.height+20;
- this.lblHeaderCurrent.x=i,this.lblHeaderArrow.x=s,this.lblHeaderEvolved.x=e,this.lblHeaderCurrent.y=this.lblHeaderArrow.y=this.lblHeaderEvolved.y=n,n+=32,this.lblHpCurrent.x=i,this.lblHpArrow.x=s,this.lblHpEvolved.x=e,this.lblHpCurrent.y=this.lblHpArrow.y=this.lblHpEvolved.y=n,n+=32,this.lblAtkCurrent.x=i,this.lblAtkArrow.x=s,this.lblAtkEvolved.x=e,this.lblAtkCurrent.y=this.lblAtkArrow.y=this.lblAtkEvolved.y=n,n+=32,this.lblDefCurrent.x=i,this.lblDefArrow.x=s,this.lblDefEvolved.x=e,this.lblDefCurrent.y=this.lblDefArrow.y=this.lblDefEvolved.y=n,n+=57,this.lblTribeTitle.x=65,this.lblTribeTitle.y=n,n+=this.lblTribeTitle.height+2,this.lblTribeDesc.x=65,this.lblTribeDesc.y=n,n+=this.lblTribeDesc.height+15,this.lblUniqueTitle.x=65,this.lblUniqueTitle.y=n,n+=this.lblUniqueTitle.height+2,this.lblUniqueDesc.x=65,this.lblUniqueDesc.y=n,n+=this.lblUniqueDesc.height+25;
- const h=this.btnCancel.width+16+this.btnConfirm.width;
- this.btnCancel.x=t-.5*h,this.btnCancel.y=n,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=n,this.height=n+this.btnConfirm.height+50}
- setData(t,i=!1,s=1){
- this.vo=t,this.isBusy=!1,this.isRosterMode=i,this.isRosterMode?this.count=s:this.count=1,this.title=AG.getText("GAME_145","진화 확인"),this.lblQuestion.text=AG.getText("GAME_142","보석을 사용하여 진화하시겠습니까?"),this.lblHeaderCurrent.text=AG.getText("GAME_152","현재"),this.lblHeaderEvolved.text=AG.getText("GAME_153","진화 후"),this.lblTribeTitle.text=`# ${
- AG.getText("GAME_28","종족 특성")}
- `,this.lblTribeDesc.text=this.getTribeTraitText(this.vo.tribe),this.lblUniqueTitle.text=`# ${
- AG.getText("GAME_72","고유스킬")}
- `;
- const e=vx.getInstance().getBookVO(this.vo.evolKindNum),n=e?Ix.getInstance().getByKindNum(e.uniqueSkill):null;
- this.lblUniqueDesc.text=n?AG.getText(n.getDescKey(),n.desc):AG.getText("COMMON_367","없음"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.count>1?(this.btnConfirm.activatedTextLabelColor=13434624,this.btnConfirm.text=`${
- AG.getText("GAME_67","진화")}
-  (x${
- this.count}
- )`):(this.btnConfirm.activatedTextLabelColor=-1,this.btnConfirm.text=AG.getText("GAME_67","진화")),this.updateStats(),this.updateCost(),this.updateLayout(),super.show()}
- updateStats(){
- const t=vx.getInstance().getBookVO(this.vo.kindNum),i=vx.getInstance().getBookVO(this.vo.evolKindNum);
- if(!t||!i)return;
- const s=ZA.getTexture("UI_Ekkorr",this.vo.dmgType===nx.MAGICAL?"ICON_ATTACK2":"UI_SWORD"),e=ZA.getTexture("UI_Ekkorr",this.vo.phyDef>this.vo.magDef?"UI_PHY_DEFENSE":"UI_MAGIC_DEFENSE");
- this.lblAtkCurrent.texture=s,this.lblAtkEvolved.texture=s,this.lblDefCurrent.texture=e,this.lblDefEvolved.texture=e;
- const n=Kt(t=>$D.displayLargeNumberAsAlphabet(t),"fmt"),h=Kt((t,i)=>t>0?` (+${
- Math.round((i-t)/t*100)}
- %)`:"","pct");
- this.lblHpCurrent.text=n(t.hp),this.lblHpEvolved.text=`${
- n(i.hp)}
- ${
- h(t.hp,i.hp)}
- `,this.lblAtkCurrent.text=n(t.atkDmg),this.lblAtkEvolved.text=`${
- n(i.atkDmg)}
- ${
- h(t.atkDmg,i.atkDmg)}
- `,this.lblDefCurrent.text=n(t.def),this.lblDefEvolved.text=`${
- n(i.def)}
- ${
- h(t.def,i.def)}
- `}
- getTribeTraitText(t){
- switch(t){
- case 1:return AG.getText("GAME_286","넉백 면역 (뒤로 밀리지 않습니다.)");
- case 2:return AG.getText("GAME_287","블로우 면역 (날려보내는 공격을 받아도 날아가지 않습니다.)");
- case 3:return AG.getText("GAME_288","냉기 면역 (얼려지지 않습니다.)");
- case 4:return AG.getText("GAME_289","기절 면역 (기절하지 않습니다.)");
- default:return""}
- }
- updateCost(){
- this.btnConfirm.iconText=String(this.getCost())}
- getCost(){
- const t=X9[this.vo.grade]??0;
- return this.count*t}
- async onConfirmClick(){
- if(this.isBusy)return;
- const t=this.getCost();
- if(_L.gem<t)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."));
- if(!this.vo.evolKindNum)return void vV.getInstance().showMessage(AG.getText("GAME_141","이미 최대 진화 단계입니다."));
- this.isBusy=!0;
- const i=this.vo.kindNum,s=this.vo.evolKindNum;
- let e;
- if(e=this.isRosterMode?await hD.getInstance().hero.evolveOwned(`${
- this.vo.kindNum}
- -${
- this.count}
- `,!0):await hD.getInstance().hero.evolve(this.vo.id),!e||!1===e.success)return vV.getInstance().showMessage(AG.getText("COMMON_77","네트워크 오류가 발생하였습니다.")),void(this.isBusy=!1);
- if(_L.setUserInfo(e.body),UV.getInstance().updateAll(),dtt.getInstance().setData(),!this.isRosterMode){
- const t=vx.getInstance().getVOWithId(this.vo.id);
- t&&zii.getInstance().udpateHero(t)}
- vV.getInstance().showMessage(AG.getText("GAME_144","진화 성공!")),this.hide(),this.onEvolved&&(this.onEvolved(),this.onEvolved=null),lS.getInstance().dispatchCustomEvent("HeroEvolve",{
- id:this.isRosterMode?0:this.vo.id,kindNum:i,evolKindNum:s}
- )}
- }
- ;
- Kt(Y9,"EvolveConfirmPopup"),zt(Y9,"instance");
- let J9=Y9;
- const Q9=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17)),zt(this,"materialContainer",new Be),zt(this,"materialIcons",[]),zt(this,"materialCountLabels",[]),zt(this,"materialCostLabels",[]),zt(this,"btnCancel",new kU("UI_CLOSE_BTN","","취소",.7,160,70)),zt(this,"btnTrans",new kU("PVP_COIN_ON","100","초월",1,200,70)),zt(this,"count",1),zt(this,"matCounts",[]),zt(this,"preEvolKindNums",[]),zt(this,"preEvolCounts",[]),zt(this,"requestPending",!1),zt(this,"onEvolved",null),this.width=600,this.lblMessage.y=90,aD.setLabelWrapWidth(this.lblMessage,this.width-60);
- for(let t=0;
- t<5;
- t++){
- const t=new vK;
- t.setMode(mK.BOOK),t.scale.set(.8),this.materialIcons.push(t);
- const i=new YD("0/1",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18);
- this.materialCountLabels.push(i);
- const s=new GB("UI_GEM_ICON","0",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18);
- this.materialCostLabels.push(s)}
- this.btnTrans.text=AG.getText("GAME_820","초월"),this.btnTrans.showIconLabel=!0,this.btnTrans.showTextLabel=!0,this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=this.onTransClick.bind(this),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.btnCancel.color=kU.RED,this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.onClick=()=>this.hide(),this.contentContainer.addChild(this.lblMessage,this.materialContainer,this.btnCancel,this.btnTrans),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.materialContainer.x=.5*(this.width-this.materialContainer.width),this.materialContainer.y=this.lblMessage.y+this.lblMessage.height+30;
- const t=this.btnCancel.width+16+this.btnTrans.width,i=this.materialContainer.y+this.materialContainer.height+30;
- this.btnCancel.x=.5*(this.width-t),this.btnCancel.y=i,this.btnTrans.x=this.btnCancel.x+this.btnCancel.width+16,this.btnTrans.y=i,this.height=i+this.btnTrans.height+50}
- setData(t,i,s,e){
- this.lblMessage.text=AG.getText("GAME_1237","재료 영웅을 진화시켜 초월 재료로 바로 사용할 수 있습니다.")+"\n"+AG.getText("GAME_1238","영웅을 진화한 후에 초월하시겠습니까?"),this.count=s,this.matCounts=[...t],this.preEvolKindNums.length=0,this.preEvolCounts.length=0,this.materialContainer.removeChildren();
- const n=vx.getInstance();
- let h=0;
- const r=this.materialIcons.length;
- for(let a=0;
- a<r;
- ++a){
- const t=i[a],s=n.getBookVO(t);
- if(!t||t<1||!s)continue;
- const e=this.materialIcons[h];
- e.setDataWithKindNum(t);
- const r=this.count-this.matCounts[a],o=n.getOwnedUnitCount(t,0),c=this.materialCountLabels[h];
- c.text=`${
- o}
- /${
- r}
- `,this.preEvolKindNums.push(t),this.preEvolCounts.push(o);
- const l=X9[s.grade]??0,u=this.materialCostLabels[h];
- u.text=""+l*r,e.x=113*h,e.y=0,c.x=e.x+.5*(80-c.width)+5,c.y=70,u.x=c.x+.5*(c.width-u.width)-5,u.y=c.y+c.height,this.materialContainer.addChild(e),this.materialContainer.addChild(c),this.materialContainer.addChild(u),h++}
- const o=vx.getTransHonorCoinCost(e);
- this.btnTrans.text=AG.getText("GAME_820","초월"),this.btnTrans.iconText=String(o*s),this.updateLayout()}
- async onTransClick(){
- if(this.requestPending)return;
- this.setRequestPending(!0);
- const t=[];
- for(let s=0;
- s<this.preEvolKindNums.length;
- ++s)t.push(`${
- this.preEvolKindNums[s]}
- -${
- this.count-this.matCounts[s]}
- `);
- const i=await hD.getInstance().hero.evolveOwned(t.join("|"),!0);
- if(!1===i.success)return this.setRequestPending(!1),void mG.getInstance().showError(i);
- _L.setUserInfo(i.body),UV.getInstance().updateAll(),this.setRequestPending(!1),this.hide(),this.onEvolved&&(this.onEvolved(),this.onEvolved=null)}
- setRequestPending(t){
- this.requestPending=t}
- }
- ;
- Kt(Q9,"EvolveMaterialMultiConfirmPopup"),zt(Q9,"_instance");
- let Z9=Q9;
- const ttt=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","Icon_Skill_AU"))),zt(this,"targetIcon",new We(ZA.getTexture("UI_Ekkorr","Icon_All"))),zt(this,"lblSkillLv",new YD("",aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblSkillDesc",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblValue",new YD("",65280,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblValuePlus",new YD("",aD.COLOR_WHITE,aD.WHITE_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=615,this.bg.height=70,this.addChild(this.bg),this.icon.x=5,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.targetIcon.x=this.icon.x+2,this.targetIcon.y=this.icon.y+2,this.addChild(this.targetIcon),this.targetIcon.visible=!1,this.addChild(this.lblSkillLv),this.addChild(this.lblSkillDesc),this.lblValue.x=this.bg.width-80,this.addChild(this.lblValue),this.lblValuePlus.x=this.lblValue.x,this.addChild(this.lblValuePlus),aD.setLabelWrapWidth(this.lblSkillDesc,this.lblValue.x-this.lblSkillDesc.x-10),this.updateLayout()}
- updateLayout(){
- this.lblSkillLv.x=Math.max(this.icon.x+this.icon.width+10,137),this.lblSkillDesc.x=this.lblSkillLv.x;
- const t=.5*(this.bg.height-this.lblSkillLv.height-this.lblSkillDesc.height-0);
- this.lblSkillDesc.y=t,this.lblSkillLv.y=t+this.lblSkillLv.height+0,this.lblValue.y=this.lblSkillDesc.y,this.lblValuePlus.y=this.lblSkillLv.y,this.lblValue.x=this.bg.width-this.lblValue.width-10,this.lblValuePlus.x=this.bg.width-this.lblValuePlus.width-10,aD.setLabelWrapWidth(this.lblSkillDesc,this.lblValuePlus.x-this.lblSkillDesc.x-10)}
- setData(t){
- this.data=t;
- const i=t.mode===ntt.book,s=t.mode===ntt.shop,e=dN[t.index];
- i||s||!e||t.level<e?(this.lblSkillDesc.textColor=aD.COLOR_GRAY,this.lblSkillLv.textColor=aD.COLOR_GRAY,this.lblValue.textColor=aD.COLOR_GRAY,this.lblValuePlus.textColor=aD.COLOR_GRAY):(this.lblSkillDesc.textColor=aD.DEFAULT_COLOR,this.lblSkillLv.textColor=aD.COLOR_ORANGE,this.lblValue.textColor=aD.DEFAULT_COLOR,this.lblValuePlus.textColor=aD.COLOR_ORANGE);
- const n=aN.getInstance().get(t.id);
- n?(this.updateIcons(n),this.lblSkillDesc.text=AG.getText(n.getDescKey(),n.desc)||"",this.lblSkillLv.text=`${
- AG.getText("GAME_252","활성화 조건")}
-  : Lv.${
- e}
- `,this.isPercentSkill(n.skillCode)?(this.lblValue.text=`+${
- t.value}
- %`,this.lblValuePlus.text=`(+${
- 2*t.value}
- %)`):(this.lblValue.text=`+${
- t.value}
- `,this.lblValuePlus.text=`(+${
- 2*t.value}
- )`)):(this.lblSkillDesc.text="",this.lblSkillLv.text="",this.lblValue.text="",this.lblValuePlus.text=""),this.updateLayout()}
- updateIcons(t){
- let i,s;
- const e=t.skillCode.split("_");
- if(1==e.length?(i="",s=e[0]):(i=e[0],s=e[1]),this.icon.texture=ZA.getTexture("UI_Ekkorr",`Icon_Skill_${
- s}
- `),this.targetIcon.visible=!1,i){
- const t=this.getTargetName(i);
- t&&(this.targetIcon.visible=!0,this.targetIcon.texture=ZA.getTexture("UI_Ekkorr",`Icon_${
- t}
- `))}
- }
- getTargetName(t){
- let i="";
- return"T"==t?i=`Tribe${
- ett.getInstance().vo.tribe}
- `:"M"==t?i="Melee":"R"==t?i="Range":"A"==t&&(i="All"),i}
- getSkillName(t){
- return{
- A_AU:AG.getText("SKILL_001","공격력 업그레이드"),A_HU:AG.getText("SKILL_002","체력 업그레이드"),A_DU:AG.getText("SKILL_003","방어력 업그레이드"),A_RU:AG.getText("SKILL_004","회복력 업그레이드"),R_HU:AG.getText("SKILL_005","종족 체력 업그레이드"),R_AU:AG.getText("SKILL_006","종족 공격력 업그레이드"),R_DU:AG.getText("SKILL_007","종족 방어력 업그레이드")}
- [t]||t}
- isPercentSkill(t){
- return!0}
- get height(){
- return this.bg.height+5}
- }
- ;
- Kt(ttt,"GoldSkillItemRenderer");
- let itt=ttt;
- const stt=class t extends O8{
- constructor(){
- super(),zt(this,"icon",new vK),zt(this,"lblName",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_20)),zt(this,"lblHp",new GB("UI_HEART","0",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblAtk",new GB("UI_MAGIC_WAND","0",39423,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblDef",new GB("UI_PHY_DEFENSE","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblMagDef",new GB("UI_MAGIC_DEFENSE","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblBlock",new GB("ICON_UNIT","0",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblAtkSpd",new GB("UI_ATTACK_SPEED","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblMoveSpd",new GB("UI_MOVE_SPEED","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblRecovery",new GB("ICON_OPEN","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblAtkRange",new GB("UI_ATTACK_RANGE","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblCriChange",new GB("UI_CRITICAL_PERCENT","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblCriDamage",new GB("UI_CRITICAL_DAMAGE","0",16776960,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"iconAtkType",new We(ZA.getTexture("UI_Ekkorr","ICON_MELEE"))),zt(this,"iconDamageType",new We(ZA.getTexture("UI_Ekkorr","ICON_SWORD"))),zt(this,"iconTribeType",new We(ZA.getTexture("UI_Ekkorr","HUMAN_ICON"))),zt(this,"iconIsAir",new We(ZA.getTexture("UI_Ekkorr","ICON_AIR"))),zt(this,"iconIsMale",new We(ZA.getTexture("UI_Ekkorr","MALE_ICON"))),zt(this,"iconDetect",new We(ZA.getTexture("UI_Ekkorr","DETECT_ICON"))),zt(this,"canAirAttack",new We(ZA.getTexture("UI_Ekkorr","AIR_ICON"))),zt(this,"btnEnhance",new kU("UI_STAR_ICON","1000","강화",.8,160,70)),zt(this,"btnEvolve",new kU("UI_GEM","100","진화",.8,200,70)),zt(this,"btnEvolveMass",new kU("UI_GEM","100","대량진화",.8,230,70)),zt(this,"btnSell",new kU("UI_GEM","10","해고",.8,200,70)),zt(this,"btnHire",new kU("UI_GEM","","",.8,160,70)),zt(this,"btn10Enhance",new kU("UI_STAR_ICON","10000","+10",.8,160,70)),zt(this,"btn100Enhance",new kU("UI_STAR_ICON","100000","+100",.8,160,70)),zt(this,"multiEnhanceContainer",new Be),zt(this,"enhanceRapidClickCount",0),zt(this,"lastEnhanceRapidClickTime",0),zt(this,"RAPID_CLICK_THRESHOLD",500),zt(this,"RAPID_CLICK_COUNT",3),zt(this,"enhanceTimer",null),zt(this,"enhanceStartValue",-1),zt(this,"enhanceStartMedal",-1),zt(this,"propertyList",[]),zt(this,"propertyContainer",new Be),zt(this,"basicPropertyContainer",new Be),zt(this,"basicPropertyList",[]),zt(this,"lblNormalAttackTitle",new YD("# 일반 공격",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblNormalAttackDesc",new YD("적을 강타합니다.",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblSpecialAttackTitle",new YD("# 스킬 공격",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblSpecialAttackDesc",new YD("스킬이 없습니다.",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblUniqueTitle",new YD("# 고유스킬",16776960,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblUniqueDesc",new YD("고유스킬이 없습니다",16776960,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblTribleTitle",new YD("# 종족 특성",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblTribleDesc",new YD("진화하면, 종족 특성이 추가됩니다.\n밤에는 공격력이 10% 증가하고, 낮에는 공격력이 10% 감소합니다.",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"starIcon",new We(ZA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[0])),zt(this,"contentContainer",new Be),zt(this,"tapDetail",new B6("상세",200)),zt(this,"tapSkill",new B6("스킬",200)),zt(this,"detailContainer",new Be),zt(this,"skillContainer",new Be),zt(this,"basicPropertyBg"),zt(this,"basicPropertyBg2"),zt(this,"lblGoldSkill",new YD("골드스킬",6736896,aD.DEFAULT_FONT_OPTION_16)),zt(this,"goldSkillList"),zt(this,"container",new Be),zt(this,"draggableBg"),zt(this,"draggableMask"),zt(this,"draggableContainer"),zt(this,"tapTrans",new B6("초월",200)),zt(this,"transContainer",new Be),zt(this,"transBg"),zt(this,"transPageNav"),zt(this,"transStatusTable"),zt(this,"transGradeTable"),zt(this,"transMode",1),zt(this,"btnTransMode1"),zt(this,"btnTransMode10"),zt(this,"lblTransMaxTop",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblTransMaxBottom",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblTransStepTitle",new YD("1차 초월",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"materialContainer",new Be),zt(this,"materialIcons",[]),zt(this,"materialCountLabels",[]),zt(this,"materialSatisfied",[!1,!1,!1,!1,!1]),zt(this,"btnTrans",new kU("PVP_COIN_ON","100","초월",1,200,70)),zt(this,"btnTransTicket",new kU("Ticket_HeroTrans_s","100","초월",1,200,70)),zt(this,"bookVo"),zt(this,"vo"),zt(this,"mode","list"),zt(this,"tribeIcons",["HUMAN_ICON","HUMAN_ICON","ELF_ICON","UNDEAD_ICON","ORC_ICON","DEMON_ICON","ANGEL_ICON"]),zt(this,"requestPending",!1),zt(this,"onHeroEvolveBind"),this.y=Math.min(KA.safeHeight-t.POPUP_MIN_HEIGHT,KA.viewMainY),this.bg.height=KA.safeHeight-this.y,this.addChild(this.container),this.addChild(this.contentContainer),this.icon.x=11,this.icon.y=50,this.lblName.align="center",this.lblName.y=this.icon.y+5,this.lblName.x=this.icon.x+this.icon.width+10,this.lblHp.y=this.lblAtk.y=this.lblDef.y=this.lblMagDef.y=this.lblBlock.y=this.lblName.y+this.lblName.height+16,this.lblHp.x=this.lblName.x,this.lblAtk.x=this.lblHp.x+100,this.lblDef.x=this.lblAtk.x+100,this.lblMagDef.x=this.lblDef.x+100,this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblMagDef.x+100,this.container.addChild(this.detailContainer),this.goldSkillList=new zI(itt,620,530),this.goldSkillList.x=13,this.goldSkillList.y=0,this.skillContainer.addChild(this.goldSkillList),this.lblGoldSkill.x=this.goldSkillList.x,this.lblGoldSkill.y=this.goldSkillList.y+this.goldSkillList.getListHeight()+10,this.lblGoldSkill.text=`# ${
- AG.getText("GAME_89","레벨 달성시 활성화 되고, 강화레벨 달성시 능력치 100% 추가")}
- `,this.skillContainer.addChild(this.lblGoldSkill),this.propertyList.push(this.iconTribeType,this.iconIsMale,this.iconDetect);
- for(let t=0;
- t<this.propertyList.length;
- t++)this.propertyList[t].x=30*t,this.propertyList[t].y=0,this.propertyContainer.addChild(this.propertyList[t]);
- this.addChild(this.propertyContainer),this.tapDetail.text=AG.getText("GAME_83","상세"),this.tapSkill.text=AG.getText("GAME_84","스킬"),this.tapTrans.text=AG.getText("GAME_820","초월"),this.tapDetail.selected=!0,this.tapDetail.width=200,this.tapSkill.width=200,this.tapTrans.width=200,this.addChild(this.tapDetail),this.addChild(this.tapSkill),this.addChild(this.tapTrans),this.tapDetail.onClick=this.onTapDetailClick.bind(this),this.tapSkill.onClick=this.onTapSkillClick.bind(this),this.tapTrans.onClick=this.onTapTransClick.bind(this),this.tapTrans.visible=!1,this.buildTransContainer(),this.basicPropertyBg=new yB,this.basicPropertyBg.setIndex(2),this.basicPropertyBg.width=620,this.basicPropertyBg.height=85,this.detailContainer.addChild(this.basicPropertyBg),this.basicPropertyBg2=new yB,this.basicPropertyBg2.setIndex(2),this.basicPropertyBg2.width=620,this.basicPropertyBg2.height=480,this.detailContainer.addChild(this.basicPropertyBg2),this.basicPropertyList.push(this.lblAtkSpd,this.lblMoveSpd,this.lblRecovery,this.lblAtkRange);
- for(let t=0;
- t<this.basicPropertyList.length;
- t++)this.basicPropertyList[t].x=t%2*280,this.basicPropertyList[t].y=34*Math.floor(t/2),this.basicPropertyContainer.addChild(this.basicPropertyList[t]);
- this.detailContainer.addChild(this.basicPropertyContainer),this.draggableContainer=new t6,this.detailContainer.addChild(this.draggableContainer),this.draggableBg=new Gf,this.draggableBg.rect(0,0,this.basicPropertyBg2.width,this.basicPropertyBg2.height).fill(3814183),this.draggableContainer.addChild(this.draggableBg),this.draggableMask=new Gf,this.draggableMask.rect(0,0,this.basicPropertyBg2.width,this.basicPropertyBg2.height).fill(16711680),this.detailContainer.addChild(this.draggableMask),this.draggableContainer.mask=this.draggableMask,this.draggableContainer.addChild(this.lblNormalAttackTitle),this.draggableContainer.addChild(this.lblNormalAttackDesc),this.draggableContainer.addChild(this.lblSpecialAttackTitle),this.draggableContainer.addChild(this.lblSpecialAttackDesc),this.draggableContainer.addChild(this.lblUniqueTitle),this.draggableContainer.addChild(this.lblUniqueDesc),this.draggableContainer.addChild(this.lblTribleTitle),this.draggableContainer.addChild(this.lblTribleDesc),this.btnEnhance.text=AG.getText("GAME_66","강화"),this.btnEnhance.showIconLabel=!0,this.btnEnhance.showTextLabel=!0,this.btnEnhance.color=kU.LIGHT_GREEN,this.btnEnhance.onClick=()=>this.onEnhanceClick(1),this.btn10Enhance.labelOrder=kU.TEXT_FIRST,this.btn10Enhance.textLabel.textSize=15,this.btn10Enhance.textAlign="left",this.btn10Enhance.iconScale=.7,this.btn10Enhance.color=kU.LIGHT_GREEN,this.btn10Enhance.showIconLabel=!0,this.btn10Enhance.showTextLabel=!0,this.btn10Enhance.onClick=()=>{
- const t=this.getNextIncrement(this.vo.enhance,10);
- this.onEnhanceClick(t)}
- ,this.multiEnhanceContainer.addChild(this.btn10Enhance),this.btn100Enhance.labelOrder=kU.TEXT_FIRST,this.btn100Enhance.textLabel.textSize=15,this.btn100Enhance.textAlign="left",this.btn100Enhance.iconScale=.7,this.btn100Enhance.color=kU.LIGHT_GREEN,this.btn100Enhance.showIconLabel=!0,this.btn100Enhance.showTextLabel=!0,this.btn100Enhance.onClick=()=>{
- const t=this.getNextIncrement(this.vo.enhance,100);
- this.onEnhanceClick(t)}
- ,this.multiEnhanceContainer.addChild(this.btn100Enhance),this.multiEnhanceContainer.visible=!1,this.addChild(this.multiEnhanceContainer),this.btnEvolve.text=AG.getText("GAME_67","진화"),this.btnEvolve.showIconLabel=!0,this.btnEvolve.showTextLabel=!0,this.btnEvolve.color=kU.GREEN,this.btnEvolve.onClick=this.onEvolveClick.bind(this);
- const i=t.MASS_EVOLVE_COUNT;
- this.btnEvolveMass.text=`${
- AG.getText("GAME_67","진화")}
-  (x${
- i}
- )`,this.btnEvolveMass.showIconLabel=!0,this.btnEvolveMass.showTextLabel=!0,this.btnEvolveMass.color=kU.GREEN,this.btnEvolveMass.activatedTextLabelColor=13434624,this.btnEvolveMass.onClick=this.onEvolveMassClick.bind(this),this.btnSell.text=AG.getText("GAME_68","해고"),this.btnSell.showIconLabel=!1,this.btnSell.showTextLabel=!0,this.btnSell.color=kU.RED,this.btnSell.onClick=this.onSellClick.bind(this),this.btnHire.text=AG.getText("GAME_64","배치"),this.btnHire.showIconLabel=!1,this.btnHire.showTextLabel=!0,this.btnHire.onClick=this.onHireClick.bind(this),this.contentContainer.addChild(this.icon,this.lblName,this.lblHp,this.lblAtk,this.lblDef,this.lblMagDef,this.lblBlock,this.btnEnhance,this.btnEvolve,this.btnEvolveMass,this.btnSell,this.btnHire,this.starIcon),this.updateLayout(),this.draggableMask.x=this.draggableContainer.x,this.draggableMask.y=this.basicPropertyContainer.y+this.basicPropertyContainer.height+40;
- const s=this.draggableMask.x-this.basicPropertyBg2.x,e=this.draggableMask.y-this.basicPropertyBg2.y;
- this.draggableMask.width=this.basicPropertyBg2.width-2*s,this.draggableMask.height=this.basicPropertyBg2.height-2*e,this.draggableBg.width=this.draggableMask.width,this.updateDraggableContainer();
- const n=this.draggableMask.width;
- aD.setLabelWrapWidth(this.lblNormalAttackDesc,n),aD.setLabelWrapWidth(this.lblSpecialAttackDesc,n),aD.setLabelWrapWidth(this.lblUniqueDesc,n),aD.setLabelWrapWidth(this.lblTribleDesc,n),aD.setLabelWrapWidth(this.lblGoldSkill,this.bg.width-2*this.lblGoldSkill.x)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get className(){
- return"HeroDetailPopup"}
- onAdded(){
- super.onAdded(),this.setHeroEvolve(!0),VV.getInstance().registerHeroDetailPopupGetter(()=>this),HV.getInstance().registerPopupButtonGetter(t=>"btnEnhance"===t&&this.btnEnhance.visible?{
- parent:this.contentContainer,btn:{
- x:this.btnEnhance.x,y:this.btnEnhance.y,width:this.btnEnhance.width,height:this.btnEnhance.height}
- }
- :null)}
- onRemoved(){
- S4.getInstance().visible=!0,"book"===this.mode?_9.getInstance().show2():"guild"===this.mode?Jt(async()=>{
- const{
- Guild2Popup:t}
- =await Promise.resolve().then(()=>l8t);
- return{
- Guild2Popup:t}
- }
- ,void 0).then(({
- Guild2Popup:t}
- )=>{
- t.getInstance().addResources()}
- ):(UV.getInstance().setMode(GV.NORMAL),S4.getInstance().addChild(UV.getInstance())),this.setHeroEvolve(!1),HV.getInstance().unregisterPopupButtonGetter(),0!=this.draggableContainer.max&&(this.draggableContainer.y=this.draggableContainer.max),this.bookVo&&this.bookVo.remove()}
- getEnhanceGuideInfo(){
- if(!this.vo||this.vo.enhance>=vx.HERO_MAX_ENHANCE)return null;
- const t=r9.getInstance().getCost(this.vo.enhance+1);
- return _L.medal<t?null:{
- parent:this.contentContainer,btn:{
- x:this.btnEnhance.x,y:this.btnEnhance.y,width:this.btnEnhance.width,height:this.btnEnhance.height}
- }
- }
- onTapDetailClick(){
- this.tapDetail.selected=!0,this.tapSkill.selected=!1,this.tapTrans.selected=!1,null==this.detailContainer.parent&&this.container.addChild(this.detailContainer),this.skillContainer.parent&&this.container.removeChild(this.skillContainer),this.transContainer.parent&&this.container.removeChild(this.transContainer),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout()}
- onTapSkillClick(){
- this.tapDetail.selected=!1,this.tapSkill.selected=!0,this.tapTrans.selected=!1,this.detailContainer.parent&&this.container.removeChild(this.detailContainer),null==this.skillContainer.parent&&this.container.addChild(this.skillContainer),this.transContainer.parent&&this.container.removeChild(this.transContainer),this.lblGoldSkill.text=`# ${
- AG.getText("GAME_89","레벨 달성시 활성화 되고, 강화레벨 달성시 능력치 100% 추가")}
- `,this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout()}
- onTapTransClick(){
- _L.maxWave<t.TRANS_TAB_MIN_WAVE?vV.getInstance().showMessage(AG.getValueReplace("GAME_34","##",t.TRANS_TAB_MIN_WAVE,`${
- t.TRANS_TAB_MIN_WAVE}
-  wave 이상에서 개방됩니다.`)):(this.tapDetail.selected=!1,this.tapSkill.selected=!1,this.tapTrans.selected=!0,this.detailContainer.parent&&this.container.removeChild(this.detailContainer),this.skillContainer.parent&&this.container.removeChild(this.skillContainer),null==this.transContainer.parent&&this.container.addChild(this.transContainer),this.updateTransInfo(),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout())}
- applyTabResourceMode(){
- if("guild"===this.mode)return;
- const t=UV.getInstance();
- this.tapTrans.selected&&this.tapTrans.visible?(t.setMode(GV.TOWER),t.updateHonor()):t.setMode(GV.NORMAL)}
- buildTransContainer(){
- this.transBg=new yB,this.transBg.setIndex(2),this.transBg.width=620,this.transBg.height=160,this.transContainer.addChild(this.transBg),this.transPageNav=new MB(620,16,aD.DEFAULT_COLOR,15),this.transPageNav.extraHeight=90,this.transContainer.addChild(this.transPageNav),this.lblTransMaxTop.visible=!1,this.lblTransMaxBottom.visible=!1,this.transContainer.addChild(this.lblTransMaxTop),this.transContainer.addChild(this.lblTransMaxBottom),this.transPageNav.onPageChange=t=>{
- const i=!!this.vo&&this.vo.trans>=this.vo.maxTrans;
- this.lblTransMaxBottom.visible=i&&0===t}
- ,this.transStatusTable=new Be,this.transGradeTable=new Be,this.transContainer.addChild(this.lblTransStepTitle);
- for(let i=0;
- i<t.MATERIAL_SLOT_COUNT;
- i++){
- const t=new vK;
- t.setMode(mK.BOOK),t.scale.set(.8),t.visible=!1,t.eventMode="static",t.cursor="pointer";
- const s=i;
- t.on("pointertap",()=>this.onMaterialIconClick(s)),this.materialIcons.push(t),this.materialContainer.addChild(t);
- const e=new YD("0/1",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18);
- e.visible=!1,this.materialCountLabels.push(e),this.materialContainer.addChild(e)}
- this.transContainer.addChild(this.materialContainer),this.btnTrans.text=AG.getText("GAME_820","초월"),this.btnTrans.showIconLabel=!0,this.btnTrans.showTextLabel=!0,this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=this.onTransClick.bind(this),this.btnTrans.visible=!1,this.contentContainer.addChild(this.btnTrans),this.btnTransTicket.text=AG.getText("GAME_820","초월"),this.btnTransTicket.showIconLabel=!0,this.btnTransTicket.showTextLabel=!0,this.btnTransTicket.color=kU.GREEN,this.btnTransTicket.onClick=this.onTransTicketClick.bind(this),this.btnTransTicket.visible=!1,this.contentContainer.addChild(this.btnTransTicket),this.btnTransMode10=new u9("x10"),this.btnTransMode10.x=this.transBg.x+this.transBg.width-this.btnTransMode10.width-10,this.btnTransMode10.y=this.transBg.y+15,this.transContainer.addChild(this.btnTransMode10),this.btnTransMode1=new u9("x1"),this.btnTransMode1.x=this.btnTransMode10.x-this.btnTransMode1.width-5,this.btnTransMode1.y=this.btnTransMode10.y,this.transContainer.addChild(this.btnTransMode1),this.btnTransMode1.onClick=()=>{
- this.onTransModeClick(1)}
- ,this.btnTransMode10.onClick=()=>{
- this.onTransModeClick(10)}
- }
- applyTabButtonVisibility(){
- const i=this.tapTrans.selected&&this.tapTrans.visible;
- if(this.btnTransMode1.visible=!1,this.btnTransMode10.visible=!1,i){
- if(this.btnEnhance.visible=!1,this.btnEvolve.visible=!1,this.btnEvolveMass.visible=!1,this.btnSell.visible=!1,this.btnHire.visible=!1,this.multiEnhanceContainer.visible=!1,this.btnTrans.visible=!0,this.btnTransTicket.visible=EL.getInstance().isHeroTranscendTicket(),"roster"==this.mode&&EL.getInstance().isHeroMassTranscend()){
- const i=vx.getInstance().getOwnedUnitVO(this.vo.kindNum),s=this.vo.trans>0?(null==i?void 0:i.trans[this.vo.trans-1])??0:(null==i?void 0:i.count)??0,e=t.MASS_TRANSCEND_COUNT;
- this.btnTransMode1.visible=!(s<e),this.btnTransMode10.visible=this.btnTransMode1.visible,10==this.transMode?(this.btnTransMode1.activated=!1,this.btnTransMode10.activated=!0):(this.btnTransMode1.activated=!0,this.btnTransMode10.activated=!1)}
- }
- else this.btnTrans.visible=!1,this.btnTransTicket.visible=!1,this.applyModeButtonVisibility()}
- applyModeButtonVisibility(){
- if(this.vo)if(this.btnEvolveMass.visible=!1,"book"==this.mode||"shop"==this.mode||"guild"==this.mode)this.btnEnhance.visible=!1,this.btnSell.visible=!1,this.btnHire.visible=!1,this.btnEvolve.visible=!1;
- else if("roster"==this.mode){
- if(this.btnEnhance.visible=!1,this.btnSell.visible=!1,this.btnHire.visible=!0,this.btnEvolve.visible=this.vo.evolKindNum>0&&0===this.vo.evolStage,this.btnEvolve.visible&&EL.getInstance().isHeroMassEvolve()){
- const i=vx.getInstance().getOwnedUnitVO(this.vo.base),s=(null==i?void 0:i.count)??0,e=t.MASS_EVOLVE_COUNT;
- this.btnEvolveMass.visible=!(s<e)}
- }
- else this.btnEnhance.visible=!0,this.btnSell.visible=!0,this.btnHire.visible=!1,this.btnEvolve.visible=-1!=this.vo.evolKindNum}
- updateTransInfo(){
- var i;
- if(!this.vo)return;
- const s=vx.getInstance(),e=this.vo.trans,n=e+1,h=e>=this.vo.maxTrans;
- this.lblTransStepTitle.text=h?AG.getText("GAME_829","최대초월"):`${
- AG.getValueReplace("GAME_821","##",n,`${
- n}
- 차 초월`)}
-  ( ${
- AG.getText("GAME_822","재료")}
-  )`;
- const r=AG.getText("GAME_852","최대 초월입니다.");
- this.lblTransMaxTop.text=r,this.lblTransMaxBottom.text=r,this.lblTransMaxTop.visible=h,this.lblTransMaxBottom.visible=h&&0===this.transPageNav.pageIndex,this.updateTransMaterials();
- const o=Math.max(0,Math.min(e,t.TRANS_BONUS.length-1)),a=t.TRANS_BONUS[o],c=(null==(i=this.vo.getBookVo())?void 0:i.grade)??0,l=vx.getTransPointForGrade(c,e)*vx.TRANS_MEDAL_BONUS_PER_POINT_GLOBAL,u=MV.getBaseMaxLevelForGrade(c),d=u+e*MV.TRANS_MAX_LEVEL_BONUS,f=Kt((t,i)=>AG.getText(t,i),"_t"),p=Kt((t,i,s)=>AG.getValueReplace(t,"##",i,s),"_tv");
- let g=`# ${
- 0===e?f("GAME_838","기본 능력"):p("GAME_839",e,`${
- e}
-  초월 능력`)}
-  (${
- f("GAME_840","현재")}
- )\n- ${
- p("GAME_824",a.stat,`영웅의 공격력, 방어력 및 체력 버프: ${
- a.stat}
- %`)}
- \n- ${
- p("GAME_825",l,`훈장버프 : ${
- l}
- %`)}
- \n- ${
- p("GAME_826",d,`최대레벨 : ${
- d}
- `)}
- `;
- if(!h){
- const i=Math.min(n,t.TRANS_BONUS.length-1),s=t.TRANS_BONUS[i],e=vx.getTransPointForGrade(c,n)*vx.TRANS_MEDAL_BONUS_PER_POINT_GLOBAL,h=u+n*MV.TRANS_MAX_LEVEL_BONUS;
- g+=`\n# ${
- p("GAME_839",n,`${
- n}
-  초월 능력`)}
- \n- ${
- p("GAME_824",s.stat,`영웅의 공격력, 방어력 및 체력 버프: ${
- s.stat}
- %`)}
- \n- ${
- p("GAME_825",e,`훈장버프 : ${
- e}
- %`)}
- \n- ${
- p("GAME_826",h,`최대레벨 : ${
- h}
- `)}
- `}
- const m=this.vo.kindNum,w=AG.getText(this.vo.getBookVo().getNameKey(),this.vo.name),v=new Set(lx.getInstance().getAwakenedHeroes()).has(m),b=s.calcHeroTransPoint(m);
- g+=`\n# ${
- AG.getValueReplace("GAME_1183","###",w,`${
- w}
- 의 초월 포인트`)}
-  : ${
- t.formatTransPoint(b)}
- `;
- const y=t.formatTransPoint(Math.min(b,100));
- g+=`\n- ${
- AG.getValueReplaceMulti("GAME_1185",["###","@@@"],[w,y],`${
- w}
- 의 공격력, 방어력, 체력이 ${
- y}
- % 증가한다.`)}
- `,v&&(g+=`\n- ${
- AG.getValueReplace("GAME_1184","###",w,`커플 펫이 5성이 되어, ${
- w}
- 의 초월 포인트가 50% 증가`)}
- `);
- const _=this.getTotalTransPoints(),M=t.formatTransPoint,E=`# ${
- f("GAME_827","초월 포인트")}
-  : ${
- M(_)}
- \n- ${
- f("GAME_841","영웅 종류에 관계없이 보유한 모든 영웅의 초월 포인트 합산입니다.")}
- \n- ${
- f("GAME_842","모든 영웅의 골드 최대 레벨이 초월 포인트 만큼 증가합니다.")}
- \n- ${
- f("GAME_843","초월 포인트 1당 훈장 획득량이 +5% 증가합니다. ( 훈장 획득 보너스는 최대 +2000%까지)")}
- \n- ${
- f("GAME_844","훈장 획득 보너스는 영웅이 팀에 편성되지 않아도 적용됩니다.")}
- `,A=[aD.DEFAULT_COLOR],S=h?[aD.DEFAULT_COLOR,16763904]:[aD.DEFAULT_COLOR,8965358,16763904],T=h?[15]:[15,15];
- this.updateTransStatusTable(),this.updateTransGradeTable();
- const C=[{
- title:f("GAME_823","초월 능력"),content:g,itemColors:S,itemMarkerColors:S,itemSpacings:T}
- ,{
- title:f("GAME_827","초월 포인트"),content:E,itemColors:A,itemMarkerColors:A}
- ,{
- title:f("GAME_848","초월 포인트 현황"),customContainer:this.transStatusTable}
- ,{
- title:f("GAME_851","등급별 초월포인트"),customContainer:this.transGradeTable}
- ];
- if(this.transPageNav.setPages(C),h)this.btnTrans.text=AG.getText("GAME_829","최대초월"),this.btnTrans.iconText="",this.btnTrans.activated=!1,this.btnTransTicket.text=AG.getText("GAME_829","최대초월"),this.btnTransTicket.iconText="",this.btnTransTicket.activated=!1;
- else{
- const t=this.getTransHonorCoinCost(n);
- this.btnTrans.text=AG.getText("GAME_820","초월"),this.btnTrans.iconText=String(t),this.btnTrans.activated=!0,this.btnTransTicket.text=AG.getText("GAME_820","초월"),this.btnTransTicket.iconText=this.getTransTicketCostStr();
- const i=this.isTransTicketActivated();
- this.btnTransTicket.activated=!0,this.btnTransTicket.color=i?kU.GREEN:kU.GRAY}
- }
- updateTransMaterials(){
- if(!this.vo)return;
- const i=vx.getInstance(),s=this.vo.trans,e=s+1;
- if(s>=this.vo.maxTrans)for(let n=0;
- n<t.MATERIAL_SLOT_COUNT;
- n++)this.materialSatisfied[n]=!1,this.materialIcons[n].visible=!1,this.materialCountLabels[n].visible=!1;
- else{
- const s=this.vo.getBookVo().getTransMaterials(e),n=new Map;
- "roster"===this.mode&&0===this.vo.trans&&n.set(this.vo.kindNum,1);
- for(let e=0;
- e<t.MATERIAL_SLOT_COUNT;
- e++){
- const t=s[e],h=this.materialIcons[e],r=this.materialCountLabels[e];
- if(t&&t>0){
- h.setDataWithKindNum(t),h.visible=!0;
- const s=i.getOwnedUnitCount(t,0),o=n.get(t)??0,a=s>o&&s>=this.transMode;
- a&&n.set(t,o+this.transMode),this.materialSatisfied[e]=a,h.alpha=a?1:.5,r.text=`${
- s}
- /${
- this.transMode}
- `,r.visible=!0}
- else this.materialSatisfied[e]=!1,h.visible=!1,r.visible=!1}
- }
- }
- static getTransPointForGrade(t,i){
- return vx.getTransPointForGrade(t,i)}
- static formatTransPoint(t){
- return Number.isInteger(t)?String(t):t.toFixed(1)}
- renderTransPointTable(t,i){
- t.removeChildren();
- const s=[100,140,140,140],e=aD.DEFAULT_COLOR,n=[AG.getText("GAME_850","등급"),AG.getValueReplace("GAME_845","##",1,"1 초월"),AG.getValueReplace("GAME_845","##",2,"2 초월"),AG.getValueReplace("GAME_845","##",3,"3 초월")],h=[6,5,4,3,2];
- let r=15;
- const o=Kt((i,e,n)=>{
- const h=new YD(i,n,aD.DEFAULT_OUTLINE_FONT_OPTION_16);
- let o=0;
- for(let t=0;
- t<e;
- t++)o+=s[t];
- h.x=o+.5*(s[e]-h.width),h.y=r,t.addChild(h)}
- ,"placeCell");
- for(let a=0;
- a<n.length;
- a++)o(n[a],a,16763904);
- r+=30;
- for(let a=0;
- a<h.length;
- a++){
- const t=h[a];
- o(AG.getValueReplace("GAME_849","##",t,`${
- t}
-  ★`),0,e);
- for(let s=1;
- s<=3;
- s++)o(i(t,s),s,e);
- r+=30}
- }
- updateTransStatusTable(){
- const i=this.aggregateOwnedTransStats([6,5,4,3,2]);
- this.renderTransPointTable(this.transStatusTable,(s,e)=>{
- const n=i[s][e-1];
- return n.count<=0?"-":`${
- t.formatTransPoint(n.score)}
- (${
- n.count}
- )`}
- )}
- updateTransGradeTable(){
- this.renderTransPointTable(this.transGradeTable,(i,s)=>{
- const e=t.getTransPointForGrade(i,s);
- return t.formatTransPoint(e)}
- )}
- aggregateOwnedTransStats(t){
- const i={
- }
- ;
- for(const n of t)i[n]=[{
- count:0,score:0}
- ,{
- count:0,score:0}
- ,{
- count:0,score:0}
- ];
- const s=vx.getInstance(),e=new Set(lx.getInstance().getAwakenedHeroes());
- for(const n of s.list){
- if(n.kindNum>=1e4||n.trans<1||n.trans>3)continue;
- const t=s.getBookVO(n.kindNum);
- if(!t||!(t.grade in i))continue;
- const h=i[t.grade][n.trans-1];
- h.count+=1,h.score+=vx.getTransPointForHero(n.kindNum,t.grade,n.trans,e)}
- for(const n of s.ownedUnitList){
- if(n.kindNum>=1e4)continue;
- const t=s.getBookVO(n.kindNum);
- if(!t||!(t.grade in i))continue;
- const h=n.trans??[0,0,0];
- for(let s=0;
- s<3;
- s++){
- const r=h[s]??0;
- if(r<=0)continue;
- const o=i[t.grade][s];
- o.count+=r,o.score+=r*vx.getTransPointForHero(n.kindNum,t.grade,s+1,e)}
- }
- return i}
- getTotalTransPoints(){
- return vx.getInstance().totalTransPoint}
- onTransModeClick(t=1){
- this.transMode=t,10==this.transMode?(this.btnTransMode1.activated=!1,this.btnTransMode10.activated=!0):(this.btnTransMode1.activated=!0,this.btnTransMode10.activated=!1),this.updateTransInfo(),this.updateLayoutTransMaterials()}
- async onTransClick(){
- if(!this.vo||this.vo.trans>=this.vo.maxTrans)return;
- if(this.requestPending)return;
- const i=this.vo.trans+1;
- let s=!0;
- const e=this.vo.getBookVo().getTransMaterials(i);
- for(let r=0;
- r<t.MATERIAL_SLOT_COUNT;
- r++)if(e[r]&&e[r]>0&&!this.materialSatisfied[r]){
- s=!1;
- break}
- if(!s){
- const i=[];
- for(let r=0;
- r<t.MATERIAL_SLOT_COUNT;
- r++)e[r]&&e[r]>0&&(this.materialSatisfied[r]||i.push(e[r]));
- let s=!0;
- const n=[],h=[];
- for(let t=0;
- t<i.length;
- ++t){
- const e=vx.getInstance(),r=i[t],o=e.bookList.find(t=>t.evolKindNum===r);
- o&&(e.getOwnedUnitCount(o.kindNum,0)<this.transMode?s=!1:(n.push(e.getOwnedUnitCount(r,0)),h.push(o.kindNum)))}
- if(s){
- const t=this.vo.trans+1,i=this.getTransHonorCoinCost(t);
- if(_L.honorCoin<i)return s=!1,void vV.getInstance().showMessage(AG.getText("GAME_194","명예코인이 부족합니다"))}
- if(s){
- const t=Z9.getInstance();
- t.onEvolved=()=>{
- this.onEvolveMaterialMultiConfirm()}
- ,t.setData(n,h,this.transMode,this.vo.trans+1),t.show()}
- else vV.getInstance().showMessage(AG.getText("GAME_830","재료 영웅이 부족합니다"));
- return}
- const n=this.getTransHonorCoinCost(i);
- if(_L.honorCoin<n)return void vV.getInstance().showMessage(AG.getText("GAME_194","명예코인이 부족합니다"));
- const{
- TransConfirmPopup:h}
- =await Jt(async()=>{
- const{
- TransConfirmPopup:t}
- =await Promise.resolve().then(()=>Zoi);
- return{
- TransConfirmPopup:t}
- }
- ,void 0);
- h.getInstance().showWith(n,()=>{
- this.runTranscend(!1,this.transMode)}
- )}
- onEvolveMaterialMultiConfirm(){
- "roster"===this.mode&&(this.showInRoster(this.vo.evolKindNum,this.vo.trans),K9.getInstance().setData()),a9.getInstance().validateTeam(),this.updateTransMaterials();
- const t=this.vo.trans+1,i=this.getTransHonorCoinCost(t);
- _L.honorCoin<i?vV.getInstance().showMessage(AG.getText("GAME_194","명예코인이 부족합니다")):this.runTranscend(!1,this.transMode)}
- async onTransTicketClick(){
- if(!this.vo||this.vo.trans>=this.vo.maxTrans)return;
- if(!this.isTransTicketActivated())return void vV.getInstance().showMessage(AG.getText("GAME_1231","초월권이 부족하여 초월할 수 없습니다."));
- if(this.requestPending)return;
- const{
- TransConfirmPopup:t}
- =await Jt(async()=>{
- const{
- TransConfirmPopup:t}
- =await Promise.resolve().then(()=>Zoi);
- return{
- TransConfirmPopup:t}
- }
- ,void 0);
- t.getInstance().showWithTicket(this.getTransTicketCostStr(),()=>{
- this.runTranscend(!0,this.transMode)}
- )}
- async runTranscend(t=!1,i=1){
- if(this.vo&&!(this.vo.trans>=this.vo.maxTrans)&&!this.requestPending){
- this.setRequestPending(!0);
- try{
- const s="roster"===this.mode,e=s?await hD.getInstance().hero.transcendOwned(this.vo.kindNum,this.vo.trans,i,t,!0):await hD.getInstance().hero.transcend(this.vo.id,void 0,t,!0);
- if(!e||!1===e.success){
- const t=(null==e?void 0:e.error)??"";
- let i=(null==e?void 0:e.errorMessage)??"";
- return"HERO_TRANSCEND_INSUFFICIENT_MATERIAL"===t?i=AG.getText("GAME_830","재료 영웅이 부족합니다"):"HERO_TRANSCEND_INSUFFICIENT_COIN"===t||"INSUFFICIENT_HONOR_COIN"===t?i=AG.getText("GAME_194","명예코인이 부족합니다"):"HERO_INVALID_TRANSCEND"===t?i="초월할 수 없는 영웅입니다.":"HERO_MAX_TRANSCEND"===t?i="이미 최대 초월 단계입니다.":"INSUFFICIENT_TICKET"===t?i=AG.getText("GAME_1243","초월권이 부족합니다."):i||(i=AG.getText("COMMON_77","네트워크 오류가 발생하였습니다.")),void vV.getInstance().showMessage(i)}
- if(_L.setUserInfo(e.body),c6.getInstance().setData(e.body.transTicket),UV.getInstance().updateAll(),UV.getInstance().updateHonor(),dtt.getInstance().setData(),a9.getInstance().validateTeam(),s)this.vo.trans+=1,K9.getInstance().setData(),q9.getInstance().update();
- else{
- const t=vx.getInstance().getVOWithId(this.vo.id);
- t&&zii.getInstance().udpateHero(t)}
- this.updateHeroInfo(this.vo,this.mode),this.updateTransInfo(),this.applyTabButtonVisibility(),this.updateLayout()}
- finally{
- this.setRequestPending(!1)}
- }
- }
- async onMaterialIconClick(t){
- if(!this.vo||this.vo.trans>=this.vo.maxTrans)return;
- const i=vx.getInstance(),s=this.vo.trans+1,e=this.vo.getBookVo().getTransMaterials(s)[t];
- if(!e||e<=0)return;
- const n=i.getBookVO(e),h=n?AG.getText(n.getNameKey(),n.name):"",r=i.bookList.find(t=>t.evolKindNum===e),o=r?i.getOwnedUnitCount(r.kindNum,0):0;
- if(this.materialSatisfied[t])return;
- if(r&&o>=this.transMode){
- const t=X9[r.grade]??0,{
- EvolveMaterialConfirmPopup:i}
- =await Jt(async()=>{
- const{
- EvolveMaterialConfirmPopup:t}
- =await Promise.resolve().then(()=>Int);
- return{
- EvolveMaterialConfirmPopup:t}
- }
- ,void 0);
- return void i.getInstance().showWith(h,t,()=>{
- this.evolveMaterialPreHero(r.kindNum,this.transMode)}
- ,this.transMode)}
- const a=this.transMode>1?`[ ${
- h}
-  (x${
- this.transMode}
- ) ]`:h;
- r?vV.getInstance().showMessage(AG.getValueReplace("GAME_832","##",a,`${
- a}
- 으로 진화할 수 있는 영웅이 없습니다.`)):vV.getInstance().showMessage(AG.getValueReplace("GAME_831","##",a,`${
- a}
- 을 보유하고 있지 않습니다.`))}
- async evolveMaterialPreHero(t,i=1){
- const s=vx.getInstance().getBookVO(t);
- if(!s)return;
- const e=X9[s.grade]??0;
- if(_L.gem<e*i)vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."));
- else if(!this.requestPending){
- this.setRequestPending(!0);
- try{
- const s=await hD.getInstance().hero.evolveOwned(`${
- t}
- -${
- i}
- `,!0);
- if(!1===s.success)return void("HERO_NOT_FOUND"==s.error?vV.getInstance().showMessage(AG.getText("GAME_830","재료 영웅이 부족합니다")):vV.getInstance().showError(s));
- _L.setUserInfo(s.body),UV.getInstance().updateAll(),dtt.getInstance().setData(),"roster"===this.mode&&(K9.getInstance().setData(),q9.getInstance().update()),this.updateTransInfo(),lS.getInstance().dispatchCustomEvent("HeroEvolve",{
- id:0,kindNum:t}
- )}
- finally{
- this.setRequestPending(!1)}
- }
- }
- async onSellClick(){
- if(!this.vo||this.vo.id<=0||this.vo.kindNum<=0)return;
- if(vx.getInstance().list.length<2)return void vV.getInstance().showMessage(AG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다."));
- if(1==this.requestPending)return;
- if(this.setRequestPending(!0),this.btnSell.activated=!1,this.enhanceTimer&&!(await this.syncEnhanceToServer()))return this.btnSell.activated=!0,void this.setRequestPending(!1);
- const t=await hD.getInstance().hero.removeFromTeam(this.vo.id);
- if(!1===t.success){
- this.btnSell.activated=!0,this.setRequestPending(!1);
- let i=t.lerrorMessage;
- return"HERO_CANNOT_REMOVE_LAST"==t.error&&(i=AG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다.")),void vV.getInstance().showMessage(i)}
- zii.getInstance().fireHero(this.vo),_L.setUserInfo(t.body),UV.getInstance().updateAll(),dtt.getInstance().setData(),this.hide(),this.setRequestPending(!1)}
- onMultiEnhance(){
- this.multiEnhanceContainer.visible=!this.multiEnhanceContainer.visible,this.updateLayout()}
- getNextIncrement(t,i){
- t+i>vx.HERO_MAX_ENHANCE&&(i=vx.HERO_MAX_ENHANCE-t);
- const s=t%i;
- return 0===s?i:i-s}
- onEnhanceClick(i=1){
- if(1===i){
- const t=Date.now();
- t-this.lastEnhanceRapidClickTime<this.RAPID_CLICK_THRESHOLD?this.enhanceRapidClickCount++:this.enhanceRapidClickCount=1,this.lastEnhanceRapidClickTime=t,this.enhanceRapidClickCount>=this.RAPID_CLICK_COUNT&&(this.enhanceRapidClickCount=0,this.multiEnhanceContainer.visible||(this.multiEnhanceContainer.visible=!0,this.updateLayout()))}
- let s=this.vo.enhance+i;
- s>vx.HERO_MAX_ENHANCE&&(s=vx.HERO_MAX_ENHANCE);
- let e=0;
- for(let t=this.vo.enhance+1;
- t<=s;
- t++)e+=r9.getInstance().getCost(t);
- _L.medal<e?vV.getInstance().showMessage(AG.getText("GAME_48","훈장이 부족합니다.")):(this.enhanceTimer&&clearTimeout(this.enhanceTimer),-1===this.enhanceStartValue&&(this.enhanceStartValue=this.vo.enhance,this.enhanceStartMedal=_L.medal),_L.medal-=e,this.vo.enhance=s,zii.getInstance().udpateHero(this.vo),UV.getInstance().updateMedal(),this.updateHeroInfo(this.vo,this.mode),dtt.getInstance().setData(),NV.get().play(this.contentContainer,this.icon.x,this.icon.y-9),HV.getInstance().onConditionChanged(),this.enhanceTimer=setTimeout(async()=>{
- await this.syncEnhanceToServer(),this.multiEnhanceContainer.visible=!1,this.updateLayout()}
- ,t.ENHANCE_DEBOUNCE_DELAY))}
- async syncEnhanceToServer(){
- if(this.enhanceTimer&&(clearTimeout(this.enhanceTimer),this.enhanceTimer=null),this.enhanceStartValue===this.vo.enhance)return this.resetEnhance(),!0;
- const t=this.vo.enhance;
- if(t>vx.HERO_MAX_ENHANCE)return vV.getInstance().showMessage(AG.getText("GAME_139","최대 강화레벨입니다.")),!1;
- const i=await hD.getInstance().hero.enhanceUp(this.vo.id,t);
- return 0==i.success?(this.vo.enhance=this.enhanceStartValue,_L.medal=this.enhanceStartMedal,zii.getInstance().udpateHero(this.vo),UV.getInstance().updateMedal(),this.updateHeroInfo(this.vo,this.mode),dtt.getInstance().setData(),this.resetEnhance(),vV.getInstance().showMessage(AG.getText("COMMON_77","네트워크 오류가 발생하였습니다.")),!1):(_L.setUserInfo(i.body),UV.getInstance().updateAll(),dtt.getInstance().setData(),this.updateHeroInfo(this.vo,this.mode),this.resetEnhance(),!0)}
- resetEnhance(){
- this.enhanceTimer&&clearTimeout(this.enhanceTimer),this.enhanceTimer=null,this.enhanceStartValue=-1,this.enhanceStartMedal=-1}
- onEvolveClick(t=1){
- if(!this.vo.evolKindNum)return void vV.getInstance().showMessage(AG.getText("GAME_141","이미 최대 진화 단계입니다."));
- const i=J9.getInstance();
- i.onEvolved=()=>{
- "roster"===this.mode&&(this.showInRoster(this.vo.evolKindNum,this.vo.trans),K9.getInstance().setData()),a9.getInstance().validateTeam()}
- ,i.setData(this.vo,"roster"===this.mode,t),i.show()}
- onEvolveMassClick(){
- const i=t.MASS_EVOLVE_COUNT;
- this.onEvolveClick(i)}
- show(i,s="list"){
- if("book"!==s&&"shop"!==s&&"guild"!==s&&(!i||!i.kindNum||i.kindNum<=0))return;
- if(this.transMode=1,this.requestPending=!1,this.tapDetail.text=AG.getText("GAME_83","상세"),this.tapSkill.text=AG.getText("GAME_84","스킬"),this.resetEnhance(),this.multiEnhanceContainer.visible=!1,this.updateHeroInfo(i,s),this.btnEnhance.visible=!0,this.btnSell.visible=!0,this.btnSell.activated=!0,this.applyModeButtonVisibility(),"book"==this.mode||"shop"==this.mode||"guild"==this.mode){
- if("guild"==this.mode){
- const i=t.POPUP_GUILD_MIN_HEIGHT;
- this.bg.height<i&&(this.y=Math.max(0,KA.safeHeight-i))}
- else this.y=Math.min(KA.safeHeight-t.POPUP_MIN_HEIGHT,KA.viewMainY);
- this.bg.height=KA.safeHeight-this.y}
- const e=("list"===this.mode||"roster"===this.mode)&&this.vo.evolStage>0&&this.vo.maxTrans>0;
- this.tapTrans.visible=e,!e&&this.tapTrans.selected?this.onTapDetailClick():this.tapTrans.selected&&this.updateTransInfo(),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout(),this.updateDraggableContainer(),this.show2()}
- hide(){
- this.enhanceTimer&&this.syncEnhanceToServer(),this.multiEnhanceContainer.visible=!1,super.hide()}
- showInBook(t,i="book"){
- const s=vx.getInstance().getBookVO(t);
- s&&(this.bookVo=yx.getVO(),this.bookVo.setBook(s.kindNum),this.show(this.bookVo,i))}
- showInRoster(t,i){
- const s=vx.getInstance().getBookVO(t);
- s&&(this.bookVo=yx.getVO(),this.bookVo.setBook(s.kindNum),this.bookVo.trans=i,this.show(this.bookVo,"roster"))}
- updateHeroInfo(i,s){
- let e=!this.vo||this.vo.kindNum!=i.kindNum;
- this.vo=i,this.mode=s,"book"===this.mode?this.icon.setMode(mK.BOOK):"shop"===this.mode||"guild"===this.mode?this.icon.setMode(mK.SHOP):"roster"===this.mode?this.icon.setMode(mK.BOOK):this.icon.setMode(mK.HERO_LIST),this.icon.setData(i),i.dmgType==nx.MAGICAL?this.lblAtk.texture=ZA.getTexture("UI_Ekkorr","ICON_ATTACK2"):this.lblAtk.texture=ZA.getTexture("UI_Ekkorr","UI_SWORD"),this.iconTribeType.texture=ZA.getTexture("UI_Ekkorr",this.tribeIcons[i.tribe]),i.sex==rx.MALE?this.iconIsMale.texture=ZA.getTexture("UI_Ekkorr","MALE_ICON"):i.sex==rx.FEMALE?this.iconIsMale.texture=ZA.getTexture("UI_Ekkorr","FEMALE_ICON"):this.iconIsMale.texture=ZA.getTexture("UI_Ekkorr","NEUTRAL_ICON"),i.detect?this.propertyContainer.addChild(this.iconDetect):this.propertyContainer.removeChild(this.iconDetect);
- const n=AG.getText(i.getBookVo().getNameKey(),i.name);
- this.lblName.text=n,this.starIcon.texture=ZA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[i.grade-1],this.lblHp.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedMaxHp)}
- `,this.lblAtk.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedAtkDmg)}
- `,this.lblDef.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedPhyDef)}
- `,this.lblMagDef.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedMagDef)}
- `,this.lblBlock.text=`${
- i.numBlock}
- `,this.lblAtkSpd.text=`${
- AG.getText("GAME_21","공격속도")}
-  : ${
- (1e4/i.buffedAtkSpd/30).toFixed(1)}
- `,this.lblMoveSpd.text=`${
- AG.getText("GAME_22","이동속도")}
-  : ${
- (10*i.buffedMoveSpd).toFixed(2)}
- `,this.lblRecovery.text=`${
- AG.getText("GAME_23","회복력")}
-  : ${
- i.recovery.toFixed(1)}
- %`,this.lblAtkRange.text=`${
- AG.getText("GAME_20","공격범위")}
-  : ${
- i.atkRange}
- `,this.lblNormalAttackTitle.text=`# ${
- AG.getText("GAME_26","일반 공격")}
- `,this.lblNormalAttackDesc.text=AG.getText(i.getBookVo().getNAtkKey(),i.nAtk)||"",this.lblSpecialAttackTitle.text=`# ${
- AG.getText("GAME_27","스킬 공격")}
- `,i.sAtk?this.lblSpecialAttackDesc.text=AG.getText(i.getBookVo().getSAtkKey(),i.sAtk)||"":this.lblSpecialAttackDesc.text=AG.getText("COMMON_367","없음"),this.lblTribleTitle.text=`# ${
- AG.getText("GAME_28","종족 특성")}
- `,this.lblTribleDesc.text=this.getTribeTraitDesc(i.tribe,i.evolStage>0),this.btnEnhance.text=AG.getText("GAME_66","강화"),this.btnEvolve.text=AG.getText("GAME_67","진화"),this.btnEvolveMass.text=`${
- AG.getText("GAME_67","진화")}
-  (x10)`,this.btnSell.text=AG.getText("GAME_68","해고");
- const h=X9[this.vo.grade]??0;
- this.btnEvolve.iconText=String(h);
- const r=t.MASS_EVOLVE_COUNT;
- this.btnEvolveMass.iconText=String(h*r);
- const o=vx.HERO_MAX_ENHANCE;
- if(this.vo.enhance+1>o)this.btnEnhance.iconText="Max",this.btnEnhance.activated=!1;
- else{
- const t=r9.getInstance().getCost(i.enhance+1);
- this.btnEnhance.iconText=$D.displayLargeNumberAsAlphabet(t),this.btnEnhance.activated=_L.medal>=t}
- if(this.vo.enhance+10>o)this.btn10Enhance.visible=!1;
- else{
- const t=this.getNextIncrement(i.enhance,10);
- let s=0;
- for(let e=i.enhance+1;
- e<=i.enhance+t;
- e++)s+=r9.getInstance().getCost(e);
- this.btn10Enhance.text=`+${
- t}
- `,this.btn10Enhance.iconText=$D.displayLargeNumberAsAlphabet(s),this.btn10Enhance.activated=_L.medal>=s,this.btn10Enhance.visible=!0}
- if(this.vo.enhance+100>o)this.btn100Enhance.visible=!1;
- else{
- const t=this.getNextIncrement(i.enhance,100);
- let s=0;
- for(let e=i.enhance+1;
- e<=i.enhance+t;
- e++)s+=r9.getInstance().getCost(e);
- this.btn100Enhance.text=`+${
- t}
- `,this.btn100Enhance.iconText=$D.displayLargeNumberAsAlphabet(s),this.btn100Enhance.activated=_L.medal>=s,this.btn100Enhance.visible=!0}
- this.lblUniqueTitle.text=`# ${
- AG.getText("GAME_72","고유스킬")}
- `;
- const a=Ix.getInstance().getByKindNum(i.uniqueSkill);
- if(a){
- const t=AG.getText(a.getDescKey(),a.desc);
- this.lblUniqueDesc.text=t}
- else this.lblUniqueDesc.text=AG.getText("COMMON_367","없음");
- const c=[],l=Math.min(i.goldBuffIds.length,12);
- for(let t=0;
- t<l;
- t++)c.push({
- index:t,id:i.goldBuffIds[t],value:i.goldBuffValues[t],level:i.level,mode:this.mode}
- );
- this.goldSkillList.dataProvider=c,e&&this.goldSkillList.scrollTo(0)}
- getTribeTraitDesc(t,i){
- if(i)switch(t){
- case 1:return AG.getText("GAME_286","넉백 면역 (뒤로 밀리지 않습니다.)");
- case 2:return AG.getText("GAME_287","블로우 면역 (날려보내는 공격을 받아도 날아가지 않습니다.)");
- case 3:return AG.getText("GAME_288","냉기 면역 (얼려지지 않습니다.)");
- case 4:return AG.getText("GAME_289","기절 면역 (기절하지 않습니다.)");
- default:return""}
- else switch(t){
- case 1:return AG.getText("GAME_290","진화하면, 넉백에 면역이 되어, 밀리지 않습니다.");
- case 2:return AG.getText("GAME_291","진화하면 블로우 면역이 되어, 큰 타격을 받아도 날아가지 않습니다.");
- case 3:return AG.getText("GAME_292","진화하면, 얼려지지 않습니다.");
- case 4:return AG.getText("GAME_293","진화하면, 기절에 면역이 됩니다.");
- default:return""}
- }
- updateLayout(){
- this.starIcon.x=this.lblName.x+this.lblName.width+5,this.starIcon.y=this.lblName.y+.5*(this.lblName.height-this.starIcon.height),this.tapDetail.x=9,this.tapDetail.y=this.icon.y+this.icon.height+4,this.tapSkill.x=this.tapDetail.x+this.tapDetail.width+2,this.tapSkill.y=this.tapDetail.y,this.tapTrans.x=this.tapSkill.x+this.tapSkill.width+2,this.tapTrans.y=this.tapDetail.y,this.transBg.x=this.icon.x,this.transBg.y=this.tapSkill.y+this.tapSkill.height+5,this.transPageNav.x=this.icon.x,this.transPageNav.y=this.transBg.y+this.transBg.height+8,this.btnTransMode10.x=this.transBg.x+this.transBg.width-this.btnTransMode10.width-10,this.btnTransMode10.y=this.transBg.y+15,this.btnTransMode1.x=this.btnTransMode10.x-this.btnTransMode1.width-5,this.btnTransMode1.y=this.btnTransMode10.y,this.lblTransMaxTop.x=this.transBg.x+.5*(this.transBg.width-this.lblTransMaxTop.width),this.lblTransMaxTop.y=this.transBg.y+.5*(this.transBg.height-this.lblTransMaxTop.height),this.lblTransMaxBottom.x=this.transPageNav.x+.5*(this.transBg.width-this.lblTransMaxBottom.width),this.lblTransMaxBottom.y=this.transPageNav.y+Math.max(280,.6*this.transPageNav.height),this.lblTransStepTitle.x=this.transBg.x+25,this.lblTransStepTitle.y=this.transBg.y+12,this.updateLayoutTransMaterials(),this.materialContainer.x=this.transBg.x,this.materialContainer.y=this.lblTransStepTitle.y+this.lblTransStepTitle.height+16,this.propertyContainer.x=this.bg.width-this.propertyContainer.width-20,this.propertyContainer.y=52,this.basicPropertyBg.x=this.icon.x,this.basicPropertyBg.y=this.tapSkill.y+this.tapSkill.height+5,this.basicPropertyBg2.x=this.icon.x,this.basicPropertyBg2.y=this.basicPropertyBg.y+this.basicPropertyBg.height+8,this.basicPropertyContainer.x=this.basicPropertyBg.x+25,this.basicPropertyContainer.y=this.basicPropertyBg.y+15,this.skillContainer.y=this.tapSkill.y+this.tapSkill.height+5,this.draggableContainer.x=this.basicPropertyContainer.x,this.lblNormalAttackDesc.y=this.lblNormalAttackTitle.y+this.lblNormalAttackTitle.height+0,this.lblSpecialAttackTitle.y=this.lblNormalAttackDesc.y+this.lblNormalAttackDesc.height+20,this.lblSpecialAttackDesc.y=this.lblSpecialAttackTitle.y+this.lblSpecialAttackTitle.height+0,this.lblTribleTitle.y=this.lblSpecialAttackDesc.y+this.lblSpecialAttackDesc.height+20,this.lblTribleDesc.y=this.lblTribleTitle.y+this.lblTribleTitle.height+0,this.lblUniqueTitle.y=this.lblTribleDesc.y+this.lblTribleDesc.height+20,this.lblUniqueDesc.y=this.lblUniqueTitle.y+this.lblUniqueTitle.height+0;
- const t=this.bg.height-this.btnEnhance.height-18,i=this.btnEvolve.visible?this.btnEvolve.width+20:0,s=this.btnEnhance.width+20+i+this.btnSell.width,e=.5*(this.width-s);
- this.btnEnhance.x=e,this.btnEnhance.y=t,this.btnEvolve.x=this.btnEnhance.x+this.btnEnhance.width+20,this.btnEvolve.y=t,this.btnSell.x=this.btnEvolve.x+i,this.btnSell.y=t;
- let n=16;
- const h=[this.btnHire];
- if(this.btnHire.visible&&this.btnEvolve.visible&&(h.unshift(this.btnEvolve),this.btnEvolveMass.visible&&(n=10,h.splice(1,0,this.btnEvolveMass))),this.alignButtons(h,n,t),this.btnTrans.visible){
- const i=[this.btnTrans];
- this.btnTransTicket.visible&&i.push(this.btnTransTicket),this.alignButtons(i,n,t)}
- if(this.multiEnhanceContainer.visible){
- const t=5;
- this.btn10Enhance.x=this.btnEnhance.x,this.btn10Enhance.y=this.btnEnhance.y-this.btn10Enhance.height-t,this.btn100Enhance.x=this.btnEnhance.x,this.btn100Enhance.y=this.btn10Enhance.y-this.btn100Enhance.height-t}
- const r=this.draggableContainer.y-this.basicPropertyBg2.y;
- this.draggableBg.height=this.lblUniqueDesc.y+this.lblUniqueDesc.height+r}
- updateLayoutTransMaterials(){
- const i=80*t.MATERIAL_SLOT_COUNT+33*(t.MATERIAL_SLOT_COUNT-1),s=.5*(this.transBg.width-i);
- for(let e=0;
- e<t.MATERIAL_SLOT_COUNT;
- e++){
- const t=this.materialIcons[e],i=this.materialCountLabels[e];
- t.x=s+113*e,t.y=0,i.x=t.x+.5*(80-i.width)+5,i.y=70}
- }
- alignButtons(t,i,s){
- if(!t||0==t.length)return;
- let e=0;
- const n=t.length;
- for(let r=0;
- r<n;
- ++r)r>0&&(e+=i),e+=t[r].width;
- let h=.5*(this.width-e);
- for(let r=0;
- r<n;
- ++r)t[r].x=h,h+=t[r].width+i,t[r].y=s}
- updateDraggableContainer(){
- this.draggableContainer.max=this.draggableMask.y,this.draggableContainer.min=this.draggableMask.y+this.draggableMask.height-this.draggableBg.height,this.draggableContainer.yOffset=0,this.draggableContainer.y=this.draggableContainer.max}
- async onHireClick(){
- const t=vx.getInstance();
- if(t.list.length>=_L.maxTeamSlots)return void(_L.maxTeamSlots<10?vV.getInstance().showMessage(AG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+AG.getText("GAME_51","슬롯을 추가로 확장해주세요.")):vV.getInstance().showMessage(AG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+AG.getValueReplace("GAME_52","##",10,"최대 10명까지 배치할 수 있습니다.")));
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- let i=await hD.getInstance().hero.addToTeam(this.bookVo.kindNum,this.bookVo.trans);
- if(0==i.success)return this.setRequestPending(!1),void mG.getInstance().showError(i);
- _L.setUserInfo(i.body),UV.getInstance().updateAll(),K9.getInstance().setData();
- let s=i.body.addedHeroId,e=t.getVOWithId(s);
- e&&zii.getInstance().hireHero(e),dtt.getInstance().setData(),this.hide(),this.setRequestPending(!1)}
- setRequestPending(t){
- this.requestPending=t}
- setHeroEvolve(t){
- lS.getInstance().removeEventListener("HeroEvolve",this.onHeroEvolveBind),t&&(this.onHeroEvolveBind=this.onHeroEvolve.bind(this),lS.getInstance().addEventListener("HeroEvolve",this.onHeroEvolveBind))}
- onHeroEvolve(t){
- if(t&&t.detail){
- let i=-1;
- if("id"in t.detail&&(i=t.detail.id),i==this.vo.id){
- this.updateHeroInfo(this.vo,this.mode);
- const t=("list"===this.mode||"roster"===this.mode)&&this.vo.evolStage>0&&this.vo.maxTrans>0;
- this.tapTrans.visible=t,!t&&this.tapTrans.selected?this.onTapDetailClick():this.tapTrans.selected&&this.updateTransInfo(),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout(),this.updateDraggableContainer()}
- }
- }
- getTransHonorCoinCost(t){
- return vx.getTransHonorCoinCost(t)*this.transMode}
- getTransTicket(){
- return c6.getInstance().getHeroTransTicket(5)}
- getTransTicketCostStr(){
- return`${
- this.getTransTicket()}
- /${
- (this.vo.trans+1)*this.transMode}
- `}
- isTransTicketActivated(){
- return!(this.getTransTicket()<(this.vo.trans+1)*this.transMode)}
- }
- ;
- Kt(stt,"HeroDetailPopup"),zt(stt,"_instance"),zt(stt,"POPUP_MIN_HEIGHT",950),zt(stt,"POPUP_GUILD_MIN_HEIGHT",1080),zt(stt,"MASS_EVOLVE_COUNT",10),zt(stt,"MASS_TRANSCEND_COUNT",10),zt(stt,"ENHANCE_DEBOUNCE_DELAY",3e3),zt(stt,"MATERIAL_SLOT_COUNT",5),zt(stt,"TRANS_BONUS",[{
- stat:0,medal:0,maxLv:1200}
- ,{
- stat:40,medal:10,maxLv:1300}
- ,{
- stat:80,medal:20,maxLv:1400}
- ,{
- stat:120,medal:30,maxLv:1500}
- ]),zt(stt,"TRANS_TAB_MIN_WAVE",300);
- let ett=stt;
- var ntt=(t=>(t.list="list",t.roster="roster",t.book="book",t.shop="shop",t.guild="guild",t))(ntt||{
- }
- );
- const htt=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("늑대전사 ",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblKnightBuff",new YD("",4495871,aD.WHITE_OUTLINE_FONT_OPTION_16)),zt(this,"lblPlusLv",new YD("",4513092,aD.WHITE_OUTLINE_FONT_OPTION_16)),zt(this,"lblHp",new GB("UI_HEART","100",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblAtk",new GB("UI_MAGIC_WAND","20",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblDef",new GB("UI_PHY_DEFENSE","20",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblBlock",new GB("ICON_UNIT","0",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"btnUpgrade",new kU("UI_GOLD","10000","+1")),zt(this,"btn10",new kU("UI_GOLD","100","+10")),zt(this,"btn100",new kU("UI_GOLD","1000","+100")),zt(this,"btn1000",new kU("UI_GOLD","10000","+1000")),zt(this,"starIcon",new We(ZA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[0])),zt(this,"icon",new vK),zt(this,"heroContainer",new Be),zt(this,"multiLevelContainer",new Be),zt(this,"isMultiLevel",!1),zt(this,"rapidClickCount",0),zt(this,"lastRapidClickTime",0),zt(this,"cost1",-1),zt(this,"cost10",-1),zt(this,"cost100",-1),zt(this,"cost1000",-1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.addChild(this.heroContainer),this.addChild(this.multiLevelContainer),this.icon.x=-1,this.icon.y=.5*(this.bg.height-this.icon.height),this.heroContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=10,this.heroContainer.addChild(this.lblName),this.starIcon.x=this.lblName.x+this.lblName.width+5,this.starIcon.y=this.lblName.y+.5*(this.lblName.height-this.starIcon.height),this.heroContainer.addChild(this.starIcon),this.lblKnightBuff.visible=!1,this.heroContainer.addChild(this.lblKnightBuff),this.lblPlusLv.visible=!1,this.heroContainer.addChild(this.lblPlusLv),this.lblHp.x=this.lblName.x,this.lblHp.y=this.lblName.y+this.lblName.height+10,this.heroContainer.addChild(this.lblHp),this.lblAtk.x=this.lblHp.x+100,this.lblAtk.y=this.lblHp.y,this.heroContainer.addChild(this.lblAtk),this.lblDef.x=this.lblAtk.x+100,this.lblDef.y=this.lblHp.y,this.heroContainer.addChild(this.lblDef),this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblDef.x+95,this.lblBlock.y=this.lblHp.y,this.heroContainer.addChild(this.lblBlock),this.btnUpgrade.labelOrder=kU.TEXT_FIRST,this.btnUpgrade.textLabel.textSize=15,this.btnUpgrade.textAlign="left",this.btnUpgrade.iconScale=.7,this.btnUpgrade.color=kU.BROWN,this.btnUpgrade.height=60,this.btnUpgrade.width=110,this.btnUpgrade.x=this.bg.width-this.btnUpgrade.width-10,this.btnUpgrade.y=.5*(this.bg.height-this.btnUpgrade.height)-2,this.heroContainer.addChild(this.btnUpgrade),this.btnUpgrade.on("pointertap",t=>this.onUpgrade(t,1),this),this.btn10.labelOrder=kU.TEXT_FIRST,this.btn10.textLabel.textSize=15,this.btn10.textAlign="left",this.btn10.iconScale=.7,this.btn10.color=kU.BROWN,this.btn10.height=60,this.btn10.width=115,this.btn10.x=this.btnUpgrade.x-this.btn10.width-5,this.btn10.y=.5*(this.bg.height-this.btn10.height)-2,this.btn10.on("pointertap",()=>{
- const i=this.getNextIncrement(this.data.level,10);
- this.onUpgrade(null,i),t.autoCloseCounter=0}
- ,this),this.multiLevelContainer.addChild(this.btn10),this.btn100.labelOrder=kU.TEXT_FIRST,this.btn100.textLabel.textSize=15,this.btn100.textAlign="left",this.btn100.iconScale=.7,this.btn100.color=kU.BROWN,this.btn100.height=60,this.btn100.width=115,this.btn100.x=this.btn10.x-this.btn100.width-5,this.btn100.y=.5*(this.bg.height-this.btn100.height)-2,this.btn100.on("pointertap",()=>{
- const i=this.getNextIncrement(this.data.level,100);
- this.onUpgrade(null,i),t.autoCloseCounter=0}
- ,this),this.multiLevelContainer.addChild(this.btn100),this.btn1000.labelOrder=kU.TEXT_FIRST,this.btn1000.textLabel.textSize=15,this.btn1000.textAlign="left",this.btn1000.iconScale=.7,this.btn1000.color=kU.BROWN,this.btn1000.height=60,this.btn1000.width=115,this.btn1000.x=this.btn100.x-this.btn1000.width-5,this.btn1000.y=.5*(this.bg.height-this.btn1000.height)-2,this.btn1000.on("pointertap",()=>{
- const i=this.getNextIncrement(this.data.level,1e3);
- this.onUpgrade(null,i),t.autoCloseCounter=0}
- ,this),this.multiLevelContainer.visible=!1}
- get vo(){
- return this.data}
- onMultiLevel(){
- dtt.getInstance().isMultiLevel=!dtt.getInstance().isMultiLevel,dtt.getInstance().setMultiLevel(dtt.getInstance().isMultiLevel)}
- getNextIncrement(t,i){
- const s=t%i;
- return 0===s?i:i-s}
- onUpgrade(i,s=1){
- if(!this.data||this.data.id<=0||this.data.kindNum<=0)return;
- if(1===s){
- const t=Date.now();
- t-this.lastRapidClickTime<500?this.rapidClickCount++:this.rapidClickCount=1,this.lastRapidClickTime=t,this.rapidClickCount>=3&&!this.multiLevelContainer.visible&&(this.rapidClickCount=0,this.onMultiLevel())}
- const e=this.data.level,n=this.data,h=MV.getInstance().getMaxLevel(n.grade,n.trans);
- if(e>=h)return void vV.getInstance().showMessage(AG.getText("COMMON_369","최대 레벨입니다."));
- const r=Math.min(e+s,h),o=MV.getInstance().getTotalGold(e,r),a=KN.getInstance().getGameplayMultiplier(xN.UnitUpgradeGold),c=Math.floor(o/a);
- if(_L.gold<c)return void vV.getInstance().showMessage(AG.getText("COMMON_359","골드가 부족합니다."));
- _L.gold-=c,UV.getInstance().updateGold();
- const l=this.data;
- l.level=r,dN.some(t=>e<t&&r>=t)&&KN.getInstance().recalculate(),this.setData(l),zii.getInstance().udpateHero(l);
- const u=this.data.id;
- t.heroTargetLevels.set(u,this.data.level),t.markDirtyAndSchedule(),NV.get().play(this,8,.5*(this.bg.height-104)),HV.getInstance().onConditionChanged()}
- static registerTargetLevel(i,s){
- t.heroTargetLevels.set(i,s)}
- static markDirtyAndSchedule(){
- t.isDirty=!0,-1===t.numReviveSnapshot&&(t.numReviveSnapshot=_L.numRevive),null!==t.updateTimer&&clearTimeout(t.updateTimer),t.updateTimer=setTimeout(()=>{
- t.sendToServer(),t.updateTimer=null,t.isDirty=!1,dtt.getInstance().isMultiLevel=!1,dtt.getInstance().setMultiLevel(!1)}
- ,t.DEBOUNCE_DELAY)}
- static async sendToServer(){
- if(0===t.heroTargetLevels.size)return void(t.numReviveSnapshot=-1);
- if(-1!==t.numReviveSnapshot&&t.numReviveSnapshot!==_L.numRevive)return t.heroTargetLevels.clear(),void(t.numReviveSnapshot=-1);
- t.numReviveSnapshot=-1;
- const i=new Map(t.heroTargetLevels);
- t.heroTargetLevels.clear();
- const s=[],e=[];
- i.forEach((t,i)=>{
- s.push(i),e.push(t)}
- );
- const n=s.join("|"),h=e.join("|");
- let r=await hD.getInstance().hero.levelUp(n,h,_L.gold);
- if(!1===r.success){
- const t=await hD.getInstance().hero.getHeroInfo();
- return t.success&&(_L.setUserInfo(t.body),UV.getInstance().updateAll(),dtt.getInstance().setData()),void mG.getInstance().showError(r)}
- _L.setUserInfo(r.body),UV.getInstance().updateGold(),dtt.getInstance().isMultiLevel=!1,dtt.getInstance().setMultiLevel(!1)}
- static cleanup(){
- null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.isDirty&&(t.sendToServer(),t.isDirty=!1)}
- static async cleanupAsync(){
- null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.isDirty&&(t.isDirty=!1,await t.sendToServer())}
- static cancel(){
- null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.heroTargetLevels.clear(),t.isDirty=!1,t.numReviveSnapshot=-1}
- recalculateCosts(t){
- if(!this.data||this.data.id<0||this.data.level<=0)return void(this.cost1=this.cost10=this.cost100=this.cost1000=-1);
- const i=this.data,s=MV.getInstance(),e=s.getMaxLevel(i.grade,i.trans)-i.level;
- if(e<=0)return void(this.cost1=this.cost10=this.cost100=this.cost1000=-1);
- this.cost1=Math.floor(s.getTotalGold(i.level,i.level+1)/t);
- const n=Math.min(this.getNextIncrement(i.level,10),e);
- this.cost10=n>0?Math.floor(s.getTotalGold(i.level,i.level+n)/t):-1;
- const h=Math.min(this.getNextIncrement(i.level,100),e);
- this.cost100=h>0?Math.floor(s.getTotalGold(i.level,i.level+h)/t):-1;
- const r=Math.min(this.getNextIncrement(i.level,1e3),e);
- this.cost1000=r>0?Math.floor(s.getTotalGold(i.level,i.level+r)/t):-1}
- refreshActivation(t){
- const i=this.cost1>=0&&t>=this.cost1;
- if(this.btnUpgrade.activated!==i&&(this.btnUpgrade.activated=i),!this.multiLevelContainer.visible)return;
- const s=this.cost10>=0&&t>=this.cost10;
- this.btn10.activated!==s&&(this.btn10.activated=s);
- const e=this.cost100>=0&&t>=this.cost100;
- this.btn100.activated!==e&&(this.btn100.activated=e);
- const n=this.cost1000>=0&&t>=this.cost1000;
- this.btn1000.activated!==n&&(this.btn1000.activated=n)}
- static checkAutoClose(i){
- const s=Date.now();
- s-t.lastCounterUpdateTime>=900&&(t.lastCounterUpdateTime=s,t.autoCloseCounter++,t.autoCloseCounter>=t.AUTO_CLOSE_SECONDS&&(t.autoCloseCounter=0,i.isMultiLevel=!1,i.setMultiLevel(!1)))}
- showMultiLevel(){
- null==this.data||this.data.id<0||(this.multiLevelContainer.visible=!0,t.autoCloseCounter=0,t.lastCounterUpdateTime=Date.now(),this.refreshActivation(_L.gold))}
- hideMultiLevel(){
- this.multiLevelContainer.visible=!1,t.autoCloseCounter=0,t.lastCounterUpdateTime=0}
- setData(t){
- this.data=t;
- let i=t;
- const s=i.getBookVo();
- if(!s)return void(this.visible=!1);
- this.visible=!0;
- const e=AG.getText(s.getNameKey(),i.name),n=MV.getInstance().getMaxLevel(i.grade,i.trans),h=i.level>=n?" (max)":"";
- null!=this.index?this.lblName.text=this.index+1+". "+e+h:this.lblName.text=e+h,this.lblHp.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedMaxHp)}
- `,this.lblAtk.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedAtkDmg)}
- `,this.lblDef.text=`${
- $D.displayLargeNumberAsAlphabet(i.buffedPhyDef)}
- `,this.lblBlock.text=`${
- i.numBlock}
- `,this.starIcon.x=this.lblName.x+this.lblName.width+5,this.starIcon.texture=ZA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[i.grade-1];
- let r=this.starIcon.x+50;
- const o=_L.getKnightLevel(i.tribe);
- o>0?(this.lblKnightBuff.text=`(+${
- o}
- )`,this.lblKnightBuff.textColor=4495871,this.lblKnightBuff.x=r,this.lblKnightBuff.y=this.lblName.y,this.lblKnightBuff.visible=!0,r+=this.lblKnightBuff.width+2):this.lblKnightBuff.visible=!1;
- const a=KN.getInstance().getGameplayTotal(xN.PlusLv);
- a>0?(this.lblPlusLv.text=`(+${
- a}
- )`,this.lblPlusLv.textColor=4513092,this.lblPlusLv.x=r,this.lblPlusLv.y=this.lblName.y,this.lblPlusLv.visible=!0):this.lblPlusLv.visible=!1,i.dmgType==nx.MAGICAL?this.lblAtk.texture=ZA.getTexture("UI_Ekkorr","ICON_ATTACK2"):this.lblAtk.texture=ZA.getTexture("UI_Ekkorr","UI_SWORD"),i.phyDef>i.magDef?this.lblDef.texture=ZA.getTexture("UI_Ekkorr","UI_PHY_DEFENSE"):this.lblDef.texture=ZA.getTexture("UI_Ekkorr","UI_MAGIC_DEFENSE"),this.icon.setData(i);
- const c=KN.getInstance().getGameplayMultiplier(xN.UnitUpgradeGold);
- this.recalculateCosts(c);
- const l=i.level>=n;
- if(this.btnUpgrade.text=l?"max":"+1",this.btnUpgrade.iconText=l?"":$D.displayLargeNumberAsAlphabet(this.cost1),this.btnUpgrade.iconLabel.texture=ZA.getTexture("UI_Ekkorr",l?"UI_GRAY_GOLD":"UI_GOLD"),t.level>0){
- const i=n-t.level,s=Math.min(this.getNextIncrement(t.level,10),i);
- this.btn10.text=s>0?`+${
- s}
- `:"max",this.btn10.iconText=s>0?$D.displayLargeNumberAsAlphabet(this.cost10):"",this.btn10.iconLabel.texture=ZA.getTexture("UI_Ekkorr",s>0?"UI_GOLD":"UI_GRAY_GOLD");
- const e=Math.min(this.getNextIncrement(t.level,100),i);
- this.btn100.text=e>0?`+${
- e}
- `:"max",this.btn100.iconText=e>0?$D.displayLargeNumberAsAlphabet(this.cost100):"",this.btn100.iconLabel.texture=ZA.getTexture("UI_Ekkorr",e>0?"UI_GOLD":"UI_GRAY_GOLD");
- const h=Math.min(this.getNextIncrement(t.level,1e3),i);
- this.btn1000.text=h>0?`+${
- h}
- `:"max",this.btn1000.iconText=h>0?$D.displayLargeNumberAsAlphabet(this.cost1000):"",this.btn1000.iconLabel.texture=ZA.getTexture("UI_Ekkorr",h>0?"UI_GOLD":"UI_GRAY_GOLD"),this.btn10.visible=!0,this.btn100.visible=!0,this.btn1000.visible=h>0}
- this.refreshActivation(_L.gold)}
- clearCache(){
- }
- async onClick(i,s){
- !this.data||this.data.id<=0||this.data.kindNum<=0||this.multiLevelContainer.visible||i<this.btnUpgrade.x&&(await t.cleanupAsync(),ett.getInstance().show(this.data))}
- }
- ;
- Kt(htt,"HeroItemRenderer"),zt(htt,"updateTimer",null),zt(htt,"DEBOUNCE_DELAY",3e3),zt(htt,"isDirty",!1),zt(htt,"heroTargetLevels",new Map),zt(htt,"numReviveSnapshot",-1),zt(htt,"autoCloseCounter",0),zt(htt,"AUTO_CLOSE_SECONDS",5),zt(htt,"lastCounterUpdateTime",0);
- let rtt=htt;
- const ott=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage"),zt(this,"bgInput"),zt(this,"inputEl"),zt(this,"lblHint"),zt(this,"btnCancel"),zt(this,"btnConfirm"),zt(this,"slotId",-1),zt(this,"requestPending",!1),zt(this,"onSuccess",null),this.title=AG.getText("GAME_1097","프리셋 이름 변경");
- const t=aD.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=aD.COLOR_WHITE,t.lineHeight=30,t.fontWeight="normal",this.lblMessage=new YD(AG.getText("GAME_1098","프리셋 이름을 작성해주세요."),aD.DEFAULT_COLOR,t),this.addChild(this.lblMessage),aD.setLabelWrapWidth(this.lblMessage,this.width-40),this.bgInput=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Slot2"),leftWidth:4,topHeight:4,rightWidth:4,bottomHeight:4}
- ),this.bgInput.visible=!1,this.bgInput.x=40,this.bgInput.width=this.width-2*this.bgInput.x,this.bgInput.height=70,this.addChild(this.bgInput),this.inputEl=this.createHTMLInput(),this.lblHint=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblHint),this.btnCancel=new q3(AG.getText("COMMON_2","취소")),this.btnCancel.outlineText=!0,this.btnCancel.width=240,this.btnCancel.height=65,this.btnCancel.onClick=this.onCancelClick.bind(this),this.addChild(this.btnCancel),this.btnConfirm=new q3(AG.getText("COMMON_1","확인")),this.btnConfirm.color=q3.COLOR_ORANGE,this.btnConfirm.outlineText=!0,this.btnConfirm.width=this.btnCancel.width,this.btnConfirm.height=this.btnCancel.height,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm),this.updateLayout(),this.on("removed",this.onRemoved)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- createHTMLInput(){
- const i=document.createElement("input");
- return i.type="text",i.maxLength=t.MAX_INPUT_LEN,i.style.position="absolute",i.style.fontFamily="Arial",i.style.fontSize="18px",i.style.textAlign="center",i.style.display="none",i.style.color="white",i.style.background="transparent",i.style.border="2px solid #684f3e",i.style.borderRadius="6px",i.style.boxSizing="border-box",i.addEventListener("input",()=>this.updateHint()),document.body.appendChild(i),i}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=80,this.bgInput.x=40,this.bgInput.y=this.lblMessage.y+this.lblMessage.height+20,this.lblHint.x=this.bgInput.x,this.lblHint.y=this.bgInput.y+this.bgInput.height+5,this.btnCancel.x=this.bgInput.x,this.btnCancel.y=this.lblHint.y+this.lblHint.height+20,this.btnConfirm.x=this.bgInput.x+this.bgInput.width-this.btnConfirm.width,this.btnConfirm.y=this.btnCancel.y,this.height=this.btnCancel.y+this.btnCancel.height+50}
- showForSlot(t,i,s=null){
- this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.slotId=t,this.inputEl.value=i??"",this.onSuccess=s,this.updateHint(),super.show()}
- onShowMotionComplete(){
- super.onShowMotionComplete(),this.showInputOverlay()}
- hide(){
- this.hideInputOverlay(),super.hide()}
- onRemoved(){
- this.hideInputOverlay()}
- showInputOverlay(){
- const t=this.toGlobal(this.bgInput.position),i=KA.stage.scale;
- this.inputEl.style.display="block",this.inputEl.style.left=t.x+"px",this.inputEl.style.top=t.y+"px",this.inputEl.style.width=`${
- Math.floor(this.bgInput.width*i.x)}
- px`,this.inputEl.style.height=`${
- Math.floor(this.bgInput.height*i.y)}
- px`,this.inputEl.placeholder=AG.getText("GAME_1097","프리셋 이름 입력"),setTimeout(()=>this.inputEl.focus(),50)}
- hideInputOverlay(){
- this.inputEl.style.display="none",this.inputEl.blur()}
- updateHint(){
- const i=this.inputEl.value.length;
- this.lblHint.text=`${
- i}
-  / ${
- t.MAX_INPUT_LEN}
- `}
- onCancelClick(){
- this.hide()}
- async onConfirmClick(){
- if(this.requestPending)return;
- if(this.slotId<0)return;
- const t=(this.inputEl.value??"").trim();
- this.requestPending=!0;
- const i=await hD.getInstance().hero.renameHeroPreset(this.slotId,t);
- if(this.requestPending=!1,!1!==i.success){
- if(_L.setUserInfo(i.body),UV.getInstance().updateAll(),vV.getInstance().showMessage(AG.getText("GAME_1099","프리셋 이름이 변경되었습니다.")),this.onSuccess)try{
- this.onSuccess()}
- catch(_gt){
- }
- this.hide()}
- else mG.getInstance().showError(i)}
- }
- ;
- Kt(ott,"HeroPresetRenamePopup"),zt(ott,"_instance"),zt(ott,"MAX_INPUT_LEN",8);
- let att=ott;
- const ctt=class t extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"slotButtons",[]),zt(this,"btnSave"),zt(this,"lblSaveHint"),zt(this,"saveMode",!1),zt(this,"requestPending",!1),zt(this,"onApplied",null),zt(this,"longPressTimers",[null,null,null,null,null]),zt(this,"longPressFired",[!1,!1,!1,!1,!1]),this.bg=new Gf,this.bg.roundRect(0,0,t.WIDTH,t.HEIGHT,6),this.bg.fill({
- color:2825487,alpha:.6}
- ),this.addChild(this.bg);
- for(let n=0;
- n<5;
- n++){
- const i=new B6(this.getSlotName(n),t.SLOT_BUTTON_WIDTH,16);
- i.autoResize=!1,i.lbl.textSize=16,i.width=t.SLOT_BUTTON_WIDTH,i.height=t.SLOT_BUTTON_HEIGHT,i.x=8+n*(t.SLOT_BUTTON_WIDTH+t.SLOT_GAP),i.y=4+.5*(t.ROW_HEIGHT-i.height),i.on("pointertap",()=>{
- this.longPressFired[n]?this.longPressFired[n]=!1:this.onSlotClick(n)}
- ,this),i.on("pointerdown",()=>this.startLongPress(n),this),i.on("pointerup",()=>this.cancelLongPress(n),this),i.on("pointerupoutside",()=>this.cancelLongPress(n),this),i.on("pointercancel",()=>this.cancelLongPress(n),this),i.selected=!1,this.slotButtons.push(i),this.addChild(i)}
- const i=t.ROW_HEIGHT+8,s=t.ACTION_BUTTON_WIDTH,e=t.SLOT_BUTTON_HEIGHT;
- this.btnSave=new sG("저장",s,8),this.btnSave.width=s,this.btnSave.height=e,this.btnSave.x=640-s-t.ACTION_BUTTON_RIGHT_MARGIN,this.btnSave.y=i+.5*(t.ROW_HEIGHT-e),this.btnSave.on("pointertap",this.onSaveClick,this),this.addChild(this.btnSave),this.lblSaveHint=new YD("프리셋 길게 누르면 이름 변경",16767354,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSaveHint.setWrapWidth(400),this.lblSaveHint.x=12,this.lblSaveHint.visible=!0,this.addChild(this.lblSaveHint),this.recenterHint()}
- recenterHint(){
- const i=t.ROW_HEIGHT+8;
- this.lblSaveHint.y=i+.5*(t.ROW_HEIGHT-this.lblSaveHint.height)}
- get barHeight(){
- return t.HEIGHT}
- getSlotName(t){
- const i=t+1;
- return AG.getValueReplace("GAME_744","##",String(i),`${
- i}
-  번`)}
- getSlotDisplayLabel(t){
- const i=vx.getInstance().heroPresets[t];
- return i&&i.label&&i.label.length>0?i.label:this.getSlotName(t)}
- startLongPress(i){
- this.cancelLongPress(i),this.saveMode||this.requestPending||(this.longPressFired[i]=!1,this.longPressTimers[i]=setTimeout(()=>{
- this.longPressFired[i]=!0,this.longPressTimers[i]=null,this.openRenamePopup(i)}
- ,t.LONG_PRESS_MS))}
- cancelLongPress(t){
- null!==this.longPressTimers[t]&&(clearTimeout(this.longPressTimers[t]),this.longPressTimers[t]=null)}
- openRenamePopup(t){
- const i=vx.getInstance().heroPresets[t];
- att.getInstance().showForSlot(t,(null==i?void 0:i.label)??"",()=>this.update())}
- update(){
- const t=vx.getInstance(),i=t.heroPresets,s=this.saveMode?-1:t.getActiveHeroPresetSlot();
- for(let e=0;
- e<this.slotButtons.length;
- e++){
- const t=this.slotButtons[e],n=i[e],h=n&&n.team.length>0,r=this.getSlotName(e);
- let o=this.getSlotDisplayLabel(e);
- this.saveMode&&(o=h?AG.getValueReplace("GAME_746","##",r,`${
- r}
-  덮어쓰기`):AG.getValueReplace("GAME_745","##",r,`${
- r}
-  저장`)),t.text=o,t.selected=s===e,t.alpha=this.saveMode||h?1:.65}
- this.saveMode?this.btnSave.text=AG.getText("COMMON_2","취소"):this.btnSave.text=AG.getText("GAME_527","저장"),this.lblSaveHint.visible=!0,this.lblSaveHint.text=this.saveMode?AG.getText("GAME_747","저장할 슬롯을 선택하세요"):AG.getText("GAME_1100","프리셋 길게 누르면 이름 변경"),this.recenterHint()}
- setSaveMode(t){
- this.saveMode=t,this.update()}
- updateLanguage(){
- this.update()}
- async onSlotClick(t){
- if(this.requestPending)return;
- const i=vx.getInstance(),s=i.heroPresets[t];
- if(this.saveMode){
- if(0===i.list.length)return vV.getInstance().showMessage(AG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다.")),void this.setSaveMode(!1);
- const e=this.getSlotName(t),n=s&&s.team.length>0?AG.getValueReplace("GAME_749","##",e,`${
- e}
-  프리셋을 덮어쓰시겠습니까?`):AG.getValueReplace("GAME_748","##",e,`${
- e}
-  프리셋에 현재 상태를 저장하시겠습니까?`);
- return void dK.getInstance().show(n,async()=>{
- await this.doSave(t,(null==s?void 0:s.label)??""),this.setSaveMode(!1)}
- )}
- s&&0!==s.team.length?dK.getInstance().show(AG.getText("GAME_750","선택한 프리셋으로 교체하시겠습니까?"),async()=>{
- await this.doApply(t)}
- ):vV.getInstance().showMessage(AG.getText("GAME_753","비어있는 슬롯입니다. 저장 버튼으로 저장하세요."))}
- onSaveClick(){
- this.requestPending||(this.saveMode?this.setSaveMode(!1):0!==vx.getInstance().list.length?this.setSaveMode(!0):vV.getInstance().showMessage(AG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다.")))}
- async doSave(t,i){
- if(this.requestPending)return;
- this.requestPending=!0;
- const s=vx.getInstance().list.map(t=>({
- kindNum:t.kindNum,trans:t.trans,enhance:t.enhance}
- )),e=await hD.getInstance().hero.saveHeroPreset(t,i,s,!0);
- this.requestPending=!1,!1!==e.success?(_L.setUserInfo(e.body),UV.getInstance().updateAll(),this.update(),vV.getInstance().showMessage(AG.getText("GAME_756","프리셋이 저장되었습니다."))):mG.getInstance().showError(e)}
- async doApply(t){
- if(this.requestPending)return;
- this.requestPending=!0;
- const i=vx.getInstance(),s=i.list.map(t=>t.id),e=i.list.map(t=>t.level);
- rtt.cancel();
- const n=await hD.getInstance().hero.applyHeroPreset(t,!0,e);
- if(this.requestPending=!1,!1===n.success)return void mG.getInstance().showError(n);
- _L.setUserInfo(n.body),i.setLastAppliedHeroPresetSlot(t),UV.getInstance().updateAll(),this.update();
- const h=zii.getInstance(),r=yx.getVO();
- for(const o of s)r.id=o,h.fireHero(r);
- r.remove();
- for(const o of i.list)await h.hireHero(o);
- vV.getInstance().showMessage(AG.getText("GAME_757","프리셋이 적용되었습니다.")),this.onApplied&&this.onApplied()}
- }
- ;
- Kt(ctt,"HeroPresetBar"),zt(ctt,"WIDTH",630),zt(ctt,"ROW_HEIGHT",42),zt(ctt,"HEIGHT",2*ctt.ROW_HEIGHT+8),zt(ctt,"SLOT_BUTTON_WIDTH",118),zt(ctt,"SLOT_BUTTON_HEIGHT",38),zt(ctt,"SLOT_GAP",4),zt(ctt,"ACTION_BUTTON_WIDTH",120),zt(ctt,"ACTION_BUTTON_RIGHT_MARGIN",10),zt(ctt,"LONG_PRESS_MS",500);
- let ltt=ctt;
- const utt=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"presetBar"),zt(this,"lblMessage",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lastGold",-1),zt(this,"lastUgMult",-1),zt(this,"isMultiLevel",!1),this.presetBar=new ltt,this.presetBar.x=5,this.presetBar.y=W9.getInstance().height,this.presetBar.visible=!1,this.presetBar.onApplied=()=>this.setData(),this.list=new R3(rtt,630,KA.listHeight),this.list.x=5,this.list.y=W9.getInstance().height,this.lblMessage.y=189;
- const t=this.lblMessage.getStyle();
- t.fontSize=18,this.lblMessage.setStyle(t),this.addChild(this.list),this.addChild(this.lblMessage),this.addChild(this.presetBar),this.addChild(W9.getInstance()),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- togglePresetBar(){
- this.setPresetBarVisible(!this.presetBar.visible)}
- setPresetBarVisible(t){
- this.presetBar.visible=t;
- const i=W9.getInstance().height;
- if(t){
- this.presetBar.update();
- const t=this.presetBar.barHeight+4;
- this.list.y=i+t,this.list.setListHeight(KA.listHeight-t)}
- else this.list.y=i,this.list.setListHeight(KA.listHeight)}
- get isPresetBarVisible(){
- return this.presetBar.visible}
- setMultiLevel(t){
- let i=this.list.getItemList();
- if(t)for(let s=0;
- s<i.length;
- s++)i[s].showMultiLevel();
- else for(let s=0;
- s<i.length;
- s++)i[s].hideMultiLevel()}
- onAdded(){
- GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this),HV.getInstance().unregisterListItemsGetter("Hero"),rtt.cleanup()}
- getListItems(){
- return this.list.getItemList()}
- onFrame(){
- var t;
- if(null==(null==(t=this.parent)?void 0:t.parent))return GM.getInstance().remove(this.onFrame,this),void rtt.cleanup();
- this.isMultiLevel&&rtt.checkAutoClose(this);
- const i=_L.gold,s=KN.getInstance().getGameplayMultiplier(xN.UnitUpgradeGold),e=s!==this.lastUgMult;
- if(i===this.lastGold&&!e)return;
- this.lastGold=i,this.lastUgMult=s;
- const n=this.list.getItemList();
- for(let h=0;
- h<n.length;
- h++)e&&n[h].recalculateCosts(s),n[h].refreshActivation(i)}
- setData(){
- GM.getInstance().add(this.onFrame,this),this.lastGold=-1,this.lastUgMult=-1,HV.getInstance().registerListItemsGetter(()=>this.getListItems(),"Hero"),W9.getInstance().update(),W9.getInstance().updateLanguage();
- let t=[];
- for(let i=0;
- i<vx.getInstance().list.length;
- i++){
- const s=vx.getInstance().list[i];
- !s||s.kindNum<=0||t.push(s)}
- t.sort((t,i)=>t.enhance!==i.enhance?i.enhance-t.enhance:t.level!==i.level?i.level-t.level:t.grade!==i.grade?i.grade-t.grade:t.tribe-i.tribe),0===t.length?(this.lblMessage.text=AG.getText("GAME_1200","배치된 영웅이 없습니다."),this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.visible=!0,this.list.visible=!1):(this.lblMessage.visible=!1,this.list.visible=!0,this.list.dataProvider=t),this.setMultiLevel(!1),this.isMultiLevel=!1,this.presetBar.visible&&this.presetBar.update()}
- get className(){
- return"HeroSubView"}
- updateLanguage(){
- this.setData()}
- }
- ;
- Kt(utt,"HeroSubView"),zt(utt,"instance");
- let dtt=utt;
- const ftt=class t extends D4{
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- constructor(){
- super(),this.updateLanguage()}
- updateCount(t){
- this.setTitle(`${
- AG.getText("GAME_568","펫 목록")}
-  ( ${
- AG.getValueReplace("GAME_598","##",t,t+"마리")}
-  )`)}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_568","펫 목록"))}
- }
- ;
- Kt(ftt,"PetListSubMenu"),zt(ftt,"instance");
- let ptt=ftt;
- const gtt=class extends XI{
- constructor(){
- super(),zt(this,"icons",[]),zt(this,"labels",[]),zt(this,"redDots",[]),zt(this,"posList",[]),zt(this,"mainContainer",new Be),zt(this,"kindNumArray",[]);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_17;
- for(let i=0;
- i<7;
- i++){
- const s=new gK;
- s.x=90*i+.5*(90-s.width),s.y=7,this.mainContainer.addChild(s),this.icons.push(s),this.posList.push(s.x);
- const e=new YD("0",16763904,t);
- this.mainContainer.addChild(e),this.labels.push(e);
- const n=new YL;
- n.x=s.x+s.width-8,n.y=s.y-8,n.visible=!1,this.mainContainer.addChild(n),this.redDots.push(n)}
- this.posList.push(630),this.addChild(this.mainContainer)}
- get width(){
- return 630}
- get height(){
- return 110}
- setData(t){
- const i=t;
- if(!i)return;
- this.kindNumArray=i;
- const s=lx.getInstance();
- for(let e=0;
- e<7;
- e++){
- const t=this.icons[e],n=this.labels[e],h=this.redDots[e];
- if(e<i.length){
- const r=i[e],o=s.getBookVO(r),a=s.getPetVO(r);
- o&&a&&a.grade>0?t.setPet(o.kindNum,a.grade):o&&a&&a.piece>0?t.setInactive(o.kindNum):t.setEmpty(),t.visible=!0,n.visible=!0,n.text=`${
- a?a.piece:0}
- `,n.x=t.x+.5*(t.width-n.width),n.y=t.y+t.height+8,s.canEvolve(r)?(h.visible=!0,h.show()):(h.hide(),h.visible=!1)}
- else t.visible=!1,n.visible=!1,h.hide(),h.visible=!1}
- }
- onClick(t,i){
- for(let s=0;
- s<this.icons.length;
- s++)if(t>this.posList[s]&&t<this.posList[s+1]){
- s<this.kindNumArray.length&&this.icons[s].visible&&xtt.getInstance().showPet(this.kindNumArray[s]);
- break}
- }
- }
- ;
- Kt(gtt,"PetListItemRenderer");
- let mtt=gtt;
- const wtt=class t extends O6{
- constructor(){
- super(),zt(this,"list");
- const t=Cst.getInstance().contentHeight-60-20;
- this.list=new R3(mtt,630,t),this.list.x=4,this.list.y=0,this.addChild(this.list)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- setData(){
- const t=[...lx.getInstance().list].sort((t,i)=>i.grade!==t.grade?i.grade-t.grade:i.piece-t.piece),i=t.map(t=>t.kindNum);
- this.list.dataProvider=ZI.chunkArray(i,7),ptt.getInstance().updateCount(t.filter(t=>t.grade>0).length)}
- get className(){
- return"PetListSubView"}
- updateLanguage(){
- this.setData()}
- }
- ;
- Kt(wtt,"PetListSubView"),zt(wtt,"instance");
- let vtt=wtt;
- const btt=class t extends XI{
- constructor(){
- super(),zt(this,"icons",[]),zt(this,"selectionFrames",[]),zt(this,"labels",[]),zt(this,"posList",[]),zt(this,"mainContainer",new Be),zt(this,"kindNumArray",[]);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_17;
- for(let i=0;
- i<6;
- i++){
- const s=new gK;
- s.x=90*i+.5*(90-s.width),s.y=7,this.mainContainer.addChild(s),this.icons.push(s),this.posList.push(s.x);
- const e=new We(ZA.getTexture("UI_Ekkorr","Base_Tooltip"));
- e.width=s.width+8,e.height=s.height+8,e.x=s.x-4,e.y=s.y-4,e.tint=6741503,e.alpha=.6,e.visible=!1,this.mainContainer.addChildAt(e,0),this.selectionFrames.push(e);
- const n=new YD("0",16763904,t);
- this.mainContainer.addChild(n),this.labels.push(n)}
- this.posList.push(540),this.addChild(this.mainContainer)}
- get width(){
- return 540}
- get height(){
- return 90}
- setData(i){
- const s=i;
- if(!s)return;
- this.kindNumArray=s;
- const e=lx.getInstance();
- for(let n=0;
- n<6;
- n++){
- const i=this.icons[n],h=this.labels[n],r=this.selectionFrames[n];
- if(n<s.length){
- const o=s[n],a=e.getBookVO(o),c=e.getPetVO(o);
- a&&c&&c.grade>0?i.setPet(a.kindNum,c.grade):a&&c&&c.piece>0?i.setInactive(a.kindNum):i.setEmpty(),i.visible=!0,h.visible=!1,r.visible=o===t.selectedKindNum&&!!c&&c.grade>0}
- else i.visible=!1,h.visible=!1,r.visible=!1}
- }
- onClick(i,s){
- for(let e=0;
- e<this.icons.length;
- e++)if(i>this.posList[e]&&i<this.posList[e+1]){
- if(e<this.kindNumArray.length&&this.icons[e].visible){
- const i=this.kindNumArray[e],s=lx.getInstance().getPetVO(i);
- s&&s.grade>0&&t.onPick&&t.onPick(i)}
- break}
- }
- }
- ;
- Kt(btt,"PetSelectItemRenderer"),zt(btt,"onPick",null),zt(btt,"selectedKindNum",0);
- let ytt=btt;
- const _tt=class t extends aG{
- constructor(){
- super(),zt(this,"mode","represent"),zt(this,"selectedKindNum",0),zt(this,"previewIcon",new gK),zt(this,"lblName",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblSkill1",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblSkill2",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"petList"),zt(this,"currentChunkedData",[]),zt(this,"btnConfirm",new kU("","","",.8,160,60)),zt(this,"btnCancel",new kU("","","",.8,160,60)),zt(this,"requestPending",!1),this.width=580,this.previewIcon.x=25,this.previewIcon.y=70,this.contentContainer.addChild(this.previewIcon),this.lblName.x=120,this.lblName.y=70,this.contentContainer.addChild(this.lblName),this.lblSkill1.x=120,this.lblSkill1.y=94,this.lblSkill1.wordWrap=!0,this.lblSkill1.wordWrapWidth=this.width-160,this.lblSkill1.lineHeight=18,this.contentContainer.addChild(this.lblSkill1),this.lblSkill2.x=120,this.lblSkill2.y=118,this.lblSkill2.wordWrap=!0,this.lblSkill2.wordWrapWidth=this.width-160,this.lblSkill2.lineHeight=18,this.contentContainer.addChild(this.lblSkill2),this.petList=new R3(ytt,540,420),this.petList.x=.5*(this.width-540)-2,this.petList.y=178,this.contentContainer.addChild(this.petList),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.allowMultiline=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirm.bind(this),this.contentContainer.addChild(this.btnConfirm),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.allowMultiline=!0,this.btnCancel.color=kU.BROWN,this.btnCancel.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnCancel),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showForRepresent(){
- this.mode="represent",this.title=AG.getText("GAME_573","대표 펫"),this.selectedKindNum=lx.getInstance().representPet,this.refresh(),super.show()}
- showForRevive(){
- this.mode="revive",this.title=AG.getText("GAME_574","환생 펫"),this.selectedKindNum=lx.getInstance().revivePet,this.refresh(),super.show()}
- refresh(){
- const t=[...lx.getInstance().list].sort((t,i)=>i.grade!==t.grade?i.grade-t.grade:i.piece-t.piece).map(t=>t.kindNum);
- ytt.selectedKindNum=this.selectedKindNum,ytt.onPick=t=>this.onPickPet(t),this.currentChunkedData=ZI.chunkArray(t,6),this.petList.dataProvider=this.currentChunkedData,this.updatePreview(),this.updateButtons(),this.updateLayout()}
- updatePreview(){
- const t=lx.getInstance(),i=t.getBookVO(this.selectedKindNum),s=t.getPetVO(this.selectedKindNum);
- if(i&&s&&s.grade>0){
- this.previewIcon.setPet(i.kindNum,s.grade),this.lblName.text=AG.getText(`PET_NAME_${
- i.kindNum}
- `,i.name);
- const e=t.getSkillBookVO(i.skill1),n=t.getSkill1Value(i.kindNum),h=e?AG.getText(`PET_${
- i.skill1}
- `,e.desc):`스킬 #${
- i.skill1}
- `,r=e&&!e.isPercent?"":"%";
- this.lblSkill1.text=`- ${
- AG.getText("GAME_706","스킬 1")}
-  : ${
- h}
-  : ${
- n}
- ${
- r}
- `,this.lblSkill1.visible=!0;
- const o=t.getSkillBookVO(i.skill2),a=t.getSkill2Value(i.kindNum),c=o?AG.getText(`PET_${
- i.skill2}
- `,o.desc):`스킬 #${
- i.skill2}
- `,l=o&&!o.isPercent?"":"%";
- this.lblSkill2.text=`- ${
- AG.getText("GAME_707","스킬 2")}
-  : ${
- c}
-  : ${
- a}
- ${
- l}
- `,this.lblSkill2.visible=!0;
- const u=2;
- this.lblSkill2.y=this.lblSkill1.y+this.lblSkill1.height+u}
- else this.previewIcon.setEmpty(),this.lblName.text=AG.getText("COMMON_466","미설정"),this.lblSkill1.visible=!1,this.lblSkill2.visible=!1}
- updateButtons(){
- this.btnConfirm.text=AG.getText("COMMON_1","선택"),this.btnCancel.text=AG.getText("COMMON_2","취소")}
- updateLayout(){
- const t=.5*this.width,i=this.petList.y+this.petList.height+20,s=this.btnConfirm.width+20+this.btnCancel.width;
- this.btnConfirm.x=t-.5*s,this.btnConfirm.y=i,this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnCancel.y=i,this.height=i+this.btnConfirm.height+40}
- onPickPet(t){
- t!==this.selectedKindNum&&(this.selectedKindNum=t,ytt.selectedKindNum=t,this.updatePreview(),this.petList.dataProvider=this.currentChunkedData)}
- async onConfirm(){
- if(this.requestPending)return;
- if(this.selectedKindNum<=0)return void this.hide();
- this.requestPending=!0;
- const t="represent"===this.mode?await hD.getInstance().pet.setRepresentPet(this.selectedKindNum,!0):await hD.getInstance().pet.setRevivePet(this.selectedKindNum,!0);
- this.requestPending=!1,!1!==t.success?(_L.setUserInfo(t.body),ktt.getInstance().setData(),dtt.getInstance().setData(),this.hide()):mG.getInstance().showError(t)}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(_tt,"PetSelectPopup"),zt(_tt,"_instance");
- let Mtt=_tt;
- const Ett=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_572","펫 포인트");
- const t=[`1. ${
- AG.getText("GAME_713","펫 포인트만큼, 병사의 골드레벨 최대값이 증가합니다.")}
- `,`2. ${
- AG.getText("GAME_714","펫을 획득하거나, 진화시킬 때마다 펫 포인트가 증가합니다.")}
- `,`3. ${
- AG.getText("GAME_715","일반적으로 등급당 펫 포인트는 2점씩 증가합니다")}
- `,`4. ${
- AG.getText("GAME_716","등급이 높을수록, 좋은 펫일수록 더 많이 증가합니다.")}
- `];
- this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.4*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(Ett,"PetPointGuidePopup"),zt(Ett,"_instance");
- let Att=Ett;
- const Stt=class t extends D4{
- constructor(){
- super(),zt(this,"lblPetPoint",new YD(`${
- AG.getText("GAME_572","펫 포인트")}
-  : 0`,aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnGuide",new mB("UI_Ekkorr","UI_Alarm")),this.lblPetPoint.x=640-this.lblPetPoint.width-10,this.lblPetPoint.y=.5*(this.bg.height-this.lblTitle.height),this.addChild(this.lblPetPoint),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- Att.getInstance().showGuide()}
- ),this.positionGuideButton(),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- positionGuideButton(){
- this.btnGuide.x=this.lblPetPoint.x-this.btnGuide.width-5,this.btnGuide.y=this.lblPetPoint.y+.5*(this.lblPetPoint.height-this.btnGuide.height)+2}
- updatePetPoint(){
- const t=lx.getInstance().getPetPoint();
- this.lblPetPoint.text=`${
- AG.getText("GAME_572","펫 포인트")}
-  : ${
- t}
- `,this.lblPetPoint.x=640-this.lblPetPoint.width-10,this.positionGuideButton()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_566","펫 메인")),this.updatePetPoint()}
- }
- ;
- Kt(Stt,"PetMainSubMenu"),zt(Stt,"instance");
- let Ttt=Stt;
- const Ctt=class t extends O6{
- constructor(){
- super(),zt(this,"representBox"),zt(this,"representIcon"),zt(this,"lblRepresentTitle"),zt(this,"lblRepresentName"),zt(this,"representDesc"),zt(this,"reviveBox"),zt(this,"reviveIcon"),zt(this,"lblReviveTitle"),zt(this,"lblReviveName"),zt(this,"reviveDesc"),zt(this,"pageNav");
- let t=8;
- this.representBox=this.createPetSection(),this.representBox.x=10,this.representBox.y=t,this.representBox.eventMode="static",this.representBox.cursor="pointer",this.representBox.on("pointertap",()=>{
- Mtt.getInstance().showForRepresent()}
- ),this.addChild(this.representBox),this.representIcon=this.representBox._icon,this.lblRepresentTitle=this.representBox._lblTitle,this.lblRepresentName=this.representBox._lblName,this.representDesc=this.representBox._desc,t+=132,this.reviveBox=this.createPetSection(),this.reviveBox.x=10,this.reviveBox.y=t,this.reviveBox.eventMode="static",this.reviveBox.cursor="pointer",this.reviveBox.on("pointertap",()=>{
- Mtt.getInstance().showForRevive()}
- ),this.addChild(this.reviveBox),this.reviveIcon=this.reviveBox._icon,this.lblReviveTitle=this.reviveBox._lblTitle,this.lblReviveName=this.reviveBox._lblName,this.reviveDesc=this.reviveBox._desc,t+=150,this.pageNav=new MB(620,17,aD.DEFAULT_COLOR),this.pageNav.x=10,this.pageNav.y=t,this.addChild(this.pageNav),this.refreshTexts()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- refreshTexts(){
- this.lblRepresentTitle.text=AG.getText("GAME_573","대표 펫"),this.representDesc.text=`- ${
- AG.getText("GAME_575","대표 펫의 스킬은 2배로 적용됩니다.")}
- \n- ${
- AG.getText("GAME_576","펫 포인트도 2배 적용")}
- `,this.lblReviveTitle.text=AG.getText("GAME_574","환생 펫"),this.reviveDesc.text=`- ${
- AG.getText("GAME_577","환생 펫은 환생시 스킬이 2배로 적용됩니다.")}
- `,this.pageNav.setPages([{
- title:AG.getText("GAME_578","기본설명"),content:`# ${
- AG.getText("GAME_579","소유한 모든 펫의 스킬은 합산되어 적용되므로, 펫은 많을수록 좋습니다.")}
- \n# ${
- AG.getText("GAME_575","대표 펫의 스킬은 2배로 적용됩니다.")}
-  ( ${
- AG.getText("GAME_580","펫 포인트도 2배")}
-  )\n# ${
- AG.getText("GAME_581","환생할 경우, 대표 펫 대신 환생 펫의 스킬이 2배로 적용됩니다.")}
-  ( ${
- AG.getText("GAME_582","현재팀, 환생팀 관계없이 모두 환생 펫으로 적용됩니다.")}
-  )`}
- ,{
- title:AG.getText("GAME_583","펫 성장"),content:`# ${
- AG.getText("GAME_584","펫은 1성부터 5성까지 펫 조각을 통해 성장할 수 있습니다.")}
- \n# ${
- AG.getText("GAME_585","1성에서 자신만의 스킬을 하나 가집니다.")}
- \n# ${
- AG.getText("GAME_586","3성이 되면, 추가로 스킬 하나를 더 가집니다.")}
- \n# ${
- AG.getText("GAME_587","5성이 되면, 자신과 쌍을 이루는 영웅에게 특수능력을 부여해줍니다.")}
- `}
- ,{
- title:`${
- AG.getText("GAME_573","대표 펫")}
-  / ${
- AG.getText("GAME_574","환생 펫")}
- `,content:`# ${
- AG.getText("GAME_575","대표 펫의 스킬은 2배로 적용됩니다.")}
-  ( ${
- AG.getText("GAME_576","펫 포인트도 2배 적용")}
-  )\n# ${
- AG.getText("GAME_588","대표 펫은 [ 펫 상세보기 ]에서 설정할 수 있습니다.")}
- \n# ${
- AG.getText("GAME_577","환생 펫은 환생시 스킬이 2배로 적용됩니다.")}
- \n# ${
- AG.getText("GAME_589","환생 펫은 [ 펫 상세보기 ]에서 설정할 수 있습니다.")}
- `}
- ,{
- title:AG.getText("GAME_590","펫 골드버프"),content:`# ${
- AG.getText("GAME_591","펫 골드버프는 모든 골드버프의 총 합에 곱으로 계산됩니다.")}
- \n# ${
- AG.getText("GAME_592","획득골드")}
-  = ${
- AG.getText("GAME_593","기본골드")}
-  * ( R + T + U ) * P\n# P: ${
- AG.getText("GAME_594","펫버프")}
- \n# R: ${
- AG.getText("GAME_595","환생버프")}
- , T: ${
- AG.getText("GAME_596","유물버프")}
- , U: ${
- AG.getText("GAME_597","유닛버프")}
- `}
- ])}
- createPetSection(){
- const t=new Be,i=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17);
- i.x=22,i.y=8,t.addChild(i);
- const s=new gK;
- s.x=22,s.y=36,t.addChild(s);
- const e=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17);
- e.x=112,e.y=36,t.addChild(e);
- const n=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17);
- return n.wordWrap=!0,n.wordWrapWidth=500,n.x=112,n.y=62,t.addChild(n),t._icon=s,t._lblTitle=i,t._lblName=e,t._desc=n,t}
- setData(){
- this.refreshTexts();
- const t=lx.getInstance();
- if(t.representPet>0){
- const i=t.getBookVO(t.representPet),s=t.getPetVO(t.representPet);
- i&&s&&s.grade>0?(this.representIcon.setPet(i.kindNum,s.grade),this.lblRepresentName.text=AG.getText(`PET_NAME_${
- i.kindNum}
- `,i.name)):(this.representIcon.setEmpty(),this.lblRepresentName.text=AG.getText("COMMON_466","미설정"))}
- else this.representIcon.setEmpty(),this.lblRepresentName.text=AG.getText("COMMON_466","미설정");
- if(t.revivePet>0){
- const i=t.getBookVO(t.revivePet),s=t.getPetVO(t.revivePet);
- i&&s&&s.grade>0?(this.reviveIcon.setPet(i.kindNum,s.grade),this.lblReviveName.text=AG.getText(`PET_NAME_${
- i.kindNum}
- `,i.name)):(this.reviveIcon.setEmpty(),this.lblReviveName.text=AG.getText("COMMON_466","미설정"))}
- else this.reviveIcon.setEmpty(),this.lblReviveName.text=AG.getText("COMMON_466","미설정");
- Ttt.getInstance().updatePetPoint()}
- get className(){
- return"PetMainSubView"}
- updateLanguage(){
- this.setData()}
- }
- ;
- Kt(Ctt,"PetMainSubView"),zt(Ctt,"instance");
- let ktt=Ctt;
- const Ott=[10,20,50,100,150],Itt=class t extends aG{
- constructor(){
- super(),zt(this,"petIcon"),zt(this,"lblName"),zt(this,"lblPiece"),zt(this,"lblPetPoint"),zt(this,"lblNextEvolve"),zt(this,"lblCoupleTitle"),zt(this,"coupleHeroIcon"),zt(this,"lblCoupleName"),zt(this,"skillBg"),zt(this,"lblSkillTitle"),zt(this,"lblSkill1"),zt(this,"lblSkill2"),zt(this,"lblSkill3"),zt(this,"lblSkillNote"),zt(this,"btnTabSkill"),zt(this,"btnTabAwaken"),zt(this,"lblAwakenLock"),zt(this,"awakenMarker"),zt(this,"currentTab","skill"),zt(this,"btnEvolve"),zt(this,"btnRepresent"),zt(this,"btnRevive"),zt(this,"currentKindNum",0),zt(this,"requestPending",!1),this.width=580,this.title=AG.getText("GAME_565","펫");
- this.petIcon=new gK,this.petIcon.x=25,this.petIcon.y=70,this.contentContainer.addChild(this.petIcon),this.lblName=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=115,this.lblName.y=75,this.contentContainer.addChild(this.lblName),this.lblPiece=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblPiece.x=115,this.lblPiece.y=102,this.contentContainer.addChild(this.lblPiece),this.lblPetPoint=new YD("",8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblPetPoint.x=25,this.lblPetPoint.y=160,this.contentContainer.addChild(this.lblPetPoint),this.lblNextEvolve=new YD("",8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblNextEvolve.x=25,this.lblNextEvolve.y=185,this.contentContainer.addChild(this.lblNextEvolve),this.lblCoupleTitle=new YD("",8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblCoupleTitle.x=25,this.contentContainer.addChild(this.lblCoupleTitle),this.coupleHeroIcon=new vK,this.coupleHeroIcon.x=40,this.contentContainer.addChild(this.coupleHeroIcon),this.lblCoupleName=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.contentContainer.addChild(this.lblCoupleName),this.skillBg=new yB,this.skillBg.setIndex(2),this.skillBg.width=this.width-50,this.skillBg.x=25,this.contentContainer.addChild(this.skillBg),this.lblSkillTitle=new YD(`+ ${
- AG.getText("GAME_702","펫 스킬")}
- `,8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSkillTitle.x=35,this.contentContainer.addChild(this.lblSkillTitle);
- const t=aD.DEFAULT_FONT_OPTION_16,i=this.width-50-30;
- this.lblSkill1=new YD("",aD.DEFAULT_COLOR,t),this.lblSkill1.x=40,this.lblSkill1.wordWrap=!0,this.lblSkill1.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkill1),this.lblSkill2=new YD("",aD.DEFAULT_COLOR,t),this.lblSkill2.x=40,this.lblSkill2.wordWrap=!0,this.lblSkill2.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkill2),this.lblSkill3=new YD("",aD.DEFAULT_COLOR,t),this.lblSkill3.x=40,this.lblSkill3.wordWrap=!0,this.lblSkill3.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkill3),this.lblSkillNote=new YD("",6732595,t),this.lblSkillNote.x=40,this.lblSkillNote.wordWrap=!0,this.lblSkillNote.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkillNote),this.btnTabSkill=new B6(AG.getText("GAME_84","스킬"),110,30),this.btnTabSkill.height=40,this.btnTabSkill.visible=!1,this.btnTabSkill.on("pointertap",this.onTabSkill,this),this.contentContainer.addChild(this.btnTabSkill),this.btnTabAwaken=new B6(AG.getText("GAME_1181","각성"),110,30),this.btnTabAwaken.height=40,this.btnTabAwaken.visible=!1,this.btnTabAwaken.on("pointertap",this.onTabAwaken,this),this.contentContainer.addChild(this.btnTabAwaken),this.lblAwakenLock=new YD("",aD.DEFAULT_COLOR,t),this.lblAwakenLock.visible=!1,this.contentContainer.addChild(this.lblAwakenLock),this.awakenMarker=new vB("+",i,t.fontSize,aD.DEFAULT_COLOR,7,4),this.awakenMarker.visible=!1,this.contentContainer.addChild(this.awakenMarker),this.btnEvolve=new kU("","",AG.getText("GAME_67","진 화"),.8,150,60),this.btnEvolve.showIconLabel=!1,this.btnEvolve.showTextLabel=!0,this.btnEvolve.allowMultiline=!0,this.btnEvolve.color=kU.GREEN,this.btnEvolve.onClick=this.onEvolve.bind(this),this.contentContainer.addChild(this.btnEvolve),this.btnRepresent=new kU("","",AG.getText("GAME_709","대표로 설정"),.8,170,60),this.btnRepresent.showIconLabel=!1,this.btnRepresent.showTextLabel=!0,this.btnRepresent.allowMultiline=!0,this.btnRepresent.color=kU.BROWN,this.btnRepresent.onClick=this.onSetRepresent.bind(this),this.contentContainer.addChild(this.btnRepresent),this.btnRevive=new kU("","",AG.getText("GAME_710","환생펫으로 설정"),.8,180,60),this.btnRevive.showIconLabel=!1,this.btnRevive.showTextLabel=!0,this.btnRevive.allowMultiline=!0,this.btnRevive.color=kU.BROWN,this.btnRevive.onClick=this.onSetRevive.bind(this),this.contentContainer.addChild(this.btnRevive)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showPet(t){
- this.title=AG.getText("GAME_565","펫"),this.lblSkillTitle.text=`+ ${
- AG.getText("GAME_702","펫 스킬")}
- `,this.btnTabSkill.text=AG.getText("GAME_84","스킬"),this.btnTabAwaken.text=AG.getText("GAME_1181","각성"),this.btnRepresent.text=AG.getText("GAME_709","대표로 설정"),this.btnRevive.text=AG.getText("GAME_710","환생펫으로 설정"),this.currentKindNum=t,this.currentTab="skill",this.setData(),super.show()}
- setData(){
- const t=lx.getInstance(),i=t.getBookVO(this.currentKindNum),s=t.getPetVO(this.currentKindNum);
- if(!i)return;
- const e=s?s.grade:0,n=s?s.piece:0;
- e>0?this.petIcon.setPet(i.kindNum,e):this.petIcon.setInactive(i.kindNum),this.lblName.text=AG.getText(`PET_NAME_${
- i.kindNum}
- `,i.name),this.lblPiece.text=`${
- AG.getText("GAME_711","펫 조각")}
-  : ${
- n}
- `;
- let h=165;
- const r=AG.getText("GAME_572","펫 포인트");
- e>0&&i.incGoldLevel.length>=e?this.lblPetPoint.text=`+ ${
- r}
-  : ${
- i.incGoldLevel[e-1]}
- `:this.lblPetPoint.text=`+ ${
- r}
-  : 0`,this.lblPetPoint.y=h,h+=28,this.lblNextEvolve.text=e>=5?`+ ${
- AG.getText("GAME_703","최대 진화")}
- `:`+ ${
- AG.getText("GAME_712","다음 진화에 필요한 펫조각")}
-  : ${
- Ott[e]}
- `,this.lblNextEvolve.y=h,h+=28,i.couple>0?(this.lblCoupleTitle.text=`+ ${
- AG.getText("GAME_704","커플 영웅")}
- `,this.lblCoupleTitle.y=h,this.lblCoupleTitle.visible=!0,this.coupleHeroIcon.setDataWithKindNum(i.couple),this.coupleHeroIcon.scale.set(.8),this.coupleHeroIcon.x=this.lblCoupleTitle.x+15,this.coupleHeroIcon.y=h+28,this.coupleHeroIcon.visible=!0,this.lblCoupleName.visible=!1,h=this.coupleHeroIcon.y+.8*this.coupleHeroIcon.height+10):i.treasureKindNum>0?(this.lblCoupleTitle.text="+ 전설 유물",this.lblCoupleTitle.y=h,this.lblCoupleTitle.visible=!0,this.coupleHeroIcon.visible=!1,this.lblCoupleName.text=`유물 #${
- i.treasureKindNum}
- `,this.lblCoupleName.x=this.lblCoupleTitle.x+15,this.lblCoupleName.y=h+28,this.lblCoupleName.visible=!0,h+=55):(this.lblCoupleTitle.visible=!1,this.coupleHeroIcon.visible=!1,this.lblCoupleName.visible=!1);
- const o=i.masterSkill>=1e3;
- let a=1;
- if(o){
- const t=6,i=h+9;
- let s=this.petIcon.x;
- this.btnTabSkill.x=s,this.btnTabSkill.y=i,this.btnTabSkill.visible=!0,this.btnTabSkill.selected="skill"===this.currentTab,s+=this.btnTabSkill.width+t,this.btnTabAwaken.x=s,this.btnTabAwaken.y=i,this.btnTabAwaken.visible=!0,this.btnTabAwaken.selected="awaken"===this.currentTab,h=i+this.btnTabSkill.height+5,a=1.5}
- else this.btnTabSkill.visible=!1,this.btnTabAwaken.visible=!1,this.currentTab="skill";
- const c=aD.DEFAULT_COLOR,l=10066329,u=o?this.btnTabSkill.y+this.btnTabSkill.height+10:h+30;
- this.skillBg.y=u,this.lblSkillTitle.y=u+10;
- let d=this.lblSkillTitle.y+30;
- const f=AG.getText("GAME_706","스킬 1"),p=AG.getText("GAME_707","스킬 2"),g=AG.getText("GAME_708","스킬 3"),m=Kt(t=>t>=1e5?$D.displayLargeNumberAsAlphabet(t):`${
- t}
- `,"fmtSkillVal"),w=t.getSkillBookVO(i.skill1),v=e>=1?t.getSkill1Value(i.kindNum):0,b=w?AG.getText(`PET_${
- i.skill1}
- `,w.desc):`스킬 #${
- i.skill1}
- `,y=w&&!w.isPercent?"":"%";
- this.lblSkill1.text=`- ${
- f}
-  : ${
- b}
-  : ${
- m(v)}
- ${
- y}
- `,this.lblSkill1.textColor=e>=1?c:l,this.lblSkill1.y=d,d+=this.lblSkill1.height+5;
- const _=t.getSkillBookVO(i.skill2),M=e>=3?t.getSkill2Value(i.kindNum):0,E=_?AG.getText(`PET_${
- i.skill2}
- `,_.desc):`스킬 #${
- i.skill2}
- `,A=_&&!_.isPercent?"":"%";
- if(this.lblSkill2.text=`- ${
- p}
-  : ${
- E}
-  : ${
- m(M)}
- ${
- A}
- `,this.lblSkill2.textColor=e>=3?c:l,this.lblSkill2.y=d,d+=this.lblSkill2.height+5,i.couple>0){
- const t=vx.getInstance().getBookVO(i.couple),s=t?AG.getText(`UNIT_NAME_${
- i.couple}
- `,t.name):`영웅 #${
- i.couple}
- `,e=AG.getText("GAME_722","[ ## ]의 숨겨진 특수 능력을 각성시켜 줍니다.");
- this.lblSkill3.text=`- ${
- g}
-  : ${
- e.replace("##",s)}
- `}
- else if(i.treasureKindNum>0)this.lblSkill3.text=`- ${
- g}
-  : ${
- AG.getText("GAME_725","전설의 유물을 획득할 수 있습니다.")}
- `;
- else{
- const s=t.getSkillBookVO(i.masterSkill);
- if(s){
- const n=e>=5?t.getSkill3Value(i.kindNum):0,h=s?AG.getText(`PET_${
- i.masterSkill}
- `,s.desc):`스킬 #${
- i.masterSkill}
- `,r=s&&!s.isPercent?"":"%";
- this.lblSkill3.text=`- ${
- g}
-  : ${
- h}
-  : ${
- n}
- ${
- r}
- `}
- else this.lblSkill3.text=""}
- this.lblSkill3.textColor=e>=5?c:l,this.lblSkill3.y=d,this.lblSkill3.visible=""!==this.lblSkill3.text,this.lblSkill3.visible&&(d+=this.lblSkill3.height+5),d+=10,this.lblSkillNote.text=`# ${
- AG.getText("GAME_705","스킬1은 1성에서, 스킬2는 3성에서, 스킬3은 5성에서 획득합니다.")}
- `,this.lblSkillNote.y=d,d+=this.lblSkillNote.height;
- const S=d+15-u;
- if(this.skillBg.height=S*a,o&&"awaken"===this.currentTab)if(this.lblSkillTitle.visible=!1,this.lblSkill1.visible=!1,this.lblSkill2.visible=!1,this.lblSkill3.visible=!1,this.lblSkillNote.visible=!1,e<5)this.lblAwakenLock.text=AG.getText("GAME_1182","5성이 되면, 개방됩니다."),this.lblAwakenLock.wordWrap=!1,this.lblAwakenLock.x=this.skillBg.x+.5*(this.skillBg.width-this.lblAwakenLock.width),this.lblAwakenLock.y=this.skillBg.y+.5*(this.skillBg.height-this.lblAwakenLock.height),this.lblAwakenLock.visible=!0,this.awakenMarker.visible=!1;
- else{
- const s=t.getSkillBookVO(i.masterSkill);
- let e=(i.masterSkill>0?AG.getText(`PET_${
- i.masterSkill}
- `,(null==s?void 0:s.desc)??`스킬 #${
- i.masterSkill}
- `):"").replace(/\\n/g,"\n").replace(/•/g,"+").trim();
- const n=(e.match(/(^|\n)\+\s/g)??[]).length,h=[],r=[];
- for(let t=0;
- t<n;
- t++)h.push(aD.DEFAULT_COLOR),r.push(aD.DEFAULT_COLOR);
- const o=ON.getAwakeningBuffSummary(i.kindNum);
- if(null!=o){
- const t=AG.getText(o.nameKey,o.nameFallback),s=Number.isInteger(o.total)?String(o.total):o.total.toFixed(1),n=!1===o.isPercent?"":"%";
- let a=`+ ${
- t}
-  : ${
- s}
- ${
- n}
- `;
- if(null!=o.coupleOwnedValue&&i.couple>0){
- const t=vx.getInstance().getBookVO(i.couple),s=t?AG.getText(t.getNameKey(),t.name):"";
- s&&(a+=` ( ${
- s}
-  : ${
- o.coupleOwnedValue}
- ${
- n}
-  )`)}
- e+=`${
- e?"\n":""}
- ${
- a}
- `,h.push(aD.DEFAULT_COLOR),r.push(aD.DEFAULT_COLOR)}
- if(i.couple>0){
- const t=vx.getInstance().getBookVO(i.couple),s=t?AG.getText(t.getNameKey(),t.name):"";
- if(s){
- const t=AG.getValueReplace("GAME_1186","###",s,`${
- s}
- 의 초월 포인트가 50% 증가한다.`),n=vx.getInstance().calcHeroTransPoint(i.couple);
- e+=`${
- e?"\n":""}
- + ${
- t}
-  ( ${
- Number.isInteger(n)?String(n):n.toFixed(1)}
-  )`,h.push(6732595),r.push(6732595)}
- }
- this.awakenMarker.setItemColors(h,r),this.awakenMarker.text=e,this.awakenMarker.x=this.lblSkill1.x,this.awakenMarker.y=this.lblSkill1.y,this.awakenMarker.visible=!0,this.lblAwakenLock.visible=!1}
- else this.lblSkillTitle.visible=!0,this.lblSkill1.visible=!0,this.lblSkill2.visible=!0,this.lblSkill3.visible=""!==this.lblSkill3.text,this.lblSkillNote.visible=!0,this.lblAwakenLock.visible=!1,this.awakenMarker.visible=!1;
- const T=u+this.skillBg.height+20,C=this.btnEvolve.width+this.btnRepresent.width+this.btnRevive.width+20;
- let k=.5*(this.width-C);
- this.btnEvolve.x=k,this.btnEvolve.y=T,k+=this.btnEvolve.width+10,this.btnRepresent.x=k,this.btnRepresent.y=T,k+=this.btnRepresent.width+10,this.btnRevive.x=k,this.btnRevive.y=T;
- const O=0===e?AG.getText("COMMON_223","획 득"):AG.getText("GAME_67","진 화");
- e>=5?(this.btnEvolve.activated=!1,this.btnEvolve.text="MAX"):n>=Ott[e]?(this.btnEvolve.activated=!0,this.btnEvolve.text=O):(this.btnEvolve.activated=!1,this.btnEvolve.text=O),this.btnRepresent.activated=e>0,this.btnRevive.activated=e>0,this.height=T+this.btnEvolve.height+30}
- async onEvolve(){
- if(this.requestPending)return;
- this.requestPending=!0;
- const t=await hD.getInstance().pet.evolve(this.currentKindNum,!0);
- this.requestPending=!1,!1!==t.success?(_L.setUserInfo(t.body),this.setData(),vtt.getInstance().setData(),ktt.getInstance().setData(),dtt.getInstance().setData()):mG.getInstance().showError(t)}
- async onSetRepresent(){
- if(this.requestPending)return;
- this.requestPending=!0;
- const t=await hD.getInstance().pet.setRepresentPet(this.currentKindNum,!0);
- this.requestPending=!1,!1!==t.success?(_L.setUserInfo(t.body),this.setData(),ktt.getInstance().setData(),dtt.getInstance().setData()):mG.getInstance().showError(t)}
- onTabSkill(){
- "skill"!==this.currentTab&&(this.currentTab="skill",this.setData())}
- onTabAwaken(){
- "awaken"!==this.currentTab&&(this.currentTab="awaken",this.setData())}
- async onSetRevive(){
- if(this.requestPending)return;
- this.requestPending=!0;
- const t=await hD.getInstance().pet.setRevivePet(this.currentKindNum,!0);
- this.requestPending=!1,!1!==t.success?(_L.setUserInfo(t.body),this.setData(),ktt.getInstance().setData()):mG.getInstance().showError(t)}
- get className(){
- return"PetDetailPopup"}
- }
- ;
- Kt(Itt,"PetDetailPopup"),zt(Itt,"_instance");
- let xtt=Itt;
- const Ntt=class t extends AB{
- constructor(){
- super(),zt(this,"lblIntro"),zt(this,"markerText"),this.lblIntro=new YD("",16767334,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblIntro,this.width-60),this.contentContainer.addChild(this.lblIntro),this.markerText=new vB("@",this.width-80,16,aD.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.markerText),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_569","정령의 고원"),this.lblIntro.text=AG.getText("GAME_727","정령의 고원은 [ 현재 소유한 병사 ] 및 [ 시간의 상점에 있는 병사 ]를 이용해서 스테이지를 하나씩 클리어하며, [ 펫 조각 ]을 획득하는 컨텐츠입니다."),this.lblIntro.x=30,this.lblIntro.y=80;
- const t=[AG.getText("GAME_728","매일 15개의 입장권이 주어지고, 입장권은 전투에서 이길 경우에만 소진됩니다."),AG.getText("GAME_729","적은 인원으로 클리어할수록 더 많은 별을 획득합니다. 별 3개로 클리어하면, 다음부터는 [ 즉시완료 ]로 전투 없이 보상을 얻을 수 있습니다."),AG.getText("GAME_730","이전 스테이지를 클리어하고 일정 기사단 레벨에 도달해야 다음 스테이지에 도전할 수 있습니다."),AG.getText("GAME_731","병사의 레벨, 강화, 유물 효과, 영웅 고유스킬은 적용되지 않으며, 펫의 정령의 고원 전용 버프만 적용됩니다."),AG.getText("GAME_732","오크는 인간에게, 인간은 엘프에게, 엘프는 언데드에게, 언데드는 오크에게 강합니다. ( 오크 > 인간 > 엘프 > 언데드 > 오크 )"),AG.getText("GAME_733","적 수호병 아이콘에 노란 원이 있으면 물리면역, 파란 원이 있으면 마법면역입니다."),AG.getText("GAME_734","적 수호병 아이콘에 +가 있으면 정예, ++가 있으면 상급정예, +++가 있으면 최정예를 뜻합니다. 정예병사들은 일반병사보다 강력합니다.")];
- this.markerText.text=t.map(t=>`@ ${
- t}
- `).join("\n"),this.markerText.x=30,this.markerText.y=this.lblIntro.y+this.lblIntro.height+22,this.height=this.markerText.y+this.markerText.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(Ntt,"SpriteLandGuidePopup"),zt(Ntt,"_instance");
- let Ptt=Ntt;
- const Rtt=class t extends D4{
- constructor(){
- super(),zt(this,"lblTicket"),zt(this,"btnFavorite"),zt(this,"btnPrev"),zt(this,"btnNext"),zt(this,"btnGuide",new mB("UI_Ekkorr","UI_Alarm")),zt(this,"_currentChapter",1),zt(this,"onChapterChanged",null),zt(this,"staleFrameCnt",0),this.setTitle(AG.getText("GAME_569","정령의 고원")),this.lblTitle.y-=4,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- Ptt.getInstance().showGuide()}
- ),this.positionGuideButton(),this.lblTicket=new GB("UI_PET_TICKET","15",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_16,"UI_Ekkorr"),this.lblTicket.iconScale=.6,this.lblTicket.x=this.lblTitle.x,this.lblTicket.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblTicket),this.btnFavorite=new QL(AG.getText("GAME_1187","즐겨찾기")),this.btnFavorite.color=QL.BROWN,this.btnFavorite.width=135,this.btnFavorite.height=45,this.btnFavorite.x=640-this.btnFavorite.width-6,this.btnFavorite.y=.5*(this.bg.height-this.btnFavorite.height),this.btnFavorite.onClick=this.onFavorite.bind(this),this.addChild(this.btnFavorite);
- const t=42,i=.5*(this.bg.height-t)+1;
- this.btnPrev=new mB("UI_Ekkorr","UI_Back"),this.btnPrev.scale.set(t/this.btnPrev.width,t/this.btnPrev.height),this.btnPrev.y=i,this.btnPrev.onClick=this.onPrevChapter.bind(this),this.addChild(this.btnPrev),this.btnNext=new mB("UI_Ekkorr","UI_Back"),this.btnNext.scale.set(-42/this.btnNext.width,t/this.btnNext.height),this.btnNext.y=i,this.btnNext.onClick=this.onNextChapter.bind(this),this.addChild(this.btnNext),this.btnNext.x=this.btnFavorite.x-8,this.btnPrev.x=this.btnNext.x-t-1-t,this.updateLanguage(),this.on("added",this.onAddedToStage,this),this.on("removed",this.onRemovedFromStage,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onAddedToStage(){
- GM.getInstance().add(this.onFrame,this)}
- onRemovedFromStage(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- if(++this.staleFrameCnt<t.STALE_FRAME_SKIP)return;
- this.staleFrameCnt=0;
- const i=pL.getInstance();
- i.isStale()&&(i.invalidate(),hD.getInstance().spirit.getInfo().then(t=>{
- var s;
- (null==(s=null==t?void 0:t.body)?void 0:s.spirit)&&(i.setData(t.body.spirit),this.updateTicket(),ist.getInstance().setData())}
- ))}
- get currentChapter(){
- return this._currentChapter}
- set currentChapter(t){
- this._currentChapter=t}
- updateTicket(){
- const t=pL.getInstance();
- this.lblTicket.text=`${
- t.ticket}
- `}
- positionGuideButton(){
- this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+6,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
- onPrevChapter(){
- const t=pL.getInstance().getChapters(),i=t.indexOf(this._currentChapter);
- i>0&&(this._currentChapter=t[i-1],this.onChapterChanged&&this.onChapterChanged(this._currentChapter))}
- onNextChapter(){
- const t=pL.getInstance().getChapters(),i=t.indexOf(this._currentChapter);
- i<t.length-1&&(this._currentChapter=t[i+1],this.onChapterChanged&&this.onChapterChanged(this._currentChapter))}
- goChapter(t){
- const i=pL.getInstance();
- t<1?t=1:t>i.chapterMax&&(t=i.chapterMax),t!=this._currentChapter&&(this._currentChapter=t,this.onChapterChanged&&this.onChapterChanged(this._currentChapter))}
- onFavorite(){
- Jt(async()=>{
- const{
- PetPopup:t}
- =await Promise.resolve().then(()=>kst);
- return{
- PetPopup:t}
- }
- ,void 0).then(({
- PetPopup:t}
- )=>{
- t.getInstance().goFavoriteView()}
- )}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_569","정령의 고원")),this.btnFavorite.text=AG.getText("GAME_1187","즐겨찾기"),this.updateTicket(),this.positionGuideButton()}
- }
- ;
- Kt(Rtt,"SpriteLandSubMenu"),zt(Rtt,"instance"),zt(Rtt,"STALE_FRAME_SKIP",30);
- let Dtt=Rtt;
- const Ltt=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblReward",new GB("UI_GEM_ICON","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"petSprite",new We),zt(this,"lblPetCount",new YD("",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnConfirm",new kU("","","확인",.8,200,70)),zt(this,"onConfirmCallback",null),this.lblMessage.align="center",this.lblMessage.y=85,this.lblReward.iconScale=.9,this.petSprite.width=t.PET_SIZE,this.petSprite.height=t.PET_SIZE,this.contentContainer.addChild(this.lblMessage,this.lblReward,this.petSprite,this.lblPetCount,this.btnConfirm),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onConfirmClick(){
- this.hide()}
- hide(){
- if(super.hide(),this.onConfirmCallback){
- const t=this.onConfirmCallback;
- this.onConfirmCallback=null,t()}
- }
- showVictory(t,i=0,s=null){
- this.onConfirmCallback=s,this.title=this.buildTitle(t,i),this.lblMessage.text=AG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.setupReward(t),this.updateLayout(),super.show()}
- showSweep(t,i=null){
- this.onConfirmCallback=i,this.title=this.buildTitle(t,3),this.lblMessage.text=AG.getText("COMMON_379","즉시완료"),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.setupReward(t),this.updateLayout(),super.show()}
- buildTitle(t,i){
- const s=(t.kindNum-1)%40+1,e=t.chapter||1,n=`${
- AG.getText("GAME_569","정령의 고원")}
-  ${
- e}
- -${
- s}
- `;
- return i>0?`${
- n}
-  (★${
- i}
- )`:n}
- setupReward(i){
- if("PET"===i.rewardType&&i.petKindNum>0){
- this.petSprite.visible=!0,this.lblReward.visible=!1,this.petSprite.texture=ZA.getTexture("UI_PET",`UI_PET${
- i.petKindNum}
- `),this.petSprite.width=t.PET_SIZE,this.petSprite.height=t.PET_SIZE;
- const s=i.reward>0?i.reward:1;
- this.lblPetCount.text=`x${
- s}
- `,this.lblPetCount.textColor=aD.COLOR_DEEP_SKYBLUE,this.lblPetCount.visible=!0}
- else this.petSprite.visible=!1,this.lblPetCount.visible=!1,this.lblReward.visible=!0,"GEM"===i.rewardType?(this.lblReward.texture=ZA.getTexture("UI_Ekkorr","UI_GEM_ICON"),this.lblReward.textColor=aD.COLOR_DEEP_SKYBLUE):(this.lblReward.texture=ZA.getTexture("UI_Ekkorr","PVP_COIN_ON"),this.lblReward.textColor=aD.COLOR_PURPLE_PINK),this.lblReward.text=`${
- i.reward}
- `}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85;
- let t=this.lblMessage.y+this.lblMessage.height+20;
- this.petSprite.visible?(this.petSprite.x=.5*(this.width-this.petSprite.width),this.petSprite.y=t,this.lblPetCount.x=this.petSprite.x+this.petSprite.width-this.lblPetCount.width-4,this.lblPetCount.y=this.petSprite.y+this.petSprite.height-this.lblPetCount.height-2,t=this.petSprite.y+this.petSprite.height+20):this.lblReward.visible&&(this.lblReward.x=.5*(this.width-this.lblReward.width),this.lblReward.y=t,t=this.lblReward.y+this.lblReward.height+20),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+60}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt(Ltt,"SpiritResultPopup"),zt(Ltt,"_instance"),zt(Ltt,"PET_SIZE",78);
- let Gtt=Ltt;
- const Btt=new Sg({
- fontFamily:"Arial",fill:16777215,stroke:{
- color:"#000000",width:4,join:"round"}
- ,fontSize:24,fontWeight:"bold"}
- ),Utt=class t extends Be{
- constructor(){
- super(),zt(this,"_lblTimer"),zt(this,"_bg"),zt(this,"_showed",!1),zt(this,"_getRemainingTime",null),zt(this,"update",Kt(()=>{
- if(!this._getRemainingTime)return;
- const t=this._getRemainingTime(),i=Math.floor(t/60),s=t%60;
- this._lblTimer.text=`${
- String(i).padStart(2,"0")}
- :${
- String(s).padStart(2,"0")}
- `,this._lblTimer.style.fill=t<=10?16729156:16777215,this._lblTimer.x=(120-this._lblTimer.width)/2}
- ,"update")),this._bg=new Gf,this._bg.roundRect(0,0,120,34,8).fill({
- color:0,alpha:.6}
- ),this.addChild(this._bg),this._lblTimer=new Wg({
- text:"01:00",style:Btt}
- ),this._lblTimer.x=(120-this._lblTimer.width)/2,this._lblTimer.y=(34-this._lblTimer.height)/2,this.addChild(this._lblTimer),this.x=260,this.y=8}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- setTimeProvider(t){
- this._getRemainingTime=t}
- show(){
- this._showed||(this._showed=!0,this.visible=!0,this._lblTimer.style.fill=16777215,this._lblTimer.text="01:00",GM.getInstance().add(this.update,this))}
- hide(){
- this._showed&&(this._showed=!1,this.visible=!1,GM.getInstance().remove(this.update,this))}
- freeze(){
- GM.getInstance().remove(this.update,this)}
- }
- ;
- Kt(Utt,"DungeonTimer"),zt(Utt,"_instance");
- let Ftt=Utt;
- const Htt=class t extends O8{
- constructor(){
- super(),zt(this,"vsImage",new We(ZA.getTexture("UI_Ekkorr","UI_VS"))),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"allyBtns",[]),zt(this,"enemyBtns",[]),zt(this,"battleContainer",new Be),zt(this,"btnStart",new QL("시작")),zt(this,"lblCapacity",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblEntryText",new YD("",16768358,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"heroList"),zt(this,"selectedSlot",-1),zt(this,"teamKindNums",[]),zt(this,"teamTrans",[]),zt(this,"heroVOs",[]),zt(this,"floorVO",null),zt(this,"enemyOverlays",[]),zt(this,"maxAllies",12);
- const t=KA.viewMainY,i=Math.max(KA.safeHeight-t,600);
- this.bg.height=i,this.y=KA.safeHeight-i,this.lblTitle.text=AG.getText("GAME_80","도전의 탑"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle);
- const s=this.lblTitle.y+this.lblTitle.height+20;
- this.battleContainer.y=s,this.addChild(this.battleContainer);
- for(let o=0;
- o<12;
- o++){
- const t=Math.floor(o/4),i=o%4,s=new O4;
- s.scale=.5,s.x=0+70*(2-t),s.y=48*i,s.showAtkType=!0,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
- this.vsImage.scale=.6,this.vsImage.x=210,this.vsImage.y=72,this.battleContainer.addChild(this.vsImage);
- const e=210+this.vsImage.width+15;
- for(let o=0;
- o<20;
- o++){
- const t=Math.floor(o/4),i=o%4,s=new O4;
- s.scale=.5,s.x=e+70*t,s.y=48*i,s.activated=!1,s.hidePlusIcon(),this.battleContainer.addChild(s),this.enemyBtns.push(s)}
- for(let o=0;
- o<20;
- o++){
- const t=this.enemyBtns[o],i=new Be;
- i.eventMode="none",i.interactiveChildren=!1;
- const s=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
- color:0,width:7}
- }
- )}
- );
- s.anchor.set(0,1),s.x=3,s.y=82,i.addChild(s),i._lblShield=s;
- const e=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:32,fontWeight:"bold",fill:16746564,stroke:{
- color:0,width:9}
- }
- )}
- );
- e.anchor.set(1,0),e.x=102,e.y=-4,i.addChild(e),i._lblLevel=e,t.addChild(i),this.enemyOverlays.push(i)}
- this.recenterBattleContainer(),this.lblCapacity.y=this.lblTitle.y,this.addChild(this.lblCapacity),this.updateCapacityPosition();
- const n=s+192+5;
- this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
- const h=this.lblEntryText.y+this.lblEntryText.height+7,r=this.bg.height-h-90;
- P4.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new R3(P4,630,r),this.heroList.x=5,this.heroList.y=h,this.addChild(this.heroList),this.btnStart.color=QL.RED,this.btnStart.width=200,this.btnStart.height=45,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateCapacityPosition(){
- this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15}
- async setData(t){
- var i;
- this.floorVO=t;
- const s=w6.getInstance().ticket>0,e=`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- t.floor}
- F`;
- this.lblTitle.text=s?e:`${
- e}
-  (조회 모드)`,this.btnStart.alpha=s?1:.5;
- const n=this.buildConditionText(t);
- this.lblEntryText.text=`${
- AG.getText("COMMON_465","입장조건")}
-  : ${
- n||AG.getText("COMMON_367","없음")}
- `,this.maxAllies=Math.max(1,Math.min(12,(null==(i=t.battleVO)?void 0:i.star1)||12));
- const h=await $A.getTowerTeam(t.floor);
- h&&h.kindNums&&12===h.kindNums.length?(this.teamKindNums=[...h.kindNums],this.teamTrans=[...h.trans],this.pruneInvalidTeamEntries(),this.clampTeamToMax()):this.initTeam(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList(),this.btnStart.text=AG.getText("COMMON_378","도전")}
- buildConditionText(t){
- const i=t.battleVO;
- if(!i)return"";
- const s=[];
- if(i.gradeMax>0&&s.push(AG.getValueReplace("GAME_552","##",i.gradeMax,`${
- i.gradeMax}
- 성 이하`)),"0"!==String(i.tribes)){
- const t={
- 1:AG.getText("TRIBE_1","인간"),2:AG.getText("TRIBE_2","엘프"),3:AG.getText("TRIBE_3","언데드"),4:AG.getText("TRIBE_4","오크")}
- ,e=new Set(String(i.tribes).split("|").map(Number));
- for(const i of[1,2,3,4])e.has(i)||s.push(AG.getValueReplace("GAME_562","##",t[i],`${
- t[i]}
-  제외`))}
- return"Y"===i.femaleExclude&&s.push(AG.getText("GAME_554","여성 영웅 제외")),"Y"===i.maleExclude&&s.push(AG.getText("GAME_555","남성 영웅 제외")),"Y"===i.rangeExclude&&s.push(AG.getText("GAME_556","원거리 영웅 제외")),"Y"===i.meleeExclude&&s.push(AG.getText("GAME_557","근거리 영웅 제외")),"Y"===i.airExclude&&s.push(AG.getText("GAME_558","공중 영웅 제외")),s.join(" / ")}
- getPlacedCount(){
- let t=0;
- for(let i=0;
- i<12;
- i++)this.teamKindNums[i]>0&&t++;
- return t}
- pruneInvalidTeamEntries(){
- var t;
- const i=null==(t=this.floorVO)?void 0:t.battleVO,s=vx.getInstance(),e=i&&"0"!==String(i.tribes)?new Set(String(i.tribes).split("|").map(Number)):null,n=this.calcTotalInventory(),h=new Map;
- for(let r=0;
- r<12;
- r++){
- const t=this.teamKindNums[r];
- if(t<=0)continue;
- const o=s.getBookVO(t);
- if(!o){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if(i){
- if(i.gradeMax>0&&o.grade>i.gradeMax){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if(e&&!e.has(o.tribe)){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if("Y"===i.femaleExclude&&o.sex===rx.FEMALE){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if("Y"===i.maleExclude&&o.sex===rx.MALE){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if("Y"===i.rangeExclude&&o.unitType===sx.RANGE){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if("Y"===i.meleeExclude&&o.unitType===sx.MELEE){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if("Y"===i.airExclude&&o.isAir){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- }
- const a=`${
- t}
- _${
- this.teamTrans[r]}
- `,c=n.get(a)||0,l=h.get(a)||0;
- l>=c?(this.teamKindNums[r]=-1,this.teamTrans[r]=0):h.set(a,l+1)}
- }
- clampTeamToMax(){
- let t=0;
- for(let i=0;
- i<12;
- i++)this.teamKindNums[i]>0&&(t++,t>this.maxAllies&&(this.teamKindNums[i]=-1,this.teamTrans[i]=0))}
- initTeam(){
- var t;
- this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0);
- const i=vx.getInstance().list,s=vx.getInstance(),e=null==(t=this.floorVO)?void 0:t.battleVO,n=e&&"0"!==String(e.tribes)?new Set(String(e.tribes).split("|").map(Number)):null;
- let h=0;
- for(let r=0;
- r<i.length&&h<this.maxAllies;
- r++){
- const t=i[r];
- if(!(t.kindNum>=1e4)){
- if(e){
- const i=s.getBookVO(t.kindNum);
- if(i){
- if(e.gradeMax>0&&i.grade>e.gradeMax)continue;
- if(n&&!n.has(i.tribe))continue;
- if("Y"===e.femaleExclude&&i.sex===rx.FEMALE)continue;
- if("Y"===e.maleExclude&&i.sex===rx.MALE)continue;
- if("Y"===e.rangeExclude&&i.unitType===sx.RANGE)continue;
- if("Y"===e.meleeExclude&&i.unitType===sx.MELEE)continue;
- if("Y"===e.airExclude&&i.isAir)continue}
- }
- this.teamKindNums[h]=t.kindNum,this.teamTrans[h]=t.trans,h++}
- }
- }
- updateAllyButtons(){
- const t=Math.max(1,_L.maxWave/10),i=this.getPlacedCount(),s=i>=this.maxAllies;
- this.lblCapacity.text=`${
- AG.getText("GAME_551","입장가능 영웅")}
-  : ${
- i}
-  / ${
- this.maxAllies}
- `,this.lblCapacity.textColor=s?16729156:16777215,this.updateCapacityPosition();
- for(let e=0;
- e<12;
- e++){
- const i=this.allyBtns[e],n=yx.getVO();
- if(this.teamKindNums[e]>0){
- i.visible=!0,n.kindNum=this.teamKindNums[e],n.trans=this.teamTrans[e],n.level=t,i.setDataWith(e,n),i.hideLevel(),i.hideEnhance();
- const s=e===this.selectedSlot;
- i.setAlphaToFrame(s?1:.85),i.selected=s}
- else if(s)i.visible=!1,i.selected=!1;
- else{
- i.visible=!0,n.kindNum=-1,i.setDataWith(e,n),i.hideBackground();
- const t=e===this.selectedSlot;
- i.setAlphaToFrame(t?.9:.4),i.selected=!1}
- }
- }
- updateEnemyButtons(){
- var t;
- const i=Math.max(1,_L.maxWave/10)+10,s=null==(t=this.floorVO)?void 0:t.battleVO,e=s?b6.parseEnemies(s):new Array(20).fill(null),n=(null==s?void 0:s.enemyShields)?String(s.enemyShields).split("|").map(Number):[],h=(null==s?void 0:s.enemyLevels)?String(s.enemyLevels).split("|").map(Number):[];
- for(let r=0;
- r<20;
- r++){
- const t=this.enemyBtns[r],s=e[r],o=this.enemyOverlays[r],a=null==o?void 0:o._lblShield,c=null==o?void 0:o._lblLevel;
- if(s){
- const e=yx.getVO();
- e.kindNum=s.kindNum,e.trans=s.trans,e.level=i,t.setDataWith(r,e),t.hideLevel(),t.hideEnhance(),t.setAlphaToFrame(1),t.visible=!0;
- const o=n[r]||0;
- if(a&&(1===o?(a.text="O",a.style.fill=16776960):2===o?(a.text="O",a.style.fill=4500223):a.text=""),c){
- const t=h[r]??1;
- c.text=7===t?"+":14===t?"++":21===t?"+++":""}
- }
- else t.visible=!1,a&&(a.text=""),c&&(c.text="")}
- this.recenterBattleContainer()}
- recenterBattleContainer(){
- var t;
- const i=(null==(t=this.allyBtns[0])?void 0:t.width)??40,s=140+i,e=this.vsImage.x+this.vsImage.width;
- let n=0;
- for(let o=0;
- o<5;
- o++)for(let t=0;
- t<4;
- t++)if(this.enemyBtns[4*o+t].visible){
- n=o+1;
- break}
- let h=0;
- if(n>0){
- const t=n-1,s=this.enemyBtns[4*t];
- h=s.x+(s.width||i)}
- const r=Math.max(s,e,h);
- this.battleContainer.x=.5*(this.bg.width-r)}
- calcTotalInventory(){
- const t=new Map,i=vx.getInstance().list;
- for(const e of i){
- if(e.kindNum>=1e4)continue;
- const i=`${
- e.kindNum}
- _${
- e.trans}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const s=vx.getInstance().ownedUnitList;
- for(const e of s)if(!(e.kindNum>=1e4)){
- if(e.count>0){
- const i=`${
- e.kindNum}
- _0`;
- t.set(i,(t.get(i)||0)+e.count)}
- if(e.trans[0]>0){
- const i=`${
- e.kindNum}
- _1`;
- t.set(i,(t.get(i)||0)+e.trans[0])}
- if(e.trans[1]>0){
- const i=`${
- e.kindNum}
- _2`;
- t.set(i,(t.get(i)||0)+e.trans[1])}
- if(e.trans[2]>0){
- const i=`${
- e.kindNum}
- _3`;
- t.set(i,(t.get(i)||0)+e.trans[2])}
- }
- return t}
- updateHeroList(){
- var t;
- x4.removeAll(this.heroVOs);
- const i=new Map;
- for(let r=0;
- r<12;
- r++){
- if(this.teamKindNums[r]<=0)continue;
- const t=`${
- this.teamKindNums[r]}
- _${
- this.teamTrans[r]}
- `;
- i.set(t,(i.get(t)||0)+1)}
- const s=this.calcTotalInventory(),e=vx.getInstance(),n=null==(t=this.floorVO)?void 0:t.battleVO,h=n&&"0"!==String(n.tribes)?new Set(String(n.tribes).split("|").map(Number)):null;
- this.heroVOs.push(x4.set(x4.getVO(),-1,0,0,0));
- for(const[r,o]of s){
- const[t,s]=r.split("_"),a=Number(t),c=e.getBookVO(a);
- if(n&&c){
- if(n.gradeMax>0&&c.grade>n.gradeMax)continue;
- if(h&&!h.has(c.tribe))continue;
- if("Y"===n.femaleExclude&&c.sex===rx.FEMALE)continue;
- if("Y"===n.maleExclude&&c.sex===rx.MALE)continue;
- if("Y"===n.rangeExclude&&c.unitType===sx.RANGE)continue;
- if("Y"===n.meleeExclude&&c.unitType===sx.MELEE)continue;
- if("Y"===n.airExclude&&c.isAir)continue}
- const l=i.get(r)||0;
- this.heroVOs.push(x4.set(x4.getVO(),a,Number(s),o-l,o))}
- this.heroVOs.sort((t,i)=>{
- if(t.kindNum<=0)return-1;
- if(i.kindNum<=0)return 1;
- const s=e.getBookVO(t.kindNum),n=e.getBookVO(i.kindNum);
- if(!s||!n)return 0;
- const h=1e12*s.grade-1e9*s.evolStage+1e6*t.trans-s.tribe;
- return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
- ),this.heroList.dataProvider=ZI.chunkArray(this.heroVOs,7)}
- onClickAllyHero(t){
- const i=this.teamKindNums[t]<=0,s=this.getPlacedCount()>=this.maxAllies;
- i&&s||(this.selectedSlot===t?this.selectedSlot=-1:this.selectedSlot=t,this.updateAllyButtons())}
- onClickHeroFromList(t,i){
- if(t<=0){
- if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
- const t=this.selectedSlot;
- this.teamKindNums[t]=-1,this.teamTrans[t]=0;
- let i=-1;
- for(let s=1;
- s<=12;
- s++){
- const e=(t+s)%12;
- if(this.teamKindNums[e]>0){
- i=e;
- break}
- }
- this.selectedSlot=i}
- }
- else{
- const s=`${
- t}
- _${
- i}
- `;
- let e=0;
- for(let n=0;
- n<12;
- n++)this.teamKindNums[n]===t&&this.teamTrans[n]===i&&e++;
- if(e>=(this.calcTotalInventory().get(s)||0))return;
- if(this.selectedSlot>=0){
- if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=this.maxAllies)return;
- this.teamKindNums[this.selectedSlot]=t,this.teamTrans[this.selectedSlot]=i,this.selectedSlot=-1}
- else{
- if(this.getPlacedCount()>=this.maxAllies)return;
- for(let s=0;
- s<12;
- s++)if(this.teamKindNums[s]<=0){
- this.teamKindNums[s]=t,this.teamTrans[s]=i;
- break}
- }
- }
- this.updateAllyButtons(),this.updateHeroList()}
- saveTeamToLocal(){
- this.floorVO&&$A.saveTowerTeam(this.floorVO.floor,this.teamKindNums,this.teamTrans)}
- async onStartBattle(){
- if(!WG.getInstance().isRunning)return;
- if(!this.floorVO)return;
- if(this.getPlacedCount()<=0)return void vV.getInstance().showMessage(AG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다."));
- if(w6.getInstance().ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_275","티켓이 부족합니다."));
- const t=await hD.getInstance().tower.enter(this.floorVO.floor,!0);
- if(!1===t.success)return void mG.getInstance().showError(t);
- _L.setUser(t.body.user),w6.getInstance().setData(t.body.tower),this.saveTeamToLocal(),this.hide();
- const i=tit.getInstance();
- i.setTeam([...this.teamKindNums],[...this.teamTrans]),i.startBattle(this.floorVO.floor,this.floorVO.battleVO)}
- hide(){
- this.saveTeamToLocal(),super.hide()}
- show(){
- P4.onHeroClick=this.onClickHeroFromList.bind(this),P4.showAttackType=!0,this.show2()}
- }
- ;
- Kt(Htt,"TowerReadyPopup"),zt(Htt,"_instance");
- let Wtt=Htt;
- const jtt=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_80","도전의 탑");
- const t=[`1. ${
- AG.getText("GAME_533","도전의 탑은 자신이 보유한 영웅을 이용해서 한층씩 올라가는 컨텐츠 입니다.")}
- `,`2. ${
- AG.getText("GAME_534","도전의 탑은 3일 단위로 초기화 되고, 초기화 될때마다 각 층을 수호하는 병사들은 달라집니다.")}
- `,`3. ${
- AG.getText("GAME_535","병사의 레벨과 강화는 모두 무시되고, 유물 버프와 종족버프등은 적용되지 않습니다.")}
- `,`4. ${
- AG.getText("GAME_536","오크는 인간에게 강하고, 인간은 엘프에게, 엘프는 언데드에게 그리고 언데드는 오크에게 강합니다.")}
-  ( ${
- AG.getText("GAME_537","오크 > 인간 > 엘프 > 언데드 > 오크")}
-  )`,`5. ${
- AG.getText("GAME_538","적 수호병 아이콘에 노란 원이 있으면 물리면역, 파란 원이 있으면 마법면역입니다.")}
- `,`6. ${
- AG.getText("GAME_539","각 층을 클리어하면 보상을 받습니다.")}
-  ${
- AG.getText("GAME_540","보상은 각 층마다 오직 한 번만 받습니다.")}
- `];
- this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.4*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(jtt,"TowerGuidePopup"),zt(jtt,"_instance");
- let $tt=jtt;
- const Vtt=class t extends D4{
- constructor(){
- super(),zt(this,"lblTicket",new YD("티켓 : 5/5",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblTimer",new GB("Icon_Time02","00:00",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"btnGuide",new mB("UI_Ekkorr","UI_Alarm")),zt(this,"lblSeasonRemaining",new YD("",16768358,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"refreshCooldown",0),this.lblTitle.setStyle(aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.updateTitle(),this.lblTitle.y=5,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- $tt.getInstance().showGuide()}
- ),this.repositionGuideButton(),this.closeBtn.visible=!0,this.closeBtn.eventMode="static",this.closeBtn.on("pointertap",this.onBack,this),this.addChild(this.closeBtn),this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.text="00:00",this.addChild(this.lblTimer),this.lblTicket.y=5,this.lblTimer.y=this.lblTicket.y+this.lblTicket.height,this.lblSeasonRemaining.x=10,this.lblSeasonRemaining.y=this.lblTitle.y+this.lblTitle.height+2,this.addChild(this.lblSeasonRemaining),this.updateLayout(),this.updateSeasonRemaining()}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- updateTitle(){
- const t=w6.getInstance().seasonNumber;
- t>0?this.setTitle(`${
- AG.getText("GAME_80","도전의 탑")}
-  ( ${
- AG.getValueReplace("GAME_561","##",t,t+"회차")}
-  )`):this.setTitle(AG.getText("GAME_80","도전의 탑")),this.repositionGuideButton()}
- repositionGuideButton(){
- this.btnGuide&&(this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2)}
- updateSeasonRemaining(){
- const t=w6.getInstance().seasonEndTime;
- if(t<=0)return void(this.lblSeasonRemaining.text="");
- const i=ix.time||Date.now(),s=Math.max(0,t-i),e=Math.floor(s/1e3),n=Math.floor(e/3600),h=Math.floor(e%3600/60);
- this.lblSeasonRemaining.text=`${
- AG.getText("COMMON_29","남은시간")}
-  : ${
- n}
- H ${
- uU.digit(h)}
- M`}
- updateLayout(){
- const t=this.closeBtn.x-10;
- this.lblTicket.x=t-this.lblTicket.width,this.lblTimer.x=t-this.lblTimer.width}
- onBack(){
- Ght.getInstance().setData(),P6.getInstance().currentSubView=Ght.getInstance()}
- updateTicketInfo(){
- const t=w6.getInstance();
- this.lblTicket.text=`${
- AG.getText("GAME_559","티켓")}
-  : ${
- t.ticket}
-  / ${
- t.maxTicket}
- `,this.updateLayout()}
- updateTimer(){
- this.updateSeasonRemaining();
- const t=w6.getInstance();
- if(t.ticket>=t.maxTicket)return this.lblTimer.text="00:00",void this.updateLayout();
- const i=6e5-(ix.time-t.ticketTime);
- if(i<=1e3&&ix.time>this.refreshCooldown)return this.refreshCooldown=ix.time+1e4,void this.refreshFromServer();
- const s=Math.floor(i/1e3),e=Math.floor(s/60),n=s%60;
- this.lblTimer.text=`${
- String(e).padStart(2,"0")}
- :${
- String(n).padStart(2,"0")}
- `,this.updateLayout()}
- async refreshFromServer(){
- const t=await hD.getInstance().tower.getInfo();
- !1!==t.success&&(w6.getInstance().setData(t.body.tower),this.updateTicketInfo())}
- updateLanguage(){
- this.updateTitle()}
- }
- ;
- Kt(Vtt,"TowerSubMenu"),zt(Vtt,"instance");
- let Ktt=Vtt;
- const ztt=class t extends O8{
- constructor(){
- super(),zt(this,"vsImage",new We(ZA.getTexture("UI_Ekkorr","UI_VS"))),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20)),zt(this,"allyBtns",[]),zt(this,"enemyBtns",[]),zt(this,"battleContainer",new Be),zt(this,"btnStart",new QL("시작")),zt(this,"btnExportData",new QL("데이터 복사")),zt(this,"btnScreenshot",new QL("스샷")),zt(this,"heroList"),zt(this,"lblHeroList",new YD("유닛 카탈로그 (모든 유닛)",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"teamKindNums",[]),zt(this,"teamTrans",[]),zt(this,"enemyKindNums",[]),zt(this,"enemyTrans",[]),zt(this,"selectedSlot",-1),zt(this,"heroVOs",[]),zt(this,"floorVO",null),zt(this,"filterTribes",new Set),zt(this,"filterGradeMax",0),zt(this,"filterFemaleExclude",!1),zt(this,"filterMaleExclude",!1),zt(this,"filterAirExclude",!1),zt(this,"gradeBtns",[]),zt(this,"tribeBtns",[]),zt(this,"excludeFemaleBtn"),zt(this,"excludeMaleBtn"),zt(this,"excludeAirBtn"),zt(this,"enemyLevels",[]),zt(this,"enemyShields",[]),zt(this,"enemyCustomTrans",[]),zt(this,"enemyLevelBtns",[]),zt(this,"enemyShieldBtns",[]),zt(this,"enemyTransBtns",[]),zt(this,"allyTransBtns",[]),zt(this,"enemyBadges",[]),zt(this,"allyBadges",[]),this.y-=400,this.y<0&&(this.y=0),this.bg.height+=400,this.lblTitle.text="[시뮬]",this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.buildFilterRow1(80,this.lblTitle.y),this.buildEnemySettings(this.bg.width-170,this.lblTitle.y-10);
- const i=this.lblTitle.y+this.lblTitle.height+60;
- this.battleContainer.y=i,this.addChild(this.battleContainer);
- for(let t=0;
- t<12;
- t++){
- const i=Math.floor(t/4),s=t%4,e=new O4;
- e.scale=.5,e.x=0+70*(2-i),e.y=48*s,e.onClick=this.onClickAllySlot.bind(this),this.battleContainer.addChild(e),this.allyBtns.push(e)}
- for(let t=0;
- t<12;
- t++){
- const i=this.allyBtns[t],s=new Be;
- s.eventMode="none",s.interactiveChildren=!1;
- const e=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:65484,stroke:{
- color:0,width:3}
- }
- )}
- );
- e.anchor.set(0,1),e.x=1,e.y=85,s.addChild(e),s._lblTrans=e,i.addChild(s),this.allyBadges.push(s)}
- this.vsImage.scale=.6,this.vsImage.x=220,this.vsImage.y=72,this.battleContainer.addChild(this.vsImage);
- const s=220+this.vsImage.width+30;
- for(let r=0;
- r<t.MAX_ENEMIES;
- r++){
- const t=Math.floor(r/4),i=r%4,e=new O4;
- e.scale=.5,e.x=s+70*t,e.y=48*i,e.onClick=this.onClickEnemySlot.bind(this),this.battleContainer.addChild(e),this.enemyBtns.push(e)}
- for(let r=0;
- r<t.MAX_ENEMIES;
- r++){
- const t=this.enemyBtns[r],i=new Be;
- i.eventMode="none",i.interactiveChildren=!1;
- const s=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:24,fontWeight:"bold",fill:16776960,stroke:{
- color:0,width:4}
- }
- )}
- );
- s.anchor.set(.5,0),s.x=35,s.y=-2,i.addChild(s),i._lblLv=s;
- const e=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:65484,stroke:{
- color:0,width:3}
- }
- )}
- );
- e.anchor.set(0,1),e.x=1,e.y=85,i.addChild(e),i._lblTrans=e;
- const n=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:16777215,stroke:{
- color:0,width:3}
- }
- )}
- );
- n.anchor.set(1,1),n.x=75,n.y=85,i.addChild(n),i._lblShield=n,t.addChild(i),this.enemyBadges.push(i)}
- this.battleContainer.x=.5*(this.bg.width-this.battleContainer.width);
- const e=i+192+15;
- this.lblHeroList.x=15,this.lblHeroList.y=e,this.addChild(this.lblHeroList),this.buildFilterRow2(this.bg.width-198,e-2);
- const n=e+this.lblHeroList.height+8,h=this.bg.height-n-110;
- P4.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new R3(P4,630,h),this.heroList.x=5,this.heroList.y=n,this.addChild(this.heroList),this.btnStart.color=QL.RED,this.btnStart.width=200,this.btnStart.height=45,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-70,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart),this.btnExportData.color=QL.GREEN,this.btnExportData.width=130,this.btnExportData.height=35,this.btnExportData.x=this.bg.width-this.btnExportData.width-10,this.btnExportData.y=this.btnStart.y+5,this.btnExportData.onClick=this.onExportData.bind(this),this.addChild(this.btnExportData),this.btnScreenshot.color=QL.GREEN,this.btnScreenshot.width=90,this.btnScreenshot.height=35,this.btnScreenshot.x=10,this.btnScreenshot.y=this.btnStart.y+5,this.btnScreenshot.onClick=this.onScreenshot.bind(this),this.addChild(this.btnScreenshot)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async setData(t){
- this.floorVO=t,this.lblTitle.text=`[시뮬] ${
- t.floor}
- 층`,this.filterTribes.clear(),this.filterGradeMax=0,this.filterFemaleExclude=!1,this.filterMaleExclude=!1,this.filterAirExclude=!1,this.refreshFilterUI();
- const i=await $A.getTowerSimTeam(t.floor);
- i&&i.kindNums&&12===i.kindNums.length?(this.teamKindNums=[...i.kindNums],this.teamTrans=[...i.trans]):this.initEmptyTeam();
- const s=await $A.getTowerSimEnemies(t.floor);
- s&&Array.isArray(s.kindNums)&&20===s.kindNums.length?(this.enemyKindNums=[...s.kindNums],this.enemyTrans=[...s.trans],this.enemyLevels=s.levels?[...s.levels]:new Array(20).fill(1),this.enemyShields=s.shields?[...s.shields]:new Array(20).fill(0),this.enemyCustomTrans=s.customTrans?[...s.customTrans]:new Array(20).fill(0)):this.initEmptyEnemies(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList()}
- initEmptyTeam(){
- this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0)}
- initEmptyEnemies(){
- this.enemyKindNums=new Array(20).fill(-1),this.enemyTrans=new Array(20).fill(0),this.enemyLevels=new Array(20).fill(1),this.enemyShields=new Array(20).fill(0),this.enemyCustomTrans=new Array(20).fill(0)}
- getPlacedEnemyCount(){
- let t=0;
- for(let i=0;
- i<20;
- i++)this.enemyKindNums[i]>0&&t++;
- return t}
- getPlacedAllyCount(){
- let t=0;
- for(let i=0;
- i<12;
- i++)this.teamKindNums[i]>0&&t++;
- return t}
- updateAllyButtons(){
- const t=Math.max(1,_L.maxWave/10);
- for(let i=0;
- i<12;
- i++){
- const s=this.allyBtns[i],e=yx.getVO();
- if(this.teamKindNums[i]>0){
- e.kindNum=this.teamKindNums[i],e.trans=this.teamTrans[i],e.level=t,s.setDataWith(i,e),s.hideLevel(),s.hideEnhance();
- const n=i===this.selectedSlot;
- s.setAlphaToFrame(n?1:.85),s.selected=n,s.visible=!0}
- else{
- e.kindNum=-1,s.setDataWith(i,e),s.hideBackground();
- const t=i===this.selectedSlot;
- s.setAlphaToFrame(t?.9:.4),s.selected=!1,s.visible=!0}
- }
- for(let i=0;
- i<12;
- i++){
- const t=this.allyBadges[i];
- if(!t)continue;
- const s=t._lblTrans,e=this.teamTrans[i]||0;
- s.text=this.teamKindNums[i]>0&&e>0?`T${
- e}
- `:""}
- this.refreshSettingsUI()}
- onClickAllySlot(t){
- this.selectedSlot===t?this.selectedSlot=-1:this.selectedSlot=t,this.updateAllyButtons(),this.updateEnemyButtons()}
- updateEnemyButtons(){
- const i=Math.max(1,_L.maxWave/10)+10;
- for(let s=0;
- s<t.MAX_ENEMIES;
- s++){
- const e=this.enemyBtns[s],n=t.ENEMY_SLOT_OFFSET+s,h=this.selectedSlot===n;
- if(this.enemyKindNums[s]>0){
- const t=yx.getVO();
- t.kindNum=this.enemyKindNums[s],t.trans=this.enemyTrans[s],t.level=i,e.setDataWith(s,t),e.hideLevel(),e.hideEnhance(),e.setAlphaToFrame(h?1:.85),e.selected=h,e.visible=!0}
- else{
- const t=yx.getVO();
- t.kindNum=-1,e.setDataWith(s,t),e.hideBackground(),e.setAlphaToFrame(h?.9:.4),e.selected=!1,e.visible=!0}
- }
- for(let s=0;
- s<t.MAX_ENEMIES;
- s++){
- const t=this.enemyBadges[s];
- if(!t)continue;
- const i=t._lblLv,e=t._lblTrans,n=t._lblShield,h=this.enemyLevels[s]??1;
- i.text=h>1?`Lv${
- h}
- `:"";
- const r=this.enemyCustomTrans[s]||0;
- e.text=r>0?`T${
- r}
- `:"";
- const o=this.enemyShields[s]||0;
- 1===o?(n.text="물리",n.style.fill=16746564):2===o?(n.text="마법",n.style.fill=4500223):n.text=""}
- this.refreshSettingsUI()}
- onClickEnemySlot(i){
- const s=t.ENEMY_SLOT_OFFSET+i;
- this.selectedSlot===s?this.selectedSlot=-1:this.selectedSlot=s,this.updateAllyButtons(),this.updateEnemyButtons()}
- updateHeroList(){
- x4.removeAll(this.heroVOs),this.heroVOs.push(x4.set(x4.getVO(),-1,0,0,0));
- const t=vx.getInstance();
- for(const i of t.bookList){
- if(!i)continue;
- if(i.kindNum>=1e4)continue;
- if(!this.passesFilter(i.kindNum))continue;
- const t=Math.max(0,Math.min(3,i.maxTrans||0));
- for(let s=0;
- s<=t;
- s++)this.heroVOs.push(x4.set(x4.getVO(),i.kindNum,s,99,99))}
- this.heroVOs.sort((i,s)=>{
- if(i.kindNum<=0)return-1;
- if(s.kindNum<=0)return 1;
- const e=t.getBookVO(i.kindNum),n=t.getBookVO(s.kindNum);
- if(!e||!n)return 0;
- const h=1e6*e.grade-e.tribe,r=1e6*n.grade-n.tribe;
- return h!==r?r-h:i.kindNum!==s.kindNum?i.kindNum-s.kindNum:(s.trans||0)-(i.trans||0)}
- ),this.heroList.dataProvider=ZI.chunkArray(this.heroVOs,7)}
- onClickHeroFromList(i,s){
- if(i<=0){
- if(this.selectedSlot<0)return;
- if(this.selectedSlot>=t.ENEMY_SLOT_OFFSET){
- const i=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
- this.enemyKindNums[i]>0&&(this.enemyKindNums[i]=-1,this.enemyTrans[i]=0,this.enemyLevels[i]=1,this.enemyShields[i]=0,this.enemyCustomTrans[i]=0);
- let s=-1;
- for(let t=1;
- t<=20;
- t++){
- const e=(i+t)%20;
- if(this.enemyKindNums[e]>0){
- s=e;
- break}
- }
- this.selectedSlot=s>=0?t.ENEMY_SLOT_OFFSET+s:-1}
- else{
- const t=this.selectedSlot;
- this.teamKindNums[t]>0&&(this.teamKindNums[t]=-1,this.teamTrans[t]=0);
- let i=-1;
- for(let s=1;
- s<=12;
- s++){
- const e=(t+s)%12;
- if(this.teamKindNums[e]>0){
- i=e;
- break}
- }
- this.selectedSlot=i}
- }
- else if(this.selectedSlot<0){
- if(this.getPlacedAllyCount()<t.MAX_ALLIES){
- for(let t=0;
- t<12;
- t++)if(this.teamKindNums[t]<=0){
- this.teamKindNums[t]=i,this.teamTrans[t]=s;
- break}
- }
- else for(let t=0;
- t<20;
- t++)if(this.enemyKindNums[t]<=0){
- this.enemyKindNums[t]=i,this.enemyTrans[t]=s,this.enemyLevels[t]=1,this.enemyShields[t]=0,this.enemyCustomTrans[t]=0;
- break}
- }
- else if(this.selectedSlot>=t.ENEMY_SLOT_OFFSET){
- const e=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
- this.enemyKindNums[e]=i,this.enemyTrans[e]=s,this.enemyLevels[e]=1,this.enemyShields[e]=0,this.enemyCustomTrans[e]=0;
- let n=-1;
- for(let t=1;
- t<=20;
- t++){
- const i=(e+t)%20;
- if(this.enemyKindNums[i]<=0){
- n=i;
- break}
- }
- this.selectedSlot=n>=0?t.ENEMY_SLOT_OFFSET+n:-1}
- else{
- if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedAllyCount()>=t.MAX_ALLIES)return;
- const e=this.selectedSlot;
- this.teamKindNums[e]=i,this.teamTrans[e]=s;
- let n=-1;
- for(let t=1;
- t<=12;
- t++){
- const i=(e+t)%12;
- if(this.teamKindNums[i]<=0){
- n=i;
- break}
- }
- this.selectedSlot=n}
- this.updateAllyButtons(),this.updateEnemyButtons()}
- saveToLocal(){
- this.floorVO&&($A.saveTowerSimTeam(this.floorVO.floor,this.teamKindNums,this.teamTrans),$A.saveTowerSimEnemies(this.floorVO.floor,this.enemyKindNums,this.enemyTrans,this.enemyLevels,this.enemyShields,this.enemyCustomTrans))}
- buildEnemiesString(){
- return b6.stringifyEnemies(this.enemyKindNums,this.enemyTrans)}
- async onStartBattle(){
- if(!this.floorVO)return;
- if(0===this.getPlacedAllyCount())return void vV.getInstance().showMessage("아군을 배치해주세요.");
- if(0===this.getPlacedEnemyCount())return void vV.getInstance().showMessage("적을 배치해주세요.");
- if(w6.getInstance().ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_275","티켓이 부족합니다."));
- this.saveToLocal();
- const i=this.floorVO.floor,s=this.floorVO,e=await hD.getInstance().tower.enter(i,!0);
- if(!1===e.success)return void mG.getInstance().showError(e);
- _L.setUser(e.body.user),w6.getInstance().setData(e.body.tower),this.hide();
- const n=new b6;
- Object.assign(n,this.floorVO.battleVO),n.enemyKindNums=this.buildEnemiesString(),n.enemyLevels=this.buildLevelsString(),n.enemyShields=this.buildShieldsString(),n.enemyTrans=this.buildCustomTransString(),n.tribes=this.filterTribes.size>0?Array.from(this.filterTribes).join("|"):"0",n.gradeMax=this.filterGradeMax,n.femaleExclude=this.filterFemaleExclude?"Y":"N",n.maleExclude=this.filterMaleExclude?"Y":"N",n.rangeExclude="N",n.meleeExclude="N",n.airExclude=this.filterAirExclude?"Y":"N";
- const h={
- ...this.floorVO}
- ,r=tit.getInstance();
- r.setTeam([...this.teamKindNums],[...this.teamTrans]),r.startBattle(h.floor,n),r.setSimulationMode((e,n)=>{
- const h=w6.getInstance().buildFloorVO(i)||s;
- t.getInstance().setData(h).then(()=>{
- t.getInstance().show()}
- )}
- )}
- onExportData(){
- if(0===this.getPlacedEnemyCount())return void vV.getInstance().showMessage("적이 비어있습니다.");
- const t=this.buildEnemiesString(),i=this.buildCustomTransString(),s=this.buildShieldsString(),e=this.buildLevelsString(),n=this.filterTribes.size>0?Array.from(this.filterTribes).sort().join("|"):"0",h=this.getPlacedAllyCount(),r=h,o=h-1,a=h-2,c=[t,i,s,e,n,String(this.filterGradeMax),this.filterFemaleExclude?"Y":"N",this.filterMaleExclude?"Y":"N","N","N",this.filterAirExclude?"Y":"N",String(r),String(o),String(a)].join("\t");
- let l=!1;
- try{
- navigator.clipboard&&navigator.clipboard.writeText&&(navigator.clipboard.writeText(c),l=!0)}
- catch{
- }
- const u=`${
- l?"[복사됨]":"[수동복사]"}
-  enemies=${
- t}
-  | trans=${
- i}
-  | shields=${
- s}
-  | lvs=${
- e}
-  | tribes=${
- n}
-  | gMax=${
- this.filterGradeMax}
-  | f=${
- this.filterFemaleExclude?"Y":"N"}
-  a=${
- this.filterAirExclude?"Y":"N"}
-  | star=${
- r}
- /${
- o}
- /${
- a}
- `;
- vV.getInstance().showMessage(u)}
- buildEnemySettings(t,i){
- let s=t;
- const e=new Wg({
- text:"적Lv",style:new Sg({
- fontFamily:"Arial",fontSize:13,fill:13421772}
- )}
- );
- e.x=s,e.y=i+4,this.addChild(e),s+=e.width+4;
- const n=[{
- label:"0",extra:1}
- ,{
- label:"1",extra:7}
- ,{
- label:"2",extra:14}
- ,{
- label:"3",extra:21}
- ];
- for(const d of n){
- const t=this.createToggleBtn(d.label,28,()=>this.onClickLevelSetting(d.extra));
- t.x=s,t.y=i,this.addChild(t),this.enemyLevelBtns.push(t),s+=30}
- s=t;
- const h=i+25,r=new Wg({
- text:"보호막",style:new Sg({
- fontFamily:"Arial",fontSize:13,fill:13421772}
- )}
- );
- r.x=s,r.y=h+4,this.addChild(r),s+=r.width+4;
- const o=[{
- id:0,label:"없음",w:36}
- ,{
- id:1,label:"물리",w:36}
- ,{
- id:2,label:"마법",w:36}
- ];
- for(const d of o){
- const t=this.createToggleBtn(d.label,d.w,()=>this.onClickShieldSetting(d.id));
- t.x=s,t.y=h,this.addChild(t),this.enemyShieldBtns.push(t),s+=d.w+2}
- s=t;
- const a=h+25,c=new Wg({
- text:"초월",style:new Sg({
- fontFamily:"Arial",fontSize:13,fill:65484}
- )}
- );
- c.x=s,c.y=a+4,this.addChild(c),s+=c.width+4;
- for(let d=0;
- d<=3;
- d++){
- const t=this.createToggleBtn(String(d),28,()=>this.onClickTransSetting(d));
- t.x=s,t.y=a,this.addChild(t),this.enemyTransBtns.push(t),s+=30}
- s=t;
- const l=a+25,u=new Wg({
- text:"아군초",style:new Sg({
- fontFamily:"Arial",fontSize:13,fill:8965375}
- )}
- );
- u.x=s,u.y=l+4,this.addChild(u),s+=u.width+4;
- for(let d=0;
- d<=3;
- d++){
- const t=this.createToggleBtn(String(d),28,()=>this.onClickAllyTransSetting(d));
- t.x=s,t.y=l,this.addChild(t),this.allyTransBtns.push(t),s+=30}
- }
- onClickLevelSetting(i){
- if(this.selectedSlot<t.ENEMY_SLOT_OFFSET)return void vV.getInstance().showMessage("적 슬롯을 선택해주세요.");
- const s=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
- this.enemyKindNums[s]<=0?vV.getInstance().showMessage("영웅이 배치된 적 슬롯을 선택해주세요."):(this.enemyLevels[s]=i,this.updateEnemyButtons())}
- onClickShieldSetting(i){
- if(this.selectedSlot<t.ENEMY_SLOT_OFFSET)return void vV.getInstance().showMessage("적 슬롯을 선택해주세요.");
- const s=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
- this.enemyKindNums[s]<=0?vV.getInstance().showMessage("영웅이 배치된 적 슬롯을 선택해주세요."):(this.enemyShields[s]=i,this.updateEnemyButtons())}
- onClickTransSetting(i){
- if(this.selectedSlot<t.ENEMY_SLOT_OFFSET)return void vV.getInstance().showMessage("적 슬롯을 선택해주세요.");
- const s=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
- this.enemyKindNums[s]<=0?vV.getInstance().showMessage("영웅이 배치된 적 슬롯을 선택해주세요."):(this.enemyCustomTrans[s]=i,this.updateEnemyButtons())}
- onClickAllyTransSetting(i){
- if(this.selectedSlot<0||this.selectedSlot>=t.ENEMY_SLOT_OFFSET)return void vV.getInstance().showMessage("아군 슬롯을 선택해주세요.");
- const s=this.selectedSlot;
- this.teamKindNums[s]<=0?vV.getInstance().showMessage("영웅이 배치된 아군 슬롯을 선택해주세요."):(this.teamTrans[s]=i,this.updateAllyButtons())}
- refreshSettingsUI(){
- let i=-1,s=-1,e=-1;
- if(this.selectedSlot>=t.ENEMY_SLOT_OFFSET){
- const n=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
- this.enemyKindNums[n]>0&&(i=this.enemyLevels[n]??1,s=this.enemyShields[n]||0,e=this.enemyCustomTrans[n]||0)}
- const n=[1,7,14,21];
- for(let t=0;
- t<this.enemyLevelBtns.length;
- t++)this.setToggleState(this.enemyLevelBtns[t],i===n[t]);
- for(let t=0;
- t<this.enemyShieldBtns.length;
- t++)this.setToggleState(this.enemyShieldBtns[t],s===t);
- for(let t=0;
- t<this.enemyTransBtns.length;
- t++)this.setToggleState(this.enemyTransBtns[t],e===t);
- let h=-1;
- this.selectedSlot>=0&&this.selectedSlot<t.ENEMY_SLOT_OFFSET&&this.teamKindNums[this.selectedSlot]>0&&(h=this.teamTrans[this.selectedSlot]||0);
- for(let t=0;
- t<this.allyTransBtns.length;
- t++)this.setToggleState(this.allyTransBtns[t],h===t)}
- buildCustomTransString(){
- let t=-1;
- for(let s=19;
- s>=0;
- s--)if((this.enemyKindNums[s]??-1)>0){
- t=s;
- break}
- if(t<0)return"";
- const i=[];
- for(let s=0;
- s<=t;
- s++)i.push(String(this.enemyCustomTrans[s]||0));
- return i.join("|")}
- buildLevelsString(){
- let t=-1;
- for(let s=19;
- s>=0;
- s--)if((this.enemyKindNums[s]??-1)>0){
- t=s;
- break}
- if(t<0)return"";
- const i=[];
- for(let s=0;
- s<=t;
- s++)i.push(String(this.enemyLevels[s]??1));
- return i.join("|")}
- buildShieldsString(){
- let t=-1;
- for(let s=19;
- s>=0;
- s--)if((this.enemyKindNums[s]??-1)>0){
- t=s;
- break}
- if(t<0)return"";
- const i=[];
- for(let s=0;
- s<=t;
- s++){
- const t=this.enemyShields[s]||0;
- i.push(String(t))}
- return i.join("|")}
- createToggleBtn(t,i,s){
- const e=new Be,n=new Gf;
- n.roundRect(0,0,i,22,4),n.fill({
- color:2236962,alpha:.85}
- ),n.stroke({
- color:6710886,width:1}
- ),e.addChild(n);
- const h=new Wg({
- text:t,style:new Sg({
- fontFamily:"Arial",fontSize:12,fontWeight:"bold",fill:11184810}
- )}
- );
- return h.anchor.set(.5),h.x=i/2,h.y=11,e.addChild(h),e._bg=n,e._txt=h,e._width=i,e.eventMode="static",e.cursor="pointer",e.on("pointertap",t=>s()),e}
- setToggleState(t,i){
- const s=t._bg,e=t._txt,n=t._width;
- s.clear(),s.roundRect(0,0,n,22,4),i?(s.fill({
- color:11167300,alpha:.95}
- ),s.stroke({
- color:16764040,width:1.5}
- ),e.style.fill=16777215):(s.fill({
- color:2236962,alpha:.85}
- ),s.stroke({
- color:6710886,width:1}
- ),e.style.fill=11184810)}
- buildFilterRow1(t,i){
- let s=t;
- const e=new Wg({
- text:"등급≤",style:new Sg({
- fontFamily:"Arial",fontSize:13,fill:13421772}
- )}
- );
- e.x=s,e.y=i+4,this.addChild(e),s+=e.width+4;
- for(let r=1;
- r<=6;
- r++){
- const t=this.createToggleBtn(`${
- r}
- `,24,()=>this.onClickGrade(r));
- t.x=s,t.y=i,this.addChild(t),this.gradeBtns.push(t),s+=26}
- s+=24;
- const n=new Wg({
- text:"종족",style:new Sg({
- fontFamily:"Arial",fontSize:13,fill:13421772}
- )}
- );
- n.x=s,n.y=i+4,this.addChild(n),s+=n.width+4;
- const h=[{
- id:1,name:"인"}
- ,{
- id:2,name:"엘"}
- ,{
- id:3,name:"언"}
- ,{
- id:4,name:"오"}
- ];
- for(const r of h){
- const t=this.createToggleBtn(r.name,24,()=>this.onClickTribe(r.id));
- t.x=s,t.y=i,this.addChild(t),this.tribeBtns.push(t),s+=26}
- }
- buildFilterRow2(t,i){
- let s=t;
- this.excludeFemaleBtn=this.createToggleBtn("여성제외",60,()=>{
- this.filterFemaleExclude=!this.filterFemaleExclude,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
- ),this.excludeFemaleBtn.x=s,this.excludeFemaleBtn.y=i,this.addChild(this.excludeFemaleBtn),s+=64,this.excludeMaleBtn=this.createToggleBtn("남성제외",60,()=>{
- this.filterMaleExclude=!this.filterMaleExclude,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
- ),this.excludeMaleBtn.x=s,this.excludeMaleBtn.y=i,this.addChild(this.excludeMaleBtn),s+=64,this.excludeAirBtn=this.createToggleBtn("공중제외",60,()=>{
- this.filterAirExclude=!this.filterAirExclude,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
- ),this.excludeAirBtn.x=s,this.excludeAirBtn.y=i,this.addChild(this.excludeAirBtn)}
- onClickGrade(t){
- this.filterGradeMax===t?this.filterGradeMax=0:this.filterGradeMax=t,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
- onClickTribe(t){
- this.filterTribes.has(t)?this.filterTribes.delete(t):this.filterTribes.add(t),this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
- refreshFilterUI(){
- for(let t=0;
- t<this.gradeBtns.length;
- t++)this.setToggleState(this.gradeBtns[t],this.filterGradeMax===t+1);
- for(let t=0;
- t<this.tribeBtns.length;
- t++){
- const i=t+1;
- this.setToggleState(this.tribeBtns[t],this.filterTribes.has(i))}
- this.setToggleState(this.excludeFemaleBtn,this.filterFemaleExclude),this.setToggleState(this.excludeMaleBtn,this.filterMaleExclude),this.setToggleState(this.excludeAirBtn,this.filterAirExclude)}
- passesFilter(t){
- const i=vx.getInstance().getBookVO(t);
- return!(i&&(this.filterGradeMax>0&&i.grade>this.filterGradeMax||this.filterTribes.size>0&&!this.filterTribes.has(i.tribe)||this.filterFemaleExclude&&i.sex===rx.FEMALE||this.filterMaleExclude&&i.sex===rx.MALE||this.filterAirExclude&&i.isAir))}
- applyFilterToTeams(){
- let t=!1;
- for(let i=0;
- i<12;
- i++)this.teamKindNums[i]>0&&!this.passesFilter(this.teamKindNums[i])&&(this.teamKindNums[i]=-1,this.teamTrans[i]=0,t=!0);
- t&&this.updateAllyButtons()}
- async onScreenshot(){
- var t;
- try{
- const i=hS.app.renderer.extract.canvas(hS.app.stage),s=await new Promise(t=>i.toBlob(i=>t(i),"image/png"));
- if(!s)return void vV.getInstance().showMessage("스샷 생성 실패");
- const e=`tower_sim_${
- (null==(t=this.floorVO)?void 0:t.floor)??0}
- F_${
- Date.now()}
- .png`,n=URL.createObjectURL(s),h=document.createElement("a");
- h.href=n,h.download=e,document.body.appendChild(h),h.click(),document.body.removeChild(h),URL.revokeObjectURL(n),vV.getInstance().showMessage(`스샷 저장: ${
- e}
- `)}
- catch(_gt){
- vV.getInstance().showMessage("스샷 실패: "+_gt)}
- }
- hide(){
- this.saveToLocal(),super.hide()}
- show(){
- P4.onHeroClick=this.onClickHeroFromList.bind(this),P4.showAttackType=!0,this.show2()}
- }
- ;
- Kt(ztt,"TowerSimulationPopup"),zt(ztt,"_instance"),zt(ztt,"ENEMY_SLOT_OFFSET",100),zt(ztt,"MAX_ALLIES",12),zt(ztt,"MAX_ENEMIES",20);
- let qtt=ztt;
- const Xtt=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblFloor",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblCondition",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblGem",new GB("UI_GEM","0",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHonor",new GB("PVP_COIN_ON","0",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnChallenge",new aK("도전",110)),zt(this,"btnSimulate",new aK("시뮬",80)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),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),TL.getInstance().development?this.btnSimulate.visible=!0:this.btnSimulate.visible=!1}
- setData(t){
- this.data=t;
- const i=t;
- this.lblFloor.text=`${
- i.floor}
- F`,this.lblFloor.x=.5*(130-this.lblFloor.width),this.lblFloor.y=.5*(this.bg.height-this.lblFloor.height),this.lblCondition.text=this.buildConditionText(i),this.updateRewardLabels(i);
- const s=this.lblGem.height+5+this.lblCondition.height,e=.5*(this.bg.height-s),n=e;
- this.lblCondition.y=e+this.lblGem.height+5,this.updateRewardPositions(n),this.btnChallenge.visible=!0,i.isNext?(this.btnChallenge.text=AG.getText("COMMON_378","도전"),this.setDimmed(!1),this.btnChallenge.alpha=1):i.isCleared?(this.btnChallenge.text=AG.getText("COMMON_377","클리어"),this.setDimmed(!0),this.btnChallenge.alpha=.6):(this.btnChallenge.text=AG.getText("COMMON_378","도전"),this.setDimmed(!0),this.btnChallenge.alpha=1)}
- updateRewardLabels(t){
- const i=t.reward;
- i&&(this.lblGem.text=`${
- i.gem1}
- `,this.lblHonor.text=`${
- i.honor1}
- `)}
- updateRewardPositions(t){
- let i=135;
- this.lblGem.x=i,this.lblGem.y=t,i+=this.lblGem.width+5,this.lblHonor.x=i,this.lblHonor.y=t+2}
- buildConditionText(t){
- const i=[],s=t.battleVO;
- if(s.gradeMax>0&&i.push(AG.getValueReplace("GAME_552","##",s.gradeMax,`${
- s.gradeMax}
- 성 이하`)),"0"!==String(s.tribes)){
- const t=String(s.tribes).split("|").map(t=>AG.getText(`TRIBE_${
- t}
- `,this.getTribeName(Number(t))));
- i.push(t.join(","))}
- return"Y"===s.femaleExclude&&i.push(AG.getText("GAME_554","여성 영웅 제외")),"Y"===s.maleExclude&&i.push(AG.getText("GAME_555","남성 영웅 제외")),"Y"===s.rangeExclude&&i.push(AG.getText("GAME_556","원거리 영웅 제외")),"Y"===s.meleeExclude&&i.push(AG.getText("GAME_557","근거리 영웅 제외")),"Y"===s.airExclude&&i.push(AG.getText("GAME_558","공중 영웅 제외")),i.length>0?i.join(" / "):AG.getText("COMMON_463","제한없음")}
- setDimmed(t){
- const i=t?8947848:16777215,s=t?6710886:11184810;
- this.lblFloor.textColor=i,this.lblCondition.textColor=s,this.lblGem.textColor=t?8947848:aD.DEFAULT_COLOR,this.lblHonor.textColor=t?8947848:aD.DEFAULT_COLOR,this.lblGem.iconColor=t?6710886:16777215,this.lblHonor.iconColor=t?6710886:16777215}
- getTribeName(t){
- switch(t){
- case 1:return"인간";
- case 2:return"엘프";
- case 3:return"언데드";
- case 4:return"오크";
- default:return`종족${
- t}
- `}
- }
- onSimulate(){
- const t=this.data;
- qtt.getInstance().setData(t),qtt.getInstance().show()}
- async onChallenge(){
- const t=this.data;
- t.isCleared||t.isNext?(Wtt.getInstance().setData(t),Wtt.getInstance().show()):vV.getInstance().showMessage("아직 도전할 수 없는 층입니다.")}
- get height(){
- return this.bg.height+3}
- }
- ;
- Kt(Xtt,"TowerItemRenderer");
- let Ytt=Xtt;
- const Jtt=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"count",0),zt(this,"lastTimerUpdate",0),zt(this,"initialized",!1),this.list=new R3(Ytt,630,KA.listHeight),this.list.x=5,this.list.y=Ktt.getInstance().height,this.addChild(this.list),this.addChild(Ktt.getInstance()),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- get className(){
- return"TowerSubView"}
- onAdded(){
- GM.getInstance().add(this.onFrame,this),UV.getInstance().setTowerMode(!0),this.initialized&&(this.refreshList(),Ktt.getInstance().updateTicketInfo(),Ktt.getInstance().updateTitle())}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this),UV.getInstance().setTowerMode(!1)}
- onFrame(){
- var t,i;
- if(this.count-- >0)return;
- if(this.count=30,null==(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent))return void GM.getInstance().remove(this.onFrame,this);
- const s=Date.now();
- s-this.lastTimerUpdate>=1e3&&(this.lastTimerUpdate=s,Ktt.getInstance().updateTimer())}
- async setData(){
- if(this.initialized)return void this.refreshList();
- const t=w6.getInstance();
- t.bookLoaded||(await Promise.all([_D.getInstance().loadBook(bD.TOWER_BATTLE_POOL),_D.getInstance().loadBook(bD.TOWER_SEASON_SET),_D.getInstance().loadBook(bD.TOWER_REWARD)]),t.setBattlePoolData(_D.getInstance().getBook(bD.TOWER_BATTLE_POOL)),t.setSeasonSetData(_D.getInstance().getBook(bD.TOWER_SEASON_SET)),t.setRewardData(_D.getInstance().getBook(bD.TOWER_REWARD)),t.bookLoaded=!0);
- const i=await hD.getInstance().tower.getInfo(!0);
- !1!==i.success?(this.initialized=!0,_L.setUser(i.body.user),t.setData(i.body.tower),t.getFloorList(),Ktt.getInstance().updateTicketInfo(),Ktt.getInstance().updateTitle(),this.refreshList()):mG.getInstance().showError(i)}
- refreshList(){
- const t=w6.getInstance().getFloorListReversed();
- this.list.dataProvider=t}
- updateLanguage(){
- this.setData(),Ktt.getInstance().updateLanguage()}
- }
- ;
- Kt(Jtt,"TowerSubView"),zt(Jtt,"instance");
- let Qtt=Jtt;
- const Ztt=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.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,"speedHelper",new U8("ef2.tower.battleSpeed")),zt(this,"teamKindNums",[]),zt(this,"teamTransList",[])}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- setSimulationMode(t){
- this.isSimulation=!0,this.onSimulationEnd=t}
- setTeam(t,i){
- this.teamKindNums=t,this.teamTransList=i}
- async startBattle(i,s){
- this.cleanup(),KN.getInstance().setBattleContext(NN.Tower),this.isSimulation=!1,this.onSimulationEnd=null,this.initRandom(t.TEST_SEED),this.enableDeterminismCapture(),DB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.floor=i,this.battleVO=s;
- const e=w6.getInstance().buildFloorVO(i);
- this.wasClearedBefore=!(!e||!e.isCleared),await ZA.generateTexture("Tower","ktx2",!1);
- const n={
- name:AG.getText("GAME_80","도전의 탑"),stage:i,reward:0,entryLimit:this.buildConditionText(s)}
- ,h=Vit.getInstance();
- h.setController(this),h.setDungeonData(n),this.speedHelper.enter(),this.speedHelper.attachButton(h,h.panelWidth-124,12);
- for(const t of this.towerTeamVOs)t.remove();
- this.towerTeamVOs.length=0;
- for(let t=0;
- t<12&&!(t>=this.teamKindNums.length);
- t++){
- if(this.teamKindNums[t]<=0)continue;
- const i=yx.getVO();
- i.id=-1,i.kindNum=this.teamKindNums[t],i.trans=this.teamTransList[t]||0,i.level=1,i.enhance=0,this.towerTeamVOs.push(i),this.towerSlotIndices.push(t)}
- await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),N9t.getInstance().switchToBattle(this),this.updateZIndexSorting(),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),Ftt.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),WG.getInstance().add(this.execute,this)}
- async setupAllies(){
- for(let i=0;
- i<this.towerTeamVOs.length;
- i++){
- const s=this.towerTeamVOs[i],e=this.towerSlotIndices[i],n=await g3.getInstance().getUnit(s.className);
- n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans),n.numBlock=0,n.baseMaxHp*=3,n.orgMaxHp*=3,n.maxHp*=3,n.health=n.maxHp,n.orgMoveSpd=n.moveSpd=1.3*n.moveSpd,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange,n.attackCoolDown=0,n.skillCallIndex=0,n.attackCallIndex=0,n.attackIndex=0;
- const h=t.ALLY_FORMATION[e%t.ALLY_FORMATION.length];
- n.x=h.x,n.y=h.y,n.xDefault=h.x+320,n.yDefault=h.y,n.lookAt(1),n.healthBar.setHealthColor(!0),n.isAir&&n.onFlyEnter(!0),tB.getInstance().addChild(n),this.friendList.push(n)}
- }
- async setupEnemies(){
- if(!this.battleVO)return;
- const i=b6.parseEnemies(this.battleVO),s=this.battleVO.enemyLevels?String(this.battleVO.enemyLevels).split("|").map(Number):[],e=this.battleVO.enemyShields?String(this.battleVO.enemyShields).split("|").map(Number):[];
- let n=0;
- for(let h=0;
- h<20;
- h++){
- const r=i[h];
- if(!r)continue;
- const o=vx.getInstance().getBookVO(r.kindNum);
- if(!o)continue;
- const a=await g3.getInstance().getUnit(o.className);
- a.battleController=this;
- const c=s[h]||1,l=yx.getVO();
- if(l.id=-1,l.kindNum=r.kindNum,l.trans=r.trans,l.level=c,l.enhance=0,this.spawnedVOs.push(l),a.setData(l),this.applyRawBvoStats(a,r.kindNum,r.trans),c>1){
- const t=1+.05*(c-1);
- a.baseAtkDmg*=t,a.orgAtkDmg*=t,a.atkDmg*=t,a.baseDef*=t,a.orgDef*=t,a.def*=t,a.baseMaxHp*=t,a.orgMaxHp*=t,a.maxHp*=t}
- a.numBlock=0,a.baseMaxHp*=3,a.orgMaxHp*=3,a.maxHp*=3,a.health=a.maxHp,a.orgMoveSpd=a.moveSpd=1.3*a.moveSpd,a.detectRange=600,a.detectRange2=a.detectRange*a.detectRange,a.initDelay=0,a.attackCoolDown=0,a.skillCallIndex=0,a.attackCallIndex=0,a.attackIndex=0;
- const u=t.ENEMY_FORMATION_20[h];
- a.x=u.x,a.y=u.y,a.xDefault=u.x-320,a.yDefault=u.y,a.lookAt(-1),a.healthBar.setHealthColor(!1),tB.getInstance().addChild(a),this.enemyList.push(a),n++;
- const d=e[h]||0;
- 1===d?a.showPhysicalShield(t.TIME_LIMIT_FRAMES):2===d&&a.showMagicShield(t.TIME_LIMIT_FRAMES)}
- this.initialEnemyCount=n}
- applyRawBvoStats(t,i,s=0){
- const e=vx.getInstance().getBookVO(i);
- if(!e)return;
- const n=1+.4*Math.max(0,s);
- t.baseMaxHp=e.hp*n,t.baseAtkDmg=e.atkDmg*n,t.baseDef=e.def*n,t.orgMaxHp=t.maxHp=e.hp*n,t.orgAtkDmg=t.atkDmg=e.atkDmg*n,t.orgDef=t.def=e.def*n,t.phyDef=e.phyDef*n,t.magDef=e.magDef*n,t.hp=t.maxHp}
- 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}
- checkVictory(){
- if(0===this.initialEnemyCount)return!1;
- for(const t of this.enemyList)if(t.isAlive)return!1;
- return!0}
- checkDefeat(){
- let i=!1;
- for(const t of this.friendList)if(t.isAlive){
- i=!0;
- break}
- return!i&&this.friendList.length>0||this.battleTime>=t.TIME_LIMIT_FRAMES}
- onVictoryCallback(){
- this.dumpDeterminismReport(!0),setTimeout(async()=>{
- WG.getInstance().remove(this.execute,this);
- const t=this.towerTeamVOs.length,i=await hD.getInstance().tower.end(!0,t);
- i.success&&i.body&&(i.body.user&&_L.setUser(i.body.user),i.body.tower&&w6.getInstance().setData(i.body.tower),UV.getInstance().updateAll()),aV.getInstance().markDirty();
- const s=!this.wasClearedBefore,e=s?w6.getInstance().getReward(this.floor):void 0,n=e?e.gem1:0,h=e?e.honor1:0,r=s&&(n>0||h>0);
- if(this.isSimulation){
- const t=this.onSimulationEnd,i=this.floor;
- this.isSimulation=!1,this.onSimulationEnd=null;
- const s=Kt(()=>{
- N9t.getInstance().returnToIdleBattle(),Qtt.getInstance().refreshList(),Ktt.getInstance().updateTicketInfo(),t&&t(!0,i)}
- ,"onConfirm2");
- return void(r?V8.getInstance().showTowerVictory(s,n,h,`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- i}
- F`):V8.getInstance().showVictory(s,0,0,`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- i}
- F`))}
- const o=Kt(()=>{
- N9t.getInstance().returnToIdleBattle(),Qtt.getInstance().refreshList(),Ktt.getInstance().updateTicketInfo()}
- ,"onConfirm");
- r?V8.getInstance().showTowerVictory(o,n,h,`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- this.floor}
- F`):V8.getInstance().showVictory(o,0,0,`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- this.floor}
- F`)}
- ,1500)}
- onDefeatCallback(){
- this.dumpDeterminismReport(!1),setTimeout(async()=>{
- WG.getInstance().remove(this.execute,this);
- const t=this.towerTeamVOs.length,i=await hD.getInstance().tower.end(!1,t);
- if(i.success&&i.body&&(i.body.user&&_L.setUser(i.body.user),i.body.tower&&w6.getInstance().setData(i.body.tower),UV.getInstance().updateAll()),aV.getInstance().markDirty(),this.isSimulation){
- const t=this.onSimulationEnd,i=this.floor;
- return this.isSimulation=!1,this.onSimulationEnd=null,void V8.getInstance().showDefeat(()=>{
- N9t.getInstance().returnToIdleBattle(),Qtt.getInstance().refreshList(),Ktt.getInstance().updateTicketInfo(),t&&t(!1,i)}
- ,`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- i}
- F`)}
- const s=this.floor;
- V8.getInstance().showDefeat(async()=>{
- N9t.getInstance().returnToIdleBattle(),Qtt.getInstance().refreshList(),Ktt.getInstance().updateTicketInfo();
- const t=w6.getInstance().buildFloorVO(s);
- if(t){
- const i=Wtt.getInstance();
- await i.setData(t),i.show()}
- }
- ,`${
- AG.getText("GAME_80","도전의 탑")}
-  - ${
- s}
- F`)}
- ,1500)}
- dumpDeterminismReport(t){
- const i=this.getDeterminismReport();
- this.friendList.filter(t=>t.isAlive).length,this.enemyList.filter(t=>t.isAlive).length,i.frames.length>0&&i.frames[i.frames.length-1].hash.toString(16)}
- returnToMain(){
- }
- scheduleReturnToMain(){
- }
- getUsedHeroCount(){
- return this.towerTeamVOs.length}
- getRemainingTimeSeconds(){
- const i=t.TIME_LIMIT_FRAMES-this.battleTime;
- return Math.max(0,Math.ceil(i/60))}
- buildConditionText(t){
- const i=[];
- return t.gradeMax>0&&i.push(AG.getValueReplace("GAME_552","##",t.gradeMax,`${
- t.gradeMax}
- 성 이하`)),"0"!==String(t.tribes)&&i.push(AG.getText("GAME_553","종족 제한")),"Y"===t.femaleExclude&&i.push(AG.getText("GAME_554","여성 영웅 제외")),"Y"===t.maleExclude&&i.push(AG.getText("GAME_555","남성 영웅 제외")),"Y"===t.rangeExclude&&i.push(AG.getText("GAME_556","원거리 영웅 제외")),"Y"===t.meleeExclude&&i.push(AG.getText("GAME_557","근거리 영웅 제외")),"Y"===t.airExclude&&i.push(AG.getText("GAME_558","공중 영웅 제외")),i.length>0?i.join(", "):""}
- cleanup(){
- KN.getInstance().setBattleContext(NN.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.initialEnemyCount=0;
- for(const t of this.towerTeamVOs)t.remove();
- this.towerTeamVOs.length=0,this.towerSlotIndices.length=0;
- for(const t of this.spawnedVOs)t.remove();
- this.spawnedVOs.length=0;
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- super.cleanup()}
- }
- ;
- Kt(Ztt,"TowerBattleController"),zt(Ztt,"instance"),zt(Ztt,"TEST_DETERMINISM",!0),zt(Ztt,"TEST_SEED",12345),zt(Ztt,"TIME_LIMIT_FRAMES",4800),zt(Ztt,"ALLY_FORMATION",[{
- x:180,y:370}
- ,{
- x:180,y:420}
- ,{
- x:180,y:470}
- ,{
- x:180,y:520}
- ,{
- x:95,y:370}
- ,{
- x:95,y:420}
- ,{
- x:95,y:470}
- ,{
- x:95,y:520}
- ,{
- x:10,y:370}
- ,{
- x:10,y:420}
- ,{
- x:10,y:470}
- ,{
- x:10,y:520}
- ]),zt(Ztt,"ENEMY_FORMATION_20",(()=>{
- const t=[380,445,510,575,640],i=[370,420,470,520],s=[];
- for(let e=0;
- e<5;
- e++)for(let n=0;
- n<4;
- n++)s.push({
- x:t[e],y:i[n]}
- );
- return s}
- )());
- let tit=Ztt;
- const iit=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnCancel",new kU("","","아니오",.7,160,70)),zt(this,"btnConfirm",new kU("","","예",.8,160,70)),this.title="",this.lblMessage.text=AG.getText("GAME_723","전투를 포기하고 나가겠습니까?"),this.lblMessage.align="center",this.contentContainer.addChild(this.lblMessage),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=AG.getText("COMMON_400","아니오"),this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_399","예"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.btnClose.visible=!1,this.outSideClickHide=!1,this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateLayout(){
- const t=.5*this.width;
- this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=90;
- const i=this.lblMessage.y+this.lblMessage.height+40,s=this.btnCancel.width+16+this.btnConfirm.width;
- this.btnCancel.x=t-.5*s,this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+60}
- show(){
- this.lblMessage.text=AG.getText("GAME_723","전투를 포기하고 나가겠습니까?"),this.btnCancel.text=AG.getText("COMMON_400","아니오"),this.btnConfirm.text=AG.getText("COMMON_399","예"),this.updateLayout(),super.show()}
- onConfirmClick(){
- KN.getInstance().setBattleContext(NN.Normal),N9t.getInstance().returnToIdleBattle(),Cst.getInstance().show(),ist.getInstance().setData(),Dtt.getInstance().updateTicket(),this.hide()}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt(iit,"SpriteQuitPopup"),zt(iit,"_instance");
- let sit=iit;
- const eit=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnCancel",new kU("","","아니오",.7,160,70)),zt(this,"btnConfirm",new kU("","","예",.8,160,70)),this.title="";
- let t=AG.getText("GAME_723","전투를 포기하고 나가겠습니까?");
- this.lblMessage.text=t,this.lblMessage.align="center",this.contentContainer.addChild(this.lblMessage),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=AG.getText("COMMON_400","아니오"),this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_399","예"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.btnClose.visible=!1,this.outSideClickHide=!1,this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- show(){
- this.lblMessage.text=AG.getText("GAME_723","전투를 포기하고 나가겠습니까?"),this.btnCancel.text=AG.getText("COMMON_400","아니오"),this.btnConfirm.text=AG.getText("COMMON_399","예"),this.updateLayout(),super.show()}
- updateLayout(){
- const t=.5*this.width;
- this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=90;
- const i=this.lblMessage.y+this.lblMessage.height+40,s=this.btnCancel.width+16+this.btnConfirm.width;
- this.btnCancel.x=t-.5*s,this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+60}
- async onConfirmClick(){
- const t=tit.getInstance().getUsedHeroCount(),i=await hD.getInstance().tower.end(!1,t,!0);
- (null==i?void 0:i.success)&&i.body&&(i.body.user&&_L.setUser(i.body.user),i.body.tower&&w6.getInstance().setData(i.body.tower),UV.getInstance().updateAll(),Qtt.getInstance().refreshList(),Ktt.getInstance().updateTicketInfo()),N9t.getInstance().returnToIdleBattle(),this.hide()}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt(eit,"TowerQuitPopup"),zt(eit,"_instance");
- let nit=eit;
- const hit=class t extends aG{
- constructor(){
- super(),zt(this,"lblTotal",new YD("",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblTreasure",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHero",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblPet",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"heroIconContainer",new Be),this.contentContainer.addChild(this.lblTotal,this.lblTreasure,this.lblHero,this.heroIconContainer,this.lblPet),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showPopup(){
- this.title=AG.getText("GAME_356","던전 재료 버프"),this.heroIconContainer.removeChildren();
- const t=KN.getInstance().treasure.getGameplayBuff(xN.Core),i=Ix.getInstance().getTotal(kx.Core)+ON.getFinnyCoreContribution()+ON.getUnipetCoreContribution(),s=KN.getInstance().pet.getGameplayBuff(xN.Core),e=t+i+s;
- let n=70;
- this.lblTotal.text=`${
- AG.getText("GAME_332","전체 버프")}
-  : +${
- e}
- %`,this.lblTotal.x=30,this.lblTotal.y=n,n+=this.lblTotal.height+15,this.lblTreasure.text=`${
- AG.getText("GAME_4","유물")}
-  : +${
- t}
- %`,this.lblTreasure.textColor=t>0?11206570:8947848,this.lblTreasure.x=30,this.lblTreasure.y=n,n+=this.lblTreasure.height+8,this.lblHero.text=`${
- AG.getText("GAME_3","영웅")}
-  : +${
- i}
- %`,this.lblHero.textColor=i>0?11206570:8947848,this.lblHero.x=30,this.lblHero.y=n,n+=this.lblHero.height+8;
- const h=Ix.getInstance(),r=h.getContributors(kx.Core);
- if(r.length>0){
- const t=vx.getInstance(),i=[...r].sort((t,i)=>{
- var s,e;
- const n=(null==(s=h.getByKindNum(t))?void 0:s.value)??0;
- return((null==(e=h.getByKindNum(i))?void 0:e.value)??0)-n}
- );
- let s=40;
- for(const e of i){
- const i=t.getBookVO(e);
- if(!i)continue;
- const n=new We(ZA.getTexture("UI_Ekkorr",`Hero${
- i.base}
- `));
- n.scale.set(.5),n.x=s,n.y=0,this.heroIconContainer.addChild(n),s+=n.width+5}
- this.heroIconContainer.x=0,this.heroIconContainer.y=n,n+=(this.heroIconContainer.height||40)+10}
- this.lblPet.text=`${
- AG.getText("GAME_565","펫")}
-  : +${
- s}
- %`,this.lblPet.textColor=s>0?11206570:8947848,this.lblPet.x=30,this.lblPet.y=n,n+=this.lblPet.height+8,this.height=n+20,super.show()}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(hit,"DungeonCoreBuffPopup"),zt(hit,"_instance");
- let rit=hit;
- const oit=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblReward",new GB("Core1","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnConfirm",new kU("","","확인",.8,200,70)),this.title=AG.getText("COMMON_379","즉시완료"),this.lblMessage.align="center",this.lblMessage.y=85,this.lblMessage.textColor=65280,this.contentContainer.addChild(this.lblMessage,this.lblReward,this.btnConfirm),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onConfirmClick(){
- this.hide()}
- hide(){
- super.hide()}
- setData(t,i,s,e){
- this.title=AG.getText("COMMON_379","즉시완료"),this.lblMessage.text=`${
- Rx.getMapName(t)}
-  ${
- i}
- `,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.lblReward.texture=ZA.getTexture("UI_Ekkorr",`Core${
- t}
- `),this.lblReward.text=e>0?`${
- $D.displayLargeNumberAsAlphabet(s)}
-  + ${
- $D.displayLargeNumberAsAlphabet(e)}
- `:$D.displayLargeNumberAsAlphabet(s),this.updateLayout()}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85;
- let t=this.lblMessage.y+this.lblMessage.height+20;
- this.lblReward.x=.5*(this.width-this.lblReward.width),this.lblReward.y=t,t=this.lblReward.y+this.lblReward.height+20,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+60}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt(oit,"DungeonInstantClearResultPopup"),zt(oit,"_instance");
- let ait=oit;
- const cit=class t extends O8{
- constructor(){
- super(),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblCapacity",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblEntryText",new YD("",16768358,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"allyBtns",[]),zt(this,"battleContainer",new Be),zt(this,"btnStart",new QL("전투")),zt(this,"heroList"),zt(this,"selectedSlot",-1),zt(this,"teamKindNums",[]),zt(this,"teamTrans",[]),zt(this,"heroVOs",[]),zt(this,"dungeonVO",null);
- const i=KA.viewMainY,s=Math.max(KA.safeHeight-i,600);
- this.bg.height=s,this.y=KA.safeHeight-s,this.lblTitle.text="던전",this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.lblCapacity.y=this.lblTitle.y,this.addChild(this.lblCapacity);
- const e=this.lblTitle.y+this.lblTitle.height+20;
- this.battleContainer.y=e,this.addChild(this.battleContainer);
- for(let o=0;
- o<t.MAX_ALLIES;
- o++){
- const i=t.SLOT_LAYOUT[o],s=new O4;
- s.scale=.65,s.x=95*(3-i.col),s.y=62*i.row,s.showAtkType=!0,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
- this.recenterBattleContainer();
- const n=e+186+20-20;
- this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
- const h=this.lblEntryText.y+this.lblEntryText.height+12,r=this.bg.height-h-90;
- P4.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new R3(P4,630,r),this.heroList.x=5,this.heroList.y=h,this.addChild(this.heroList),this.btnStart.color=QL.RED,this.btnStart.width=200,this.btnStart.height=45,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- recenterBattleContainer(){
- var t;
- const i=285+((null==(t=this.allyBtns[0])?void 0:t.width)??50);
- this.battleContainer.x=.5*(this.bg.width-i)}
- updateCapacityPosition(){
- this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15}
- async setData(i){
- this.dungeonVO=i,this.lblTitle.text=`${
- Rx.getMapName(i.map)}
-  ${
- i.level}
- `,this.lblEntryText.text=`${
- AG.getText("COMMON_465","입장조건")}
-  : ${
- this.buildConditionText(i)}
- `;
- const s=await $A.getDungeonTeam(i.map);
- s&&s.kindNums&&s.kindNums.length===t.MAX_ALLIES?(this.teamKindNums=[...s.kindNums],this.teamTrans=[...s.trans],this.pruneInvalidTeamEntries()):this.initTeam(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateHeroList(),this.btnStart.text=AG.getText("COMMON_378","도전")}
- buildConditionText(t){
- if(t.prevent>0){
- const i=AG.getText(`TRIBE_${
- t.prevent}
- `,"");
- if(i)return AG.getValueReplace("GAME_562","##",i,`${
- i}
-  제외`)}
- return AG.getText("COMMON_367","없음")}
- getPlacedCount(){
- let i=0;
- for(let s=0;
- s<t.MAX_ALLIES;
- s++)this.teamKindNums[s]>0&&i++;
- return i}
- pruneInvalidTeamEntries(){
- var i;
- const s=(null==(i=this.dungeonVO)?void 0:i.prevent)??0,e=vx.getInstance(),n=this.calcTotalInventory(),h=new Map;
- for(let r=0;
- r<t.MAX_ALLIES;
- r++){
- const t=this.teamKindNums[r];
- if(t<=0)continue;
- const i=e.getBookVO(t);
- if(!i){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- if(s>0&&i.tribe===s){
- this.teamKindNums[r]=-1,this.teamTrans[r]=0;
- continue}
- const o=`${
- t}
- _${
- this.teamTrans[r]}
- `,a=n.get(o)||0,c=h.get(o)||0;
- c>=a?(this.teamKindNums[r]=-1,this.teamTrans[r]=0):h.set(o,c+1)}
- }
- initTeam(){
- var i;
- this.teamKindNums=new Array(t.MAX_ALLIES).fill(-1),this.teamTrans=new Array(t.MAX_ALLIES).fill(0);
- const s=(null==(i=this.dungeonVO)?void 0:i.prevent)??0,e=vx.getInstance().list,n=vx.getInstance();
- let h=0;
- for(let r=0;
- r<e.length&&h<t.MAX_ALLIES;
- r++){
- const t=e[r];
- if(t.kindNum>=1e4)continue;
- const i=n.getBookVO(t.kindNum);
- s>0&&i&&i.tribe===s||(this.teamKindNums[h]=t.kindNum,this.teamTrans[h]=t.trans,h++)}
- }
- updateAllyButtons(){
- const i=Math.max(1,_L.maxWave/10),s=this.getPlacedCount(),e=s>=t.MAX_ALLIES;
- this.lblCapacity.text=`${
- AG.getText("GAME_551","입장가능 영웅")}
-  : ${
- s}
-  / ${
- t.MAX_ALLIES}
- `,this.lblCapacity.textColor=e?16729156:16777215,this.updateCapacityPosition();
- for(let n=0;
- n<t.MAX_ALLIES;
- n++){
- const t=this.allyBtns[n],s=yx.getVO();
- if(this.teamKindNums[n]>0){
- t.visible=!0,s.kindNum=this.teamKindNums[n],s.trans=this.teamTrans[n],s.level=i,t.setDataWith(n,s),t.hideLevel(),t.hideEnhance();
- const e=n===this.selectedSlot;
- t.setAlphaToFrame(e?1:.85),t.selected=e}
- else if(e)t.visible=!1,t.selected=!1;
- else{
- t.visible=!0,s.kindNum=-1,t.setDataWith(n,s),t.hideBackground();
- const i=n===this.selectedSlot;
- t.setAlphaToFrame(i?.9:.4),t.selected=!1}
- }
- }
- calcTotalInventory(){
- const t=new Map,i=vx.getInstance().list;
- for(const e of i){
- if(e.kindNum>=1e4)continue;
- const i=`${
- e.kindNum}
- _${
- e.trans}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const s=vx.getInstance().ownedUnitList;
- for(const e of s)if(!(e.kindNum>=1e4)){
- if(e.count>0){
- const i=`${
- e.kindNum}
- _0`;
- t.set(i,(t.get(i)||0)+e.count)}
- if(e.trans[0]>0){
- const i=`${
- e.kindNum}
- _1`;
- t.set(i,(t.get(i)||0)+e.trans[0])}
- if(e.trans[1]>0){
- const i=`${
- e.kindNum}
- _2`;
- t.set(i,(t.get(i)||0)+e.trans[1])}
- if(e.trans[2]>0){
- const i=`${
- e.kindNum}
- _3`;
- t.set(i,(t.get(i)||0)+e.trans[2])}
- }
- return t}
- updateHeroList(){
- var i;
- x4.removeAll(this.heroVOs);
- const s=new Map;
- for(let r=0;
- r<t.MAX_ALLIES;
- r++){
- if(this.teamKindNums[r]<=0)continue;
- const t=`${
- this.teamKindNums[r]}
- _${
- this.teamTrans[r]}
- `;
- s.set(t,(s.get(t)||0)+1)}
- const e=this.calcTotalInventory(),n=vx.getInstance(),h=(null==(i=this.dungeonVO)?void 0:i.prevent)??0;
- this.heroVOs.push(x4.set(x4.getVO(),-1,0,0,0));
- for(const[t,r]of e){
- const[i,e]=t.split("_"),o=Number(i),a=n.getBookVO(o);
- if(h>0&&a&&a.tribe===h)continue;
- const c=s.get(t)||0;
- this.heroVOs.push(x4.set(x4.getVO(),o,Number(e),r-c,r))}
- this.heroVOs.sort((t,i)=>{
- if(t.kindNum<=0)return-1;
- if(i.kindNum<=0)return 1;
- const s=n.getBookVO(t.kindNum),e=n.getBookVO(i.kindNum);
- if(!s||!e)return 0;
- const h=1e12*s.grade-1e9*s.evolStage+1e6*t.trans-s.tribe;
- return 1e12*e.grade-1e9*e.evolStage+1e6*i.trans-e.tribe-h}
- ),this.heroList.dataProvider=ZI.chunkArray(this.heroVOs,7)}
- onClickAllyHero(i){
- const s=this.teamKindNums[i]<=0,e=this.getPlacedCount()>=t.MAX_ALLIES;
- s&&e||(this.selectedSlot===i?this.selectedSlot=-1:this.selectedSlot=i,this.updateAllyButtons())}
- onClickHeroFromList(i,s){
- if(i<=0){
- if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
- const i=this.selectedSlot;
- this.teamKindNums[i]=-1,this.teamTrans[i]=0;
- let s=-1;
- for(let e=1;
- e<=t.MAX_ALLIES;
- e++){
- const n=(i+e)%t.MAX_ALLIES;
- if(this.teamKindNums[n]>0){
- s=n;
- break}
- }
- this.selectedSlot=s}
- }
- else{
- const e=`${
- i}
- _${
- s}
- `;
- let n=0;
- for(let h=0;
- h<t.MAX_ALLIES;
- h++)this.teamKindNums[h]===i&&this.teamTrans[h]===s&&n++;
- if(n>=(this.calcTotalInventory().get(e)||0))return;
- if(this.selectedSlot>=0){
- if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=t.MAX_ALLIES)return;
- this.teamKindNums[this.selectedSlot]=i,this.teamTrans[this.selectedSlot]=s,this.selectedSlot=-1}
- else{
- if(this.getPlacedCount()>=t.MAX_ALLIES)return;
- for(let e=0;
- e<t.MAX_ALLIES;
- e++)if(this.teamKindNums[e]<=0){
- this.teamKindNums[e]=i,this.teamTrans[e]=s;
- break}
- }
- }
- this.updateAllyButtons(),this.updateHeroList()}
- saveTeamToLocal(){
- this.dungeonVO&&$A.saveDungeonTeam(this.dungeonVO.map,this.teamKindNums,this.teamTrans)}
- async onStartBattle(){
- if(!WG.getInstance().isRunning)return;
- if(!this.dungeonVO)return;
- const t=this.dungeonVO;
- if(0===this.getPlacedCount())return void vV.getInstance().showMessage(AG.getText("GAME_285","전투에 출전할 병사를 슬롯에 추가해 주세요."));
- if(Rx.getInstance().ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_93","던전 티켓이 부족합니다."));
- if(t.maxWave>0&&_L.maxWave<t.maxWave)return void vV.getInstance().showMessage(AG.getValueReplace("GAME_94","##",t.maxWave,`최고 기록이 ${
- t.maxWave}
-  이상이어야 합니다.`));
- const i=await hD.getInstance().dungeon.start(t.id,!0);
- if(!1===i.success)return void mG.getInstance().showError(i);
- _L.setUser(i.body.user),this.saveTeamToLocal(),this.hide();
- const s=Iit.getInstance();
- s.setTeam([...this.teamKindNums],[...this.teamTrans]),s.startBattle(t.map,t.level)}
- show(){
- P4.onHeroClick=this.onClickHeroFromList.bind(this),P4.showAttackType=!0,this.show2()}
- hide(){
- this.saveTeamToLocal(),super.hide()}
- }
- ;
- Kt(cit,"DungeonReadyPopup"),zt(cit,"_instance"),zt(cit,"MAX_ALLIES",10),zt(cit,"SLOT_LAYOUT",[{
- col:0,row:0}
- ,{
- col:0,row:1}
- ,{
- col:0,row:2}
- ,{
- col:1,row:0}
- ,{
- col:1,row:1}
- ,{
- col:1,row:2}
- ,{
- col:2,row:0}
- ,{
- col:2,row:1}
- ,{
- col:2,row:2}
- ,{
- col:3,row:1}
- ]);
- let lit=cit;
- const uit=class t extends aG{
- constructor(){
- super(),zt(this,"lblDesc"),zt(this,"btnGem"),zt(this,"btnAd"),zt(this,"lblCooldown"),zt(this,"requesting",!1),zt(this,"onComplete"),this.lblDesc=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17),this.lblDesc.align="center",aD.setLabelWrapWidth(this.lblDesc,this.width-60),this.btnGem=new UB("UI_GEM",t.GEM_COST.toString()),this.btnGem.lbl.iconScale=.8,this.btnGem.color=UB.GREEN,this.btnGem.width=200,this.btnGem.height=55,this.btnGem.onClick=this.onGemClick.bind(this),this.btnAd=new UB("UI_MOVIE_SMALL",AG.getText("GAME_236","광고")),this.btnAd.lbl.iconScale=.6,this.btnAd.color=UB.BROWN,this.btnAd.width=200,this.btnAd.height=55,this.btnAd.onClick=this.onAdClick.bind(this),this.lblCooldown=new YD("",16737894,aD.DEFAULT_FONT_OPTION_16),this.lblCooldown.align="center",this.contentContainer.addChild(this.lblDesc,this.btnGem,this.btnAd,this.lblCooldown)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showPopup(t){
- this.onComplete=t,this.title=AG.getText("GAME_357","던전 티켓 구매"),this.lblDesc.text=AG.getText("GAME_355","던전 티켓 3장을 구매하시겠습니까?"),this.updateAdState(),this.updateLayout(),this.outSideClickHide=!0,super.show()}
- updateAdState(){
- const i=t.ADS_TYPE,s=JB.getInstance().getDailyRemaining(i),e=JB.getInstance().getCooldownRemaining(i),n=JB.getInstance().isCooldownReady(i);
- if(this.btnAd.text=`${
- AG.getText("GAME_236","광고")}
-  (${
- s}
- /${
- t.DAILY_MAX}
- )`,0===s)this.btnAd.activated=!1,this.lblCooldown.visible=!1;
- else if(!n&&e>0){
- const t=Math.ceil(e/1e3),i=Math.floor(t/60),s=t%60;
- this.lblCooldown.text=`${
- String(i).padStart(2,"0")}
- :${
- String(s).padStart(2,"0")}
- `,this.lblCooldown.visible=!0,this.btnAd.activated=!1}
- else this.lblCooldown.visible=!1,this.btnAd.activated=!0}
- updateLayout(){
- let t=80;
- this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.lblDesc.y=t,t+=this.lblDesc.height+30;
- const i=this.btnGem.width+15+this.btnAd.width,s=.5*(this.width-i);
- this.btnGem.x=s,this.btnGem.y=t,this.btnAd.x=s+this.btnGem.width+15,this.btnAd.y=t,this.lblCooldown.visible?(this.lblCooldown.x=this.btnAd.x+.5*(this.btnAd.width-this.lblCooldown.width),this.lblCooldown.y=t+this.btnAd.height+5,this.height=this.lblCooldown.y+this.lblCooldown.height+40):this.height=t+this.btnAd.height+40}
- async onGemClick(){
- if(this.requesting)return;
- if(_L.gem<t.GEM_COST)return void mG.getInstance().show(AG.getText("COMMON_352","보석이 부족합니다."));
- this.requesting=!0;
- const i=await hD.getInstance().dungeon.buyTicket(!0);
- this.requesting=!1,!1!==i.success?(i.body.user&&(_L.setUser(i.body.user),UV.getInstance().updateAll()),i.body.dungeon&&(Rx.getInstance().setData(i.body.dungeon),Wx.getInstance().setDungeonCores(i.body.dungeon)),this.hide(),this.onComplete&&this.onComplete()):mG.getInstance().showError(i)}
- async onAdClick(){
- try{
- const t=ez.getInstance().checkApproved();
- if(!t.approved)return void mG.getInstance().show(t.errorMessage)}
- catch{
- return void mG.getInstance().show(AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 '안전 모드'로 제한됩니다."))}
- if(this.requesting)return;
- const i=t.ADS_TYPE;
- 0!==JB.getInstance().getDailyRemaining(i)?JB.getInstance().isCooldownReady(i)&&(this.requesting=!0,_L.canSkipAds?(TU.trackAd("ad_skip",String(i)),await this.onAdComplete()):(TU.trackAd("ad_try",String(i)),await jL(async()=>{
- TU.trackAd("ad_success",String(i)),await this.onAdComplete()}
- ,i,()=>{
- TU.trackAd("ad_fail",String(i))}
- )),this.requesting=!1):mG.getInstance().show(AG.getText("GAME_358","오늘 최대 횟수를 초과했습니다."))}
- async onAdComplete(){
- const i=t.ADS_TYPE,s=await hD.getInstance().ads.watch(i,!0);
- !1!==s.success?(aV.getInstance().markDirty(),s.body.user&&(_L.setUserData(s.body.user),UV.getInstance().updateAll()),s.body.ads&&JB.getInstance().setData(s.body.ads),s.body.dungeon&&(Rx.getInstance().setData(s.body.dungeon),Wx.getInstance().setDungeonCores(s.body.dungeon)),this.hide(),this.onComplete&&this.onComplete()):mG.getInstance().showError(s)}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(uit,"DungeonTicketPopup"),zt(uit,"_instance"),zt(uit,"ADS_TYPE",4),zt(uit,"GEM_COST",100),zt(uit,"DAILY_MAX",5);
- let dit=uit;
- const fit=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon"),zt(this,"lblName",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblProgress",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnEnter",new aK("입장",110)),zt(this,"core",new We(ZA.getTexture("UI_Ekkorr","Core1"))),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Ekkorr","Dungeon1")),this.icon.x=4,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblName.x=130,this.lblName.y=18,this.addChild(this.lblName),this.core.scale.set(.8),this.core.x=130,this.core.y=18,this.addChild(this.core),this.lblProgress.x=this.lblName.x,this.lblProgress.y=this.lblName.y+this.lblName.height+5,this.addChild(this.lblProgress),this.btnEnter.width=110,this.btnEnter.height=60,this.btnEnter.x=this.bg.width-this.btnEnter.width-10,this.btnEnter.y=.5*(this.bg.height-this.btnEnter.height),this.addChild(this.btnEnter),this.btnEnter.on("pointertap",this.onEnter,this)}
- setData(t){
- this.data=t;
- const i=t,s=i.icon;
- this.icon.texture=ZA.getTexture("UI_Ekkorr",s),this.lblName.text=AG.getText(i.getNameKey(),i.name);
- const e=Rx.getInstance().getByMap(i.main)[0];
- if(e.prevent>0){
- const t=AG.getText("TRIBE_"+e.prevent,"종족");
- this.lblProgress.text=AG.getText("GAME_307","##종족 입장제한").replace("##",t),this.lblProgress.visible=!0}
- else this.lblProgress.visible=!1;
- this.core.texture=ZA.getTexture("UI_Ekkorr","Core"+i.main),this.core.x=this.lblName.x+this.lblName.width+5,this.core.y=.5*(this.lblName.height-this.core.height)+this.lblName.y,this.btnEnter.text=AG.getText("COMMON_376","입장")}
- onEnter(){
- const t=this.data;
- kit.getInstance().setData(t.main),P6.getInstance().currentSubView=kit.getInstance()}
- get height(){
- return this.bg.height+3}
- }
- ;
- Kt(fit,"DungeonMainItemRenderer");
- let pit=fit;
- const git=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_363","던전 안내");
- const t=[`1. ${
- AG.getText("GAME_364","던전에서 [던전재료]를 획득할 수 있습니다.")}
- `,`2. ${
- AG.getText("GAME_365"," 던전 티켓은 이길 경우에만 소모됩니다.")}
- `,`3. ${
- AG.getText("GAME_366","던전 전투에서 아군 영웅의 레벨은 기사단 레벨이 됩니다.")}
- `,`4. ${
- AG.getText("GAME_367","던전 재료는 유물을 구입하거나, 업그레이드하는데 사용됩니다.")}
- `,`5. ${
- AG.getText("GAME_368","각 던전마다 종족 제한이 있습니다.")}
- `,`6. ${
- AG.getText("GAME_369","파란 보호막은 마법에 면역이고, 노란 보호막은 물리에 면역입니다.")}
- `];
- this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.4*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(git,"DungeonGuidePopup"),zt(git,"_instance");
- let mit=git;
- const wit=class t extends D4{
- constructor(){
- super(),zt(this,"btnGuide"),zt(this,"lblTicket",new GB("DungeonTick","5",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblTimer",new GB("Icon_Time02","00:00",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"btnBuyTicket",new UB("DungeonTick","")),zt(this,"onBuyComplete"),zt(this,"refreshCooldown",0),zt(this,"requestPending2",!1),this.closeBtn.visible=!0,this.closeBtn.interactive=!0,this.closeBtn.on("pointertap",this.onBack,this),this.updateLanguage(),this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- mit.getInstance().showGuide()}
- ),this.btnBuyTicket.color=UB.BROWN,this.btnBuyTicket.lbl.iconScale=.4,this.btnBuyTicket.width=120,this.btnBuyTicket.height=50,this.btnBuyTicket.x=this.closeBtn.x-this.btnBuyTicket.width-5,this.btnBuyTicket.y=.5*(this.bg.height-this.btnBuyTicket.height),this.addChild(this.btnBuyTicket),this.btnBuyTicket.on("pointertap",this.onBuyTicket,this),this.lblTicket.iconScale=.4,this.lblTicket.text="0/0",this.lblTicket.y=this.btnBuyTicket.y,this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.text="00:00",this.lblTimer.y=this.lblTicket.y+this.lblTicket.height,this.addChild(this.lblTimer),this.updateLayout()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-5,this.lblTimer.x=this.btnBuyTicket.x-this.lblTimer.width-5}
- onBack(){
- UV.getInstance().setMode(GV.NORMAL),Ght.getInstance().setData(),P6.getInstance().currentSubView=Ght.getInstance()}
- onBuyTicket(){
- dit.getInstance().showPopup(()=>{
- this.updateTicketInfo(),this.onBuyComplete&&this.onBuyComplete()}
- )}
- setData(){
- this.updateLanguage(),this.updateTicketInfo(),this.updateTimer(),this.updateLayout()}
- updateTicketInfo(){
- const t=Rx.getInstance();
- this.lblTicket.text=`${
- t.ticket}
-  / ${
- t.maxTicket}
- `,this.updateLayout()}
- updateTimer(){
- const t=Rx.getInstance();
- if(t.ticket>=t.maxTicket)return void(this.lblTimer.text="00:00");
- const i=6e5-(ix.time-t.ticketTime);
- if(i<=1e3&&ix.time>this.refreshCooldown)return this.refreshCooldown=ix.time+1e4,void this.refreshFromServer();
- const s=Math.floor(i/1e3),e=Math.floor(s/60),n=s%60;
- this.lblTimer.text=`${
- String(e).padStart(2,"0")}
- :${
- String(n).padStart(2,"0")}
- `}
- async refreshFromServer(){
- if(1==this.requestPending2)return;
- this.setRequestPending2(!0);
- const t=await hD.getInstance().dungeon.getInfo();
- !1!==t.success?(Rx.getInstance().setData(t.body.dungeon),Wx.getInstance().setDungeonCores(t.body.dungeon),this.updateTicketInfo(),UV.getInstance().updateCores(),this.setRequestPending2(!1)):this.setRequestPending2(!1)}
- setRequestPending2(t){
- this.requestPending2=t}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_74","던전")),this.btnBuyTicket.text=AG.getText("COMMON_7","구매")}
- }
- ;
- Kt(wit,"DungeonSubMenu"),zt(wit,"instance");
- let vit=wit;
- const bit=class{
- constructor(t,i,s,e){
- zt(this,"main",1),zt(this,"name",""),zt(this,"nameOrig",""),zt(this,"icon",""),zt(this,"cleared",0),this.main=t,this.name=i,this.nameOrig=i,this.icon=s,this.cleared=e}
- getNameKey(){
- return`DUNGEON_MAIN_${
- this.main}
- `}
- }
- ;
- Kt(bit,"DungeonMainVO");
- let yit=bit;
- const _it=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"voList",[]),zt(this,"lastTimerUpdate",0),zt(this,"count",0),zt(this,"initialized",!1),this.list=new zI(pit,630,KA.listHeight),this.list.x=5,this.list.y=vit.getInstance().height,this.addChild(this.list),this.addChild(vit.getInstance()),this.voList.push(new yit(1,"킹슬라임","Dungeon1",0)),this.voList.push(new yit(2,"오크플라워","Dungeon2",0)),this.voList.push(new yit(3,"혼토드","Dungeon3",0)),this.voList.push(new yit(4,"다크허밋","Dungeon4",0)),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- get className(){
- return"DungeonSubView"}
- onAdded(){
- GM.getInstance().add(this.onFrame,this),UV.getInstance().setMode(GV.DUNGEON),UV.getInstance().updateCores()}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- var t;
- this.count-- >0||(this.count=30,null!=(null==(t=this.parent)?void 0:t.parent)?ix.time-this.lastTimerUpdate>=1e3&&(this.lastTimerUpdate=ix.time,vit.getInstance().updateTimer()):GM.getInstance().remove(this.onFrame,this))}
- async setData(){
- if(vit.getInstance().setData(),this.initialized)return void this.refreshList();
- const t=await hD.getInstance().dungeon.getInfo(!0);
- !1!==t.success?(this.initialized=!0,_L.setUser(t.body.user),Rx.getInstance().setData(t.body.dungeon),Wx.getInstance().setDungeonCores(t.body.dungeon),UV.getInstance().updateCores(),this.refreshList()):mG.getInstance().showError(t)}
- refreshList(){
- HV.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"Dungeon");
- for(let t=0;
- t<4;
- t++)this.voList[t].cleared=Rx.getInstance().cleared[t];
- this.list.dataProvider=this.voList}
- updateLanguage(){
- let t;
- const i=this.voList.length;
- for(let s=0;
- s<i;
- ++s)t=this.voList[s],t.name=AG.getText(t.getNameKey(),t.nameOrig);
- this.setData(),vit.getInstance().updateLanguage()}
- }
- ;
- Kt(_it,"DungeonSubView"),zt(_it,"instance");
- let Mit=_it;
- const Eit=class t extends D4{
- constructor(){
- super(),zt(this,"lblTicket",new GB("DungeonTick","5",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblTimer",new GB("Icon_Time02","00:00",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"btnBuyTicket",new UB("DungeonTick","")),zt(this,"onBuyComplete"),zt(this,"refreshCooldown",0),zt(this,"requestPending2",!1),this.lblTicket.iconScale=.4,this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.text="00:00",this.lblTimer.x=this.lblTicket.x+80,this.lblTimer.y=this.lblTicket.y,this.addChild(this.lblTimer),this.closeBtn.visible=!0,this.addChild(this.closeBtn),this.btnBuyTicket.color=UB.BROWN,this.btnBuyTicket.lbl.iconScale=.4,this.btnBuyTicket.width=120,this.btnBuyTicket.height=50,this.btnBuyTicket.x=this.closeBtn.x-this.btnBuyTicket.width-5,this.btnBuyTicket.y=.5*(this.bg.height-this.btnBuyTicket.height),this.addChild(this.btnBuyTicket),this.lblTicket.text="5/5",this.lblTicket.y=this.btnBuyTicket.y,this.lblTimer.y=this.lblTicket.y+this.lblTicket.height,this.closeBtn.eventMode="static",this.btnBuyTicket.on("pointertap",this.onBuyTicket,this),this.closeBtn.on("pointertap",this.onBack,this),this.updateLayout()}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- updateLayout(){
- this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-5,this.lblTimer.x=this.btnBuyTicket.x-this.lblTimer.width-5}
- onBack(){
- Mit.getInstance().setData(),P6.getInstance().currentSubView=Mit.getInstance()}
- updateTicketInfo(){
- const t=Rx.getInstance();
- this.lblTicket.text=`${
- t.ticket}
-  / ${
- t.maxTicket}
- `,this.updateAdButton(),this.updateLayout()}
- updateAdButton(){
- this.btnBuyTicket.text=AG.getText("COMMON_7","구매")}
- updateTimer(){
- const t=Rx.getInstance();
- if(t.ticket>=t.maxTicket)return void(this.lblTimer.text="00:00");
- const i=6e5-(ix.time-t.ticketTime);
- if(i<=1e3&&ix.time>this.refreshCooldown)return this.refreshCooldown=ix.time+1e4,void this.refreshFromServer();
- const s=Math.floor(i/1e3),e=Math.floor(s/60),n=s%60;
- this.lblTimer.text=`${
- String(e).padStart(2,"0")}
- :${
- String(n).padStart(2,"0")}
- `,this.updateLayout()}
- async refreshFromServer(){
- if(1==this.requestPending2)return;
- this.setRequestPending2(!0);
- const t=await hD.getInstance().dungeon.getInfo();
- !1!==t.success?(Rx.getInstance().setData(t.body.dungeon),Wx.getInstance().setDungeonCores(t.body.dungeon),this.updateTicketInfo(),UV.getInstance().updateCores(),this.setRequestPending2(!1)):this.setRequestPending2(!1)}
- onBuyTicket(){
- dit.getInstance().showPopup(()=>{
- this.updateTicketInfo(),this.onBuyComplete&&this.onBuyComplete()}
- )}
- setRequestPending2(t){
- this.requestPending2=t}
- updateLanguage(){
- }
- }
- ;
- Kt(Eit,"DungeonDetailSubMenu"),zt(Eit,"instance"),zt(Eit,"DUNGEON_ADS_TYPE",4),zt(Eit,"DUNGEON_ADS_DAILY_MAX",5);
- let Ait=Eit;
- const Sit=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon"),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblReward",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnChallenge",new aK("도전",110)),zt(this,"btnInstantClear",new aK("즉시완료",110)),zt(this,"lblDungeonMaterial",new GB("Core1","0",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"requestPending2",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Ekkorr","Dungeon1")),this.icon.scale=1,this.icon.x=4,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblName.x=130,this.lblName.y=15,this.addChild(this.lblName),this.lblDungeonMaterial.x=130,this.lblDungeonMaterial.y=this.lblName.y+this.lblName.height+7,this.addChild(this.lblDungeonMaterial);
- const t=.5*(this.bg.height-62);
- this.btnChallenge.height=62,this.btnChallenge.y=t,this.addChild(this.btnChallenge),this.btnInstantClear.height=62,this.btnInstantClear.y=t,this.addChild(this.btnInstantClear),this.btnChallenge.on("pointertap",this.onChallenge,this),this.btnInstantClear.on("pointertap",this.onInstantClear,this)}
- onClick(t,i){
- t<this.btnInstantClear.x-40&&rit.getInstance().showPopup()}
- setData(t){
- this.data=t;
- const i=t,s=Rx.getInstance().getClearedLevel(i.map)>=i.level;
- this.lblName.text=`${
- Rx.getMapName(i.map)}
-  ${
- i.level}
-   (Lv ${
- (i.unitLevel/10).toFixed(1)}
- )`,this.icon.texture=ZA.getTexture("UI_Ekkorr",`Dungeon${
- i.map}
- `),this.lblDungeonMaterial.texture=ZA.getTexture("UI_Ekkorr",`Core${
- i.map}
- `);
- const e=i.cores[i.map-1],n=this.getBonusCore(e);
- this.lblDungeonMaterial.text=n>0?`${
- $D.displayLargeNumberAsAlphabet(e)}
-  + ${
- $D.displayLargeNumberAsAlphabet(n)}
- `:$D.displayLargeNumberAsAlphabet(e),this.btnChallenge.visible=!0,this.btnInstantClear.visible=s,this.btnChallenge.text=AG.getText("COMMON_378","도전"),this.btnInstantClear.text=AG.getText("COMMON_379","즉시완료"),this.btnChallenge.x=this.bg.width-this.btnChallenge.width-10,this.btnInstantClear.x=this.btnChallenge.x-this.btnInstantClear.width-5}
- getBonusCore(t){
- const i=KN.getInstance().getGameplayMultiplier(xN.Core);
- return Math.floor(t*i)-t}
- async onChallenge(){
- if(!WG.getInstance().isRunning)return;
- const t=this.data;
- if(Rx.getInstance().ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_93","던전 티켓이 부족합니다."));
- if(t.maxWave>0&&_L.maxWave<t.maxWave)return void vV.getInstance().showMessage(AG.getValueReplace("GAME_94","##",t.maxWave,`최고 기록이 ${
- t.maxWave}
-  이상이어야 합니다.`));
- const i=lit.getInstance();
- await i.setData(t),i.show()}
- async onInstantClear(){
- if(!WG.getInstance().isRunning)return;
- if(Rx.getInstance().ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_93","던전 티켓이 부족합니다."));
- if(1==this.requestPending2)return;
- this.setRequestPending2(!0);
- const t=this.data,i=await hD.getInstance().dungeon.instantClear(t.id,!0);
- if(!1===i.success)return this.setRequestPending2(!1),void mG.getInstance().showError(i);
- _L.setUser(i.body.user),Rx.getInstance().setData(i.body.dungeon),Wx.getInstance().setDungeonCores(i.body.dungeon),kit.getInstance().refreshList(),Ait.getInstance().updateTicketInfo(),UV.getInstance().updateCores(),aV.getInstance().markDirty(),this.setRequestPending2(!1);
- const s=t.cores[t.map-1],e=this.getBonusCore(s);
- ait.getInstance().setData(t.map,t.level,s,e),ait.getInstance().show()}
- setRequestPending2(t){
- this.requestPending2=t}
- get height(){
- return this.bg.height+3}
- }
- ;
- Kt(Sit,"DungeonItemRenderer");
- let Tit=Sit;
- const Cit=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"selectedMap",0),zt(this,"lastTimerUpdate",0),zt(this,"count",0),this.list=new zI(Tit,630,KA.listHeight),this.list.x=5,this.list.y=Ait.getInstance().height,this.addChild(this.list),this.addChild(Ait.getInstance()),Ait.getInstance().onBuyComplete=()=>{
- this.refreshList()}
- ,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(){
- GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- var t,i;
- this.count-- >0||(this.count=30,null!=(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent)?ix.time-this.lastTimerUpdate>=1e3&&(this.lastTimerUpdate=ix.time,Ait.getInstance().updateTimer()):GM.getInstance().remove(this.onFrame,this))}
- setData(t){
- HV.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"DungeonDetail"),this.selectedMap=t,this.lastTimerUpdate=0;
- const i=Rx.getMapName(t);
- Ait.getInstance().setTitle(i),Ait.getInstance().updateTicketInfo(),Ait.getInstance().updateTimer(),this.refreshList()}
- refreshList(){
- const t=Rx.getInstance(),i=t.getByMap(this.selectedMap),s=t.getClearedLevel(this.selectedMap),e=[];
- for(const n of i){
- const t=s>=n.level,i=n.level<=1||s>=n.level-1;
- if(!t&&!i)break;
- e.push(n)}
- e.reverse(),this.list.dataProvider=e}
- onDungeonStart(t){
- }
- get className(){
- return"DungeonDetailSubView"}
- updateLanguage(){
- this.refreshList();
- const t=Rx.getMapName(this.selectedMap);
- Ait.getInstance().setTitle(t)}
- }
- ;
- Kt(Cit,"DungeonDetailSubView"),zt(Cit,"instance");
- let kit=Cit;
- const Oit=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.DUNGEON),zt(this,"speedHelper",new U8("ef2.dungeon.battleSpeed")),zt(this,"spawnVo",yx.getVO()),zt(this,"dungeonTeamVOs",[]),zt(this,"presetTeamKindNums",null),zt(this,"presetTeamTrans",null),zt(this,"ENEMY_CENTER_X",460),zt(this,"ENEMY_CENTER_Y",200),zt(this,"HERO_CENTER_X",100),zt(this,"HERO_CENTER_Y",540),zt(this,"dungeonId",0),zt(this,"dungeonLevel",1),zt(this,"enemyCastle",null),zt(this,"initialEnemyCount",0),zt(this,"defeatGraceStartFrame",-1),zt(this,"enemyKindNums",[]),zt(this,"enemyCount",8),zt(this,"enemyUnitLevel",1),zt(this,"bossShield",0),zt(this,"mobShield",0),zt(this,"dungonBossVO",yx.getVO())}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- setTeam(t,i){
- this.presetTeamKindNums=[...t],this.presetTeamTrans=[...i]}
- async startBattle(t,i){
- this.cleanup(),DB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.defeatGraceStartFrame=-1,this.dungeonId=t,this.dungeonLevel=i;
- const s=Rx.getInstance().getVOByMapLevel(t,i),e={
- name:AG.getValue(`DUNGEON_MAIN_${
- t}
- `),stage:i,reward:0,entryLimit:""}
- ;
- s&&(e.reward=null==s?void 0:s.cores[s.map-1],s.prevent>0&&(e.entryLimit=AG.getText(`TRIBE_${
- s.prevent}
- `,"")));
- const n=jit.getInstance();
- n.setDungeonData(e),this.speedHelper.enter(),this.speedHelper.attachButton(n,n.panelWidth-124,12),this.enemyKindNums=s?String(s.kindNums).split("|").map(t=>parseInt(t)).filter(t=>!isNaN(t)):[],this.enemyCount=s&&parseInt(String(s.numUnits))||8,this.enemyUnitLevel=(null==s?void 0:s.unitLevel)??1,this.bossShield=(null==s?void 0:s.bossShield)??0,this.mobShield=(null==s?void 0:s.mobShield)??0;
- const h=(null==s?void 0:s.boss)??-1;
- h>0&&(this.dungonBossVO.id=0,this.dungonBossVO.kindNum=h,this.dungonBossVO.level=(null==s?void 0:s.bossLevel)??i,this.dungonBossVO.enhance=0);
- const r={
- 1:"KingSlime",2:"OrcFlower",3:"HammerMole",4:"DarkHermit"}
- [t];
- if(r){
- const t="ktx2";
- await ZA.generateTexture(r,t,!1)}
- for(const a of this.dungeonTeamVOs)a.remove();
- this.dungeonTeamVOs.length=0;
- const o=(null==s?void 0:s.prevent)??0;
- if(this.presetTeamKindNums&&this.presetTeamTrans){
- for(let t=0;
- t<this.presetTeamKindNums.length&&this.dungeonTeamVOs.length<10;
- t++){
- const i=this.presetTeamKindNums[t],s=this.presetTeamTrans[t]||0;
- if(i<=0||i>=1e4)continue;
- const e=vx.getInstance().getBookVO(i);
- if(!e)continue;
- if(o>0&&e.tribe===o)continue;
- const n=yx.getVO();
- n.id=-1,n.kindNum=i,n.trans=s,n.level=.1*_L.maxWave,n.enhance=0,this.dungeonTeamVOs.push(n)}
- this.presetTeamKindNums=null,this.presetTeamTrans=null}
- else{
- const t=vx.getInstance().list,i=Math.min(t.length,10);
- for(let s=0;
- s<i;
- s++){
- const i=t[s];
- if(i.kindNum>=1e4)continue;
- if(o>0&&i.tribe===o)continue;
- const e=yx.getVO();
- e.id=-1,e.kindNum=i.kindNum,e.trans=i.trans,e.level=.1*_L.maxWave,e.enhance=0,this.dungeonTeamVOs.push(e)}
- }
- h>0?await this.setupEnemyCastle():this.enemyCastle=null,await this.setupEnemies(),await this.setupHeroTeam(),this.setupEnemyLists(),N9t.getInstance().switchToBattle(this,{
- dungeonId:t}
- ),this.updateZIndexSorting(),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),Ftt.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),WG.getInstance().add(this.execute,this)}
- async setupEnemyCastle(){
- if(!this.dungonBossVO)return;
- this.enemyCastle=await g3.getInstance().getUnit(this.dungonBossVO.className),this.enemyCastle.setData(this.dungonBossVO),this.enemyCastle.maxRevive=0,this.enemyCastle.numRevive=0,this.enemyCastle.reviveInterval=0,this.enemyCastle.showTombstone=!1;
- const t=KN.getInstance().getMultiplier(this.enemyCastle.unitType,this.enemyCastle.tribe,IN.DungeonBossHp,void 0,!1,0,NN.Normal);
- this.enemyCastle.maxHp*=4/t,this.enemyCastle.baseMaxHp=this.enemyCastle.orgMaxHp=this.enemyCastle.health=this.enemyCastle.maxHp,this.enemyCastle.orgMoveSpd=this.enemyCastle.moveSpd=1.3*this.enemyCastle.moveSpd,this.enemyCastle.isAlive=!0,this.enemyCastle.stayAfterDeath=!0,this.enemyCastle.isImmovable=!0,this.enemyCastle.resetToIdle(),this.enemyCastle.battleController=this,this.enemyCastle.initDelay=20,this.enemyCastle.x=this.ENEMY_CENTER_X,this.enemyCastle.y=this.ENEMY_CENTER_Y,this.enemyCastle.tx=this.ENEMY_CENTER_X,this.enemyCastle.ty=this.ENEMY_CENTER_Y,this.enemyCastle.xDefault=this.ENEMY_CENTER_X,this.enemyCastle.yDefault=this.ENEMY_CENTER_Y,this.enemyCastle.enablePatrol(this.ENEMY_CENTER_X,this.ENEMY_CENTER_Y,0),this.applyShield(this.enemyCastle,this.bossShield),this.enemyCastle.lookAt(-1),tB.getInstance().addChild(this.enemyCastle)}
- async setupEnemies(){
- if(0===this.enemyKindNums.length)return;
- const t=this.HERO_CENTER_X-this.ENEMY_CENTER_X,i=this.HERO_CENTER_Y-this.ENEMY_CENTER_Y,s=Math.sqrt(t*t+i*i),e=t/s,n=i/s,h=-n,r=e;
- for(let o=0;
- o<this.enemyCount;
- o++){
- const t=this.enemyKindNums[this.random.nextInt(this.enemyKindNums.length)],i=vx.getInstance().getBookVO(t);
- if(!i)continue;
- const s=await g3.getInstance().getUnit(i.className);
- s.battleController=this,this.initializeEnemyUnitByKindNum(s,t,this.enemyUnitLevel);
- const a=KN.getInstance().getMultiplier(s.unitType,s.tribe,IN.DungeonNormalHp,void 0,!1,0,NN.Normal);
- s.maxHp*=4/a,s.health=s.maxHp,s.orgMoveSpd=s.moveSpd=1.3*s.moveSpd;
- const c=80+48*Math.floor(o/6),l=56*(o%6-2.5);
- s.x=this.ENEMY_CENTER_X+e*c+h*l,s.y=this.ENEMY_CENTER_Y+n*c+r*l,s.xDefault=this.HERO_CENTER_X,s.yDefault=this.HERO_CENTER_Y,this.applyShield(s,this.mobShield),s.lookAt(-1),tB.getInstance().addChild(s),this.enemyList.push(s)}
- this.initialEnemyCount=this.enemyList.length}
- async setupHeroTeam(){
- var t,i;
- const s=this.dungeonTeamVOs;
- if(!s||0===s.length)return;
- KN.getInstance().setBattleContext(NN.Dungeon),KN.getInstance().recalculate();
- const e=this.ENEMY_CENTER_X-this.HERO_CENTER_X,n=this.ENEMY_CENTER_Y-this.HERO_CENTER_Y,h=Math.sqrt(e*e+n*n),r=e/h,o=n/h,a=-o,c=r,l=[];
- for(let u=0;
- u<s.length;
- u++){
- const t=s[u],i=await g3.getInstance().getUnit(t.className);
- t.level=Math.max(1,_L.maxWave/10),t.enhance=0,i.kindNum=t.kindNum,i.setData(t),i.numBlock=0,i.baseMaxHp*=4,i.baseMoveSpd*=1.3,KN.getInstance().applyToHero(i),i.health=i.maxHp,i.battleController=this,i.initDelay=0,i.showTombstone=!1,i.maxRevive=0,i.reviveInterval=0,i.totalDamageDealt=0,l.push(i)}
- l.sort((t,i)=>(t.unitType===sx.MELEE?0:1)-(i.unitType===sx.MELEE?0:1));
- for(let u=0;
- u<l.length;
- u++){
- const s=l[u],e=Math.floor(u/3),n=60*(u%3-(Math.min(3,l.length-3*e)-1)/2),h=55*e;
- s.x=this.HERO_CENTER_X+r*(50-h)+a*n,s.y=this.HERO_CENTER_Y+o*(50-h)+c*n,s.xDefault=(null==(t=this.enemyCastle)?void 0:t.x)??this.ENEMY_CENTER_X,s.yDefault=(null==(i=this.enemyCastle)?void 0:i.y)??this.ENEMY_CENTER_Y,s.lookAt(1),s.isAir&&s.onFlyEnter(!0),tB.getInstance().addChild(s),this.friendList.push(s)}
- }
- setupEnemyLists(){
- this.enemyCastle&&!this.enemyList.includes(this.enemyCastle)&&this.enemyList.push(this.enemyCastle);
- const t=this.friendList;
- for(const i of this.friendList)i.enemyList=this.enemyList,i.allyList=this.friendList;
- for(const i of this.enemyList)i.enemyList=t,i.allyList=this.enemyList;
- this.enemyCastle&&(this.enemyCastle.enemyList=t,this.enemyCastle.allyList=this.enemyList)}
- initializeEnemyUnit(t,i,s=1){
- const e=vx.getInstance().bookList;
- e.length;
- const n=e.find(t=>t.className===i);
- if(!n)return t.initDelay=0,t.showTombstone=!1,t.atkRange2=t.atkRange*t.atkRange,void(t.detectRange2=t.detectRange*t.detectRange);
- this.spawnVo.id=-1,this.spawnVo.kindNum=n.kindNum,this.spawnVo.level=s,this.spawnVo.enhance=0,t.setData(this.spawnVo),t.initDelay=0,t.showTombstone=!1,t.maxRevive=0,t.reviveInterval=0}
- initializeEnemyUnitByKindNum(t,i,s=1){
- this.spawnVo.id=-1,this.spawnVo.kindNum=i,this.spawnVo.level=s,this.spawnVo.enhance=0,t.setData(this.spawnVo),t.initDelay=0,t.showTombstone=!1,t.maxRevive=0,t.reviveInterval=0,t.numBlock=0}
- cleanup(){
- KN.getInstance().setBattleContext(NN.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.initialEnemyCount=0,this.defeatGraceStartFrame=-1;
- for(const t of this.dungeonTeamVOs)t.remove();
- this.dungeonTeamVOs.length=0;
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- this.enemyCastle&&(this.enemyCastle.disablePatrol(),this.enemyCastle.remove(),this.enemyCastle=null),super.cleanup()}
- applyShield(i,s){
- 1===s?i.showPhysicalShield(t.SHIELD_DURATION):2===s&&i.showMagicShield(t.SHIELD_DURATION)}
- async restartDungeon(){
- this.cleanup(),await this.startBattle(this.dungeonId,this.dungeonLevel)}
- getDungeonInfo(){
- return{
- dungeonId:this.dungeonId,level:this.dungeonLevel,remainingEnemies:this.enemyList.filter(t=>!t.removed).length,totalEnemies:this.enemyCount,castleAlive:!!this.enemyCastle&&!this.enemyCastle.removed,heroesAlive:this.friendList.filter(t=>!t.removed).length,totalHeroes:this.friendList.length}
- }
- getEnemyCastle(){
- return this.enemyCastle}
- checkVictory(){
- return this.enemyCastle?!this.enemyCastle.isAlive:0!==this.initialEnemyCount&&this.enemyList.every(t=>!t.isAlive)}
- checkDefeat(){
- return this.getRemainingTimeSeconds()<=0||(0===this.friendList.length?(this.defeatGraceStartFrame=-1,!1):this.friendList.every(t=>!t.isAlive)?-1===this.defeatGraceStartFrame?(this.defeatGraceStartFrame=this.battleTime,!1):this.battleTime-this.defeatGraceStartFrame>=t.DEFEAT_GRACE_FRAMES:(this.defeatGraceStartFrame=-1,!1))}
- getRemainingTimeSeconds(){
- const i=t.TIME_LIMIT_FRAMES-this.battleTime;
- return Math.max(0,Math.ceil(i/60))}
- onVictoryCallback(){
- Ftt.getInstance().freeze(),setTimeout(async()=>{
- WG.getInstance().remove(this.execute,this),KN.getInstance().setBattleContext(NN.Normal);
- const t=await hD.getInstance().dungeon.end(!0,!0);
- if(!1===t.success)return void mG.getInstance().showError(t);
- _L.setUser(t.body.user),Rx.getInstance().setData(t.body.dungeon),Wx.getInstance().setDungeonCores(t.body.dungeon),aV.getInstance().markDirty();
- const i=Rx.getInstance().getVOByMapLevel(this.dungeonId,this.dungeonLevel),s=(null==i?void 0:i.map)??0,e=i?i.cores[s-1]:0;
- V8.getInstance().showVictory(()=>{
- kit.getInstance().refreshList(),Ait.getInstance().updateTicketInfo(),UV.getInstance().updateCores()}
- ,s,e)}
- ,2e3)}
- onDefeatCallback(){
- Ftt.getInstance().freeze(),setTimeout(async()=>{
- WG.getInstance().remove(this.execute,this),KN.getInstance().setBattleContext(NN.Normal);
- const t=await hD.getInstance().dungeon.end(!1,!0);
- if(!1===t.success)return void mG.getInstance().showError(t);
- _L.setUser(t.body.user),Rx.getInstance().setData(t.body.dungeon),aV.getInstance().markDirty();
- const i=this.dungeonId,s=this.dungeonLevel;
- V8.getInstance().showDefeat(async()=>{
- kit.getInstance().refreshList(),Ait.getInstance().updateTicketInfo();
- const t=Rx.getInstance().getVOByMapLevel(i,s);
- if(t){
- const i=lit.getInstance();
- await i.setData(t),i.show()}
- }
- )}
- ,2e3)}
- returnToMain(){
- }
- scheduleReturnToMain(){
- }
- hide(){
- super.hide(),this.enemyCastle&&(this.enemyCastle.visible=!1)}
- show(){
- super.show(),this.enemyCastle&&(this.enemyCastle.visible=!0)}
- }
- ;
- Kt(Oit,"DungeonBattleController"),zt(Oit,"instance"),zt(Oit,"TIME_LIMIT_FRAMES",3600),zt(Oit,"DEFEAT_GRACE_FRAMES",60),zt(Oit,"SHIELD_DURATION",3600);
- let Iit=Oit;
- const xit=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnCancel",new kU("","","아니오",.7,160,70)),zt(this,"btnConfirm",new kU("","","예",.8,160,70)),this.title="";
- let t=AG.getText("GAME_298","던전전투를 포기하시겠습니까?")+"\n";
- t+=AG.getText("GAME_299","전투를 포기하면, 던전 재료를 획득할 수 없습니다.")+"\n",this.lblMessage.text=t,this.lblMessage.align="center",this.contentContainer.addChild(this.lblMessage),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=AG.getText("COMMON_400","아니오"),this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_399","예"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.btnClose.visible=!1,this.outSideClickHide=!1,this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- show(){
- let t=AG.getText("GAME_298","던전전투를 포기하시겠습니까?")+"\n";
- t+=AG.getText("GAME_299","전투를 포기하면, 던전 재료를 획득할 수 없습니다.")+"\n",this.lblMessage.text=t,this.btnCancel.text=AG.getText("COMMON_400","아니오"),this.btnConfirm.text=AG.getText("COMMON_399","예"),this.updateLayout(),super.show()}
- updateLayout(){
- const t=.5*this.width;
- this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=90;
- const i=this.lblMessage.y+this.lblMessage.height+40,s=this.btnCancel.width+16+this.btnConfirm.width;
- this.btnCancel.x=t-.5*s,this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+60}
- async onConfirmClick(){
- await hD.getInstance().dungeon.end(!1,!0),N9t.getInstance().returnToIdleBattle(),this.hide()}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onBackButton(){
- return!0}
- }
- ;
- Kt(xit,"DungeonQuitPopup"),zt(xit,"_instance");
- let Nit=xit;
- const Pit=56,Rit=36,Dit=[16729156,16746496,16763904,6741316,4500223,13404415],Lit=new Sg({
- fontFamily:"Arial",fill:16772744,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:14,fontWeight:"bold"}
- ),Git=new Sg({
- fontFamily:"Arial",fill:13417369,stroke:{
- color:"#000000",width:2,join:"round"}
- ,fontSize:12}
- ),Bit=new Sg({
- fontFamily:"Arial",fill:16777215,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:13,fontWeight:"bold"}
- ),Uit=new Sg({
- fontFamily:"Arial",fill:14988422,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:13,fontWeight:"bolder"}
- ),Fit=new Sg({
- fontFamily:"Arial",fill:16777215,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:13,fontWeight:"bold"}
- ),Hit=new Sg({
- fontFamily:"Arial",fill:16768e3,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:14,fontWeight:"bold"}
- ),Wit=class t extends Be{
- constructor(){
- super(),zt(this,"HEADER_H",26),zt(this,"_showed",!1),zt(this,"_frameCounter",0),zt(this,"_snapshot",new Map),zt(this,"_lblDungeonName"),zt(this,"_lblDungeonInfo"),zt(this,"rows",[]),zt(this,"_staticBg",new Gf),zt(this,"_barsG",new Gf),zt(this,"bg",new QD),this.bg.setIndex(6),this.addChild(this.bg),this.bg.width=640,this.bg.height=KA.stageHeight-640-(416+this.HEADER_H),this.bg.y=KA.safeHeight-640-this.bg.height,this._buildStaticBg(),this._buildDungeonHeader(),this._buildQuitButton(),this._buildMeterHeader(),this._buildRows(),this.addChild(this._barsG)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get PANEL_W(){
- return KA.stageWidth||640}
- get panelWidth(){
- return this.PANEL_W}
- get BAR_AREA_W(){
- return this.PANEL_W-55-20-68}
- _buildStaticBg(){
- const t=this._staticBg,i=this.PANEL_W;
- t.rect(0,0,i,Pit).fill({
- color:0,alpha:.85}
- ),t.rect(0,0,i,30).fill({
- color:854784,alpha:.5}
- ),t.rect(0,54,i,2).fill({
- color:8939059,alpha:.7}
- ),t.rect(0,Pit,i,this.HEADER_H).fill({
- color:0,alpha:.75}
- );
- for(let s=0;
- s<10;
- s++){
- const e=Pit+this.HEADER_H+s*Rit,n=s%2==0?.6:.45;
- t.rect(0,e,i,Rit).fill({
- color:0,alpha:n}
- )}
- this.addChild(t)}
- _buildDungeonHeader(){
- const t=this.PANEL_W;
- let i,s;
- i=AG.getText("DUNGEON_MAIN_1","킹슬라임"),s=AG.getValueReplace("COMMON_397","##",1,"1단계"),this._lblDungeonName=new Wg({
- text:`${
- i}
-  (${
- s}
- )`,style:Lit}
- ),this._lblDungeonName.x=(t-this._lblDungeonName.width)/2,this._lblDungeonName.y=(30-this._lblDungeonName.height)/2,this.addChild(this._lblDungeonName),i=`${
- AG.getText("COMMON_22","보상")}
-  : ${
- AG.getValueReplace("COMMON_394","##",0,"0개")}
- `,s=`${
- AG.getText("COMMON_396","입장제한")}
-  : ${
- AG.getText("TRIBE_1","인간")}
- `,this._lblDungeonInfo=new Wg({
- text:`${
- i}
-           ${
- s}
- `,style:Git}
- ),this._lblDungeonInfo.x=(t-this._lblDungeonInfo.width)/2,this._lblDungeonInfo.y=30+(26-this._lblDungeonInfo.height)/2,this.addChild(this._lblDungeonInfo)}
- _buildQuitButton(){
- const t=new L6;
- t.width=40,t.height=40,t.x=this.PANEL_W-40-8,t.y=8,t.onClick=()=>{
- this.onQuitButtonClick()}
- ,this.addChild(t)}
- onQuitButtonClick(){
- Nit.getInstance().show()}
- _buildMeterHeader(){
- const t=new Wg({
- text:"⚔ DAMAGE METER",style:Hit}
- );
- t.x=8,t.y=Pit+(this.HEADER_H-t.height)/2,this.addChild(t)}
- _buildRows(){
- for(let t=0;
- t<10;
- t++){
- const i=Pit+this.HEADER_H+t*Rit,s=this.PANEL_W,e=new We;
- e.width=32,e.height=32,e.x=2,e.y=i+Math.floor(2),this.addChild(e);
- const n=new Wg({
- text:`${
- t+1}
- .`,style:Bit}
- );
- n.x=55,n.y=i+Math.floor((Rit-n.height)/2),this.addChild(n);
- const h=new Wg({
- text:"-",style:Uit}
- );
- h.x=77,h.y=i+Math.floor((Rit-h.height)/2),this.addChild(h);
- const r=new Wg({
- text:"0",style:Fit}
- );
- r.x=s-43,r.y=i+Math.floor((Rit-r.height)/2),this.addChild(r),this.rows.push({
- icon:e,lblRank:n,lblName:h,lblDmg:r}
- )}
- }
- setDungeonData(t){
- const i=this.PANEL_W;
- let s,e;
- s=t.name,e=AG.getValueReplace("COMMON_397","##",t.stage,`${
- t.stage}
- 단계`),this._lblDungeonName.text=`${
- s}
-  (${
- e}
- )`,this._lblDungeonName.x=(i-this._lblDungeonName.width)/2,s=`${
- AG.getText("COMMON_22","보상")}
-  : ${
- AG.getValueReplace("COMMON_394","##",t.reward.toLocaleString(),`${
- t.reward.toLocaleString()}
- 개`)}
- `,e=t.entryLimit?`${
- AG.getText("COMMON_396","입장제한")}
-  : ${
- t.entryLimit}
- `:`${
- AG.getText("COMMON_396","입장제한")}
-  : ${
- AG.getText("COMMON_367","없음")}
- `,this._lblDungeonInfo.text=`${
- s}
-           ${
- e}
- `,this._lblDungeonInfo.x=(i-this._lblDungeonInfo.width)/2}
- update(){
- this._frameCounter++,this._frameCounter<10||(this._frameCounter=0,this._refresh())}
- getHeroes(){
- return Iit.getInstance().getFriendList()}
- _refresh(){
- for(const e of this.getHeroes()){
- let t=e.className;
- if(e.kindNum>0){
- const i=vx.getInstance().getBookVO(e.kindNum);
- i&&(t=AG.getText(i.getNameKey(),e.name))}
- this._snapshot.set(e,{
- name:t,base:e.base,damage:e.totalDamageDealt}
- )}
- const t=[...this._snapshot.values()].sort((t,i)=>i.damage-t.damage),i=t.length>0?t[0].damage:0;
- this._barsG.clear();
- for(let e=0;
- e<10;
- e++){
- const n=this.rows[e],h=t[e];
- if(h){
- n.icon.visible=!0;
- try{
- n.icon.texture=ZA.getTexture("UI_Ekkorr",`Hero${
- h.base}
- `);
- const t=n.icon.texture;
- if(t.width>0&&t.height>0){
- const i=t.width/t.height;
- n.icon.height=32,n.icon.width=32*i}
- }
- catch(s){
- }
- if(n.lblRank.text=`${
- e+1}
- .`,n.lblName.text=h.name,n.lblDmg.text=$D.displayLargeNumberAsAlphabet(Math.floor(h.damage)),i>0){
- const t=h.damage/i,s=Math.max(2,Math.floor(t*this.BAR_AREA_W)),n=75,r=Pit+this.HEADER_H+e*Rit+Math.floor(2);
- this._barsG.rect(n,r,s,32).fill({
- color:Dit[e%Dit.length],alpha:.4}
- )}
- }
- else n.icon.visible=!1,n.lblRank.text="",n.lblName.text="",n.lblDmg.text=""}
- }
- show(){
- this._showed||(this._showed=!0,this._snapshot.clear(),this.visible=!0,this._frameCounter=10,this._refresh(),GM.getInstance().add(this.update,this))}
- hide(){
- this._showed&&(this._showed=!1,this.visible=!1,GM.getInstance().remove(this.update,this))}
- reset(){
- this._frameCounter=0}
- }
- ;
- Kt(Wit,"DungeonBattleStatus"),zt(Wit,"_instance");
- let jit=Wit;
- const $it=class t extends jit{
- constructor(){
- super(),zt(this,"_controller",null)}
- static getInstance(){
- return this._towerInstance||(this._towerInstance=new t),this._towerInstance}
- setController(t){
- this._controller=t}
- getHeroes(){
- return this._controller?this._controller.getFriendList():tit.getInstance().getFriendList()}
- setDungeonData(t){
- super.setDungeonData(t);
- const i=t.entryLimit?t.entryLimit:AG.getText("COMMON_367","없음");
- this._lblDungeonInfo.text=`${
- AG.getText("COMMON_396","입장제한")}
-  : ${
- i}
- `,this._lblDungeonInfo.x=(640-this._lblDungeonInfo.width)/2,this._lblDungeonInfo.y=30+(26-this._lblDungeonInfo.height)/2-3}
- onQuitButtonClick(){
- this._controller!==zit.getInstance()?nit.getInstance().show():sit.getInstance().show()}
- }
- ;
- Kt($it,"TowerBattleStatus"),zt($it,"_towerInstance");
- let Vit=$it;
- const Kit=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.TOWER),zt(this,"teamVOs",[]),zt(this,"teamSlotIndices",[]),zt(this,"spawnedVOs",[]),zt(this,"stageKindNum",0),zt(this,"stageVO",null),zt(this,"speedHelper",new U8("ef2.sprite.battleSpeed")),zt(this,"teamKindNums",[]),zt(this,"teamTransList",[])}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- setTeam(t,i){
- this.teamKindNums=t,this.teamTransList=i}
- async startBattle(t,i){
- this.cleanup(),DB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.stageKindNum=t,this.stageVO=i,await ZA.generateTexture("Highland","ktx2",!1);
- const s={
- name:AG.getText("GAME_569","정령의 고원"),stage:t,reward:0,entryLimit:this.buildConditionText(i)}
- ,e=Vit.getInstance();
- e.setController(this),e.setDungeonData(s),this.speedHelper.enter(),this.speedHelper.attachButton(e,e.panelWidth-124,12);
- for(const n of this.teamVOs)n.remove();
- this.teamVOs.length=0,this.teamSlotIndices.length=0;
- for(let n=0;
- n<12&&!(n>=this.teamKindNums.length);
- n++){
- if(this.teamKindNums[n]<=0)continue;
- const t=yx.getVO();
- t.id=-1,t.kindNum=this.teamKindNums[n],t.trans=this.teamTransList[n]||0,t.level=1,t.enhance=0,this.teamVOs.push(t),this.teamSlotIndices.push(n)}
- await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),N9t.getInstance().switchToBattle(this),KG.getInstance().setBackground($G.HIGHLAND),this.updateZIndexSorting(),WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),Ftt.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),WG.getInstance().add(this.execute,this)}
- async setupAllies(){
- KN.getInstance().setBattleContext(NN.Sprite),KN.getInstance().recalculate();
- for(let i=0;
- i<this.teamVOs.length;
- i++){
- const s=this.teamVOs[i],e=this.teamSlotIndices[i],n=await g3.getInstance().getUnit(s.className);
- n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans),n.numBlock=0,n.baseMaxHp*=3,n.baseMoveSpd*=1.3,KN.getInstance().applyToHero(n),n.health=n.maxHp,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange;
- const h=t.ALLY_FORMATION[e%t.ALLY_FORMATION.length];
- n.x=h.x,n.y=h.y,n.xDefault=h.x+320,n.yDefault=h.y,n.lookAt(1),n.healthBar.setHealthColor(!0),n.isAir&&n.onFlyEnter(!0),tB.getInstance().addChild(n),this.friendList.push(n)}
- }
- async setupEnemies(){
- if(!this.stageVO)return;
- const i=this.stageVO,s=b6.parseEnemies(i),e=i.enemyLevels?String(i.enemyLevels).split("|").map(Number):[],n=i.enemyShields?String(i.enemyShields).split("|").map(Number):[];
- for(let h=0;
- h<20;
- h++){
- const i=s[h];
- if(!i)continue;
- const r=vx.getInstance().getBookVO(i.kindNum);
- if(!r)continue;
- const o=await g3.getInstance().getUnit(r.className);
- o.battleController=this;
- const a=e[h]||1,c=yx.getVO();
- if(c.id=-1,c.kindNum=i.kindNum,c.trans=i.trans,c.level=a,c.enhance=0,this.spawnedVOs.push(c),o.setData(c),this.applyRawBvoStats(o,i.kindNum,i.trans),a>1){
- const t=1+.05*(a-1);
- o.baseAtkDmg*=t,o.orgAtkDmg*=t,o.atkDmg*=t,o.baseDef*=t,o.orgDef*=t,o.def*=t,o.baseMaxHp*=t,o.orgMaxHp*=t,o.maxHp*=t}
- o.numBlock=0,o.baseMaxHp*=3,o.orgMaxHp*=3,o.maxHp*=3,o.health=o.maxHp,o.orgMoveSpd=o.moveSpd=1.3*o.moveSpd,o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange;
- const l=t.ENEMY_FORMATION_20[h];
- o.x=l.x,o.y=l.y,o.xDefault=l.x-320,o.yDefault=l.y,o.lookAt(-1),o.healthBar.setHealthColor(!1),tB.getInstance().addChild(o),this.enemyList.push(o);
- const u=n[h]||0;
- 1===u?o.showPhysicalShield(t.TIME_LIMIT_FRAMES):2===u&&o.showMagicShield(t.TIME_LIMIT_FRAMES)}
- }
- applyRawBvoStats(t,i,s=0){
- const e=vx.getInstance().getBookVO(i);
- if(!e)return;
- const n=1+.4*Math.max(0,s);
- t.baseMaxHp=e.hp*n,t.baseAtkDmg=e.atkDmg*n,t.baseDef=e.def*n,t.orgMaxHp=t.maxHp=e.hp*n,t.orgAtkDmg=t.atkDmg=e.atkDmg*n,t.orgDef=t.def=e.def*n,t.phyDef=e.phyDef*n,t.magDef=e.magDef*n,t.hp=t.maxHp}
- 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}
- checkVictory(){
- for(const t of this.enemyList)if(t.isAlive)return!1;
- return this.enemyList.length>0}
- checkDefeat(){
- let i=!1;
- for(const t of this.friendList)if(t.isAlive){
- i=!0;
- break}
- return!i&&this.friendList.length>0||this.battleTime>=t.TIME_LIMIT_FRAMES}
- calcStar(){
- if(!this.stageVO)return 1;
- const t=this.teamKindNums.filter(t=>t>0).length;
- return t<=this.stageVO.star3?3:t<=this.stageVO.star2?2:1}
- onVictoryCallback(){
- setTimeout(async()=>{
- WG.getInstance().remove(this.execute,this),KN.getInstance().setBattleContext(NN.Normal);
- const t=this.calcStar(),i=await hD.getInstance().spirit.play(this.stageKindNum,t,!0);
- aV.getInstance().markDirty();
- const s=Kt(()=>{
- N9t.getInstance().returnToIdleBattle(),Cst.getInstance().show(),ist.getInstance().setData(),Dtt.getInstance().updateTicket()}
- ,"onConfirm");
- if(!i.success||!i.body)return mG.getInstance().showError(i),void s();
- _L.setUserInfo(i.body),UV.getInstance().updateAll();
- const e=this.stageVO;
- if(e)Gtt.getInstance().showVictory(e,t,s);
- else{
- const i=(this.stageKindNum-1)%40+1,e=1;
- V8.getInstance().showVictory(s,0,0,`${
- AG.getText("GAME_569","정령의 고원")}
-  ${
- e}
- -${
- i}
-  (★${
- t}
- )`)}
- }
- ,1500)}
- onDefeatCallback(){
- setTimeout(async()=>{
- var t;
- WG.getInstance().remove(this.execute,this),KN.getInstance().setBattleContext(NN.Normal);
- const i=(this.stageKindNum-1)%40+1,s=(null==(t=this.stageVO)?void 0:t.chapter)||1;
- V8.getInstance().showDefeat(()=>{
- N9t.getInstance().returnToIdleBattle(),Cst.getInstance().show(),ist.getInstance().setData(),Dtt.getInstance().updateTicket()}
- ,`${
- AG.getText("GAME_569","정령의 고원")}
-  ${
- s}
- -${
- i}
- `)}
- ,1500)}
- returnToMain(){
- }
- scheduleReturnToMain(){
- }
- getRemainingTimeSeconds(){
- const i=t.TIME_LIMIT_FRAMES-this.battleTime;
- return Math.max(0,Math.ceil(i/60))}
- buildConditionText(t){
- const i=[];
- return t.gradeMax>0&&i.push(AG.getValueReplace("GAME_552","##",t.gradeMax,`${
- t.gradeMax}
- 성 이하`)),"0"!==String(t.tribes)&&i.push(AG.getText("GAME_553","종족 제한")),"Y"===t.femaleExclude&&i.push(AG.getText("GAME_554","여성 영웅 제외")),"Y"===t.maleExclude&&i.push(AG.getText("GAME_555","남성 영웅 제외")),"Y"===t.rangeExclude&&i.push(AG.getText("GAME_556","원거리 영웅 제외")),"Y"===t.meleeExclude&&i.push(AG.getText("GAME_557","근거리 영웅 제외")),"Y"===t.airExclude&&i.push(AG.getText("GAME_558","공중 영웅 제외")),i.length>0?i.join(", "):""}
- cleanup(){
- KN.getInstance().setBattleContext(NN.Normal),this.speedHelper.detachButton(),this.speedHelper.exit();
- for(const t of this.teamVOs)t.remove();
- this.teamVOs.length=0,this.teamSlotIndices.length=0;
- for(const t of this.spawnedVOs)t.remove();
- this.spawnedVOs.length=0;
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- super.cleanup()}
- }
- ;
- Kt(Kit,"SpriteBattleController"),zt(Kit,"instance"),zt(Kit,"TIME_LIMIT_FRAMES",4800),zt(Kit,"ALLY_FORMATION",[{
- x:180,y:370}
- ,{
- x:180,y:420}
- ,{
- x:180,y:470}
- ,{
- x:180,y:520}
- ,{
- x:95,y:370}
- ,{
- x:95,y:420}
- ,{
- x:95,y:470}
- ,{
- x:95,y:520}
- ,{
- x:10,y:370}
- ,{
- x:10,y:420}
- ,{
- x:10,y:470}
- ,{
- x:10,y:520}
- ]),zt(Kit,"ENEMY_FORMATION_20",(()=>{
- const t=[380,445,510,575,640],i=[370,420,470,520],s=[];
- for(let e=0;
- e<5;
- e++)for(let n=0;
- n<4;
- n++)s.push({
- x:t[e],y:i[n]}
- );
- return s}
- )());
- let zit=Kit;
- const qit=class t extends O8{
- constructor(){
- super(),zt(this,"vsImage",new We(ZA.getTexture("UI_Ekkorr","UI_VS"))),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblTryCount"),zt(this,"lblTicket"),zt(this,"btnBuyTicket"),zt(this,"allyBtns",[]),zt(this,"enemyBtns",[]),zt(this,"battleContainer",new Be),zt(this,"btnStart",new QL("도전")),zt(this,"btnSweep",new QL("즉시완료")),zt(this,"enemyOverlays",[]),zt(this,"lblCapacity",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblEntryText",new YD("",16768358,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblStar3",new YD("",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblStar2",new YD("",13421772,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblStar1",new YD("",13404228,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"heroList"),zt(this,"selectedSlot",-1),zt(this,"teamKindNums",[]),zt(this,"teamTrans",[]),zt(this,"heroVOs",[]),zt(this,"currentStageVO",null),zt(this,"maxAllies",12);
- const t=Cst.getInstance().y,i=Math.max(KA.safeHeight-t+40,700);
- this.bg.height=i,this.y=KA.safeHeight-i,this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.lblTryCount=new YD("",8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblTryCount),this.lblTicket=new GB("UI_PET_TICKET","15",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_16,"UI_Ekkorr"),this.lblTicket.iconScale=.6,this.lblTicket.textOffsetX=3,this.addChild(this.lblTicket),this.btnBuyTicket=new UB("UI_PET_TICKET",AG.getText("COMMON_7","구매"),.6),this.btnBuyTicket.color=UB.BROWN,this.btnBuyTicket.width=120,this.btnBuyTicket.height=40,this.btnBuyTicket.onClick=this.onBuyTicket.bind(this),this.addChild(this.btnBuyTicket);
- const s=this.lblTitle.y+this.lblTitle.height+20;
- this.battleContainer.y=s,this.addChild(this.battleContainer);
- for(let a=0;
- a<12;
- a++){
- const t=Math.floor(a/4),i=a%4,s=new O4;
- s.scale=.5,s.x=0+70*(2-t),s.y=48*i,s.showAtkType=!0,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
- this.vsImage.scale=.6,this.vsImage.x=210,this.vsImage.y=72,this.battleContainer.addChild(this.vsImage);
- const e=210+this.vsImage.width+15;
- for(let a=0;
- a<20;
- a++){
- const t=Math.floor(a/4),i=a%4,s=new O4,n=new Be;
- n.eventMode="none",n.interactiveChildren=!1;
- const h=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
- color:0,width:7}
- }
- )}
- );
- h.anchor.set(0,1),h.x=3,h.y=82,n.addChild(h),n._lblShield=h;
- const r=new Wg({
- text:"",style:new Sg({
- fontFamily:"Arial",fontSize:32,fontWeight:"bold",fill:16746564,stroke:{
- color:0,width:9}
- }
- )}
- );
- r.anchor.set(1,0),r.x=102,r.y=-4,n.addChild(r),n._lblLevel=r,s.scale=.5,s.x=e+70*t,s.y=48*i,s.activated=!1,s.hidePlusIcon(),this.battleContainer.addChild(s),this.enemyBtns.push(s),s.addChild(n),this.enemyOverlays.push(n)}
- this.recenterBattleContainer(),this.addChild(this.lblCapacity);
- const n=s+192+5;
- this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
- const h=n+this.lblEntryText.height+5;
- this.lblStar3.x=15,this.lblStar3.y=h,this.addChild(this.lblStar3),this.lblStar2.x=120,this.lblStar2.y=h,this.addChild(this.lblStar2),this.lblStar1.x=210,this.lblStar1.y=h,this.addChild(this.lblStar1);
- const r=h+this.lblStar3.height+7,o=this.bg.height-r-90;
- P4.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new R3(P4,630,o),this.heroList.x=5,this.heroList.y=r,this.addChild(this.heroList),this.btnSweep.color=QL.GREEN,this.btnSweep.width=160,this.btnSweep.height=55,this.btnSweep.x=.5*(this.bg.width-340),this.btnSweep.y=this.bg.height-65,this.btnSweep.onClick=this.onSweep.bind(this),this.addChild(this.btnSweep),this.btnStart.color=QL.RED,this.btnStart.width=160,this.btnStart.height=55,this.btnStart.x=this.btnSweep.x+this.btnSweep.width+20,this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateLayout(){
- this.lblTryCount.x=this.lblTitle.x+this.lblTitle.width+3,this.lblTryCount.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTryCount.height-1),this.btnBuyTicket.x=this.bg.width-this.btnBuyTicket.width-15,this.btnBuyTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnBuyTicket.height),this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-10,this.lblTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTicket.height)}
- updateCapacityPosition(){
- this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15,this.lblCapacity.y=this.lblStar3.y+.5*(this.lblStar3.height-this.lblCapacity.height)}
- async setData(t){
- this.currentStageVO=t;
- const i=(t.kindNum-1)%40+1;
- this.lblTitle.text=`${
- AG.getText("GAME_569","정령의 고원")}
-  ${
- t.chapter}
- -${
- i}
- `;
- const s=this.buildConditionText(t);
- this.lblEntryText.text=`${
- AG.getText("COMMON_465","입장조건")}
-  : ${
- s||AG.getText("COMMON_367","없음")}
- `,this.maxAllies=Math.max(1,Math.min(12,t.star1||12));
- const e=pL.getInstance(),n=e.getStageVO(t.kindNum),h=n?n.star:0,r=n?n.dailyCount:0,o=16763904,a=6710886;
- this.lblStar3.text=`★★★ : ${
- t.star3}
- `,this.lblStar3.textColor=h>=3?o:a,this.lblStar2.text=`★★ : ${
- t.star2}
- `,this.lblStar2.textColor=h>=2?o:a,this.lblStar1.text=`★ : ${
- t.star1}
- `,this.lblStar1.textColor=h>=1?o:a;
- const c=t.numTry-r;
- this.lblTryCount.text=`(${
- c}
- /${
- t.numTry}
- )`,this.lblTryCount.textColor=c<=0?16729156:6728243,this.lblTicket.text=`${
- e.ticket}
- `;
- const l=h>=3;
- this.btnSweep.visible=l,l?(this.btnSweep.x=.5*(this.bg.width-340),this.btnStart.x=this.btnSweep.x+this.btnSweep.width+20):this.btnStart.x=.5*(this.bg.width-this.btnStart.width);
- const u=await $A.getSpiritTeam(t.kindNum);
- u&&u.kindNums&&12===u.kindNums.length?(this.teamKindNums=[...u.kindNums],this.teamTrans=[...u.trans]):this.initTeam(),this.clampTeamToMax(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList(),this.btnStart.text=AG.getText("COMMON_378","도전"),this.btnSweep.text=AG.getText("COMMON_379","즉시완료"),this.btnBuyTicket.text=AG.getText("COMMON_7","구매"),this.updateLayout()}
- buildConditionText(t){
- const i=[];
- return t.gradeMax>0&&i.push(AG.getValueReplace("GAME_552","##",t.gradeMax,`${
- t.gradeMax}
- 성 이하`)),"0"!==String(t.tribes)&&i.push(AG.getText("GAME_553","종족 제한")),"Y"===t.femaleExclude&&i.push(AG.getText("GAME_554","여성 영웅 제외")),"Y"===t.maleExclude&&i.push(AG.getText("GAME_555","남성 영웅 제외")),"Y"===t.rangeExclude&&i.push(AG.getText("GAME_556","원거리 영웅 제외")),"Y"===t.meleeExclude&&i.push(AG.getText("GAME_557","근거리 영웅 제외")),"Y"===t.airExclude&&i.push(AG.getText("GAME_558","공중 영웅 제외")),i.join(" / ")}
- getPlacedCount(){
- let t=0;
- for(let i=0;
- i<12;
- i++)this.teamKindNums[i]>0&&t++;
- return t}
- clampTeamToMax(){
- let t=0;
- for(let i=0;
- i<12;
- i++)this.teamKindNums[i]>0&&(t++,t>this.maxAllies&&(this.teamKindNums[i]=-1,this.teamTrans[i]=0))}
- initTeam(){
- this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0);
- const t=vx.getInstance().list,i=vx.getInstance(),s=this.currentStageVO,e=s&&"0"!==String(s.tribes)?new Set(String(s.tribes).split("|").map(Number)):null;
- let n=0;
- for(let h=0;
- h<t.length&&n<this.maxAllies;
- h++){
- const r=t[h];
- if(!(r.kindNum>=1e4)){
- if(s){
- const t=i.getBookVO(r.kindNum);
- if(t){
- if(s.gradeMax>0&&t.grade>s.gradeMax)continue;
- if(e&&!e.has(t.tribe))continue;
- if("Y"===s.femaleExclude&&t.sex===rx.FEMALE)continue;
- if("Y"===s.maleExclude&&t.sex===rx.MALE)continue;
- if("Y"===s.rangeExclude&&t.unitType===sx.RANGE)continue;
- if("Y"===s.meleeExclude&&t.unitType===sx.MELEE)continue;
- if("Y"===s.airExclude&&t.isAir)continue}
- }
- this.teamKindNums[n]=r.kindNum,this.teamTrans[n]=r.trans,n++}
- }
- }
- updateAllyButtons(){
- const t=Math.max(1,_L.maxWave/10),i=this.getPlacedCount(),s=i>=this.maxAllies;
- this.lblCapacity.text=`${
- AG.getText("GAME_551","입장가능 영웅")}
-  : ${
- i}
-  / ${
- this.maxAllies}
- `,this.lblCapacity.textColor=s?16729156:16777215,this.updateCapacityPosition();
- const e=this.currentStageVO;
- if(e){
- const t=6710886,s=4521796;
- i>0&&i<=e.star3?(this.lblStar3.textColor=s,this.lblStar2.textColor=t,this.lblStar1.textColor=t):i>e.star3&&i<=e.star2?(this.lblStar3.textColor=t,this.lblStar2.textColor=s,this.lblStar1.textColor=t):i>e.star2&&i<=e.star1?(this.lblStar3.textColor=t,this.lblStar2.textColor=t,this.lblStar1.textColor=s):(this.lblStar3.textColor=t,this.lblStar2.textColor=t,this.lblStar1.textColor=t)}
- for(let n=0;
- n<12;
- n++){
- const i=this.allyBtns[n],e=yx.getVO();
- this.teamKindNums[n]>0?(i.visible=!0,e.kindNum=this.teamKindNums[n],e.trans=this.teamTrans[n],e.level=t,i.setDataWith(n,e),i.hideLevel(),i.hideEnhance(),i.setAlphaToFrame(n===this.selectedSlot?1:.85),i.selected=n===this.selectedSlot):s?(i.visible=!1,i.selected=!1):(i.visible=!0,e.kindNum=-1,i.setDataWith(n,e),i.hideBackground(),i.setAlphaToFrame(n===this.selectedSlot?.9:.4),i.selected=!1)}
- }
- updateEnemyButtons(){
- const t=Math.max(1,_L.maxWave/10)+10,i=this.currentStageVO,s=i?b6.parseEnemies(i):new Array(20).fill(null),e=(null==i?void 0:i.enemyShields)?String(i.enemyShields).split("|").map(Number):[],n=(null==i?void 0:i.enemyLevels)?String(i.enemyLevels).split("|").map(Number):[];
- for(let h=0;
- h<20;
- h++){
- const i=this.enemyBtns[h],r=s[h],o=this.enemyOverlays[h],a=null==o?void 0:o._lblShield,c=null==o?void 0:o._lblLevel;
- if(r){
- const s=yx.getVO();
- s.kindNum=r.kindNum,s.trans=r.trans,s.level=t,i.setDataWith(h,s),i.hideLevel(),i.hideEnhance(),i.setAlphaToFrame(1),i.visible=!0;
- const o=e[h]||0;
- if(a&&(1===o?(a.text="O",a.style.fill=16776960):2===o?(a.text="O",a.style.fill=4500223):a.text=""),c){
- const t=n[h]??1;
- c.text=7===t?"+":14===t?"++":21===t?"+++":""}
- }
- else i.visible=!1,a&&(a.text=""),c&&(c.text="")}
- this.recenterBattleContainer()}
- recenterBattleContainer(){
- var t;
- const i=(null==(t=this.allyBtns[0])?void 0:t.width)??40,s=140+i,e=this.vsImage.x+this.vsImage.width;
- let n=0;
- for(let o=0;
- o<5;
- o++)for(let t=0;
- t<4;
- t++)if(this.enemyBtns[4*o+t].visible){
- n=o+1;
- break}
- let h=0;
- if(n>0){
- const t=n-1,s=this.enemyBtns[4*t];
- h=s.x+(s.width||i)}
- const r=Math.max(s,e,h);
- this.battleContainer.x=.5*(this.bg.width-r)}
- calcTotalInventory(){
- const t=new Map,i=vx.getInstance().list;
- for(const e of i){
- if(e.kindNum>=1e4)continue;
- const i=`${
- e.kindNum}
- _${
- e.trans}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const s=vx.getInstance().ownedUnitList;
- for(const e of s)if(!(e.kindNum>=1e4)){
- if(e.count>0){
- const i=`${
- e.kindNum}
- _0`;
- t.set(i,(t.get(i)||0)+e.count)}
- for(let i=0;
- i<3;
- i++)if(e.trans[i]>0){
- const s=`${
- e.kindNum}
- _${
- i+1}
- `;
- t.set(s,(t.get(s)||0)+e.trans[i])}
- }
- return t}
- updateHeroList(){
- x4.removeAll(this.heroVOs);
- const t=new Map;
- for(let h=0;
- h<12;
- h++){
- if(this.teamKindNums[h]<=0)continue;
- const i=`${
- this.teamKindNums[h]}
- _${
- this.teamTrans[h]}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const i=this.calcTotalInventory(),s=vx.getInstance(),e=this.currentStageVO,n=e&&"0"!==String(e.tribes)?new Set(String(e.tribes).split("|").map(Number)):null;
- this.heroVOs.push(x4.set(x4.getVO(),-1,0,0,0));
- for(const[h,r]of i){
- const[i,o]=h.split("_"),a=Number(i),c=s.getBookVO(a);
- if(e&&c){
- if(e.gradeMax>0&&c.grade>e.gradeMax)continue;
- if(n&&!n.has(c.tribe))continue;
- if("Y"===e.femaleExclude&&c.sex===rx.FEMALE)continue;
- if("Y"===e.maleExclude&&c.sex===rx.MALE)continue;
- if("Y"===e.rangeExclude&&c.unitType===sx.RANGE)continue;
- if("Y"===e.meleeExclude&&c.unitType===sx.MELEE)continue;
- if("Y"===e.airExclude&&c.isAir)continue}
- const l=t.get(h)||0;
- this.heroVOs.push(x4.set(x4.getVO(),a,Number(o),r-l,r))}
- this.heroVOs.sort((t,i)=>{
- if(t.kindNum<=0)return-1;
- if(i.kindNum<=0)return 1;
- const e=s.getBookVO(t.kindNum),n=s.getBookVO(i.kindNum);
- if(!e||!n)return 0;
- const h=1e12*e.grade-1e9*e.evolStage+1e6*t.trans-e.tribe;
- return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
- ),this.heroList.dataProvider=ZI.chunkArray(this.heroVOs,7)}
- onClickAllyHero(t){
- const i=this.teamKindNums[t]<=0,s=this.getPlacedCount()>=this.maxAllies;
- i&&s||(this.selectedSlot=this.selectedSlot===t?-1:t,this.updateAllyButtons())}
- onClickHeroFromList(t,i){
- if(t<=0){
- if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
- const t=this.selectedSlot;
- this.teamKindNums[t]=-1,this.teamTrans[t]=0;
- let i=-1;
- for(let s=1;
- s<=12;
- s++){
- const e=(t+s)%12;
- if(this.teamKindNums[e]>0){
- i=e;
- break}
- }
- this.selectedSlot=i}
- }
- else{
- const s=`${
- t}
- _${
- i}
- `;
- let e=0;
- for(let n=0;
- n<12;
- n++)this.teamKindNums[n]===t&&this.teamTrans[n]===i&&e++;
- if(e>=(this.calcTotalInventory().get(s)||0))return;
- if(this.selectedSlot>=0){
- if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=this.maxAllies)return;
- this.teamKindNums[this.selectedSlot]=t,this.teamTrans[this.selectedSlot]=i,this.selectedSlot=-1}
- else{
- if(this.getPlacedCount()>=this.maxAllies)return;
- for(let s=0;
- s<12;
- s++)if(this.teamKindNums[s]<=0){
- this.teamKindNums[s]=t,this.teamTrans[s]=i;
- break}
- }
- }
- this.updateAllyButtons(),this.updateHeroList()}
- async onStartBattle(){
- if(!WG.getInstance().isRunning)return;
- if(!this.currentStageVO)return;
- if(this.getPlacedCount()<=0)return void vV.getInstance().showMessage(AG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다."));
- if(this.getPlacedCount()>this.maxAllies)return void vV.getInstance().showMessage(AG.getText("GAME_724","최대 입장가능한 영웅 수를 초과했습니다."));
- const t=pL.getInstance();
- if(t.ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_275","티켓이 부족합니다."));
- const i=t.getStageVO(this.currentStageVO.kindNum);
- if((i?i.dailyCount:0)>=this.currentStageVO.numTry)return void vV.getInstance().showMessage(AG.getText("COMMON_477","오늘 도전 횟수를 모두 사용했습니다."));
- $A.saveSpiritTeam(this.currentStageVO.kindNum,this.teamKindNums,this.teamTrans),LV.getInstance().removeAll(),this.hide(),Cst.getInstance().hide();
- const s=zit.getInstance();
- s.setTeam([...this.teamKindNums],[...this.teamTrans]),s.startBattle(this.currentStageVO.kindNum,this.currentStageVO)}
- async onSweep(){
- if(!this.currentStageVO)return;
- const t=pL.getInstance();
- if(t.ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_275","티켓이 부족합니다."));
- const i=t.getStageVO(this.currentStageVO.kindNum);
- if((i?i.dailyCount:0)>=this.currentStageVO.numTry)return void vV.getInstance().showMessage(AG.getText("COMMON_477","오늘 도전 횟수를 모두 사용했습니다."));
- const s=await hD.getInstance().spirit.sweep(this.currentStageVO.kindNum);
- if(!1===s.success)return void vV.getInstance().showMessage(AG.getText("COMMON_478","즉시완료 실패"));
- s.body&&(_L.setUserInfo(s.body),UV.getInstance().updateAll()),aV.getInstance().markDirty();
- const e=this.currentStageVO;
- Gtt.getInstance().showSweep(e,()=>{
- ist.getInstance().setData(),this.setData(e)}
- )}
- onBuyTicket(){
- const t=pL.getInstance();
- if(!t.canPurchase())return void vV.getInstance().showMessage(AG.getText("COMMON_342","오늘 더 이상 구매할 수 없습니다."));
- const i=t.getNextPurchaseCost(),s=n9.getInstance();
- s.setData(i,AG.getValueReplace("GAME_600","##",3,"보석으로 티켓 3개를 구매하시겠습니까?")),s.onConfirm=async()=>{
- const i=await hD.getInstance().spirit.buyTicket();
- !1!==i.success?(i.body&&(_L.setUserInfo(i.body),i.body.spirit&&t.setData(i.body.spirit),UV.getInstance().updateAll()),this.lblTicket.text=`${
- t.ticket}
- `,this.updateLayout(),ist.getInstance().setData(),vV.getInstance().showMessage(AG.getValueReplace("GAME_601","##",3,"티켓 3개를 구매하였습니다."))):vV.getInstance().showMessage(AG.getText("COMMON_467","구매 실패했습니다."))}
- ,s.show()}
- show(){
- P4.onHeroClick=this.onClickHeroFromList.bind(this),P4.showAttackType=!0,this.updateAllyButtons(),this.updateHeroList(),this.show2()}
- onAdded(){
- Cst.getInstance().visible=!1;
- const t=UV.getInstance();
- t.setMode(GV.TOWER),this.addChild(t)}
- onRemoved(){
- Cst.getInstance().visible=!0,Cst.getInstance().addChild(UV.getInstance())}
- }
- ;
- Kt(qit,"SpriteBattleReadyPopup"),zt(qit,"_instance");
- let Xit=qit;
- const Yit=class extends XI{
- constructor(){
- super(),zt(this,"cells",[]),zt(this,"posList",[]),zt(this,"kindNumArray",[]);
- for(let t=0;
- t<5;
- t++){
- const i=new Zit;
- i.x=2+126*t,i.y=0,this.addChild(i),this.cells.push(i),this.posList.push(i.x)}
- this.posList.push(630)}
- get width(){
- return 630}
- get height(){
- return 120}
- setData(t){
- const i=t;
- if(!i)return;
- this.kindNumArray=i;
- const s=pL.getInstance(),e=Math.floor(_L.maxWave/100);
- for(let n=0;
- n<5;
- n++){
- const t=this.cells[n];
- if(n<i.length){
- const h=i[n],r=s.getBookVO(h);
- r?(t.setStage(r,e),t.visible=!0):t.visible=!1}
- else t.visible=!1}
- }
- onClick(t,i){
- for(let s=0;
- s<this.cells.length;
- s++)if(t>this.posList[s]&&t<this.posList[s+1]){
- if(s<this.kindNumArray.length&&this.cells[s].visible){
- const t=this.kindNumArray[s],i=pL.getInstance(),e=i.getBookVO(t);
- if(!e)break;
- if(Math.floor(_L.maxWave/100)<e.reqLevel){
- const t=100*e.reqLevel;
- vV.getInstance().showMessage(AG.getValueReplace("GAME_717","##",t,`최고환생층 ${
- t}
- 층 이상에서 접근할 수 있습니다.`));
- break}
- if(t>1){
- const s=i.getStageVO(t-1);
- if(!s||s.star<=0){
- vV.getInstance().showMessage(AG.getText("GAME_718","이전 스테이지를 먼저 클리어해야 합니다."));
- break}
- }
- Xit.getInstance().setData(e),Xit.getInstance().show()}
- break}
- }
- }
- ;
- Kt(Yit,"SpiritLandItemRenderer");
- let Jit=Yit;
- const Qit=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"stageBg"),zt(this,"lblStage"),zt(this,"lblStar"),zt(this,"petSprite"),zt(this,"lblReward"),zt(this,"lblTryCount"),zt(this,"lockIcon"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
- ),this.bg.width=124,this.bg.height=115,this.addChild(this.bg),this.stageBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_01"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
- ),this.stageBg.width=40,this.stageBg.height=25,this.stageBg.x=5,this.stageBg.y=5,this.addChild(this.stageBg),this.lblStage=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblStage),this.lblStar=new YD("",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblStar),this.petSprite=new We,this.petSprite.width=60,this.petSprite.height=60,this.petSprite.x=32,this.petSprite.y=25,this.addChild(this.petSprite),this.lblReward=new GB("UI_GEM_ICON","0",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblReward.iconScale=.8,this.addChild(this.lblReward),this.lblTryCount=new YD("",8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblTryCount),this.lockIcon=new We(ZA.getTexture("UI_Ekkorr","UI_Lock")),this.lockIcon.x=.5*(124-this.lockIcon.width),this.lockIcon.y=40,this.lockIcon.visible=!1,this.addChild(this.lockIcon)}
- setStage(t,i){
- const s=pL.getInstance(),e=s.getStageVO(t.kindNum),n=e?e.star:0,h=e?e.dailyCount:0;
- let r=i<t.reqLevel;
- if(!r&&t.kindNum>1){
- const i=s.getStageVO(t.kindNum-1);
- (!i||i.star<=0)&&(r=!0)}
- const o=(t.kindNum-1)%40+1;
- this.lblStage.text=`${
- t.chapter}
- -${
- o}
- `,this.stageBg.width=Math.max(40,this.lblStage.width+16),this.lblStage.x=this.stageBg.x+.5*(this.stageBg.width-this.lblStage.width),this.lblStage.y=this.stageBg.y+.5*(this.stageBg.height-this.lblStage.height),n>0?(this.lblStar.text="★".repeat(n),this.lblStar.textColor=16763904):(this.lblStar.text="★",this.lblStar.textColor=6710886),this.lblStar.x=124-this.lblStar.width-5,this.lblStar.y=3,this.lockIcon.visible=r,this.lblTryCount.visible=!r,this.alpha=r?.5:1,"PET"===t.rewardType&&t.petKindNum>0?(this.petSprite.visible=!0,this.lblReward.visible=!1,this.petSprite.texture=ZA.getTexture("UI_PET",`UI_PET${
- t.petKindNum}
- `),this.petSprite.width=60,this.petSprite.height=60):(this.petSprite.visible=!1,this.lblReward.visible=!0,"GEM"===t.rewardType?(this.lblReward.texture=ZA.getTexture("UI_Ekkorr","UI_GEM_ICON"),this.lblReward.textColor=aD.COLOR_DEEP_SKYBLUE):(this.lblReward.texture=ZA.getTexture("UI_Ekkorr","PVP_COIN_ON"),this.lblReward.textColor=aD.COLOR_PURPLE_PINK),this.lblReward.text=`${
- t.reward}
- `,this.lblReward.x=.5*(124-this.lblReward.width),this.lblReward.y=.6*(this.bg.height-25));
- const a=t.numTry-h;
- this.lblTryCount.text=`${
- a}
- /${
- t.numTry}
- `,this.lblTryCount.x=.5*(124-this.lblTryCount.width),this.lblTryCount.y=92,this.lblTryCount.visible=!0,this.lblTryCount.textColor=a<=0?16729156:6728243}
- }
- ;
- Kt(Qit,"SpiritCell");
- let Zit=Qit;
- const tst=class t extends O6{
- constructor(){
- super(),zt(this,"list");
- const t=Cst.getInstance().contentHeight-60-10;
- this.list=new R3(Jit,630,t),this.list.x=4,this.list.y=0,this.addChild(this.list),Dtt.getInstance().onChapterChanged=t=>{
- this.setData(t)}
- }
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- setData(t){
- const i=pL.getInstance(),s=t??Dtt.getInstance().currentChapter,e=i.getStagesByChapter(s).map(t=>t.kindNum);
- this.list.dataProvider=ZI.chunkArray(e,5),Dtt.getInstance().updateTicket()}
- get className(){
- return"SpriteLandSubView"}
- updateLanguage(){
- this.setData()}
- goChapter(t,i=-1){
- Dtt.getInstance().goChapter(t),-1!=i&&((i-1)%40+1<21?this.list.scrollTo(0):this.list.scrollTo(Math.floor(4.2)))}
- }
- ;
- Kt(tst,"SpriteLandSubView"),zt(tst,"instance");
- let ist=tst;
- const sst=class extends XI{
- constructor(){
- super(),zt(this,"cells",[]),zt(this,"posList",[]),zt(this,"petKindNums",[]);
- for(let t=0;
- t<2;
- t++){
- const i=new hst;
- i.x=2+315*t,i.y=0,this.addChild(i),this.cells.push(i),this.posList.push(i.x)}
- this.posList.push(630)}
- get width(){
- return 630}
- get height(){
- return 98}
- setData(t){
- const i=t;
- if(i){
- this.petKindNums=i;
- for(let t=0;
- t<2;
- t++){
- const s=this.cells[t];
- t<i.length?(s.setData(i[t]),s.visible=!0):s.visible=!1}
- }
- }
- onClick(t,i){
- for(let s=0;
- s<this.cells.length;
- s++)if(t>this.posList[s]&&t<this.posList[s+1]){
- if(s<this.petKindNums.length&&this.cells[s].visible){
- const e=t-this.posList[s];
- this.cells[s].onClick(e,i)}
- break}
- }
- }
- ;
- Kt(sst,"FavoritePetItemRenderer");
- let est=sst;
- const nst=class t extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"petIcon"),zt(this,"lblName"),zt(this,"lblPiece"),zt(this,"lblAvailable"),zt(this,"btnComplete"),zt(this,"btnMove"),zt(this,"petKindNum",0),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
- ),this.bg.width=311,this.bg.height=92,this.addChild(this.bg),this.petIcon=new gK,this.petIcon.x=8,this.petIcon.y=.5*(92-this.petIcon.height),this.addChild(this.petIcon),this.petIcon.eventMode="dynamic",this.petIcon.on("pointertap",this.onPetIconClick,this);
- const t=this.petIcon.x+this.petIcon.width+10;
- this.lblName=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=t,this.lblName.y=this.petIcon.y,this.addChild(this.lblName),aD.setLabelWrapWidth(this.lblName,this.bg.width-this.lblName.x),this.lblPiece=new YD("",8978244,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPiece.x=t,this.addChild(this.lblPiece),this.lblAvailable=new YD("",6737151,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblAvailable.x=t,this.addChild(this.lblAvailable),this.btnComplete=new B6(AG.getText("COMMON_379","즉시완료")),this.btnComplete.autoResize=!1,this.btnComplete.width=130,this.btnComplete.height=42,this.btnComplete.x=311-this.btnComplete.width-8,this.btnComplete.y=92-this.btnComplete.height-8,this.addChild(this.btnComplete),this.btnMove=new B6(AG.getText("COMMON_65","이동")),this.btnMove.visible=!1,this.btnMove.autoResize=!1,this.btnMove.width=this.btnComplete.width,this.btnMove.height=this.btnComplete.height,this.btnMove.x=this.btnComplete.x,this.btnMove.y=this.btnComplete.y,this.addChild(this.btnMove)}
- setData(t){
- this.petKindNum=t;
- const i=lx.getInstance(),s=i.getBookVO(t),e=i.getPetVO(t),n=(null==e?void 0:e.grade)??0;
- n>0?this.petIcon.setPet(t,n):this.petIcon.setInactive(t),this.lblName.text=AG.getText(`PET_NAME_${
- t}
- `,(null==s?void 0:s.name)||""),this.lblName.y=this.petIcon.y+11-.5*this.lblName.height;
- const h=pL.getInstance(),{
- remain:r,remainStar3:o,total:a,totalStar3:c}
- =this.calcTryCount();
- this.lblAvailable.text=`(${
- r}
- /${
- a}
- )`,this.lblAvailable.textColor=r<=0?16729156:6737151,this.lblAvailable.y=this.petIcon.y+this.petIcon.height-this.lblAvailable.height+1,this.lblPiece.text=`${
- (null==e?void 0:e.piece)??0}
- `,this.lblPiece.y=this.lblAvailable.y-this.lblPiece.height+2;
- const l=h.ticket>0;
- o>0?(this.btnComplete.selected=this.btnComplete.activated=l,this.btnComplete.visible=!0,this.btnMove.visible=!1):r>0?(this.btnComplete.visible=!1,this.btnMove.selected=this.btnMove.activated=l,this.btnMove.visible=!0):c>0?(this.btnComplete.selected=this.btnComplete.activated=!1,this.btnComplete.visible=!0,this.btnMove.visible=!1):(this.btnComplete.visible=!1,this.btnMove.selected=this.btnMove.activated=!1,this.btnMove.visible=!0)}
- calcTryCount(){
- const t=pL.getInstance(),i=t.getStagesByPetKindNum(this.petKindNum);
- let s=0,e=0,n=0,h=0;
- for(const r of i){
- const i=t.getStageVO(r.kindNum);
- !i||i.star<1||(n+=r.numTry,s+=Math.max(0,r.numTry-i.dailyCount),i.star>2&&(h+=r.numTry,e+=Math.max(0,r.numTry-i.dailyCount)))}
- return{
- remain:s,remainStar3:e,total:n,totalStar3:h}
- }
- getSweepableStages(){
- const t=pL.getInstance();
- return t.getStagesByPetKindNum(this.petKindNum).filter(i=>{
- const s=t.getStageVO(i.kindNum);
- return s&&s.star>=3&&i.numTry-s.dailyCount>0}
- )}
- onClick(t,i){
- this.btnComplete.visible?this.btnComplete.selected&&t>=this.btnComplete.x&&t<=this.btnComplete.x+this.btnComplete.width&&i>=this.btnComplete.y&&i<=this.btnComplete.y+this.btnComplete.height&&this.onComplete():this.btnMove.visible&&t>=this.btnMove.x&&t<=this.btnMove.x+this.btnMove.width&&i>=this.btnMove.y&&i<=this.btnMove.y+this.btnMove.height&&this.onMove()}
- async onComplete(){
- var i,s,e,n;
- if(t.isPrompting)return;
- const h=pL.getInstance();
- if(h.ticket<=0)return void vV.getInstance().showMessage(AG.getText("GAME_275","티켓이 부족합니다."));
- const r=this.getSweepableStages();
- if(0===r.length)return void vV.getInstance().showMessage(AG.getText("COMMON_477","오늘 도전 횟수를 모두 사용했습니다."));
- const{
- remainStar3:o}
- =this.calcTryCount(),a=ost.getInstance().maxPromptCount;
- let c=Math.min(o,a,h.ticket);
- if(c<=0)return;
- t.isPrompting=!0;
- let l=0,u=!1;
- try{
- for(const t of r){
- if(c<=0||h.ticket<=0)break;
- const r=await hD.getInstance().spirit.sweep(t.kindNum,c);
- if(!1===r.success)break;
- (null==(i=r.body)?void 0:i.spirit)&&h.setData(r.body.spirit),(null==(s=r.body)?void 0:s.pet)&&lx.getInstance().setData(r.body.pet);
- const o=(null==(n=null==(e=r.body)?void 0:e.spirit)?void 0:n.sweepCount)??0;
- l+=o*(t.reward||0),c-=o,0!==o&&(u=!0)}
- }
- finally{
- t.isPrompting=!1}
- u&&aV.getInstance().markDirty(),ost.getInstance().setData(),vV.getInstance().showMessage(AG.getValueReplace("GAME_1189","##",l,`펫 조각 ${
- l}
- 개를 획득했습니다.`))}
- async onMove(){
- const t=pL.getInstance(),i=t.getStagesByPetKindNum(this.petKindNum);
- if(0==i.length)return;
- let s=-1,e=-1;
- const n=i.length;
- for(let h=0;
- h<n;
- ++h){
- const n=t.getStageVO(i[h].kindNum);
- if(n&&!(n.star<=0)&&!(n.star>2||i[h].numTry-n.dailyCount<1)){
- s=i[h].chapter,e=i[h].kindNum;
- break}
- }
- -1!=s&&(await cst.getInstance().clickCloseBtn(),ist.getInstance().goChapter(s,e))}
- onPetIconClick(){
- this.petKindNum>0&&xtt.getInstance().showPet(this.petKindNum)}
- }
- ;
- Kt(nst,"FavoritePetCell"),zt(nst,"isPrompting",!1);
- let hst=nst;
- const rst=class t extends O6{
- constructor(){
- super(),zt(this,"btn1"),zt(this,"btn3"),zt(this,"btnMax"),zt(this,"list"),zt(this,"_maxPromptCount",1);
- this.btn1=this.makePromptButton(AG.getText("GAME_1190","1회"),140,48),this.btn1.x=94,this.btn1.y=4,this.btn1.onClick=()=>this.setPromptCount(1),this.addChild(this.btn1),this.btn3=this.makePromptButton(AG.getText("GAME_1191","3회"),140,48),this.btn3.x=250,this.btn3.y=4,this.btn3.onClick=()=>this.setPromptCount(3),this.addChild(this.btn3),this.btnMax=this.makePromptButton(AG.getText("GAME_1192","Max"),140,48),this.btnMax.x=406,this.btnMax.y=4,this.btnMax.onClick=()=>this.setPromptCount(999),this.addChild(this.btnMax);
- const t=Cst.getInstance().contentHeight-60-10-Cst.getInstance().getMenuTabHeight();
- this.list=new R3(est,630,t),this.list.x=4,this.list.y=60,this.addChild(this.list),this.updatePromptButtons()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- get maxPromptCount(){
- return this._maxPromptCount}
- makePromptButton(t,i,s){
- const e=new B6(t);
- return e.autoResize=!1,e.width=i,e.height=s,e}
- setPromptCount(t){
- this._maxPromptCount=t,this.updatePromptButtons()}
- updatePromptButtons(){
- this.btn1.selected=1===this._maxPromptCount,this.btn3.selected=3===this._maxPromptCount,this.btnMax.selected=this._maxPromptCount>=999}
- setData(){
- const t=[...pL.getInstance().favoritePets].sort((t,i)=>{
- var s,e,n,h;
- const r=lx.getInstance(),o=(null==(s=r.getPetVO(t))?void 0:s.grade)??0,a=(null==(e=r.getPetVO(i))?void 0:e.grade)??0,c=o<5?o:-1,l=a<5?a:-1;
- if(c!==l)return l-c;
- const u=(null==(n=r.getPetVO(t))?void 0:n.kindNum)??0;
- return((null==(h=r.getPetVO(i))?void 0:h.kindNum)??0)-u}
- );
- this.list.dataProvider=ZI.chunkArray(t,2),cst.getInstance().updateTicket()}
- get className(){
- return"FavoritePetSubView"}
- updateLanguage(){
- this.btn1.text=AG.getText("GAME_1190","1회"),this.btn3.text=AG.getText("GAME_1191","3회"),this.btnMax.text=AG.getText("GAME_1192","Max"),this.setData()}
- }
- ;
- Kt(rst,"FavoritePetSubView"),zt(rst,"instance");
- let ost=rst;
- const ast=class t extends D4{
- constructor(){
- super(),zt(this,"lblTicket"),zt(this,"btnSetting"),zt(this,"btnBuyTicket"),zt(this,"btnClose",new L6),this.setTitle(AG.getText("GAME_1187","즐겨찾기")),this.lblTitle.y-=4,this.lblTicket=new GB("UI_PET_TICKET","15",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_16,"UI_Ekkorr"),this.lblTicket.iconScale=.6,this.lblTicket.x=this.lblTitle.x,this.lblTicket.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblTicket),this.btnClose.x=640-this.btnClose.width-6,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.btnClose.onClick=this.onClose.bind(this),this.addChild(this.btnClose),this.btnBuyTicket=new UB("UI_PET_TICKET",AG.getText("COMMON_7","구매"),.6),this.btnBuyTicket.color=UB.BROWN,this.btnBuyTicket.width=120,this.btnBuyTicket.height=45,this.btnBuyTicket.x=this.btnClose.x-this.btnBuyTicket.width-4,this.btnBuyTicket.y=.5*(this.bg.height-this.btnBuyTicket.height),this.btnBuyTicket.onClick=this.onBuyTicket.bind(this),this.addChild(this.btnBuyTicket),this.btnSetting=new QL(AG.getText("COMMON_49","설정")),this.btnSetting.color=QL.BROWN,this.btnSetting.width=110,this.btnSetting.height=45,this.btnSetting.x=this.btnBuyTicket.x-this.btnSetting.width-4,this.btnSetting.y=this.btnBuyTicket.y,this.btnSetting.onClick=this.onSetting.bind(this),this.addChild(this.btnSetting)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateTicket(){
- this.lblTicket.text=`${
- pL.getInstance().ticket}
- `}
- onClose(){
- Jt(async()=>{
- const{
- PetPopup:t}
- =await Promise.resolve().then(()=>kst);
- return{
- PetPopup:t}
- }
- ,void 0).then(({
- PetPopup:t}
- )=>{
- t.getInstance().goSpiritLandView()}
- )}
- async clickCloseBtn(){
- await this.onClose()}
- onSetting(){
- Jt(async()=>{
- const{
- FavoritePetSelectPopup:t}
- =await Promise.resolve().then(()=>rai);
- return{
- FavoritePetSelectPopup:t}
- }
- ,void 0).then(({
- FavoritePetSelectPopup:t}
- )=>{
- t.getInstance().setData(),t.getInstance().show()}
- )}
- onBuyTicket(){
- const t=pL.getInstance();
- if(!t.canPurchase())return void vV.getInstance().showMessage(AG.getText("COMMON_342","오늘 더 이상 구매할 수 없습니다."));
- const i=t.getNextPurchaseCost(),s=n9.getInstance();
- s.setData(i,AG.getValueReplace("GAME_600","##",3,"보석으로 티켓 3개를 구매하시겠습니까?")),s.onConfirm=async()=>{
- const i=await hD.getInstance().spirit.buyTicket();
- !1!==i.success?(i.body&&(_L.setUserInfo(i.body),i.body.spirit&&t.setData(i.body.spirit),UV.getInstance().updateAll()),ost.getInstance().setData(),vV.getInstance().showMessage(AG.getValueReplace("GAME_601","##",3,"티켓 3개를 구매하였습니다."))):vV.getInstance().showMessage(AG.getText("COMMON_467","구매 실패했습니다."))}
- ,s.show()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_1187","즐겨찾기")),this.btnSetting.text=AG.getText("COMMON_49","설정"),this.btnBuyTicket.text=AG.getText("COMMON_7","구매"),this.updateTicket()}
- }
- ;
- Kt(ast,"FavoritePetSubMenu"),zt(ast,"instance");
- let cst=ast;
- const lst=class t extends x6{
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- constructor(){
- super(),this.addChild(cst.getInstance());
- const t=ost.getInstance();
- t.y=cst.getInstance().height,this.currentSubView=t}
- get className(){
- return"FavoritePetView"}
- }
- ;
- Kt(lst,"FavoritePetView"),zt(lst,"instance");
- let ust=lst;
- const dst=class t extends x6{
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- constructor(){
- super(),this.addChild(ptt.getInstance());
- const t=vtt.getInstance();
- t.y=ptt.getInstance().height,this.currentSubView=t}
- get className(){
- return"PetListView"}
- }
- ;
- Kt(dst,"PetListView"),zt(dst,"instance");
- let fst=dst;
- const pst=class t extends x6{
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- constructor(){
- super(),this.addChild(Ttt.getInstance());
- const t=ktt.getInstance();
- t.y=Ttt.getInstance().height,this.currentSubView=t}
- get className(){
- return"PetMainView"}
- }
- ;
- Kt(pst,"PetMainView"),zt(pst,"instance");
- let gst=pst;
- const mst=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"petIcon"),zt(this,"lblQty"),zt(this,"lblName"),zt(this,"lblPrice"),zt(this,"btnBuy"),zt(this,"qtyBg"),zt(this,"vo",null),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.x=5,this.bg.width=630,this.bg.height=90,this.addChild(this.bg),this.petIcon=new gK,this.petIcon.x=24,this.petIcon.y=.5*(this.bg.height-this.petIcon.height)-2,this.addChild(this.petIcon),this.petIcon.eventMode="dynamic",this.petIcon.on("pointertap",this.onPetIconClick,this),this.qtyBg=new We(ZA.getTexture("UI_Ekkorr","Quest_bg")),this.qtyBg.eventMode="none",this.qtyBg.tint=13378082,this.qtyBg.width=30,this.qtyBg.height=18,this.qtyBg.x=this.petIcon.x+this.petIcon.width-this.qtyBg.width+4,this.qtyBg.y=this.petIcon.y+this.petIcon.height-this.qtyBg.height-2,this.addChild(this.qtyBg),this.lblQty=new YD("x3",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblQty.eventMode="none",this.lblQty.x=this.qtyBg.x+.5*(this.qtyBg.width-this.lblQty.width),this.lblQty.y=this.qtyBg.y+.5*(this.qtyBg.height-this.lblQty.height),this.addChild(this.lblQty),this.lblName=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.lblName.y=18,this.addChild(this.lblName),this.lblPrice=new GB("UI_GEM","0",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPrice.x=145,this.lblPrice.y=50,this.addChild(this.lblPrice),this.btnBuy=new QL(AG.getText("COMMON_7","구매")),this.btnBuy.color=QL.BROWN,this.btnBuy.width=130,this.btnBuy.height=60,this.btnBuy.x=this.bg.x+this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.btnBuy.onClick=()=>{
- this.vo&&t.onBuyClick&&t.onBuyClick(this.vo,this)}
- ,this.addChild(this.btnBuy)}
- setData(t){
- const i=t;
- this.vo=i;
- const s=lx.getInstance().getBookVO(i.kindNum),e=(null==s?void 0:s.name)??`Pet ${
- i.kindNum}
- `,n=AG.getText(`PET_NAME_${
- i.kindNum}
- `,e),h=AG.getText("GAME_711","펫조각");
- this.lblName.text=`${
- n}
-  ( ${
- h}
-  : x${
- i.piece}
-  )`,this.petIcon.setInactive(i.kindNum),i.currency===t9.GEM?this.lblPrice.texture=ZA.getTexture("UI_Ekkorr","UI_GEM"):this.lblPrice.texture=ZA.getTexture("UI_Ekkorr","PVP_COIN_ON"),this.lblPrice.text=`${
- i.price}
- `,this.lblQty.text=`x${
- i.piece}
- `,this.lblQty.x=this.qtyBg.x+.5*(this.qtyBg.width-this.lblQty.width),this.btnBuy.text=AG.getText("COMMON_7","구매")}
- clearCache(){
- }
- get height(){
- return this.bg.height+2}
- onPetIconClick(){
- this.vo&&this.vo.kindNum>0&&xtt.getInstance().showPet(this.vo.kindNum)}
- }
- ;
- Kt(mst,"PetShopItemRenderer"),zt(mst,"onBuyClick",null);
- let wst=mst;
- const vst=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"lblEmpty"),zt(this,"requestPending",!1),this.list=new R3(wst,640,720),this.list.x=0,this.list.y=0,this.addChild(this.list),this.lblEmpty=new YD("",10066329,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEmpty.x=320-.5*this.lblEmpty.width,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- async setData(t=!1){
- wst.onBuyClick=(t,i)=>this.onBuy(t,i);
- const i=s9.getInstance();
- if(t||!i.isLoaded)try{
- const t=await hD.getInstance().petShop.getInfo();
- (null==t?void 0:t.success)&&t.body&&(_L.setUserInfo(t.body),i.setData(t.body),UV.getInstance().updateAll())}
- catch(_gt){
- }
- this.refreshList()}
- refreshList(){
- const t=s9.getInstance();
- 0===t.slots.length?(this.list.dataProvider=[],this.lblEmpty.text=AG.getText("GAME_737","오늘 구매 가능한 펫이 모두 소진되었습니다."),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.lblEmpty.visible=!0):(this.list.dataProvider=t.slots.slice(),this.lblEmpty.visible=!1)}
- onBuy(t,i){
- if(this.requestPending)return;
- if((t.currency===t9.GEM?_L.gem:_L.honorCoin)<t.price){
- const i=t.currency===t9.GEM?"COMMON_352":"GAME_194",s=t.currency===t9.GEM?"보석이 부족합니다.":"명예코인이 부족합니다.";
- return void vV.getInstance().showMessage(AG.getText(i,s))}
- const s=t.currency===t9.GEM?"UI_GEM_ICON":"PVP_COIN_ON",e=n9.getInstance();
- e.setData(t.price,AG.getValueReplace("GAME_738","##",t.piece,`펫 조각 ${
- t.piece}
- 개를 구매하시겠습니까?`),s),e.onConfirm=async()=>{
- if(!this.requestPending){
- this.requestPending=!0;
- try{
- const i=await hD.getInstance().petShop.buy(t.slotIndex);
- if(!1===(null==i?void 0:i.success))return void mG.getInstance().showError(i);
- (null==i?void 0:i.body)&&(_L.setUserInfo(i.body),s9.getInstance().setData(i.body),UV.getInstance().updateAll(),this.refreshList(),vV.getInstance().showMessage(AG.getValueReplace("GAME_739","##",t.piece,`펫 조각 ${
- t.piece}
- 개를 획득하였습니다.`)))}
- catch(_gt){
- }
- finally{
- this.requestPending=!1}
- }
- }
- ,e.show()}
- get className(){
- return"PetShopSubView"}
- updateLanguage(){
- this.refreshList()}
- }
- ;
- Kt(vst,"PetShopSubView"),zt(vst,"instance");
- let bst=vst;
- const yst=class t extends D4{
- constructor(){
- super(),zt(this,"lblRemainTitle"),zt(this,"lblRemainTime"),zt(this,"btnRefresh"),zt(this,"frameCnt",0),zt(this,"requestPending",!1),this.setTitle(AG.getText("GAME_570","상점")),this.btnRefresh=new QL(AG.getText("COMMON_60","새로고침")),this.btnRefresh.color=QL.BROWN,this.btnRefresh.width=130,this.btnRefresh.height=50,this.btnRefresh.x=640-this.btnRefresh.width-6,this.btnRefresh.y=.5*(this.bg.height-this.btnRefresh.height),this.btnRefresh.onClick=this.onRefresh.bind(this),this.addChild(this.btnRefresh),this.lblRemainTitle=new YD(AG.getText("COMMON_29","남은 시간"),16746598,aD.DEFAULT_FONT_OPTION_15),this.lblRemainTime=new YD("00:00",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.addChild(this.lblRemainTitle),this.addChild(this.lblRemainTime),this.layoutRemainLabels(),this.refreshTime(),this.on("added",this.onAddedToStage,this),this.on("removed",this.onRemovedFromStage,this)}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- layoutRemainLabels(){
- const t=this.btnRefresh.x-8;
- this.lblRemainTime.x=t-this.lblRemainTime.width,this.lblRemainTime.y=.5*(this.bg.height-this.lblRemainTime.height)+1,this.lblRemainTitle.x=this.lblRemainTime.x-this.lblRemainTitle.width-4,this.lblRemainTitle.y=.5*(this.bg.height-this.lblRemainTitle.height)+2}
- onAddedToStage(){
- GM.getInstance().add(this.onFrame,this),this.refreshTime(),this.refreshButtonState()}
- onRemovedFromStage(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- if(++this.frameCnt<t.FRAME_SKIP)return;
- this.frameCnt=0,this.refreshTime(),this.refreshButtonState();
- const i=s9.getInstance();
- i.isStale()&&(i.invalidate(),bst.getInstance().setData(!0))}
- refreshTime(){
- const t=s9.getInstance().getRemainingTimeText();
- this.lblRemainTime.text=t,this.layoutRemainLabels()}
- refreshButtonState(){
- const t=s9.getInstance().canRefresh;
- this.btnRefresh.activated=!0,this.btnRefresh.alpha=t?1:.5}
- async onRefresh(){
- if(!this.requestPending)if(s9.getInstance().canRefresh){
- this.requestPending=!0;
- try{
- const t=await hD.getInstance().petShop.refresh();
- if(!1===(null==t?void 0:t.success))return void mG.getInstance().showError(t);
- (null==t?void 0:t.body)&&(_L.setUserInfo(t.body),s9.getInstance().setData(t.body),UV.getInstance().updateAll(),bst.getInstance().updateLanguage(),this.refreshButtonState(),vV.getInstance().showMessage(AG.getText("GAME_741","펫 상점이 새로고침되었습니다.")))}
- catch(_gt){
- }
- finally{
- this.requestPending=!1}
- }
- else vV.getInstance().showMessage(AG.getText("GAME_740","내일 0시(UTC) 이후 새로고침할 수 있습니다."))}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_570","상점")),this.btnRefresh.text=AG.getText("COMMON_60","새로고침"),this.lblRemainTitle.text=AG.getText("COMMON_29","남은 시간"),this.layoutRemainLabels()}
- }
- ;
- Kt(yst,"PetShopSubMenu"),zt(yst,"instance"),zt(yst,"FRAME_SKIP",30);
- let _st=yst;
- const Mst=class t extends x6{
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- constructor(){
- super(),this.addChild(_st.getInstance());
- const t=bst.getInstance();
- t.y=_st.getInstance().height,this.currentSubView=t}
- get className(){
- return"PetShopView"}
- }
- ;
- Kt(Mst,"PetShopView"),zt(Mst,"instance");
- let Est=Mst;
- const Ast=class t extends x6{
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- constructor(){
- super(),this.addChild(Dtt.getInstance());
- const t=ist.getInstance();
- t.y=Dtt.getInstance().height,this.currentSubView=t}
- get className(){
- return"SpriteLandView"}
- }
- ;
- Kt(Ast,"SpriteLandView"),zt(Ast,"instance");
- let Sst=Ast;
- const Tst=class t extends O8{
- constructor(){
- super(),zt(this,"tabMain"),zt(this,"tabPetList"),zt(this,"tabPlateau"),zt(this,"tabShop"),zt(this,"tabPetListRedDot",new YL),zt(this,"viewContainer",new Be),zt(this,"_currentView",null),zt(this,"_activeIndex",0),zt(this,"enterFrameCount",0),zt(this,"onEnterFrame",Kt(()=>{
- this.visible&&(++this.enterFrameCount<30||(this.enterFrameCount=0,this.updatePetListRedDot()))}
- ,"onEnterFrame")),zt(this,"spiritLoadPromise",null),zt(this,"onVisibilityChange",Kt(()=>{
- document.hidden||this.selectTab(this._activeIndex)}
- ,"onVisibilityChange")),zt(this,"onPetListUpdateBind"),this.bg.height<880&&(this.y=Math.max(0,KA.safeHeight-880),this.bg.height=KA.safeHeight-this.y),this.btnClose.y=-this.btnClose.height-1,this.viewContainer.x=0,this.viewContainer.y=t.CONTENT_TOP_Y,this.addChild(this.viewContainer),this.tabMain=new B6(AG.getText("GAME_566","메인"),120),this.tabPetList=new B6(AG.getText("GAME_568","펫 목록"),120),this.tabPlateau=new B6(AG.getText("GAME_569","정령의 고원"),120),this.tabShop=new B6(AG.getText("GAME_570","상점"),120);
- const i=[this.tabMain,this.tabPetList,this.tabPlateau,this.tabShop],s=t.TAB_WIDTH*i.length+t.TAB_GAP*(i.length-1),e=Math.floor(.5*(this.bg.width-s)),n=this.bg.height-t.TAB_HEIGHT-t.TAB_BOTTOM_MARGIN;
- for(let h=0;
- h<i.length;
- h++){
- const s=i[h];
- s.autoResize=!1,s.width=t.TAB_WIDTH,s.height=t.TAB_HEIGHT,s.allowMultiline=!0,s.text=s.text,s.x=e+h*(t.TAB_WIDTH+t.TAB_GAP),s.y=n,s.index=h,s.onClick=()=>this.selectTab(h),this.addChild(s)}
- this.tabPetList.addChild(this.tabPetListRedDot),this.tabPetListRedDot.x=t.TAB_WIDTH-30,this.tabPetListRedDot.y=-8,this.tabPetListRedDot.visible=!1,this.selectTab(0)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onAdded(){
- super.onAdded(),this.setPetListUpdate(!0)}
- onRemoved(){
- super.onRemoved(),this.setPetListUpdate(!1)}
- updatePetListRedDot(){
- const t=lx.getInstance().hasAnyEvolvable();
- this.tabPetListRedDot.visible=t,t?this.tabPetListRedDot.show():this.tabPetListRedDot.hide()}
- selectTab(t){
- this._activeIndex=t;
- const i=[this.tabMain,this.tabPetList,this.tabPlateau,this.tabShop];
- for(let e=0;
- e<i.length;
- e++)i[e].selected=e===t;
- let s=null;
- switch(t){
- case 0:s=gst.getInstance(),Ttt.getInstance().updateLanguage(),ktt.getInstance().setData();
- break;
- case 1:s=fst.getInstance(),ptt.getInstance().updateLanguage(),vtt.getInstance().setData();
- break;
- case 2:s=Sst.getInstance(),Dtt.getInstance().updateLanguage(),pL.getInstance().isStale()&&pL.getInstance().invalidate(),this.ensureSpiritData().then(()=>{
- ist.getInstance().setData()}
- );
- break;
- case 3:s=Est.getInstance(),_st.getInstance().updateLanguage(),s9.getInstance().isStale()&&s9.getInstance().invalidate(),bst.getInstance().setData()}
- s&&this.setCurrentView(s)}
- onMenuClick(t){
- t!=this._activeIndex&&this.selectTab(t)}
- ensureSpiritData(){
- return pL.getInstance().isDataLoaded?Promise.resolve():(this.spiritLoadPromise||(this.spiritLoadPromise=hD.getInstance().spirit.getInfo().then(t=>{
- var i;
- (null==(i=null==t?void 0:t.body)?void 0:i.spirit)&&(pL.getInstance().setData(t.body.spirit),this.updateFavoritePets()),this.spiritLoadPromise=null}
- )),this.spiritLoadPromise)}
- get currentView(){
- return this._currentView}
- goFavoriteView(){
- this.setCurrentView(ust.getInstance()),ost.getInstance().setData()}
- goSpiritLandView(){
- this.setCurrentView(Sst.getInstance()),ist.getInstance().setData()}
- setCurrentView(t){
- this._currentView!==t&&(this._currentView&&this._currentView.parent&&this.viewContainer.removeChild(this._currentView),this._currentView=t,this._currentView&&this.viewContainer.addChild(this._currentView))}
- get contentHeight(){
- return this.bg.height-t.CONTENT_TOP_Y-t.TAB_HEIGHT-t.TAB_BOTTOM_MARGIN}
- show(){
- UV.getInstance().setMode(GV.TOWER),this.tabMain.text=AG.getText("GAME_567","메인"),this.tabPetList.text=AG.getText("GAME_568","펫 목록"),this.tabPlateau.text=AG.getText("GAME_569","정령의 고원"),this.tabShop.text=AG.getText("GAME_570","상점"),this.selectTab(this._activeIndex),this.updatePetListRedDot(),GM.getInstance().remove(this.onEnterFrame,this),GM.getInstance().add(this.onEnterFrame,this),this.show2(),this.ensureSpiritData(),document.addEventListener("visibilitychange",this.onVisibilityChange)}
- hide(){
- UV.getInstance().setMode(GV.NORMAL),GM.getInstance().remove(this.onEnterFrame,this),document.removeEventListener("visibilitychange",this.onVisibilityChange),super.hide()}
- get className(){
- return"PetPopup"}
- getMenuTabHeight(){
- return this.tabMain.height}
- async updateFavoritePets(){
- var t;
- const i=pL.getInstance(),s=Math.floor(_L.maxWave/100),e=[],n=[],h=i.favoritePets.length;
- let r;
- for(let a=0;
- a<h;
- ++a){
- r=i.getStagesByPetKindNum(i.favoritePets[a]);
- let t=0;
- const h=r.length;
- for(let e=0;
- e<h&&!(r[e].reqLevel>s);
- ++e){
- const s=i.getStageVO(r[e].kindNum);
- if(!s||s.star<=0)break;
- t++}
- 0===t?n.push(i.favoritePets[a]):e.push(i.favoritePets[a])}
- if(0==n.length)return;
- const o=await hD.getInstance().spirit.saveFavoritePets(e);
- o.success&&(null==(t=o.body)?void 0:t.spirit)&&pL.getInstance().setData(o.body.spirit)}
- setPetListUpdate(t){
- lS.getInstance().removeEventListener("PetListUpdate",this.onPetListUpdateBind),t&&(this.onPetListUpdateBind=this.onPetListUpdate.bind(this),lS.getInstance().addEventListener("PetListUpdate",this.onPetListUpdateBind))}
- onPetListUpdate(t){
- 1==this._activeIndex&&vtt.getInstance().setData()}
- }
- ;
- Kt(Tst,"PetPopup"),zt(Tst,"_instance"),zt(Tst,"TAB_HEIGHT",60),zt(Tst,"TAB_GAP",1),zt(Tst,"TAB_WIDTH",159),zt(Tst,"TAB_BOTTOM_MARGIN",5),zt(Tst,"CONTENT_TOP_Y",40);
- let Cst=Tst;
- const kst=Object.freeze(Object.defineProperty({
- __proto__:null,PetPopup:Cst}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),Ost=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblRank",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblScore",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),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)}
- setData(t){
- this.data=t,this.lblRank.text=`${
- t.rank}
- `,this.lblName.text=t.name,this.lblScore.text=t.score.toLocaleString(),t.name===_L.name?(this.lblName.textColor=aD.COLOR_YELLOW,this.lblRank.textColor=aD.COLOR_YELLOW):(this.lblName.textColor=16777215,this.lblRank.textColor=16777215)}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(Ost,"DailyRankingItemRenderer");
- let Ist=Ost;
- const xst=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblRank",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"iconGem"),zt(this,"lblGem",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"iconHonorCoin"),zt(this,"lblHonorCoin",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=610,this.bg.height=48,this.bg.x=5,this.addChild(this.bg);
- const t=.5*(this.bg.height-this.lblRank.height);
- this.lblRank.x=20,this.lblRank.y=t,this.addChild(this.lblRank),this.iconGem=new We(ZA.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=22,this.iconGem.height=22,this.iconGem.x=234,this.iconGem.y=.5*(this.bg.height-22),this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+28,this.lblGem.y=t,this.addChild(this.lblGem),this.iconHonorCoin=new We(ZA.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonorCoin.width=22,this.iconHonorCoin.height=22,this.iconHonorCoin.x=420,this.iconHonorCoin.y=.5*(this.bg.height-22),this.addChild(this.iconHonorCoin),this.lblHonorCoin.x=this.iconHonorCoin.x+28,this.lblHonorCoin.y=t,this.addChild(this.lblHonorCoin)}
- setData(t){
- this.data=t,this.lblRank.text=AG.getValueReplace("GAME_97","##",t.rank,`${
- t.rank}
- 위`),this.lblGem.text=String(t.gem),this.lblHonorCoin.text=String(t.honorCoin),this.lblRank.x=10+.5*(80-this.lblRank.width)}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(xst,"DailyRewardItemRenderer");
- let Nst=xst;
- const Pst=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_359","일일 랭킹전 안내");
- const t=[`1. ${
- AG.getText("GAME_360","일일랭킹전은 최대 30명이 경쟁합니다.")}
- `,`2. ${
- AG.getText("GAME_361","24시간동안 가장 높은곳에서 환생한 유저 순으로 랭킹이 정해집니다.")}
- `,`3. ${
- AG.getText("GAME_362","보상은 하루가 끝나면, 우편으로 전송됩니다.")}
- `];
- this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.4*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(Pst,"DailyRankingGuidePopup"),zt(Pst,"_instance");
- let Rst=Pst;
- const Dst=class t extends D4{
- constructor(){
- super(),zt(this,"btnRefresh",new aK("새로고침",110)),zt(this,"btnReward",new aK("보상",120)),zt(this,"btnGuide"),this.closeBtn.visible=!0,this.closeBtn.eventMode="static",this.closeBtn.on("pointertap",this.onBack,this),this.btnReward.width=120,this.btnReward.height=50,this.btnReward.x=this.closeBtn.x-this.btnReward.width-5,this.btnReward.y=.5*(this.bg.height-this.btnReward.height),this.btnReward.on("pointertap",this.onReward,this),this.addChild(this.btnReward),this.btnRefresh.width=110,this.btnRefresh.height=50,this.btnRefresh.x=this.btnReward.x-this.btnRefresh.width-5,this.btnRefresh.y=.5*(this.bg.height-this.btnRefresh.height),this.btnRefresh.on("pointertap",this.onRefresh,this),this.addChild(this.btnRefresh),this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- Rst.getInstance().showGuide()}
- ),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onBack(){
- Ght.getInstance().setData(),P6.getInstance().currentSubView=Ght.getInstance()}
- onRefresh(){
- Bst.getInstance().refresh()}
- onReward(){
- Bst.getInstance().toggleRewards()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_78","일일 랭킹전")),this.btnReward.text=AG.getText("COMMON_22","보상"),this.btnReward.x=this.closeBtn.x-this.btnReward.width-5,this.btnRefresh.text=AG.getText("COMMON_60","새로고침"),this.btnRefresh.x=this.btnReward.x-this.btnRefresh.width-5,this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
- }
- ;
- Kt(Dst,"DailyBattleSubMenu"),zt(Dst,"instance");
- let Lst=Dst;
- const Gst=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"lblMyRank",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblMyScore",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblTimer",new YD("",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblTotalCount",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblNotJoined",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnJoin",new sG(AG.getText("COMMON_371","참여하기"))),zt(this,"joined",!1),zt(this,"rewardList"),zt(this,"lblHdrRank",new YD("등수",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrGem",new YD("보석",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrHonorCoin",new YD("명예코인",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"showingRewards",!1),zt(this,"cachedRewards",null),zt(this,"lastFetchTime",0),zt(this,"cachedData",null),zt(this,"lastRefreshTime",0),zt(this,"timerRunning",!1),zt(this,"timerUpdateCount",0),this.addChild(Lst.getInstance());
- const t=Lst.getInstance().height;
- this.lblMyRank.x=15,this.lblMyRank.y=t+10,this.addChild(this.lblMyRank),this.lblMyScore.x=15,this.lblMyScore.y=this.lblMyRank.y+25,this.addChild(this.lblMyScore),this.lblTimer.x=400,this.lblTimer.y=t+10,this.addChild(this.lblTimer),this.lblTotalCount.x=400,this.lblTotalCount.y=this.lblTimer.y+25,this.addChild(this.lblTotalCount);
- const i=t+65,s=KA.listHeight-i+t;
- this.list=new zI(Ist,630,s),this.list.x=10,this.list.y=i,this.addChild(this.list),this.lblNotJoined.x=150,this.lblNotJoined.y=t+120,this.addChild(this.lblNotJoined),this.btnJoin.text=AG.getText("COMMON_371","참여하기"),this.btnJoin.color=QL.GREEN,this.btnJoin.width=200,this.btnJoin.height=55,this.btnJoin.x=.5*(640-this.btnJoin.width),this.btnJoin.y=t+180,this.btnJoin.onClick=this.onJoin.bind(this),this.addChild(this.btnJoin);
- const e=t+30,n=KA.listHeight-e+t;
- this.rewardList=new zI(Nst,630,n),this.rewardList.x=10,this.rewardList.y=e,this.rewardList.visible=!1,this.addChild(this.rewardList),this.lblHdrRank.x=25,this.lblHdrRank.y=t+5,this.lblHdrRank.visible=!1,this.addChild(this.lblHdrRank),this.lblHdrGem.x=250,this.lblHdrGem.y=t+5,this.lblHdrGem.visible=!1,this.addChild(this.lblHdrGem),this.lblHdrHonorCoin.x=435,this.lblHdrHonorCoin.y=t+5,this.lblHdrHonorCoin.visible=!1,this.addChild(this.lblHdrHonorCoin),this.showNotJoinedState(),this.on("removed",this.onRemoved.bind(this))}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onRemoved(){
- this.showingRewards&&this.hideRewards()}
- setData(){
- Lst.getInstance().updateLanguage();
- const i=Date.now();
- null!=this.cachedData&&i-this.lastFetchTime<t.CACHE_DURATION?this.showJoinedState(this.cachedData):this.loadInfo()}
- refresh(){
- const i=Date.now();
- i-this.lastRefreshTime<t.REFRESH_COOLDOWN||(this.lastRefreshTime=i,this.loadInfo())}
- async loadInfo(){
- const t=await hD.getInstance().dailyRanking.getInfo(!0);
- !1!==t.success?(this.lastFetchTime=Date.now(),null==t.body?(this.cachedData=null,this.showNotJoinedState()):(this.cachedData=t.body,this.showJoinedState(t.body)),this.showingRewards&&this.hideRewards()):mG.getInstance().showError(t)}
- async onJoin(){
- var t;
- const i=await hD.getInstance().dailyRanking.join(!0);
- !1!==i.success?(aV.getInstance().markDirty(),this.cachedData=i.body,this.lastFetchTime=Date.now(),this.showJoinedState(i.body),C6.getInstance().updateDailyRanking(!0,(null==(t=i.body)?void 0:t.myScore)??0),nV.getInstance().getStatus()):mG.getInstance().showError(i)}
- async toggleRewards(){
- if(this.showingRewards)return void this.hideRewards();
- if(null!=this.cachedRewards)return void this.showRewards(this.cachedRewards);
- const t=await hD.getInstance().dailyRanking.getRewards(!0);
- !1!==t.success?(this.cachedRewards=t.body??[],this.showRewards(this.cachedRewards)):mG.getInstance().showError(t)}
- showRewards(t){
- this.showingRewards=!0,this.lblMyRank.visible=!1,this.lblMyScore.visible=!1,this.lblTimer.visible=!1,this.lblTotalCount.visible=!1,this.list.visible=!1,this.lblNotJoined.visible=!1,this.btnJoin.visible=!1,this.lblHdrRank.text=AG.getText("COMMON_388","등수"),this.lblHdrGem.text=AG.getText("COMMON_350","보석"),this.lblHdrHonorCoin.text=AG.getText("GAME_88","명예코인"),this.lblHdrRank.visible=!0,this.lblHdrGem.visible=!0,this.lblHdrHonorCoin.visible=!0,this.rewardList.dataProvider=t,this.rewardList.visible=!0}
- hideRewards(){
- this.showingRewards=!1,this.lblHdrRank.visible=!1,this.lblHdrGem.visible=!1,this.lblHdrHonorCoin.visible=!1,this.rewardList.visible=!1,this.joined&&this.cachedData?this.showJoinedState(this.cachedData):this.showNotJoinedState()}
- showNotJoinedState(){
- this.joined=!1,this.stopTimer(),this.lblNotJoined.text=AG.getText("GAME_92","일일 랭킹전에 참여하지 않았습니다."),this.lblNotJoined.x=.5*(640-this.lblNotJoined.width),this.lblNotJoined.visible=!0,this.btnJoin.text=AG.getText("COMMON_371","참여하기"),this.btnJoin.x=.5*(640-this.btnJoin.width),this.btnJoin.visible=!0,this.lblMyRank.visible=!1,this.lblMyScore.visible=!1,this.lblTimer.visible=!1,this.lblTotalCount.visible=!1,this.list.visible=!1}
- showJoinedState(t){
- this.joined=!0,this.lblNotJoined.visible=!1,this.btnJoin.visible=!1,this.lblMyRank.visible=!0,this.lblMyScore.visible=!0,this.lblTimer.visible=!0,this.lblTotalCount.visible=!0,this.list.visible=!0,this.lblMyRank.text=`${
- AG.getText("COMMON_374","내 순위")}
- : ${
- t.myRank}
- `,this.lblMyScore.text=`${
- AG.getText("COMMON_375","내 점수")}
- : ${
- t.myScore.toLocaleString()}
- `,this.lblTotalCount.text=`${
- AG.getText("COMMON_372","참가자")}
- : ${
- t.totalCount}
- `,t.topEntries&&t.topEntries.length>0?this.list.dataProvider=t.topEntries:this.list.dataProvider=[],this.startTimer()}
- startTimer(){
- this.timerRunning||(this.timerRunning=!0,this.timerUpdateCount=0,this.updateTimer(),GM.getInstance().add(this.updateTimer,this))}
- stopTimer(){
- this.timerRunning&&(this.timerRunning=!1,GM.getInstance().remove(this.updateTimer,this))}
- updateTimer(){
- var t,i;
- if(++this.timerUpdateCount<30)return;
- if(null==(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent))return void this.stopTimer();
- this.timerUpdateCount=0;
- const s=ix.time;
- if(s<=0)return;
- const e=new Date(s);
- e.setUTCHours(24,0,0,0);
- const n=e.getTime()-s;
- if(n<=0)return this.lblTimer.text=AG.getText("COMMON_32","종료"),void this.stopTimer();
- const h=Math.floor(n/36e5),r=Math.floor(n%36e5/6e4),o=Math.floor(n%6e4/1e3),a=h.toString().padStart(2,"0"),c=r.toString().padStart(2,"0"),l=o.toString().padStart(2,"0");
- this.lblTimer.text=`${
- AG.getText("COMMON_29","남은 시간")}
- : ${
- a}
- :${
- c}
- :${
- l}
- `}
- get className(){
- return"DailyBattleSubView"}
- updateLanguage(){
- Lst.getInstance().updateLanguage(),this.joined&&this.cachedData?this.showJoinedState(this.cachedData):this.joined||(this.lblNotJoined.text=AG.getText("GAME_92","일일 랭킹전에 참여하지 않았습니다."),this.btnJoin.text=AG.getText("COMMON_371","참여하기"))}
- }
- ;
- Kt(Gst,"DailyBattleSubView"),zt(Gst,"instance"),zt(Gst,"CACHE_DURATION",6e5),zt(Gst,"REFRESH_COOLDOWN",6e4);
- let Bst=Gst;
- const Ust=class t{
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- goPvp(){
- C8.getInstance().isPVPBattlePopup()||(Xti.getInstance().onMenuClickByIndex(4),mnt.getInstance().show())}
- goDungeon(){
- LV.getInstance().children.length>0&&(LV.getInstance().removeChildren(),UV.ensureMounted(S4.getInstance())),C8.getInstance().isDungeonSubView()||(Xti.getInstance().onMenuClickByIndex(4),Mit.getInstance().setData(),P6.getInstance().currentSubView=Mit.getInstance())}
- goDailyRanking(){
- LV.getInstance().children.length>0&&(LV.getInstance().removeChildren(),UV.ensureMounted(S4.getInstance())),C8.getInstance().isDailyBattleSubView()||(Xti.getInstance().onMenuClickByIndex(4),Bst.getInstance().setData(),P6.getInstance().currentSubView=Bst.getInstance())}
- goTower(){
- LV.getInstance().children.length>0&&(LV.getInstance().removeChildren(),UV.ensureMounted(S4.getInstance())),C8.getInstance().isTowerSubView()||(Xti.getInstance().onMenuClickByIndex(4),Qtt.getInstance().setData(),P6.getInstance().currentSubView=Qtt.getInstance())}
- goSpritLand(){
- LV.getInstance().children.length>0&&(LV.getInstance().removeChildren(),UV.ensureMounted(S4.getInstance())),C8.getInstance().isPetPopup()||_9t.getInstance().executeOnPetBtnClick2(),Cst.getInstance().onMenuClick(2)}
- async goPaymentShop(t,i=null){
- const s=hK.getInstance();
- if(s.isReviewShop())return;
- const e=s.unlockWave;
- if(0==TL.getInstance().stage&&_L.maxWave<e&&_L.wave<e)return void vV.getInstance().showMessage(AG.getValueReplace("GAME_34","##",e,`${
- e}
-  wave 이상에서 개방됩니다.`));
- const n=b8.getInstance();
- 0==C8.getInstance().isShopView()&&(n.setDataCallback=i,i=null,await Xti.getInstance().onMenuClickByIndex(5)),0==C8.getInstance().isShopPaySubView()&&S8.getInstance().clickTab(1),t!=n.getActiveIndex()&&n.clickTab(t),i&&i()}
- async goPaymentShopWithProductIds(t){
- const i=Kt(()=>{
- b8.getInstance().scrollWithProductIds(t)}
- ,"callback");
- this.goPaymentShop(1,i)}
- }
- ;
- Kt(Ust,"ShortcutManager"),zt(Ust,"instance");
- let Fst=Ust;
- const Hst=class t extends AB{
- constructor(){
- super(),zt(this,"markerText"),this.markerText=new vB("@",this.width-80,16,aD.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.markerText),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_1203","화석 발굴");
- const t=[AG.getText("GAME_1205","화석발굴 이벤트는 한달간 진행됩니다."),AG.getText("GAME_1206","매일 00:00:00 ( utc )에 망치가 30개씩 제공됩니다."),AG.getText("GAME_1207","화석은 흰색/ 녹색/ 파란색/ 보라색/ 붉은색으로 총 5단계가 있고, 등급이 높을수록 보상을 많이 줍니다."),AG.getText("GAME_1208","비서도 일정시간마다 망치를 구해옵니다. ( 고급비서는 2배 )"),AG.getText("GAME_1209","이벤트가 종료하면, 진행된 모든 단계가 초기화 됩니다.")];
- this.markerText.text=t.map(t=>`@ ${
- t}
- `).join("\n"),this.markerText.x=30,this.markerText.y=80,this.height=this.markerText.y+this.markerText.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.45*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(Hst,"MineGuidePopup"),zt(Hst,"_instance");
- let Wst=Hst;
- const jst=class t extends Be{
- constructor(){
- super(),zt(this,"xId",0),zt(this,"yId",0),zt(this,"img",new We),zt(this,"_health",0),this.img.x=.5*(t.CELL_W-t.SPRITE_W),this.img.y=.5*(t.CELL_H-t.SPRITE_H),this.addChild(this.img)}
- set health(t){
- if(t<0&&(t=0),this._health=t,t<=0)return void(this.visible=!1);
- this.visible=!0;
- const i=Math.max(1,Math.min(12,Math.ceil(t))),s=ZA.getTexture("UI_MINE",`NumBlock_${
- i}
- _1.png`);
- s&&(this.img.texture=s)}
- get health(){
- return this._health}
- applyDamage(t){
- this.health=this._health-t}
- reset(){
- this._health=0,this.visible=!0}
- }
- ;
- Kt(jst,"Block"),zt(jst,"CELL_W",70),zt(jst,"CELL_H",72),zt(jst,"SPRITE_W",72),zt(jst,"SPRITE_H",82);
- let $st=jst;
- const Vst=class extends Be{
- constructor(){
- super(),zt(this,"xId",0),zt(this,"yId",0),zt(this,"grade",1),zt(this,"kindNum",0),zt(this,"num",0),zt(this,"isExcavated",!1),zt(this,"img",new We),this.addChild(this.img)}
- setData(t){
- this.xId=t.x,this.yId=t.y,this.kindNum=t.kindNum,this.num=t.num,this.grade=Math.max(1,Math.min(5,t.grade??1)),this.isExcavated=!1,this.visible=t.num>0;
- const i=ZA.getTexture("UI_MINE",`randomBox${
- this.grade}
- .png`);
- i&&(this.img.texture=i),this.img.x=.5*($st.CELL_W-this.img.width),this.img.y=.5*($st.CELL_H-this.img.height)}
- }
- ;
- Kt(Vst,"MineBoxObj");
- let Kst=Vst;
- const zst=class extends Be{
- constructor(){
- super(),zt(this,"xIndex",0),zt(this,"yIndex",0),zt(this,"shape","square"),zt(this,"grade",1),zt(this,"kindNum",0),zt(this,"num",0),zt(this,"isExcavated",!1),zt(this,"img",new We),this.addChild(this.img)}
- setData(t){
- this.shape=t.shape,this.grade=Math.max(1,Math.min(7,t.grade??1)),this.kindNum=t.kindNum,this.num=t.num,this.isExcavated=!1;
- const i=t.coordinates[0];
- this.xIndex=i.x,this.yIndex=i.y;
- const s=`BoneBox_${
- t.shape}
- _${
- this.grade}
- .png`,e=ZA.getTexture("UI_MINE",s);
- e&&(this.img.texture=e);
- const{
- w:n,h}
- =this.getCellSize(),r=n*$st.CELL_W,o=h*$st.CELL_H;
- this.img.x=.5*(r-this.img.width),this.img.y=.5*(o-this.img.height)}
- getCellSize(){
- return"square"===this.shape?{
- w:2,h:2}
- :"vLine"===this.shape?{
- w:1,h:4}
- :{
- w:4,h:1}
- }
- }
- ;
- Kt(zst,"TreasureChest");
- let qst=zst;
- const Xst=class t extends Be{
- constructor(){
- super(),zt(this,"xNum",0),zt(this,"yNum",0),zt(this,"blocks",[]),zt(this,"revealedChests",new Map),zt(this,"revealedBoxes",new Map),zt(this,"blockContainer",new Be),zt(this,"chestContainer",new Be),zt(this,"boxContainer",new Be),zt(this,"fxContainer",new Be),zt(this,"xSpace",$st.CELL_W),zt(this,"ySpace",$st.CELL_H),zt(this,"gridBg",new Gf),zt(this,"initialized",!1),zt(this,"gameStarted",!1),zt(this,"gameEnded",!1),zt(this,"pending",!1),zt(this,"onAllChestsExcavated",null),zt(this,"onComplete",null),zt(this,"onHammerUsed",null),zt(this,"onDamageAndExcavated",null),zt(this,"onError",null),zt(this,"onHammerEmpty",null),this.addChild(this.gridBg),this.addChild(this.chestContainer),this.addChild(this.boxContainer),this.addChild(this.blockContainer),this.addChild(this.fxContainer)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- async initialize(){
- this.initialized||(this.initialized=!0,this.eventMode="dynamic",this.on("pointerdown",this.onPointerDown,this))}
- async startGame(){
- var t,i,s;
- if(this.gameStarted)return!0;
- const e=BG.getInstance();
- if(!e.instance){
- const n=await hD.getInstance().mine.start(!0);
- if(!n||!1===n.success)return null==(t=this.onError)||t.call(this,(null==n?void 0:n.error)??null,n),!1;
- e.setStatusData(null==(i=n.body)?void 0:i.status),e.setInstanceData(null==(s=n.body)?void 0:s.instance)}
- const n=e.instance;
- return!!n&&(this.buildGrid(n),this.gameStarted=!0,this.gameEnded=!1,this.pending=!1,!0)}
- applyDiscovered(t,i){
- for(const s of t)this.spawnChest(s);
- for(const s of i)this.spawnBox(s)}
- buildGrid(t){
- var i,s;
- this.clearGrid(),this.xNum=t.xNum,this.yNum=t.yNum;
- const e=this.xNum*this.xSpace,n=this.yNum*this.ySpace;
- this.gridBg.clear(),this.gridBg.roundRect(-4,-4,e+8,n+8,8),this.gridBg.fill({
- color:1710626,alpha:.5}
- );
- for(let h=0;
- h<this.xNum;
- h++){
- this.blocks[h]=[];
- for(let e=0;
- e<this.yNum;
- e++){
- const n=new $st;
- n.x=h*this.xSpace,n.y=e*this.ySpace,n.xId=h,n.yId=e;
- const r=(null==(s=null==(i=t.blocks)?void 0:i[e])?void 0:s[h])??0;
- n.health=r,this.blockContainer.addChild(n),this.blocks[h][e]=n}
- }
- }
- clearGrid(){
- for(const t of this.blocks)for(const i of t)this.blockContainer.removeChild(i);
- this.blocks=[];
- for(const t of this.revealedChests.values())this.chestContainer.removeChild(t);
- this.revealedChests.clear();
- for(const t of this.revealedBoxes.values())this.boxContainer.removeChild(t);
- this.revealedBoxes.clear()}
- async onPointerDown(t){
- var i,s;
- if(!this.gameStarted||this.gameEnded||this.pending)return;
- if(BG.getInstance().status.hammerCount<=0)return void(null==(i=this.onHammerEmpty)||i.call(this));
- const e=t.getLocalPosition(this),n=Math.floor(e.x/this.xSpace),h=Math.floor(e.y/this.ySpace);
- if(n<0||h<0||n>=this.xNum||h>=this.yNum)return;
- const r=null==(s=this.blocks[n])?void 0:s[h];
- !r||!r.visible||r.health<=0||await this.doDamage(n,h)}
- async doDamage(i,s){
- var e,n,h,r,o,a;
- this.pending=!0;
- const c=await hD.getInstance().mine.doDamage(i,s);
- if(!c||!1===c.success)return null==(e=this.onError)||e.call(this,(null==c?void 0:c.error)??null,c),void(this.pending=!1);
- const l=BG.getInstance();
- l.setStatusData(null==(n=c.body)?void 0:n.status),l.setInstanceData(null==(h=c.body)?void 0:h.instance),null==(r=this.onHammerUsed)||r.call(this);
- const u=(null==(o=c.body)?void 0:o.revealedChests)??[],d=(null==(a=c.body)?void 0:a.discoveredBoxes)??[];
- l.setDiscoveryData(u,d);
- const f=[];
- for(const t of u)if("fully"===this.spawnChest(t)){
- const i=t.coordinates[0];
- f.push({
- x:i.x*this.xSpace,y:i.y*this.ySpace}
- )}
- for(const t of d)this.spawnBox(t);
- this.playPang(i,s),HI.delayedCall(t.PANG_REVEAL_DELAY,()=>{
- var t,i,s;
- this.syncBlocksFromServer();
- for(const n of f)this.playGain(n.x,n.y);
- null==(t=this.onDamageAndExcavated)||t.call(this),this.pending=!1;
- const e=l.instance;
- if(e){
- const t=[...this.revealedChests.values()].filter(t=>t.isExcavated).length;
- t>=e.chestCount&&(this.gameEnded=!0,null==(i=this.onAllChestsExcavated)||i.call(this),null==(s=this.onComplete)||s.call(this))}
- }
- )}
- syncBlocksFromServer(){
- var t,i;
- const s=BG.getInstance().instance;
- if(s)for(let e=0;
- e<this.xNum;
- e++)for(let n=0;
- n<this.yNum;
- n++){
- const h=(null==(i=null==(t=s.blocks)?void 0:t[n])?void 0:i[e])??0;
- this.blocks[e][n].health=h}
- }
- spawnChest(t){
- if(!t.coordinates||0===t.coordinates.length)return"none";
- const i=t.coordinates[0],s=`${
- i.x}
- ,${
- i.y}
- `;
- let e=this.revealedChests.get(s);
- const n=!e;
- e||(e=new qst,e.setData(t),e.x=i.x*this.xSpace,e.y=i.y*this.ySpace,e.isExcavated=!1,this.chestContainer.addChild(e),this.revealedChests.set(s,e));
- const h=e.isExcavated;
- return e.isExcavated=t.fullyExcavated,t.fullyExcavated&&!h?"fully":n?"new":"none"}
- spawnBox(t){
- if(t.num<=0)return;
- const i=`${
- t.x}
- ,${
- t.y}
- `;
- if(this.revealedBoxes.has(i))return;
- const s=new Kst;
- s.setData(t),s.x=t.x*this.xSpace,s.y=t.y*this.ySpace,s.isExcavated=!0,this.boxContainer.addChild(s),this.revealedBoxes.set(i,s)}
- async endGame(){
- var t;
- const i=await hD.getInstance().mine.end(!0);
- return(null==i?void 0:i.success)&&(BG.getInstance().setStatusData(null==(t=i.body)?void 0:t.status),BG.getInstance().clearInstance(),this.syncRewardManagers(i.body)),this.gameEnded=!0,i}
- async exitGame(){
- var t;
- const i=await hD.getInstance().mine.exit(!0);
- return(null==i?void 0:i.success)&&(BG.getInstance().setStatusData(null==(t=i.body)?void 0:t.status),BG.getInstance().clearInstance(),this.syncRewardManagers(i.body)),this.gameEnded=!0,i}
- syncRewardManagers(t){
- (null==t?void 0:t.pet)&&lx.getInstance().setData(t.pet),(null==t?void 0:t.inventory)&&r6.getInstance().setData({
- inventory:t.inventory}
- )}
- reset(){
- this.clearGrid(),this.gameStarted=!1,this.gameEnded=!1,this.pending=!1}
- getHammerDamageCells(i,s){
- const e=[];
- for(const n of t.HAMMER_DAMAGE_PATTERN){
- const t=i+n.dx,h=s+n.dy;
- t<0||h<0||t>=this.xNum||h>=this.yNum||e.push({
- x:t,y:h,damage:n.damage}
- )}
- return e}
- playPang(t,i){
- const s=t*this.xSpace+.5*this.xSpace,e=i*this.ySpace+.5*this.ySpace;
- for(const n of this.getHammerDamageCells(t,i))this.playFxAnimation("PangSmoke",s+(n.x-t)*this.xSpace,e+(n.y-i)*this.ySpace,1);
- this.playFxAnimation("PangAni",s,e,1)}
- playFxAnimation(t,i,s,e=1){
- var n;
- const h=ZA.getTextures("UI_MINE",t);
- if(0===h.length)return;
- const r=new jf(h),o=null==(n=h[0])?void 0:n.defaultAnchor;
- if(o?r.anchor.set(o.x,o.y):r.anchor.set(.5),r.x=i,r.y=s,r.scale.set(e),r.loop=!1,r.animationSpeed=.8,"PangAni"===t){
- const t=6;
- r.onFrameChange=i=>{
- i===t&&KL.getInstance().playSFX(KL.SFX_STONE_BREAK,.8)}
- }
- r.onComplete=()=>{
- r.removeFromParent(),r.destroy()}
- ,this.fxContainer.addChild(r),r.gotoAndPlay(0)}
- playGain(t,i){
- const s=new Gf;
- s.circle(0,0,14),s.fill({
- color:16773222}
- ),s.stroke({
- width:2,color:13144064}
- ),s.x=t+.5*this.xSpace,s.y=i+.5*this.ySpace,this.fxContainer.addChild(s),HI.to(s,{
- alpha:0,y:s.y-30,duration:.6,onComplete:Kt(()=>{
- this.fxContainer.removeChild(s),s.destroy()}
- ,"onComplete")}
- )}
- }
- ;
- Kt(Xst,"MineMain"),zt(Xst,"instance"),zt(Xst,"HAMMER_DAMAGE_PATTERN",[{
- dx:0,dy:0,damage:2}
- ,{
- dx:-1,dy:0,damage:1}
- ,{
- dx:1,dy:0,damage:1}
- ,{
- dx:0,dy:-1,damage:1}
- ,{
- dx:0,dy:1,damage:1}
- ]),zt(Xst,"PANG_REVEAL_DELAY",.2);
- let Yst=Xst;
- async function Jst(t){
- if(!t)return!1;
- try{
- return await navigator.clipboard.writeText(t),!0}
- catch(i){
- }
- return!1}
- function Qst(t,i=1){
- return Number.isFinite(t)?Number(t.toFixed(i)).toString():"0"}
- Kt(Jst,"copyToClipboard$1"),Kt(Qst,"formatDecimal");
- const Zst=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"item"),zt(this,"bonusGem"),zt(this,"bonusHonorCoin"),zt(this,"amountBg"),zt(this,"amountLbl"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
- ),this.bg.alpha=.05,this.bg.width=530,this.bg.height=75,this.addChild(this.bg),this.item=new set,this.addChild(this.item),this.amountBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
- ),this.amountBg.width=200,this.amountBg.height=this.bg.height,this.amountBg.x=this.item.width+5,this.addChild(this.amountBg),this.amountLbl=new YD("0",16777215),this.amountLbl.x=this.amountBg.x+.5*(this.amountBg.width-this.amountLbl.width),this.amountLbl.y=.5*(this.amountBg.height-this.amountLbl.height),this.addChild(this.amountLbl),this.bonusGem=new set,this.bonusGem.x=this.amountBg.x+this.amountBg.width+5,this.addChild(this.bonusGem),this.bonusHonorCoin=new set,this.bonusHonorCoin.x=this.bonusGem.x+this.bonusGem.width+5,this.addChild(this.bonusHonorCoin)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- setData(t){
- let i=t.type,s=t.grade??-1,e=t.kindNum??-1,n=t.subType??"";
- this.item.setData(i,0,s,e,n),this.item.setText(`${
- t.prob}
- %`),t.min===t.max?this.amountLbl.text=`${
- t.min}
- `:this.amountLbl.text=`${
- t.min}
-  ~ ${
- t.max}
- `,this.amountLbl.x=this.amountBg.x+.5*(this.amountBg.width-this.amountLbl.width),this.bonusGem.setData(bK.gem,0),t.minGem+t.maxGem>0?t.minGem===t.maxGem?this.bonusGem.setText(String(t.minGem)):this.bonusGem.setText(`${
- t.minGem}
- ~${
- t.maxGem}
- `):this.bonusGem.setText("0"),this.bonusHonorCoin.setData(bK.honorCoin,0),t.minHonorCoin+t.maxHonorCoin>0?t.minHonorCoin===t.maxHonorCoin?this.bonusHonorCoin.setText(String(t.minHonorCoin)):this.bonusHonorCoin.setText(`${
- t.minHonorCoin}
- ~${
- t.maxHonorCoin}
- `):this.bonusHonorCoin.setText("0")}
- }
- ;
- Kt(Zst,"MineRewardInfoItemRenderer");
- let tet=Zst;
- const iet=class extends _K{
- constructor(){
- super(),zt(this,"bg2"),this.bg.removeFromParent(),this.bg2=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
- ),this.bg2.width=105,this.bg2.height=75,this.addChildAt(this.bg2,0),this.eventMode="dynamic",this.on("pointertap",this.onImgTap,this)}
- get width(){
- return this.bg2.width}
- get height(){
- return this.bg2.height}
- updateLayout(){
- if(!this.bg2)return void super.updateLayout();
- const t=this.bg2.width,i=this.bg2.height-5;
- this.img.x=.5*(t-this.img.width),this.img.y=.5*(i-this.img.height)-3,this.lblNum.x=.5*(t-this.lblNum.width),this.lblNum.y=i-this.lblNum.height,this.petIcon.visible&&(this.petIcon.x=.5*(t-this.petIcon.width),this.petIcon.y=.5*(i-this.petIcon.height)+3)}
- setText(t){
- this.lblNum.text=String(t),this.updateLayout()}
- onImgTap(t){
- const i=this._type,s=this._subType;
- let e="";
- if(i==bK.ticket&&s==bK.heroGacha?e=AG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i==bK.ticket&&s==bK.heroSelect?e=AG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i==bK.ticket&&s==bK.treasureGacha?e=AG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i==bK.ticket&&s==bK.petSelect&&(e=AG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다.")),!e)return;
- const n=H4.getInstance();
- n.text=e;
- let h=this.img.x+this.img.width,r=this.y+.5*(this.height-n.height)-2;
- n.show(this.parent,h,r)}
- }
- ;
- Kt(iet,"MineRewardItem");
- let set=iet;
- const eet=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"frame"),zt(this,"icon"),zt(this,"lblCount"),zt(this,"lblPercent"),zt(this,"cover"),zt(this,"_activated",!0),this.bg=new We(ZA.getTexture("UI_MINE","Frame_Fossil_Rank_01_Bg.png")),this.bg.x=3,this.bg.y=3,this.addChild(this.bg),this.frame=new We(ZA.getTexture("UI_MINE","Frame_Fossil_Rank_01.png")),this.addChild(this.frame),this.icon=new We(ZA.getTexture("UI_MINE","Item_Rank_01.png")),this.addChild(this.icon);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_17;
- t.fill=aD.COLOR_WHITE,this.lblCount=new YD("0",t.fill,t),this.addChild(this.lblCount),this.lblPercent=new YD("0",t.fill,t),this.addChild(this.lblPercent),this.cover=new We(ZA.getTexture("UI_MINE","Slot_Empty.png")),this.cover.visible=!1,this.cover.alpha=.7,this.addChild(this.cover),this.updateLayout(),this.hideCount(),this.hidePercent()}
- updateLayout(){
- const t=this.frame.width,i=this.frame.height;
- this.lblCount.x=.5*(t-this.lblCount.width),this.lblCount.y=i-this.lblCount.height,this.lblPercent.x=.5*(t-this.lblPercent.width),this.lblPercent.y=i-this.lblPercent.height,this.icon.x=.5*(t-this.icon.width),this.icon.y=.5*(i-this.icon.height)}
- setGrade(t){
- this.bg.texture=ZA.getTexture("UI_MINE",`Frame_Fossil_Rank_0${
- t}
- _Bg.png`),this.frame.texture=ZA.getTexture("UI_MINE",`Frame_Fossil_Rank_0${
- t}
- .png`),this.icon.texture=ZA.getTexture("UI_MINE",`Item_Rank_0${
- t}
- .png`)}
- showCount(){
- this.lblCount.visible=!0}
- hideCount(){
- this.lblCount.visible=!1}
- setCount(t,i){
- this.lblCount.text=`${
- t}
- /${
- i}
- `,this.lblCount.textColor=t<i?aD.COLOR_WHITE:aD.COLOR_YELLOW,this.updateLayout()}
- showPercent(){
- this.lblPercent.visible=!0}
- hidePercent(){
- this.lblPercent.visible=!1}
- setPercent(t){
- this.lblPercent.text=`${
- t}
- %`,this.updateLayout()}
- get activated(){
- return this._activated}
- set activated(t){
- t!=this._activated&&(this._activated=t,this.cover.visible=!this._activated)}
- }
- ;
- Kt(eet,"MineFossilIcon");
- let net=eet;
- const het=class t extends aG{
- constructor(){
- super(),zt(this,"levelContainer"),zt(this,"levelBg"),zt(this,"lblLevel"),zt(this,"btnPrev"),zt(this,"btnNext"),zt(this,"fossilContainer"),zt(this,"fossilIcons"),zt(this,"fossilIndicator"),zt(this,"headerContainer"),zt(this,"headerBg"),zt(this,"headerItem"),zt(this,"headerAmount"),zt(this,"headerBonus"),zt(this,"list"),zt(this,"currentGrade",1),zt(this,"mineLevel",-1),zt(this,"mineMaxLevel",-1),this.height=800,this.outSideClickHide=!0,this.title=AG.getText("GAME_1221","보상 정보"),this.levelContainer=new Be,this.addChild(this.levelContainer),this.fossilContainer=new Be,this.addChild(this.fossilContainer),this.headerContainer=new Be,this.addChild(this.headerContainer),this.levelBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:25,rightWidth:30,bottomHeight:25}
- ),this.levelBg.alpha=.6,this.levelBg.width=this.width-60,this.levelBg.height=60,this.levelContainer.addChild(this.levelBg);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_18;
- let i;
- t.fill=aD.COLOR_WHITE,t.fontSize=22,this.lblLevel=new YD("Lv.1",t.fill,t),this.levelContainer.addChild(this.lblLevel),this.btnPrev=new dV("left"),this.btnPrev.onClick=()=>{
- this.goLevel(this.mineLevel-1)}
- ,this.levelContainer.addChild(this.btnPrev),this.btnNext=new dV("right"),this.btnNext.onClick=()=>{
- this.goLevel(this.mineLevel+1)}
- ,this.levelContainer.addChild(this.btnNext),this.fossilIcons=[];
- for(let e=0;
- e<5;
- ++e)i=new net,i.eventMode="static",i.cursor="pointer",i.on("pointertap",()=>this.clickFossil(e)),i.setGrade(e+1),i.setPercent(0),i.showPercent(),i.x=e*(i.width+15),this.fossilContainer.addChild(i),this.fossilIcons.push(i);
- this.fossilIndicator=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_SELECT"),leftWidth:25,topHeight:25,rightWidth:25,bottomHeight:25}
- ),this.fossilIndicator.eventMode="none",this.fossilIndicator.x=-6,this.fossilIndicator.y=-6,this.fossilIndicator.width=this.fossilIcons[0].width+12,this.fossilIndicator.height=this.fossilIcons[0].height+12,this.fossilContainer.addChild(this.fossilIndicator),this.headerBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","blackRect"),leftWidth:6,topHeight:6,rightWidth:6,bottomHeight:6}
- ),this.headerBg.width=this.width-24,this.headerBg.height=40,this.headerContainer.addChild(this.headerBg);
- const s=aD.DEFAULT_FONT_OPTION_16;
- s.fill=aD.DEFAULT_COLOR,this.headerItem=new YD("Item",s.fill,s),this.headerContainer.addChild(this.headerItem),this.headerAmount=new YD("Amount",s.fill,s),this.headerContainer.addChild(this.headerAmount),this.headerBonus=new YD("Bonus",s.fill,s),this.headerContainer.addChild(this.headerBonus),this.list=new R3(tet,530,500,5),this.addChild(this.list),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateLayout(){
- this.levelContainer.x=.5*(this.width-this.levelContainer.width),this.levelContainer.y=70,this.fossilContainer.x=.5*(this.width-this.fossilContainer.width),this.fossilContainer.y=this.levelContainer.y+this.levelContainer.height+15,this.headerContainer.x=.5*(this.width-this.headerContainer.width),this.headerContainer.y=this.fossilContainer.y+this.fossilContainer.height+20,this.lblLevel.x=.5*(this.levelBg.width-this.lblLevel.width),this.lblLevel.y=.5*(this.levelBg.height-this.lblLevel.height),this.btnPrev.x=30,this.btnPrev.y=.5*(this.levelBg.height-this.btnPrev.height),this.btnNext.x=this.levelBg.width-this.btnNext.width-30,this.btnNext.y=this.btnPrev.y,this.headerItem.x=.5*(105-this.headerItem.width)+13,this.headerItem.y=.5*(this.headerBg.height-this.headerItem.height),this.headerAmount.x=110+.5*(200-this.headerAmount.width)+13,this.headerAmount.y=this.headerItem.y,this.headerBonus.x=315+.5*(215-this.headerBonus.width)+13,this.headerBonus.y=this.headerItem.y,this.list.x=this.bg.x+.5*(this.bg.width-this.list.getListWidth()),this.list.y=this.headerContainer.y+this.headerContainer.height;
- const t=this.height-this.list.y-20;
- this.list.setListHeight(t)}
- show(){
- var t;
- this.title=AG.getText("GAME_1221","보상 정보");
- const i=BG.getInstance();
- this.mineLevel=(null==(t=i.instance)?void 0:t.mineLevel)??1,this.mineMaxLevel=i.getMaxLevel(),this.update(this.mineLevel),this.updateLayout(),super.show()}
- update(t){
- this.lblLevel.text=`Lv.${
- t}
- `;
- const i=BG.getInstance().getLevelVO(t);
- if(!i)return;
- const s=i.getChestWeights();
- let e;
- const n=this.fossilIcons.length;
- for(let h=0;
- h<n;
- ++h)e=this.fossilIcons[h],e.setPercent(s[h]),s[h]>0?e.activated=!0:e.activated=!1;
- F3.showItemsInAlpha([this.fossilContainer]),this.clickFossil(this.currentGrade-1)}
- goLevel(t){
- t<1||t>this.mineMaxLevel||(this.mineLevel=t,1==this.mineLevel?(this.btnPrev.alpha=.7,this.btnNext.alpha=1):this.mineLevel==this.mineMaxLevel?(this.btnPrev.alpha=1,this.btnNext.alpha=.7):(this.btnPrev.alpha=1,this.btnNext.alpha=1),this.update(t))}
- async clickFossil(t){
- const i=this.fossilIcons[t];
- if(!i.activated)return;
- this.fossilIndicator.x=i.x-6,this.fossilIndicator.y=i.y-6;
- const s=t+1,e=BG.getInstance().getChestRewardList(s),n=[];
- let h,r;
- const o=e.length;
- for(let a=0;
- a<o;
- ++a)if(r=e[a],0!==r.prob){
- switch("petPiece"!==r.type&&(h={
- ...r}
- ),r.type){
- case"gem":h.type=bK.gem;
- break;
- case"honorCoin":h.type=bK.honorCoin;
- break;
- case"spriteLandTicket":h.type=bK.petTicket;
- break;
- case"hammer":h.type=bK.hammer;
- break;
- case"hero5":h.type=bK.ticket,h.subType=bK.heroGacha;
- break;
- case"hero5s":h.type=bK.ticket,h.subType=bK.heroSelect;
- break;
- case"treasure6":h.type=bK.ticket,h.subType=bK.treasureGacha;
- break;
- case"petPiece":const t=r.kindNums.length;
- for(let i=0;
- i<t;
- ++i)h={
- ...r}
- ,h.type=bK.pet,h.prob=Number(Qst(r.prob/t,1)),h.kindNum=r.kindNums[i],n.push(h)}
- "petPiece"!==r.type&&n.push(h)}
- this.list.dataProvider=n,this.list.scrollTo(0),this.list.y=this.headerContainer.y+this.headerContainer.height,F3.showItemsInVertical([this.list])}
- }
- ;
- Kt(het,"MineRewardInfoPopup"),zt(het,"_instance");
- let ret=het;
- const oet=class t extends aG{
- constructor(){
- super(),zt(this,"onConfirm",null),zt(this,"fallbackText",new Wg({
- text:"",style:{
- fontSize:18,fill:16777215}
- }
- )),zt(this,"rows",[]),zt(this,"totalContainer",new Be),zt(this,"totalBg",new Gf),zt(this,"totalTitle",new Wg({
- text:AG.getText("GAME_1204","전체보상"),style:{
- fontSize:16,fill:16767334,fontWeight:"bold"}
- }
- )),zt(this,"totalSlots",[]),zt(this,"btnConfirm",new kU("","",AG.getText("COMMON_1","확인"),.8,200,70)),zt(this,"resourceContainer"),zt(this,"resourceBg"),zt(this,"lblGem"),zt(this,"lblHonorCoin"),zt(this,"gemPoint",new mi),zt(this,"gemPointInitialized",!1),zt(this,"honorPoint",new mi),zt(this,"honorPointInitialized",!1),this.width=t.W,this.height=300,this.title=AG.getText("COMMON_22","보상"),this.btnClose.visible=!1,this.outSideClickHide=!1,this.fallbackText.visible=!1,this.contentContainer.addChild(this.fallbackText);
- for(let i=0;
- i<t.MAX_ROWS;
- i++){
- const t=this.createRewardRow();
- t.container.visible=!1,this.rows.push(t),this.contentContainer.addChild(t.container)}
- this.totalContainer.visible=!1,this.totalContainer.addChild(this.totalBg,this.totalTitle),this.totalTitle.x=14,this.totalTitle.y=8;
- for(let i=0;
- i<t.MAX_TOTAL_LABELS;
- i++){
- const t=this.createRewardSlot();
- this.totalSlots.push(t),this.totalContainer.addChild(t.container)}
- this.contentContainer.addChild(this.totalContainer),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.contentContainer.addChild(this.btnConfirm),this.resourceContainer=new Be,this.resourceContainer.y=75,this.contentContainer.addChild(this.resourceContainer),this.resourceBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
- ),this.resourceBg.width=300,this.resourceContainer.addChild(this.resourceBg),this.lblGem=new GB("UI_GEM_ICON","0",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblGem.x=30,this.lblGem.y=.5*(this.resourceBg.height-this.lblGem.height),this.resourceContainer.addChild(this.lblGem),this.lblHonorCoin=new GB("PVP_COIN_ON","0",aD.COLOR_PURPLE_PINK,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblHonorCoin.x=this.lblGem.x+this.lblGem.width+50,this.lblHonorCoin.y=.5*(this.resourceBg.height-this.lblHonorCoin.height),this.resourceContainer.addChild(this.lblHonorCoin)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- show(t=null,i=null,s=null){
- const e="string"==typeof t?null:t;
- this.setRewardData(e),this.updateGem(),this.updateHonorCoin(),super.show(),setTimeout(()=>{
- const t=this.sumReward(e,"gem");
- t>0&&(_L.gem+=t,UV.getInstance().updateGem(),this.displayGemGathering(t));
- const i=this.sumReward(e,"honorCoin");
- i>0&&(_L.honorCoin+=i,UV.getInstance().updateHonor(),this.displayHonorCoinGathering(i))}
- ,300)}
- hide(){
- if(!this.parent)return;
- const t=this.onConfirm;
- this.onConfirm=null,super.hide(),null==t||t()}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- onConfirmClick(){
- this.hide()}
- setRewardData(i){
- this.resetRows();
- let s=this.resourceContainer.y+this.resourceContainer.height+25;
- const e=((null==i?void 0:i.details)??[]).slice(0,t.MAX_ROWS);
- if(e.length>0){
- const i=t.DETAIL_GRID_COLS,n=i*t.DETAIL_CARD_W+(i-1)*t.DETAIL_CARD_GAP_X,h=.5*(this.width-n),r=Math.ceil(e.length/i),o=Array.from({
- length:r}
- ,()=>t.DETAIL_CARD_H);
- for(let s=0;
- s<e.length;
- s++){
- const n=this.rows[s],r=this.setRowData(n,e[s]),a=s%i,c=Math.floor(s/i);
- o[c]=Math.max(o[c],r),n.container.visible=!0,n.container.x=h+a*(t.DETAIL_CARD_W+t.DETAIL_CARD_GAP_X)}
- const a=[];
- let c=s;
- for(let s=0;
- s<r;
- s++)a[s]=c,c+=o[s]+t.DETAIL_CARD_GAP_Y;
- for(let t=0;
- t<e.length;
- t++)this.rows[t].container.y=a[Math.floor(t/i)];
- s=c-(r>0?t.DETAIL_CARD_GAP_Y:0)}
- else s=this.setFallbackRewards(i,s);
- s=this.setTotalRewards(i,s+12),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=s+20,this.height=this.btnConfirm.y+this.btnConfirm.height+50,this.resetPostionY()}
- resetRows(){
- this.fallbackText.visible=!1,this.totalContainer.visible=!1;
- for(const t of this.totalSlots)this.resetRewardSlot(t);
- for(const t of this.rows){
- t.container.visible=!1,t.empty.visible=!1,t.image.texture=ss.EMPTY;
- for(const i of t.slots)this.resetRewardSlot(i)}
- }
- setFallbackRewards(t,i){
- return this.getTotalDisplayRewards(t).length>0?i:(this.fallbackText.text="(획득한 보상이 없습니다)",this.fallbackText.style.fill=12632256,this.fallbackText.visible=!0,this.fallbackText.x=.5*(this.width-this.fallbackText.width),this.fallbackText.y=i,i+this.fallbackText.height)}
- setTotalRewards(i,s){
- const e=this.getTotalDisplayRewards(i);
- if(e.length<=0)return s;
- this.totalContainer.visible=!0,this.totalContainer.x=.5*(this.width-t.ROW_W),this.totalContainer.y=s;
- const n=this.layoutTotalRewardLabels(e,34),h=Math.max(64,n+10);
- return this.totalBg.clear(),this.totalBg.roundRect(0,0,t.ROW_W,h,8),this.totalBg.fill({
- color:2828063,alpha:.92}
- ),this.totalBg.stroke({
- width:1,color:7166516,alpha:.9}
- ),s+h+8}
- getTotalDisplayRewards(t){
- const i=((null==t?void 0:t.totals)??[]).filter(t=>Math.max(0,Number(t.num)||0)>0).map(t=>({
- type:t.type,kindNum:t.kindNum,num:Math.max(0,Number(t.num)||0)}
- )),s=Math.max(0,(null==t?void 0:t.gainedExp)??0);
- return s>0&&i.push({
- type:"exp",num:s,kindNum:-1}
- ),this.sortDisplayRewards(i,!0)}
- createRewardRow(){
- const i=new Be,s=new Gf,e=new We(ss.EMPTY),n=new Wg({
- text:"보상 없음",style:{
- fontSize:16,fill:12632256}
- }
- ),h=[];
- i.addChild(s,e,n),n.y=34,n.visible=!1;
- for(let r=0;
- r<t.MAX_REWARD_LABELS;
- r++){
- const t=this.createRewardSlot();
- h.push(t),i.addChild(t.container)}
- return{
- container:i,bg:s,image:e,empty:n,slots:h}
- }
- setRowData(i,s){
- this.setDetailImage(i.image,s),i.image.x=.5*(t.DETAIL_CARD_W-i.image.width),i.image.y=t.DETAIL_IMAGE_Y+.5*(t.DETAIL_IMAGE_H-i.image.height);
- const e=this.getDisplayRewards(s);
- let n=i.image.y+i.image.height;
- e.length<=0?(i.empty.visible=!0,i.empty.x=.5*(t.DETAIL_CARD_W-i.empty.width),i.empty.y=t.DETAIL_REWARD_Y,n=i.empty.y+i.empty.height):n=this.layoutCardRewardLabels(i,e,t.DETAIL_REWARD_Y);
- const h=Math.max(t.DETAIL_CARD_H,n+10);
- return i.bg.clear(),i.bg.roundRect(0,0,t.DETAIL_CARD_W,h,8),i.bg.fill({
- color:2039848,alpha:.9}
- ),i.bg.stroke({
- width:1,color:4935260,alpha:.9}
- ),h}
- getDisplayRewards(t){
- const i=(t.rewards??[]).filter(t=>"exp"!==t.type&&Math.max(0,Number(t.num)||0)>0);
- return this.sortDisplayRewards(i)}
- sortDisplayRewards(t,i=!1){
- return t.map((t,i)=>({
- reward:t,index:i}
- )).sort((t,s)=>{
- const e=this.getRewardSortPriority(t.reward,i),n=this.getRewardSortPriority(s.reward,i);
- return e!==n?e-n:t.index-s.index}
- ).map(t=>t.reward)}
- getRewardSortPriority(t,i){
- return"gem"===t.type?0:"honorCoin"===t.type?1:i&&"exp"===t.type?99:10}
- layoutCardRewardLabels(i,s,e){
- const n=t.DETAIL_CARD_W-12,h=[];
- let r=[],o=0;
- for(let c=0;
- c<s.length&&c<t.MAX_REWARD_LABELS;
- c++){
- const e=i.slots[c];
- this.setRewardSlot(e,s[c]);
- const a=this.getRewardSlotWidth(e),l=this.getRewardSlotHeight(e),u=0===r.length?a:o+t.REWARD_GAP_X+a;
- r.length>0&&u>n&&(h.push(r),r=[],o=0),r.push({
- slot:e,width:a,height:l}
- ),o=0===o?a:o+t.REWARD_GAP_X+a}
- r.length>0&&h.push(r);
- let a=e;
- for(const c of h){
- const i=c.reduce((t,i)=>t+i.width,0)+Math.max(0,c.length-1)*t.REWARD_GAP_X,s=Math.max(24,...c.map(t=>t.height));
- let e=.5*(t.DETAIL_CARD_W-i);
- for(const n of c)n.slot.container.x=e,n.slot.container.y=a+.5*(s-n.height),n.slot.container.visible=!0,e+=n.width+t.REWARD_GAP_X;
- a+=s+t.REWARD_GAP_Y}
- return a-t.REWARD_GAP_Y}
- layoutTotalRewardLabels(i,s){
- const e=t.ROW_W-28,n=[];
- let h=[],r=0;
- for(let a=0;
- a<i.length&&a<t.MAX_TOTAL_LABELS;
- a++){
- const s=this.totalSlots[a];
- this.setRewardSlot(s,i[a]);
- const o=this.getRewardSlotWidth(s),c=this.getRewardSlotHeight(s),l=0===h.length?o:r+t.REWARD_GAP_X+o;
- h.length>0&&l>e&&(n.push(h),h=[],r=0),h.push({
- slot:s,width:o,height:c}
- ),r=0===r?o:r+t.REWARD_GAP_X+o}
- h.length>0&&n.push(h);
- let o=s;
- for(const a of n){
- const i=Math.max(24,...a.map(t=>t.height));
- let s=14;
- for(const e of a)e.slot.container.x=s,e.slot.container.y=o+.5*(i-e.height),e.slot.container.visible=!0,s+=e.width+t.REWARD_GAP_X;
- o+=i+t.REWARD_GAP_Y}
- return o-t.REWARD_GAP_Y}
- createRewardSlot(){
- const t=new Be,i=new GB("ShipArenaCoin","0",aD.COLOR_WHITE,aD.DEFAULT_OUTLINE_FONT_OPTION_17);
- i.textSize=17;
- const s=new We(ss.EMPTY),e=new YD("0",aD.COLOR_WHITE,aD.DEFAULT_OUTLINE_FONT_OPTION_17);
- e.textSize=17;
- const n=new YD("xp +0",16767334,aD.DEFAULT_OUTLINE_FONT_OPTION_17);
- return n.textSize=17,t.visible=!1,s.visible=!1,e.visible=!1,n.visible=!1,t.addChild(i,s,e,n),{
- container:t,iconLabel:i,petSprite:s,petCount:e,expLabel:n}
- }
- resetRewardSlot(t){
- t.container.visible=!1,t.iconLabel.visible=!1,t.petSprite.visible=!1,t.petCount.visible=!1,t.expLabel.visible=!1,t.petSprite.texture=ss.EMPTY}
- setRewardSlot(t,i){
- if(this.setExpRewardSlot(t,i))return;
- if(this.setPetPieceRewardSlot(t,i))return;
- t.rewardType=i.type,t.iconLabel.visible=!0,t.petSprite.visible=!1,t.petCount.visible=!1,t.expLabel.visible=!1;
- const s=t.iconLabel,e=this.getRewardIconInfo(i);
- s.texture=ZA.getTexture(e.sheetName,e.iconName)??ss.EMPTY,s.textColor=e.color,s.iconScale=e.scale,s.text=$D.displayLargeNumberAsAlphabet(i.num),s.textOffsetX=4}
- getTotalSlotWithType(t){
- return this.totalSlots.find(i=>i.rewardType==t)}
- setExpRewardSlot(t,i){
- return"exp"===i.type&&(t.rewardType="exp",t.iconLabel.visible=!1,t.petSprite.visible=!1,t.petCount.visible=!1,t.expLabel.visible=!0,t.expLabel.text=`xp +${
- $D.displayLargeNumberAsAlphabet(i.num)}
- `,t.expLabel.x=0,t.expLabel.y=0,!0)}
- setPetPieceRewardSlot(i,s){
- if("petPiece"!==s.type)return!1;
- const e=Math.floor(Number(s.kindNum)||0);
- if(e<=0||!ZA.hasSheet("UI_PET"))return!1;
- const n=ZA.getTexture("UI_PET",`UI_PET${
- e}
- `);
- if(!n)return!1;
- i.rewardType="petPiece",i.iconLabel.visible=!1,i.petSprite.visible=!0,i.petCount.visible=!0,i.expLabel.visible=!1,i.petSprite.texture=n,i.petSprite.scale.set(1);
- const h=t.PET_REWARD_ICON_SIZE,r=Math.min(h/Math.max(1,i.petSprite.width),h/Math.max(1,i.petSprite.height));
- return i.petSprite.scale.set(r),i.petSprite.x=.5*(h-i.petSprite.width),i.petSprite.y=.5*(h-i.petSprite.height),i.petCount.text=$D.displayLargeNumberAsAlphabet(s.num),i.petCount.textColor=aD.COLOR_WHITE,i.petCount.x=h+4,i.petCount.y=.5*(h-i.petCount.height),!0}
- getRewardSlotWidth(i){
- return i.expLabel.visible?i.expLabel.width:i.petSprite.visible?t.PET_REWARD_ICON_SIZE+4+i.petCount.width:i.iconLabel.width}
- getRewardSlotHeight(i){
- return i.expLabel.visible?i.expLabel.height:i.petSprite.visible?Math.max(t.PET_REWARD_ICON_SIZE,i.petCount.y+i.petCount.height):i.iconLabel.height}
- getRewardIconInfo(t){
- switch(t.type){
- case"gem":return{
- iconName:"UI_GEM_ICON",sheetName:"UI_Ekkorr",color:aD.COLOR_DEEP_SKYBLUE,scale:.78}
- ;
- case"honorCoin":return{
- iconName:"PVP_COIN_ON",sheetName:"UI_Ekkorr",color:aD.COLOR_PURPLE_PINK,scale:.78}
- ;
- case"exp":return{
- iconName:"ShipArenaCoin",sheetName:"UI_Ekkorr",color:16767334,scale:.85}
- ;
- case"hammer":return{
- iconName:"Thumbnail_Hammer_01.png",sheetName:"UI_MINE",color:aD.COLOR_WHITE,scale:.192}
- ;
- case"spriteLandTicket":return{
- iconName:"UI_PET_TICKET",sheetName:"UI_Ekkorr",color:aD.COLOR_WHITE,scale:.6}
- ;
- case"hero5":return{
- iconName:"Ticket_HeroGacha",sheetName:"UI_Ekkorr",color:aD.COLOR_WHITE,scale:.54}
- ;
- case"hero5s":return{
- iconName:"Ticket_HeroSelect",sheetName:"UI_Ekkorr",color:aD.COLOR_WHITE,scale:.54}
- ;
- case"treasure6":return{
- iconName:"Ticket_TreasureGacha",sheetName:"UI_Ekkorr",color:aD.COLOR_WHITE,scale:.54}
- ;
- case"petPiece":return{
- iconName:"Ticket_PetSelect",sheetName:"UI_Ekkorr",color:aD.COLOR_WHITE,scale:.54}
- ;
- default:return{
- iconName:"ShipArenaCoin",sheetName:"UI_Ekkorr",color:aD.COLOR_WHITE,scale:.85}
- }
- }
- setDetailImage(i,s){
- const e=Math.max(1,Math.floor(s.grade??1));
- let n="";
- n="box"===s.source?`randomBox${
- Math.min(5,e)}
- .png`:`BoneBox_${
- s.shape??"square"}
- _${
- Math.min(7,e)}
- .png`,i.texture=ZA.getTexture("UI_MINE",n)??ss.EMPTY,i.scale.set(1);
- const h=Math.min(1,t.DETAIL_IMAGE_W/Math.max(1,i.width),t.DETAIL_IMAGE_H/Math.max(1,i.height));
- i.scale.set(h)}
- getRewardName(t){
- switch(t.type){
- case"gem":return"보석";
- case"honorCoin":return"명예코인";
- case"spriteLandTicket":return"정령고원 티켓";
- case"hammer":return"망치";
- case"hero5":return"5성 영웅 확정권";
- case"hero5s":return"5성 영웅 선택권";
- case"treasure6":return"6성 유물권";
- case"petPiece":return t.kindNum?`펫 조각 ${
- t.kindNum}
- `:"펫 조각";
- case"kindNum":return t.kindNum?`kindNum ${
- t.kindNum}
- `:"보상";
- case"a":return"보상 A";
- case"b":return"보상 B";
- default:return null!=t.type&&t.type.length>0?t.type:t.kindNum?`kindNum ${
- t.kindNum}
- `:"보상"}
- }
- sumReward(t,i){
- const s=null==t?void 0:t.totals;
- return Array.isArray(s)?s.filter(t=>(null==t?void 0:t.type)===i).reduce((t,i)=>t+Math.max(0,Number(i.num)||0),0):0}
- updateGem(){
- this.lblGem.text=_L.gem.toFixed(0),this.updateResouceLayout()}
- updateHonorCoin(){
- this.lblHonorCoin.text=_L.honorCoin.toFixed(0),this.updateResouceLayout()}
- updateResouceLayout(){
- this.lblHonorCoin.x=this.lblGem.x+this.lblGem.width+50,this.resourceBg.width=this.lblHonorCoin.x+this.lblHonorCoin.width+30,this.resourceContainer.x=this.totalContainer.x+this.totalContainer.width-this.resourceContainer.width}
- displayGemGathering(t){
- const i=this.getTotalSlotWithType("gem");
- if(!i)return;
- const s=i.container;
- let e=s.getGlobalPosition(),n=KA.stage.toLocal(e);
- l5t.getInstance().getGemInMine(n.x+.5*s.width-15,n.y+.5*s.height-20,t,Math.min(30,t),this,1.2)}
- displayHonorCoinGathering(t){
- const i=this.getTotalSlotWithType("honorCoin");
- if(!i)return;
- const s=i.container;
- let e=s.getGlobalPosition(),n=KA.stage.toLocal(e);
- l5t.getInstance().getHonorCoinInMine(n.x+.5*s.width-15,n.y+.5*s.height-20,t,Math.min(30,t),this,1.2)}
- getGemPoint(){
- return 0==this.gemPointInitialized&&(this.gemPointInitialized=!0,this.gemPoint.x=this.x-.5*this.width+this.resourceContainer.x+this.lblGem.x+.5*this.lblGem.getIcon().width,this.gemPoint.y=this.y-.5*this.height+this.resourceContainer.y+this.lblGem.y+.5*this.lblGem.getIcon().height),this.gemPoint}
- getHonorPoint(){
- return 0==this.honorPointInitialized&&(this.honorPointInitialized=!0,this.honorPoint.x=this.x-.5*this.width+this.resourceContainer.x+this.lblHonorCoin.x+.5*this.lblHonorCoin.getIcon().width,this.honorPoint.y=this.y-.5*this.height+this.resourceContainer.y+this.lblHonorCoin.y+.5*this.lblHonorCoin.getIcon().height),this.honorPoint}
- startGemMotion(t=null,i=1.2){
- this.lblGem.startMotion(t,i)}
- startHonorCoinMotion(t=null,i=1.2){
- this.lblHonorCoin.startMotion(t,i)}
- }
- ;
- Kt(oet,"MineRewardPopup"),zt(oet,"instance"),zt(oet,"W",560),zt(oet,"MAX_ROWS",5),zt(oet,"MAX_REWARD_LABELS",6),zt(oet,"MAX_TOTAL_LABELS",16),zt(oet,"ROW_W",480),zt(oet,"DETAIL_GRID_COLS",3),zt(oet,"DETAIL_CARD_W",150),zt(oet,"DETAIL_CARD_H",166),zt(oet,"DETAIL_CARD_GAP_X",13),zt(oet,"DETAIL_CARD_GAP_Y",8),zt(oet,"DETAIL_IMAGE_W",110),zt(oet,"DETAIL_IMAGE_H",76),zt(oet,"DETAIL_IMAGE_Y",16),zt(oet,"DETAIL_REWARD_Y",102),zt(oet,"REWARD_GAP_X",14),zt(oet,"REWARD_GAP_Y",6),zt(oet,"PET_REWARD_ICON_SIZE",25);
- let aet=oet;
- const cet=class t extends Be{
- constructor(){
- super(),zt(this,"titleUp"),zt(this,"titleInfo"),zt(this,"bg"),zt(this,"iconHammer"),zt(this,"lblTitle"),zt(this,"btnGuide"),zt(this,"lblEventTimer"),zt(this,"lblHammer"),zt(this,"expProgressContainer"),zt(this,"expProgressPanel"),zt(this,"expProgressTrack"),zt(this,"expProgressPreview"),zt(this,"expProgressFill"),zt(this,"expProgressFrame"),zt(this,"lblExpLevel"),zt(this,"lblExpValue"),zt(this,"btnClose"),zt(this,"btnPlus"),zt(this,"infoContainer"),zt(this,"btnInfo"),zt(this,"infoLine"),zt(this,"fossilIcons"),zt(this,"fossilLabelBg"),zt(this,"fossilLabel"),zt(this,"fossilLabelContainer"),zt(this,"initialized",!1),zt(this,"uiBuilt",!1),zt(this,"expTween",null),zt(this,"eventEndTimeMs",0),zt(this,"lastEventTimerText","")}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- buildUI(){
- const i=t.OVERLAP;
- let s;
- this.titleUp=new We(ZA.getTexture("UI_MINE","Base_Title_up.png")),this.titleUp.x=0,this.titleUp.y=0,this.addChild(this.titleUp),this.bg=new We(ZA.getTexture("UI_MINE","EBlock_bg.png")),this.bg.x=.5*(t.OUTER_W-t.BG_W),this.bg.y=this.titleUp.y+this.titleUp.height-i-i,this.addChild(this.bg),this.expProgressContainer=new Be,this.expProgressContainer.x=this.bg.x+.5*(this.bg.width-t.HUD_W),this.expProgressContainer.y=this.bg.y+20,this.addChild(this.expProgressContainer),this.buildExpProgress(),this.titleInfo=new We(ZA.getTexture("UI_MINE","Base_Title_info.png")),this.titleInfo.x=0,this.titleInfo.y=this.bg.y+this.bg.height-i-i,this.addChild(this.titleInfo),this.lblTitle=new YD(AG.getText("GAME_1203","화석 발굴"),aD.COLOR_WHITE,aD.WHITE_OUTLINE_FONT_OPTION_22),this.lblTitle.textSize=23,this.lblTitle.x=52,this.lblTitle.y=this.titleUp.y+.5*(this.titleUp.height-this.lblTitle.height)-3,this.addChild(this.lblTitle),this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.btnGuide.onClick=()=>{
- Wst.getInstance().showGuide()}
- ,this.addChild(this.btnGuide),this.positionGuideButton(),this.btnClose=new L6,this.btnClose.x=t.OUTER_W-this.btnClose.width-18,this.btnClose.y=12,this.btnClose.eventMode="static",this.btnClose.cursor="pointer",this.btnClose.on("pointertap",this.onClose,this),this.addChild(this.btnClose),this.lblEventTimer=new YD("",16768376,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEventTimer.textSize=18,this.lblEventTimer.visible=!1,this.addChild(this.lblEventTimer),this.infoContainer=new Be,this.infoContainer.x=50,this.infoContainer.y=this.titleInfo.y,this.addChild(this.infoContainer),this.btnInfo=new mB("UI_MINE","Btn_TreasureBox_Information.png"),this.btnInfo.onClick=()=>{
- ret.getInstance().show()}
- ,this.btnInfo.y=.5*(this.titleInfo.height-this.btnInfo.height),this.infoContainer.addChild(this.btnInfo),this.infoLine=new Gf,this.infoLine.rect(0,0,2,this.btnInfo.height),this.infoLine.fill(0),this.infoLine.x=this.btnInfo.x+this.btnInfo.width+10,this.infoLine.y=this.btnInfo.y+.5*(this.btnInfo.height-this.infoLine.height),this.infoContainer.addChild(this.infoLine),this.fossilIcons=[];
- let e=this.infoLine.x+10;
- for(let t=0;
- t<5;
- ++t)s=new net,s.setGrade(t+1),s.x=e+t*(s.width+5),s.y=this.btnInfo.y+.5*(this.btnInfo.height-s.height),this.infoContainer.addChild(s),this.fossilIcons.push(s);
- this.fossilLabelContainer=new Be,this.fossilLabelContainer.scale=.8,this.fossilLabelContainer.x=e,this.fossilLabelContainer.y=-10,this.infoContainer.addChild(this.fossilLabelContainer),this.fossilLabelBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Btn_Unit_01"),leftWidth:30,topHeight:20,rightWidth:30,bottomHeight:20}
- ),this.fossilLabelBg.alpha=.9,this.fossilLabelContainer.addChild(this.fossilLabelBg);
- const n=aD.LABEL_OPTION_NO_DROP_SHADOW;
- n.fill=13351840,n.fontSize=22,n.stroke={
- color:"#333333",width:4,join:"round"}
- ,this.fossilLabel=new YD(AG.getText("GAME_1220","감지된 화석"),n.fill,n),this.fossilLabel.x=30,this.fossilLabel.y=this.fossilLabelBg.y+.5*(this.fossilLabelBg.height-this.fossilLabel.height)+1,this.fossilLabelContainer.addChild(this.fossilLabel),this.fossilLabelBg.width=this.fossilLabel.width+2*this.fossilLabel.x,this.uiBuilt=!0}
- buildExpProgress(){
- this.expProgressPanel=new Gf,this.expProgressTrack=new Gf,this.expProgressPreview=new Gf,this.expProgressFill=new Gf,this.expProgressFrame=new Gf,this.expProgressPanel.roundRect(0,0,t.HUD_W,t.HUD_H,12),this.expProgressPanel.fill({
- color:2761753,alpha:.52}
- ),this.expProgressPanel.stroke({
- width:2,color:6968369,alpha:.78}
- ),this.expProgressPanel.roundRect(4,4,t.HUD_W-8,12,7),this.expProgressPanel.fill({
- color:16777215,alpha:.07}
- ),this.expProgressContainer.addChild(this.expProgressPanel),this.expProgressContainer.addChild(this.expProgressTrack),this.expProgressContainer.addChild(this.expProgressPreview),this.expProgressContainer.addChild(this.expProgressFill),this.expProgressContainer.addChild(this.expProgressFrame),this.lblExpLevel=new YD("Lv.1",aD.COLOR_WHITE,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblExpLevel.textSize=17,this.lblExpLevel.x=14,this.lblExpLevel.y=.5*(t.HUD_H-this.lblExpLevel.height),this.expProgressContainer.addChild(this.lblExpLevel),this.lblExpValue=new YD("0/0",aD.COLOR_WHITE,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblExpValue.textSize=17,this.expProgressContainer.addChild(this.lblExpValue);
- const i=this.expProgressPanel;
- this.btnPlus=new mB("UI_Ekkorr","Btn_Plus2"),this.btnPlus.x=i.width-this.btnPlus.width-15,this.btnPlus.y=.5*(i.height-this.btnPlus.height),this.btnPlus.onClick=()=>{
- this.hide();
- const t=hK.getInstance().getProductIdsWithHammer();
- t.length>0?Fst.getInstance().goPaymentShopWithProductIds(t):Fst.getInstance().goPaymentShop(1)}
- ,this.expProgressContainer.addChild(this.btnPlus),this.lblHammer=new YD("0",aD.COLOR_WHITE,aD.WHITE_OUTLINE_FONT_OPTION_22),this.lblHammer.textSize=26,this.lblHammer.x=this.btnPlus.x-70,this.lblHammer.y=.5*(i.height-this.lblHammer.height)-1,this.expProgressContainer.addChild(this.lblHammer),this.iconHammer=new We(ZA.getTexture("UI_MINE","Thumbnail_Hammer_01.png")),this.iconHammer.scale.set(.6),this.iconHammer.x=this.lblHammer.x-this.iconHammer.width,this.iconHammer.y=i.height-this.iconHammer.height,this.expProgressContainer.addChild(this.iconHammer),this.drawExpProgress(0,0)}
- async ensureMineBookData(){
- const t=BG.getInstance();
- try{
- if(t.bookList.length<=0){
- await _D.getInstance().loadBook(bD.MINE_LEVEL);
- const i=_D.getInstance().getBook(bD.MINE_LEVEL);
- t.setBookData(i)}
- if(t.chestRewardList.length<=0){
- await _D.getInstance().loadBook(bD.MINE_CHEST_REWARD);
- const i=_D.getInstance().getBook(bD.MINE_CHEST_REWARD);
- t.setChestRewardBookData(i)}
- }
- catch(i){
- }
- }
- async show(){
- var i,s,e,n;
- if(!(ZA.hasSheet("UI_MINE")||await ZA.generateTexture("UI_MINE","ktx2",!1)&&ZA.hasSheet("UI_MINE")))return;
- this.uiBuilt||this.buildUI(),this.initialized=!0,await this.ensureMineBookData();
- const h=BG.getInstance();
- let r=h.revealedChests,o=h.discoveredBoxes;
- if(h.needsStatusFetchForPopup()){
- const t=await hD.getInstance().mine.getStatus(!0);
- if(!t||!1===t.success)return;
- h.setStatusData(null==(i=t.body)?void 0:i.status),h.setInstanceData(null==(s=t.body)?void 0:s.instance),r=(null==(e=t.body)?void 0:e.revealedChests)??[],o=(null==(n=t.body)?void 0:n.discoveredBoxes)??[],h.setDiscoveryData(r,o)}
- const a=Yst.getInstance();
- await a.initialize(),a.reset(),this.mountMineMain(a),a.onAllChestsExcavated=()=>{
- }
- ,a.onComplete=()=>this.handleComplete(),a.onHammerUsed=()=>this.refreshHeader(),a.onDamageAndExcavated=()=>this.refreshRevealedChests(),a.onHammerEmpty=()=>{
- vV.getInstance().showMessage(AG.getText("GAME_1215","망치가 부족합니다."))}
- ,a.onError=(t,i)=>{
- }
- ,await a.startGame(),(r.length>0||o.length>0)&&a.applyDiscovered(r,o),this.positionMineMain(a),this.refreshHeader(),this.refreshRevealedChests(),this.refreshEventTimerConfig(),this.startEventTimer(),this.x=.5*(KA.stageWidth-t.OUTER_W);
- const c=KA.stageHeight;
- this.y=Math.max(40,.5*(c-this.height)),F3.showItemsInVertical([this],20,.3),IL.getInstance().addPopup(this)}
- onClose(){
- this.killExpTween(),this.stopEventTimer(),F3.hideItemsInVertical([this],20,.2,()=>{
- IL.getInstance().removePopup(this),Yst.getInstance().reset()}
- )}
- hide(){
- this.onClose()}
- async handleComplete(){
- var t,i;
- const s=await hD.getInstance().mine.end(!0);
- if(!s||!1===s.success)return;
- this.syncRewardManagers(s.body),BG.getInstance().clearInstance();
- const e=null==(t=s.body)?void 0:t.rewards,n=null==(i=s.body)?void 0:i.status,h=aet.getInstance();
- h.onConfirm=()=>{
- this.applyCompleteResultAndStartNext(n,e)}
- ,h.show(e)}
- async applyCompleteResultAndStartNext(t,i){
- if(!t)return;
- await this.animateExpToStatus(t);
- const s=BG.getInstance();
- s.setStatusData(t),s.clearInstance(),this.refreshHeader(),this.refreshRevealedChests(),await this.resetAndStartNext()}
- async resetAndStartNext(){
- const t=Yst.getInstance();
- t.reset(),await t.startGame()&&(this.positionMineMain(t),this.bringChromeToFront(),this.refreshHeader(),this.refreshRevealedChests())}
- refreshHeader(){
- if(!this.uiBuilt)return;
- const t=BG.getInstance(),i=t.status;
- this.lblTitle.text=AG.getText("GAME_1203","화석 발굴"),this.positionGuideButton(),this.lblHammer.text=String(i.hammerCount),this.refreshExpProgress(t)}
- refreshRevealedChests(){
- var t;
- const i=BG.getInstance(),s=null==(t=i.instance)?void 0:t.mineLevel;
- if(!s)return;
- const e=i.getLevelVO(s);
- if(!e)return;
- let n;
- const h=i.revealedChests.length,r=this.fossilIcons.length;
- for(let o=0;
- o<r;
- ++o)if(n=this.fossilIcons[o],o<h){
- const t=i.revealedChests[o];
- n.activated=!0,n.setGrade(t.grade),n.alpha=t.fullyExcavated?1:.6,n.visible=!0}
- else n.visible=!1;
- this.fossilLabel.text=h>0?`${
- AG.getText("GAME_1220","감지된 화석")}
-  (${
- h}
- /${
- e.numChest}
- )`:AG.getText("GAME_1220","감지된 화석"),this.fossilLabelBg.width=this.fossilLabel.width+2*this.fossilLabel.x}
- refreshEventTimerConfig(){
- this.eventEndTimeMs=this.getEventEndTimeMsFromConfig(),this.lastEventTimerText="",this.updateEventTimer()}
- startEventTimer(){
- GM.getInstance().remove(this.updateEventTimer,this),this.eventEndTimeMs>0&&GM.getInstance().add(this.updateEventTimer,this)}
- stopEventTimer(){
- GM.getInstance().remove(this.updateEventTimer,this)}
- updateEventTimer(){
- if(!this.uiBuilt||!this.lblEventTimer)return;
- if(this.eventEndTimeMs<=0)return void(this.lblEventTimer.visible=!1);
- const t=ix.time>0?ix.time:Date.now(),i=this.eventEndTimeMs-t;
- if(i<=0)return this.lblEventTimer.visible=!1,void this.stopEventTimer();
- const s=uU.displayTimeAsDHHMM(Math.floor(i/1e3));
- s!==this.lastEventTimerText&&(this.lastEventTimerText=s,this.lblEventTimer.text=s,this.lblEventTimer.visible=!0,this.positionEventTimer())}
- positionEventTimer(){
- const t=this.btnClose.x-12,i=this.btnGuide.x+this.btnGuide.width+16;
- this.lblEventTimer.x=Math.max(i,t-this.lblEventTimer.width),this.lblEventTimer.y=this.titleUp.y+.5*(this.titleUp.height-this.lblEventTimer.height)-3}
- positionGuideButton(){
- this.btnGuide&&this.lblTitle&&(this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+8,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2)}
- getEventEndTimeMsFromConfig(){
- const i=EL.getInstance().getClientData(t.EVENT_END_TIME_KEY);
- if(null==i||""===i)return 0;
- const s=String(i).trim();
- if(!s)return 0;
- const e=s.match(/^(\d{
- 4}
- )(\d{
- 2}
- )(\d{
- 2}
- )$/);
- if(e){
- const[,t,i,s]=e;
- return Date.UTC(Number(t),Number(i)-1,Number(s)+1)}
- if(/^\d+$/.test(s)){
- const t=Number(s);
- return!Number.isFinite(t)||t<=0?0:s.length<=10?1e3*t:t}
- const n=s.match(/^(\d{
- 4}
- )-(\d{
- 2}
- )-(\d{
- 2}
- )$/);
- if(n){
- const[,t,i,s]=n;
- return Date.UTC(Number(t),Number(i)-1,Number(s)+1)}
- const h=s.match(/^(\d{
- 4}
- )-(\d{
- 2}
- )-(\d{
- 2}
- )[ T](\d{
- 2}
- ):(\d{
- 2}
- )(?::(\d{
- 2}
- ))?$/);
- if(h){
- const[,t,i,s,e,n,r]=h;
- return Date.UTC(Number(t),Number(i)-1,Number(s),Number(e),Number(n),Number(r??0))}
- const r=Date.parse(s);
- return Number.isFinite(r)?r:0}
- refreshExpProgress(t){
- const i=t.status;
- this.setExpProgressDisplay(i.mineLevel,i.mineExp)}
- setExpProgressDisplay(i,s,e=s){
- const n=Math.max(0,Math.floor(s)),h=Math.max(n,Math.floor(e)),r=BG.getInstance(),o=r.getLevelVO(i),a=r.getLevelVO(i+1),c=r.getMaxLevel(),l=Math.max(0,Math.floor((null==o?void 0:o.accReqExp)??0));
- let u=0,d=0,f="0/-";
- if(a){
- const t=Math.max(0,Math.floor(a.accReqExp)),i=Math.max(1,t-l),s=Math.min(i,Math.max(0,n-l)),e=Math.min(i,Math.max(s,h-l));
- u=Math.min(1,s/i),d=Math.min(1,e/i),f=`${
- s}
- /${
- i}
- `}
- else c>0&&i>=c&&(u=1,d=1,f=`${
- Math.max(0,n-l)}
- /MAX`);
- this.lblExpLevel.text=`Lv.${
- i}
- `,this.lblExpValue.text=f,this.lblExpValue.x=t.EXP_BAR_X+.5*(t.EXP_BAR_W-this.lblExpValue.width),this.lblExpValue.y=t.EXP_BAR_Y+.5*(t.EXP_BAR_H-this.lblExpValue.height),this.drawExpProgress(u,d)}
- drawExpProgress(i,s=i){
- const e=t.EXP_BAR_X,n=t.EXP_BAR_Y,h=t.EXP_BAR_W,r=t.EXP_BAR_H,o=Math.max(0,Math.min(h,Math.round(h*i))),a=Math.max(0,Math.min(h,Math.round(h*s)));
- if(this.expProgressTrack.clear(),this.expProgressTrack.roundRect(e,n,h,r,9),this.expProgressTrack.fill({
- color:1380364,alpha:.86}
- ),this.expProgressPreview.clear(),a>0){
- const t=Math.min(9,.5*a);
- this.expProgressPreview.roundRect(e,n,a,r,t),this.expProgressPreview.fill({
- color:16777215,alpha:.32}
- )}
- if(this.expProgressFill.clear(),o>0){
- const t=Math.min(9,.5*o);
- this.expProgressFill.roundRect(e,n,o,r,t),this.expProgressFill.fill({
- color:2592488,alpha:.98}
- ),this.expProgressFill.roundRect(e+2,n+2,Math.max(0,o-4),5,3),this.expProgressFill.fill({
- color:12118015,alpha:.45}
- )}
- this.expProgressFrame.clear(),this.expProgressFrame.roundRect(e,n,h,r,9),this.expProgressFrame.stroke({
- width:2,color:5193515,alpha:.95}
- )}
- async animateExpToStatus(t){
- this.killExpTween();
- const i=BG.getInstance();
- let s=Math.max(1,Math.floor(i.status.mineLevel)),e=Math.max(0,Math.floor(i.status.mineExp));
- const n=Math.max(s,Math.floor(Number(t.mineLevel)||s)),h=Math.max(e,Math.floor(Number(t.mineExp)||e));
- for(;
- s<n;
- ){
- const t=i.getLevelVO(s+1);
- if(!t)break;
- const n=Math.max(e,Math.floor(t.accReqExp));
- await this.animateExpSegment(s,e,n),s+=1,e=n,this.setExpProgressDisplay(s,e)}
- await this.animateExpSegment(s,e,h)}
- animateExpSegment(t,i,s){
- const e={
- value:i}
- ,n=Math.min(1.05,Math.max(.45,Math.abs(s-i)/90));
- return this.setExpProgressDisplay(t,i,s),new Promise(i=>{
- this.expTween=HI.to(e,{
- value:s,duration:n,ease:"power2.out",onUpdate:Kt(()=>{
- this.setExpProgressDisplay(t,e.value,s)}
- ,"onUpdate"),onComplete:Kt(()=>{
- this.expTween=null,this.setExpProgressDisplay(t,s,s),i()}
- ,"onComplete")}
- )}
- )}
- killExpTween(){
- this.expTween&&(this.expTween.kill(),this.expTween=null)}
- syncRewardManagers(t){
- (null==t?void 0:t.pet)&&lx.getInstance().setData(t.pet),(null==t?void 0:t.inventory)&&r6.getInstance().setData({
- inventory:t.inventory}
- )}
- mountMineMain(t){
- t.parent===this&&this.removeChild(t);
- const i=this.getChildIndex(this.bg);
- this.addChildAt(t,Math.min(i+1,this.children.length)),this.bringChromeToFront()}
- positionMineMain(i){
- i.scale.set(1);
- const s=this.bg.width-66,e=this.bg.y+t.GRID_TOP_PAD,n=this.bg.height-t.GRID_TOP_PAD-t.GRID_BOTTOM_PAD,h=Math.min(1,s/i.width,n/i.height);
- i.scale.set(h),i.x=this.bg.x+.5*(this.bg.width-i.width),i.y=e+Math.max(0,.5*(n-i.height))}
- bringChromeToFront(){
- const t=[this.titleUp,this.expProgressContainer,this.titleInfo,this.lblTitle,this.btnGuide,this.lblEventTimer,this.btnClose,this.iconHammer,this.lblHammer,this.infoContainer];
- for(const i of t)(null==i?void 0:i.parent)===this&&this.addChild(i)}
- isInitialized(){
- return this.initialized}
- }
- ;
- Kt(cet,"MinePopup"),zt(cet,"instance"),zt(cet,"OUTER_W",594),zt(cet,"BG_W",574),zt(cet,"OVERLAP",5),zt(cet,"HUD_W",526),zt(cet,"HUD_H",50),zt(cet,"EVENT_END_TIME_KEY","MINE_EVENT_END_TIME"),zt(cet,"EXP_BAR_X",76),zt(cet,"EXP_BAR_Y",15),zt(cet,"EXP_BAR_W",222),zt(cet,"EXP_BAR_H",20),zt(cet,"GRID_TOP_PAD",118),zt(cet,"GRID_BOTTOM_PAD",42);
- let uet=cet;
- const det=class t extends Be{
- constructor(){
- super(),zt(this,"btnDungeon",new mB("UI_Ekkorr","HeroGrade6")),zt(this,"btnIdle",new mB("UI_Ekkorr","HeroGrade4")),zt(this,"btnMap3",new mB("UI_Ekkorr","HeroGrade2")),zt(this,"btnMap4",new mB("UI_Ekkorr","HeroGrade16")),zt(this,"btnRaid",new mB("UI_Ekkorr","HeroGrade8")),zt(this,"btnBuff",new mB("UI_Ekkorr","HeroGrade10")),zt(this,"btnMine",new mB("UI_Ekkorr","HeroGrade12")),zt(this,"healthOrb",$7.getInstance()),zt(this,"waveCallInfo",V5.getInstance()),this.healthOrb.x=640-.5*this.healthOrb.width-3,this.healthOrb.y=13,this.addChild(this.healthOrb),this.waveCallInfo.x=10,this.waveCallInfo.y=0,this.addChild(this.waveCallInfo),this.waveCallInfo.eventMode="static",this.waveCallInfo.on("pointerup",this.getNextWave,this),this.waveCallInfo.start(),RV.getInstance().x=0,RV.getInstance().y=-13,this.addChild(RV.getInstance()),RV.getInstance().onVisibilityChanged=t=>{
- this.waveCallInfo.y=t?-65:0}
- ,this.btnDungeon.x=500,this.btnDungeon.y=0,this.btnIdle.x=this.healthOrb.x-this.btnIdle.width-10,this.btnIdle.y=this.healthOrb.y,this.addChild(this.btnIdle),this.btnIdle.on("pointerup",this.onIdle,this),this.btnDungeon.x=this.btnIdle.x-this.btnDungeon.width-10,this.btnDungeon.y=this.btnIdle.y,this.addChild(this.btnDungeon),this.btnDungeon.on("pointerup",this.onDungeon,this),this.btnMap3.x=this.btnDungeon.x-this.btnMap3.width-10,this.btnMap3.y=this.btnDungeon.y,this.addChild(this.btnMap3),this.btnMap3.on("pointerup",this.onMap3,this),this.btnMap4.x=this.btnMap3.x-this.btnMap4.width-10,this.btnMap4.y=this.btnMap3.y,this.addChild(this.btnMap4),this.btnMap4.on("pointerup",this.onMap4,this),this.btnRaid.x=this.btnMap4.x-this.btnRaid.width-10,this.btnRaid.y=this.btnMap4.y,this.addChild(this.btnRaid),this.btnRaid.on("pointerup",this.onRaid,this),this.btnBuff.x=this.btnRaid.x-this.btnBuff.width-10,this.btnBuff.y=this.btnRaid.y,this.addChild(this.btnBuff),this.btnBuff.on("pointerup",this.onBuff,this),this.btnMine.x=this.btnBuff.x-this.btnMine.width-10,this.btnMine.y=this.btnBuff.y,this.addChild(this.btnMine),this.btnMine.on("pointerup",this.onMine,this);
- const t=TL.getInstance().development;
- this.btnIdle.visible=t,this.btnDungeon.visible=t,this.btnMap3.visible=t,this.btnMap4.visible=t,this.btnRaid.visible=t,this.btnBuff.visible=t,this.btnMine.visible=t}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- onPowerSave(){
- WL(),H7.getInstance().activate()}
- getNextWave(){
- WL(),_L.isSoulResting?vV.getInstance().showMessage(AG.getText("GAME_866","영혼의 휴식중에는 사용할 수 없습니다.")):this.waveCallInfo.callWave()}
- async onPet(){
- WL(),Cst.getInstance().show()}
- async onIdle(){
- WL();
- const t=Q8.getInstance();
- t.setMode(Y8.HORIZONTAL),await t.startBattle()}
- async onDungeon(){
- WL();
- const t=Q8.getInstance();
- t.setMode(Y8.VERTICAL),await t.startBattle()}
- async onMap3(){
- WL();
- const t=Q8.getInstance();
- t.setMapIndex(3),await t.startBattle()}
- async onMap4(){
- WL();
- const t=Q8.getInstance();
- t.setMapIndex(4),await t.startBattle()}
- async onRaid(){
- WL(),await U7.getInstance().startBattle({
- bossKindNum:100004}
- )}
- async onPVP(){
- await t7.getInstance().startBattle(10,{
- horizontal:!1}
- )}
- async onNextWave(){
- await jL(()=>{
- }
- )}
- onBuff(){
- WL(),Z7.getInstance().show()}
- async onMine(){
- WL(),await uet.getInstance().show()}
- }
- ;
- Kt(det,"RightBottomMenus"),zt(det,"instance");
- let fet=det;
- const pet=640,get=320,met=30,wet=[4500223,2280703,8974079,6741452,4521898,2289373,5618687,7842559,10079487,11197951],vet=[16729156,16746496,16763904,15623714,16733542,16724872,16737860,15615010,16746564,16755302],bet=new Sg({
- fontFamily:"Arial",fill:16768e3,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:14,fontWeight:"bold"}
- );
- new Sg({
- fontFamily:"Arial",fill:16750848,stroke:{
- color:"#000000",width:4,join:"round"}
- ,fontSize:16,fontWeight:"bold"}
- );
- const yet=new Sg({
- fontFamily:"Arial",fill:8969727,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:14,fontWeight:"bold"}
- ),_et=new Sg({
- fontFamily:"Arial",fill:16746632,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:14,fontWeight:"bold"}
- ),Met=new Sg({
- fontFamily:"Arial",fill:13430527,stroke:{
- color:"#000000",width:2,join:"round"}
- ,fontSize:14}
- ),Eet=new Sg({
- fontFamily:"Arial",fill:16764108,stroke:{
- color:"#000000",width:2,join:"round"}
- ,fontSize:14}
- ),Aet=new Sg({
- fontFamily:"Arial",fill:16768e3,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:14,fontWeight:"bold"}
- ),Tet=new Sg({
- fontFamily:"Arial",fill:8969727,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:13,fontWeight:"bold"}
- ),Cet=new Sg({
- fontFamily:"Arial",fill:16746632,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:13,fontWeight:"bold"}
- ),ket=new Sg({
- fontFamily:"Arial",fill:16777215,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:12,fontWeight:"bold"}
- ),Oet=new Sg({
- fontFamily:"Arial",fill:11197951,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:12,fontWeight:"bolder"}
- ),Iet=new Sg({
- fontFamily:"Arial",fill:16755370,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:12,fontWeight:"bolder"}
- ),xet=new Sg({
- fontFamily:"Arial",fill:16777215,stroke:{
- color:"#000000",width:3,join:"round"}
- ,fontSize:12,fontWeight:"bold"}
- ),Net=class t extends Be{
- constructor(){
- 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,"allyRows",[]),zt(this,"enemyRows",[]),zt(this,"_allyBarsG",new Gf),zt(this,"_enemyBarsG",new Gf),zt(this,"bg",new QD),zt(this,"btnClose",new nG),this.bg.setIndex(6),this.addChild(this.bg),this.bg.width=640,this.bg.height=KA.stageHeight-640-454,this.bg.y=KA.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)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- _buildMatchHeader(){
- const t=26,i=new Gf;
- i.rect(0,0,pet,108).fill({
- color:0,alpha:.85}
- ),this.addChild(i);
- const s=new Gf;
- s.rect(0,0,pet,30).fill({
- color:1118515,alpha:.9}
- ),this.addChild(s),this._lblLeague=new Wg({
- text:"무한랭킹전 1일차 [ A 리그 ]",style:bet}
- ),this._lblLeague.x=(pet-this._lblLeague.width)/2,this._lblLeague.y=(30-this._lblLeague.height)/2,this.addChild(this._lblLeague);
- const e=new We(ZA.getTexture("UI_Ekkorr","Ui_BattleVs_Bg"));
- e.y=30,this.addChild(e);
- const n=new We(ZA.getTexture("UI_Ekkorr","Ui_BattleVs_Bg"));
- n.scale.set(-1,1),n.x=e.width+n.width,n.y=e.y,this.addChild(n);
- const h=new We(ZA.getTexture("UI_Ekkorr","Icon_Vs"));
- h.x=.5*(pet-h.width),h.y=e.y+.5*(e.height-h.height),this.addChild(h),this._lblMyName=new Wg({
- text:"내 이름 (999위)",style:yet}
- ),this._lblMyName.x=8,this._lblMyName.y=34+(t-this._lblMyName.height)/2,this.addChild(this._lblMyName),this._lblEnemyName=new Wg({
- text:"상대 이름 (999위)",style:_et}
- ),this._lblEnemyName.x=pet-this._lblEnemyName.width-8,this._lblEnemyName.y=34+(t-this._lblEnemyName.height)/2,this.addChild(this._lblEnemyName),this._lblMyScore=new Wg({
- text:"점수 : 0",style:Met}
- ),this._lblMyScore.x=8,this._lblMyScore.y=56+(t-this._lblMyScore.height)/2,this.addChild(this._lblMyScore),this._lblEnemyScore=new Wg({
- text:"점수 : 0",style:Eet}
- ),this._lblEnemyScore.x=pet-this._lblEnemyScore.width-8,this._lblEnemyScore.y=56+(t-this._lblEnemyScore.height)/2,this.addChild(this._lblEnemyScore),this._lblMyRecord=new Wg({
- text:"0승 0패",style:Met}
- ),this._lblMyRecord.x=8,this._lblMyRecord.y=78+(t-this._lblMyRecord.height)/2,this.addChild(this._lblMyRecord),this._lblEnemyRecord=new Wg({
- text:"0승 0패",style:Eet}
- ),this._lblEnemyRecord.x=pet-this._lblEnemyRecord.width-8,this._lblEnemyRecord.y=78+(t-this._lblEnemyRecord.height)/2,this.addChild(this._lblEnemyRecord);
- const r=new Gf;
- r.rect(0,106,pet,2).fill({
- color:4482730,alpha:.8}
- ),this.addChild(r)}
- _buildDamageHeaders(){
- const t=new Gf;
- t.rect(0,108,pet,26).fill({
- color:0,alpha:.8}
- ),this.addChild(t);
- const i=new Wg({
- text:"⚔ PVP DAMAGE METER",style:Aet}
- );
- i.x=(pet-i.width)/2,i.y=108+(26-i.height)/2,this.addChild(i);
- const s=new Gf;
- s.rect(0,134,pet,20).fill({
- color:17,alpha:.7}
- ),this.addChild(s),this._lblAlly=new Wg({
- text:`👥 ${
- AG.getText("COMMON_461","아군")}
- `,style:Tet}
- ),this._lblAlly.x=8,this._lblAlly.y=134+(20-this._lblAlly.height)/2,this.addChild(this._lblAlly),this._lblEnemy=new Wg({
- text:`💀 ${
- AG.getText("COMMON_462","적군")}
- `,style:Cet}
- ),this._lblEnemy.x=328,this._lblEnemy.y=134+(20-this._lblEnemy.height)/2,this.addChild(this._lblEnemy)}
- _buildAllRows(){
- for(let t=0;
- t<10;
- t++)this.allyRows.push(this._buildRow(t,0,Oet)),this.enemyRows.push(this._buildRow(t,get,Iet))}
- _buildRow(t,i,s){
- const e=154+t*met,n=t%2==0?.55:.4,h=new Gf;
- h.rect(i,e,get,met).fill({
- color:0,alpha:n}
- ),this.addChild(h);
- const r=new We;
- r.height=26,r.width=26,r.x=i+2,r.y=e+Math.floor(2),this.addChild(r);
- const o=new Wg({
- text:`${
- t+1}
- .`,style:ket}
- );
- o.x=i+45,o.y=e+Math.floor((met-o.height)/2),this.addChild(o);
- const a=new Wg({
- text:"-",style:s}
- );
- a.x=i+62,a.y=e+Math.floor((met-a.height)/2),this.addChild(a);
- const c=new Wg({
- text:"0",style:xet}
- );
- return c.x=i+get-35,c.y=e+Math.floor((met-c.height)/2),this.addChild(c),{
- icon:r,lblRank:o,lblName:a,lblDmg:c}
- }
- _buildDivider(){
- const t=new Gf;
- t.rect(319,134,2,320).fill({
- color:8947848,alpha:.5}
- ),this.addChild(t)}
- setMatchData(t){
- let i="";
- i+=AG.getText("GAME_76","무한 랭킹전"),i+=" "+AG.getText("GAME_276","제 ##회 @@일차").replace("##",t.episode.toString()).replace("@@",t.dayNum.toString()),i+=` [ ${
- AG.getText("GAME_138","## 리그").replace("##",t.league)}
-  ]`,this._lblLeague.text=i,this._lblLeague.x=(pet-this._lblLeague.width)/2,this._lblMyName.text=`${
- t.myName}
-  (${
- AG.getText("GAME_97","##위").replace("##",t.myRank.toString())}
- )`,this._lblEnemyName.text=`${
- t.enemyName}
-  (${
- AG.getText("GAME_97","##위").replace("##",t.enemyRank.toString())}
- )`,this._lblEnemyName.x=pet-this._lblEnemyName.width-8,this._lblMyScore.text=AG.getText("COMMON_37","점수")+` : ${
- t.myScore.toLocaleString()}
- `,this._lblEnemyScore.text=AG.getText("COMMON_37","점수")+` : ${
- t.enemyScore.toLocaleString()}
- `,this._lblEnemyScore.x=pet-this._lblEnemyScore.width-8,this._lblMyRecord.text=`${
- AG.getText("GAME_279","##승").replace("##",t.myWin.toString())}
- `,this._lblMyRecord.text+=` ${
- AG.getText("GAME_280","##패").replace("##",t.myLose.toString())}
- `,this._lblEnemyRecord.text=`${
- AG.getText("GAME_279","##승").replace("##",t.enemyWin.toString())}
- `,this._lblEnemyRecord.text+=` ${
- AG.getText("GAME_280","##패").replace("##",t.enemyLose.toString())}
- `,this._lblEnemyRecord.x=pet-this._lblEnemyRecord.width-8,this._lblAlly.text=`👥 ${
- AG.getText("COMMON_461","아군")}
- `,this._lblEnemy.text=`💀 ${
- AG.getText("COMMON_462","적군")}
- `}
- update(){
- this._frameCounter++,this._frameCounter<10||(this._frameCounter=0,this._refresh())}
- _getActiveController(){
- const t=N9t.getInstance().getCurrentBattle();
- return t&&N9t.getInstance().getCurrentBattleType()===bV.PVP2?t:t7.getInstance()}
- _refresh(){
- const t=this._getActiveController(),i=vx.getInstance(),s=Kt(t=>{
- let s=t.className;
- if(t.kindNum>0){
- const e=i.getBookVO(t.kindNum);
- e&&(s=AG.getText(e.getNameKey(),t.name))}
- return{
- name:s,base:t.base,damage:t.totalDamageDealt}
- }
- ,"buildEntry");
- for(const o of t.getFriendList())o.isCastle||this._allySnap.set(o,s(o));
- for(const o of t.getEnemyList())o.isCastle||this._enemySnap.set(o,s(o));
- const e=[...this._allySnap.values()].filter(t=>t.damage>0).sort((t,i)=>i.damage-t.damage),n=[...this._enemySnap.values()].filter(t=>t.damage>0).sort((t,i)=>i.damage-t.damage),h=e.length>0?e[0].damage:0,r=n.length>0?n[0].damage:0;
- this._allyBarsG.clear(),this._enemyBarsG.clear(),this._updateColumn(this.allyRows,e,h,0,wet,this._allyBarsG),this._updateColumn(this.enemyRows,n,r,get,vet,this._enemyBarsG)}
- _updateColumn(t,i,s,e,n,h){
- for(let o=0;
- o<10;
- o++){
- const a=t[o],c=i[o];
- if(c){
- a.icon.visible=!0;
- try{
- a.icon.texture=ZA.getTexture("UI_Ekkorr",`Hero${
- c.base}
- `);
- const t=a.icon.texture;
- if(t.width>0&&t.height>0){
- const i=t.width/t.height;
- a.icon.height=26,a.icon.width=26*i}
- }
- catch(r){
- }
- if(a.lblRank.text=`${
- o+1}
- .`,a.lblName.text=c.name.length>7?c.name.substring(0,7):c.name,a.lblDmg.text=$D.displayLargeNumberAsAlphabet(Math.floor(c.damage)),s>0){
- const t=c.damage/s,i=Math.max(2,Math.floor(200*t)),r=e+60,a=154+o*met+Math.floor(2);
- h.rect(r,a,i,26).fill({
- color:n[o%n.length],alpha:.4}
- )}
- }
- else a.icon.visible=!1,a.lblRank.text="",a.lblName.text="",a.lblDmg.text=""}
- }
- show(){
- this._allySnap.clear(),this._enemySnap.clear(),this._frameCounter=10,this._clearRows(),this._showed||(this._showed=!0,this.visible=!0,GM.getInstance().add(this.update,this))}
- _clearRows(){
- this._allyBarsG.clear(),this._enemyBarsG.clear();
- for(let t=0;
- t<10;
- t++){
- const i=this.allyRows[t];
- i.icon.visible=!1,i.lblRank.text="",i.lblName.text="",i.lblDmg.text="";
- const s=this.enemyRows[t];
- s.icon.visible=!1,s.lblRank.text="",s.lblName.text="",s.lblDmg.text=""}
- }
- hide(){
- this._showed&&(this._showed=!1,this.visible=!1,GM.getInstance().remove(this.update,this))}
- reset(){
- this._frameCounter=0}
- onClickGiveUp(){
- const t=N9t.getInstance().getCurrentBattleType()===bV.PVP2;
- let i="";
- if(i+=AG.getText("GAME_281","무한랭킹전 전투를 종료하시겠습니까?")+"\n",i+=AG.getText("GAME_282","전투를 종료하면 패배 처리 됩니다."),t){
- const t=N9t.getInstance().getCurrentBattle();
- dK.getInstance().show(i,()=>{
- t.giveUp()}
- ,()=>{
- t.resume()}
- ),t.pause()}
- else dK.getInstance().show(i,()=>{
- t7.getInstance().giveUp()}
- ,()=>{
- t7.getInstance().resume()}
- ),t7.getInstance().pause()}
- }
- ;
- Kt(Net,"PVPBattleStatus"),zt(Net,"_instance");
- let Pet=Net;
- const Ret=class extends aS{
- constructor(){
- super(),this.addChild(_9t.getInstance()),this.addChild(yii.getInstance()),this.addChild(fet.getInstance()),this.addChild(S4.getInstance()),this.addChild(Xti.getInstance()),S4.getInstance().y=KA.viewMainY,Xti.getInstance().y=KA.safeHeight-Xti.getInstance().height,yii.getInstance().y=0,yii.getInstance().start(),MU.getInstance().update(),w3.getInstance().y=60,w3.getInstance().refreshSlots(),this.addChild(w3.getInstance()),_9t.getInstance().x=KA.stageWidth,_9t.getInstance().y=yii.getInstance().y+yii.getInstance().height+10,fet.getInstance().x=0,fet.getInstance().y=KA.viewMainY-70;
- const t=jit.getInstance();
- t.y=642,t.visible=!1,this.addChild(t);
- const i=Vit.getInstance();
- i.y=642,i.visible=!1,this.addChild(i);
- const s=Pet.getInstance();
- s.y=642,s.visible=!1,this.addChild(s)}
- updateLayout(){
- S4.getInstance().y=KA.viewMainY,Xti.getInstance().y=KA.safeHeight-Xti.getInstance().height}
- }
- ;
- Kt(Ret,"UILayer");
- let Det=Ret;
- const Let=class t extends G8{
- constructor(){
- super(),zt(this,"battleType",bV.PVP2),zt(this,"BATTLEFIELD_WIDTH",640),zt(this,"BATTLEFIELD_HEIGHT",640),zt(this,"VIEWPORT_WIDTH",640),zt(this,"GAME_ZOOM",1.3),zt(this,"CAMERA_LERP",.08),zt(this,"cameraX",0),zt(this,"ALLY_CASTLE_X",126),zt(this,"ALLY_CASTLE_Y",536),zt(this,"ENEMY_CASTLE_X",1320),zt(this,"ENEMY_CASTLE_Y",536),zt(this,"ALLY_SPAWN_X",200),zt(this,"ENEMY_SPAWN_X",1200),zt(this,"Y_MIN",520),zt(this,"Y_MAX",600),zt(this,"ENEMY_COUNT",10),zt(this,"CRANE_WING_ARC",20),zt(this,"PVP_TIME_LIMIT_FRAMES",3600),zt(this,"pvpStarted",!1),zt(this,"speedHelper",new U8("ef2.pvp2.battleSpeed")),zt(this,"enemyCastle",null),zt(this,"allyCastle",null),zt(this,"timerText",null),zt(this,"spawnedVOs",[]),zt(this,"pvpTeamVOs",[]),zt(this,"marchMode",!1),zt(this,"allySpawnQueue",[]),zt(this,"enemySpawnQueue",[]),zt(this,"allySpawnTimer",0),zt(this,"enemySpawnTimer",0),zt(this,"MARCH_SPAWN_INTERVAL",56),zt(this,"MARCH_ALLY_CASTLE_X",40),zt(this,"MARCH_ALLY_CASTLE_Y",320),zt(this,"MARCH_ENEMY_CASTLE_X",600),zt(this,"MARCH_ENEMY_CASTLE_Y",320)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- async startBattle(t=10){
- this.cleanup(),KN.getInstance().setBattleContext(NN.Pvp),DB.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=vx.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=yx.getVO();
- n.id=-1,n.kindNum=s.kindNum,n.trans=s.trans,n.level=t,n.enhance=0,this.pvpTeamVOs.push(n)}
- await KG.getInstance().setSingleBackground("images/bg/pvp.png",this.BATTLEFIELD_WIDTH,this.BATTLEFIELD_HEIGHT),zii.zoomEnabled=!1,this.cameraX=0,this.applyCameraPosition(),await this.setupEnemies(t),await this.setupHeroTeam(),await this.setupCastles(t),this.setupEnemyLists(),this.createTimerUI(),N9t.getInstance().switchToBattle(this),zii.zoomEnabled=!1,this.applyCameraPosition(),WG.getInstance().remove(this.execute,this),await new Promise(t=>setTimeout(t,3e3)),this.pvpStarted=!0,WG.getInstance().add(this.execute,this)}
- async startMarchBattle(t,i,s,e,n=10){
- this.cleanup(),this.marchMode=!0,KN.getInstance().setBattleContext(NN.Pvp),DB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- for(const h of this.pvpTeamVOs)null==h||h.remove();
- this.pvpTeamVOs.length=0;
- for(let h=0;
- h<10;
- h++){
- if(h>=t.length||t[h]<=0||t[h]>=1e4){
- this.pvpTeamVOs.push(null);
- continue}
- const s=yx.getVO();
- s.id=-1,s.kindNum=t[h],s.trans=i[h],s.level=Math.floor(_L.maxWave/100),s.enhance=0,this.pvpTeamVOs.push(s)}
- await this.setupMarchAllies(),await this.setupMarchEnemies(s,e,n),this.setupEnemyLists(),this.createTimerUI(),N9t.getInstance().switchToBattle(this),KG.getInstance().setBackground($G.PVP2),zii.zoomEnabled=!1,WG.getInstance().remove(this.execute,this),await sB.getInstance().play(),this.pvpStarted=!0,WG.getInstance().add(this.execute,this)}
- async setupMarchCastles(t){
- const i=await g3.getInstance().getUnit(ox.ElfTown5);
- i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.MARCH_ENEMY_CASTLE_X,i.y=i.yDefault=this.MARCH_ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),tB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
- const s=await g3.getInstance().getUnit(ox.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),tB.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;
- s++){
- const e=i[s];
- if(!e)continue;
- const n=await g3.getInstance().getUnit(e.className);
- n.battleController=this,this.initializeUnitByKindNum(n,e.kindNum,e.level,e.trans),n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange,n.numBlock=0;
- const h=t.ALLY_FORMATION[s%t.ALLY_FORMATION.length];
- 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),tB.getInstance().addChild(n),this.friendList.push(n)}
- }
- async setupMarchEnemies(i,s,e){
- for(let n=0;
- n<i.length;
- n++){
- const h=i[n];
- if(h<=0)continue;
- const r=vx.getInstance().getBookVO(h);
- if(!r)continue;
- const o=await g3.getInstance().getUnit(r.className);
- o.battleController=this,this.initializeUnitByKindNum(o,h,e,s[n]),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange,o.numBlock=0;
- const a=t.ENEMY_FORMATION[n%t.ENEMY_FORMATION.length];
- 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),tB.getInstance().addChild(o),this.enemyList.push(o)}
- }
- async spawnMarchAlly(t){
- const i=await g3.getInstance().getUnit(t.className);
- i.battleController=this,this.initializeUnitByKindNum(i,t.kindNum,t.level),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.numBlock=0,i.x=-30,i.y=450+80*this.random.next(),i.xDefault=670,i.yDefault=490,i.healthBar.setHealthColor(!0),i.enemyList=this.enemyList,i.allyList=this.friendList,i.isAir&&i.onFlyEnter(!0),tB.getInstance().addChild(i),this.friendList.push(i)}
- async spawnMarchEnemy(t,i){
- const s=vx.getInstance().getBookVO(t);
- if(!s)return;
- const e=await g3.getInstance().getUnit(s.className);
- e.battleController=this,this.initializeUnitByKindNum(e,t,i),e.detectRange=1400,e.detectRange2=e.detectRange*e.detectRange,e.numBlock=0,e.x=670,e.y=450+80*this.random.next(),e.xDefault=-30,e.yDefault=490,e.healthBar.setHealthColor(!1),e.enemyList=this.friendList,e.allyList=this.enemyList,tB.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(){
- const t=DB.getInstance();
- t.scale.set(this.GAME_ZOOM),t.x=this.cameraX,t.y=KA.SAFE_AREA_TOP+this.VIEWPORT_WIDTH*(1-this.GAME_ZOOM)}
- createTimerUI(){
- this.removeTimerUI(),this.timerText=new Wg({
- text:this.formatTime(Math.ceil(this.PVP_TIME_LIMIT_FRAMES/60)),style:t.TIMER_STYLE}
- ),this.timerText.anchor.set(.5,0),this.timerText.x=320,this.timerText.y=8,Det.getInstance().addChild(this.timerText),this.speedHelper.enter(),this.speedHelper.attachButton(Det.getInstance(),380,6)}
- removeTimerUI(){
- this.timerText&&(this.timerText.parent&&this.timerText.parent.removeChild(this.timerText),this.timerText.destroy(),this.timerText=null)}
- formatTime(t){
- return`${
- Math.floor(t/60)}
- :${
- (t%60).toString().padStart(2,"0")}
- `}
- getRemainingSeconds(){
- if(!this.pvpStarted)return Math.ceil(this.PVP_TIME_LIMIT_FRAMES/60);
- const t=this.PVP_TIME_LIMIT_FRAMES-this.battleTime;
- return Math.max(0,Math.ceil(t/60))}
- isTimeExpired(){
- return!!this.pvpStarted&&this.battleTime>=this.PVP_TIME_LIMIT_FRAMES}
- async setupEnemies(t){
- const i=vx.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=vx.getInstance().getBookVO(i);
- if(!r)continue;
- const o=await g3.getInstance().getUnit(r.className);
- o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,i,t),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),tB.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=vx.getInstance().getBookVO(r);
- if(!o)continue;
- const a=await g3.getInstance().getUnit(o.className);
- a.battleController=this,this.initializeUnitByKindNum(a,r,h.level),a.initDelay=0,a.showTombstone=!1,a.totalDamageDealt=0,a.detectRange=1400,a.detectRange2=a.detectRange*a.detectRange,a.numBlock=0;
- 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),tB.getInstance().addChild(a),this.friendList.push(a)}
- }
- async setupCastles(t){
- const i=await g3.getInstance().getUnit(ox.ElfTown5);
- i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.ENEMY_CASTLE_X,i.y=i.yDefault=this.ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),tB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
- const s=await g3.getInstance().getUnit(ox.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),tB.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){
- const n=yx.getVO();
- n.id=-1,n.kindNum=i,n.level=s,n.enhance=0,n.trans=e,this.spawnedVOs.push(n),t.setData(n),t.initDelay=0,t.showTombstone=!1}
- checkProgress(){
- 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(_L.maxWave/100);
- this.spawnMarchEnemy(t.kindNum,i)}
- }
- if(this.timerText&&!this.battleEnded){
- const t=this.getRemainingSeconds();
- this.timerText.text=this.formatTime(t),this.timerText.style.fill=t<=10?16724787:t<=20?16755200:16777215}
- super.checkProgress()}
- cleanup(){
- KN.getInstance().setBattleContext(NN.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.removeTimerUI(),this.enemyCastle=null,this.allyCastle=null,this.pvpStarted=!1,this.marchMode=!1,this.allySpawnQueue.length=0,this.enemySpawnQueue.length=0;
- for(const t of this.pvpTeamVOs)null==t||t.remove();
- this.pvpTeamVOs.length=0;
- for(const t of this.spawnedVOs)t.remove();
- this.spawnedVOs.length=0;
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- zii.zoomEnabled=!0,super.cleanup()}
- checkVictory(){
- return this.marchMode?!(0!==this.enemySpawnQueue.length||!this.enemyList.every(t=>!t.isAlive))||!!this.isTimeExpired()&&this.friendList.filter(t=>t.isAlive).length>this.enemyList.filter(t=>t.isAlive).length:!(!this.enemyCastle||this.enemyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp>this.enemyCastle.hp/this.enemyCastle.maxHp}
- checkDefeat(){
- return this.marchMode?!(0!==this.allySpawnQueue.length||!this.friendList.every(t=>!t.isAlive))||!!this.isTimeExpired()&&this.friendList.filter(t=>t.isAlive).length<=this.enemyList.filter(t=>t.isAlive).length:!(!this.allyCastle||this.allyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp<=this.enemyCastle.hp/this.enemyCastle.maxHp}
- onVictoryCallback(){
- mnt.getInstance().endBattle(!0),setTimeout(()=>{
- WG.getInstance().remove(this.execute,this),j8.getInstance().showVictory()}
- ,2e3)}
- onDefeatCallback(){
- mnt.getInstance().endBattle(!1),setTimeout(()=>{
- WG.getInstance().remove(this.execute,this),j8.getInstance().showDefeat()}
- ,2e3)}
- returnToMain(){
- }
- scheduleReturnToMain(){
- }
- pause(){
- WG.getInstance().remove(this.execute,this)}
- resume(){
- WG.getInstance().add(this.execute,this)}
- giveUp(){
- this.onDefeatCallback()}
- }
- ;
- Kt(Let,"PVP2BattleController"),zt(Let,"instance"),zt(Let,"TIMER_STYLE",new Sg({
- fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
- color:"#000000",width:5,join:"round"}
- }
- )),zt(Let,"ALLY_FORMATION",[{
- x:180,y:440}
- ,{
- x:180,y:490}
- ,{
- x:180,y:540}
- ,{
- x:180,y:590}
- ,{
- x:80,y:460}
- ,{
- x:80,y:520}
- ,{
- x:80,y:580}
- ,{
- x:10,y:460}
- ,{
- x:10,y:520}
- ,{
- x:10,y:580}
- ]),zt(Let,"ENEMY_FORMATION",Let.ALLY_FORMATION.map(t=>({
- x:640-t.x,y:t.y}
- )));
- let Get=Let;
- const Bet=class t extends O8{
- constructor(){
- super(),zt(this,"vsImage",new We(ZA.getTexture("UI_Ekkorr","UI_VS"))),zt(this,"allyBtns",[]),zt(this,"enemyBtns",[]),zt(this,"battleContainer",new Be),zt(this,"btnStart",new QL("전투")),zt(this,"lblMyName",new YD("",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMyStats",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpName",new YD("",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpStats",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"heroList"),zt(this,"selectedSlot",-1),zt(this,"lblHeroList",new YD("영웅 선택",16777215,aD.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);
- const t=this.lblMyStats.y+this.lblMyStats.height+8;
- this.battleContainer.y=t,this.addChild(this.battleContainer);
- const i=[{
- col:0,row:0,yOff:0}
- ,{
- col:0,row:1,yOff:0}
- ,{
- col:0,row:2,yOff:0}
- ,{
- col:0,row:3,yOff:0}
- ,{
- col:1,row:0,yOff:32}
- ,{
- col:1,row:1,yOff:32}
- ,{
- col:1,row:2,yOff:32}
- ,{
- col:2,row:0,yOff:32}
- ,{
- col:2,row:1,yOff:32}
- ,{
- col:2,row:2,yOff:32}
- ];
- for(let o=0;
- o<10;
- o++){
- const t=i[o],s=new O4;
- s.scale=.65,s.x=0+91*(2-t.col),s.y=62*t.row+t.yOff,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
- this.vsImage.scale=.6,this.vsImage.x=264,this.vsImage.y=93,this.battleContainer.addChild(this.vsImage);
- const s=264+this.vsImage.width+20,e=[{
- col:0,row:0,yOff:0}
- ,{
- col:0,row:1,yOff:0}
- ,{
- col:0,row:2,yOff:0}
- ,{
- col:0,row:3,yOff:0}
- ,{
- col:1,row:0,yOff:32}
- ,{
- col:1,row:1,yOff:32}
- ,{
- col:1,row:2,yOff:32}
- ,{
- col:2,row:0,yOff:32}
- ,{
- col:2,row:1,yOff:32}
- ,{
- col:2,row:2,yOff:32}
- ];
- for(let o=0;
- o<10;
- o++){
- const t=e[o],i=new O4;
- i.scale=.65,i.x=s+91*t.col,i.y=62*t.row+t.yOff,i.activated=!1,i.hidePlusIcon(),this.battleContainer.addChild(i),this.enemyBtns.push(i)}
- this.battleContainer.x=.5*(this.bg.width-this.battleContainer.width);
- const n=t+248+15-20;
- this.lblHeroList.x=15,this.lblHeroList.y=n,this.addChild(this.lblHeroList);
- const h=n+this.lblHeroList.height+8,r=this.bg.height-h-60-15;
- this.heroList=new R3(P4,630,r),this.heroList.x=5,this.heroList.y=h,this.addChild(this.heroList),this.btnStart.color=QL.RED,this.btnStart.width=200,this.btnStart.height=50,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-70+10,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- setData(t,i,s){
- this.pvpInfo=t,this.userPvp=i,this.opInfo=s,this.lblHeroList.text=AG.getText("GAME_563","영웅 선택"),this.btnStart.text=AG.getText("GAME_70","전투"),this.lblMyName.text=`Rank.${
- i.rank}
-   ${
- _L.name}
- `;
- let e=Number(i.total)-Number(i.win);
- this.lblMyStats.text=`${
- AG.getText("COMMON_37","점수")}
-  : ${
- i.point.toLocaleString()}
-  ( ${
- i.total}
- -${
- i.win}
- -${
- e}
-  )`,this.lblOpName.text=`Rank.${
- s.rank}
-   ${
- s.name}
- `,this.lblOpName.x=this.bg.width-this.lblOpName.width-15,e=Number(s.total)-Number(s.win),this.lblOpStats.text=`${
- AG.getText("COMMON_37","점수")}
-  : ${
- s.point.toLocaleString()}
-  ( ${
- s.total}
- -${
- s.win}
- -${
- e}
-  )`,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(),P4.onHeroClick=this.onClickHeroFromList.bind(this),this.updateHeroList()}
- initTeam(){
- this.teamKindNums=new Array(10).fill(-1),this.teamTrans=new Array(10).fill(0);
- const t=[],i=[];
- this.parseTeamData(this.pvpInfo.team,t,i);
- for(let s=0;
- s<Math.min(t.length,10);
- s++)this.teamKindNums[s]=t[s],this.teamTrans[s]=i[s];
- this.originalTeam=this.buildTeamStr()}
- buildTeamStr(){
- const t=[];
- for(let i=0;
- i<10;
- i++)this.teamKindNums[i]>0?t.push(`${
- this.teamKindNums[i]}
- -${
- this.teamTrans[i]}
- `):t.push("0-0");
- return t.join("|")}
- async saveTeamIfChanged(){
- const t=this.buildTeamStr();
- if(t===this.originalTeam)return;
- const i=await hD.getInstance().pvp.updateTeam(t,!0);
- !1!==i.success?(this.pvpInfo.team=i.body,this.originalTeam=t):mG.getInstance().showError(i)}
- parseTeamData(t,i,s){
- if(i.length=0,s.length=0,t)for(const e of t.split("|")){
- const[t,n]=e.split("-").map(Number);
- i.push(0===t?-1:t),s.push(0===t?0:n)}
- }
- updateAllyButtons(){
- const t=Math.floor(_L.maxWave/100);
- for(let i=0;
- i<10;
- i++){
- const s=this.allyBtns[i],e=yx.getVO();
- this.teamKindNums[i]>0?(e.kindNum=this.teamKindNums[i],e.trans=this.teamTrans[i],e.level=t,s.setDataWith(i,e),s.hideEnhance(),s.setAlphaToFrame(i===this.selectedSlot?1:.85)):(e.kindNum=-1,s.setDataWith(i,e),s.hideBackground(),s.setAlphaToFrame(i===this.selectedSlot?.8:.4)),s.selected=i===this.selectedSlot}
- }
- updateEnemyButtons(){
- const t=Math.floor(this.opInfo.maxWave/100);
- for(let i=0;
- i<10;
- i++){
- const s=this.enemyBtns[i],e=yx.getVO();
- i<this.opKindNums.length?(e.kindNum=this.opKindNums[i],e.trans=this.opTrans[i],e.level=t,s.setDataWith(i,e),s.hideEnhance()):(e.kindNum=-1,s.setDataWith(i,e)),s.setAlphaToFrame(1)}
- }
- calcTotalInventory(){
- const t=new Map,i=vx.getInstance().list;
- for(const e of i){
- if(e.kindNum>=1e4)continue;
- const i=`${
- e.kindNum}
- _${
- e.trans}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const s=vx.getInstance().ownedUnitList;
- for(const e of s)if(!(e.kindNum>=1e4)){
- if(e.count>0){
- const i=`${
- e.kindNum}
- _0`;
- t.set(i,(t.get(i)||0)+e.count)}
- if(e.trans[0]>0){
- const i=`${
- e.kindNum}
- _1`;
- t.set(i,(t.get(i)||0)+e.trans[0])}
- if(e.trans[1]>0){
- const i=`${
- e.kindNum}
- _2`;
- t.set(i,(t.get(i)||0)+e.trans[1])}
- if(e.trans[2]>0){
- const i=`${
- e.kindNum}
- _3`;
- t.set(i,(t.get(i)||0)+e.trans[2])}
- }
- return t}
- updateHeroList(){
- x4.removeAll(this.heroVOs);
- const t=new Map;
- for(let e=0;
- e<10;
- e++){
- if(this.teamKindNums[e]<=0)continue;
- const i=`${
- this.teamKindNums[e]}
- _${
- this.teamTrans[e]}
- `;
- t.set(i,(t.get(i)||0)+1)}
- const i=this.calcTotalInventory();
- this.heroVOs.push(x4.set(x4.getVO(),-1,0,0,0));
- for(const[e,n]of i){
- const[i,s]=e.split("_"),h=t.get(e)||0;
- this.heroVOs.push(x4.set(x4.getVO(),Number(i),Number(s),n-h,n))}
- const s=vx.getInstance();
- this.heroVOs.sort((t,i)=>{
- if(t.kindNum<=0)return-1;
- if(i.kindNum<=0)return 1;
- const e=s.getBookVO(t.kindNum),n=s.getBookVO(i.kindNum);
- if(!e||!n)return 0;
- const h=1e12*e.grade-1e9*e.evolStage+1e6*t.trans-e.tribe;
- return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
- ),this.heroList.dataProvider=ZI.chunkArray(this.heroVOs,7)}
- onClickAllyHero(t){
- this.selectedSlot===t?this.selectedSlot=-1:(this.teamKindNums[this.selectedSlot]>0&&this.teamKindNums[t]>0&&([this.teamKindNums[this.selectedSlot],this.teamKindNums[t]]=[this.teamKindNums[t],this.teamKindNums[this.selectedSlot]],[this.teamTrans[this.selectedSlot],this.teamTrans[t]]=[this.teamTrans[t],this.teamTrans[this.selectedSlot]]),this.selectedSlot=t),this.updateAllyButtons()}
- onClickHeroFromList(t,i){
- if(t<=0){
- if(this.selectedSlot>=0&&this.selectedSlot<10&&this.teamKindNums[this.selectedSlot]>0){
- this.teamKindNums[this.selectedSlot]=-1,this.teamTrans[this.selectedSlot]=0;
- let t=-1;
- for(let i=this.selectedSlot+1;
- i<10;
- i++)if(this.teamKindNums[i]>0){
- t=i;
- break}
- if(t<0)for(let i=0;
- i<this.selectedSlot;
- i++)if(this.teamKindNums[i]>0){
- t=i;
- break}
- this.selectedSlot=t}
- }
- else{
- const s=`${
- t}
- _${
- i}
- `;
- let e=0;
- for(let n=0;
- n<10;
- n++)this.teamKindNums[n]===t&&this.teamTrans[n]===i&&e++;
- if(e>=(this.calcTotalInventory().get(s)||0))return;
- if(this.selectedSlot>=0){
- this.teamKindNums[this.selectedSlot]=t,this.teamTrans[this.selectedSlot]=i;
- let s=-1;
- for(let t=this.selectedSlot+1;
- t<10;
- t++)if(this.teamKindNums[t]<=0){
- s=t;
- break}
- this.selectedSlot=s}
- else for(let n=0;
- n<10;
- n++)if(this.teamKindNums[n]<=0){
- this.teamKindNums[n]=t,this.teamTrans[n]=i;
- break}
- }
- this.updateAllyButtons(),this.updateHeroList()}
- isEmptyTeam(){
- for(let t=0;
- t<10;
- t++)if(this.teamKindNums[t]>0)return!1;
- return!0}
- async onStartBattle(){
- if(!WG.getInstance().isRunning)return;
- if(!this.userPvp)return;
- if(this.userPvp.ticket<=0)return void mG.getInstance().show(AG.getText("GAME_275","티켓이 부족합니다."));
- if(this.isEmptyTeam())return void mG.getInstance().show(AG.getText("GAME_285","전투에 출전할 병사를 슬롯에 추가해 주세요."));
- if(this.requestPending)return;
- this.requestPending=!0,await this.saveTeamIfChanged();
- const t=await hD.getInstance().pvp.startBattle(this.opInfo.uid,!0);
- if(!1===t.success)return this.requestPending=!1,void mG.getInstance().showError(t);
- Het.getInstance().battleId=t.body.battleId,this.userPvp.ticket--,C6.getInstance().updatePvpTicket(this.userPvp.ticket,this.userPvp.ticketTime??null),this.hide(),this.onPVP(),this.requestPending=!1,nV.getInstance().getStatus()}
- onPVP(){
- mnt.getInstance().hideAllPvPPopups(),Pet.getInstance().setMatchData({
- episode:this.pvpInfo.episode,dayNum:this.pvpInfo.round,league:this.getGradeText(this.userPvp.grade),myName:_L.name,myRank:this.userPvp.rank,myScore:this.userPvp.point,myWin:this.userPvp.win,myLose:this.userPvp.lose,enemyName:this.opInfo.name,enemyRank:this.opInfo.rank,enemyScore:this.opInfo.point,enemyWin:this.opInfo.win,enemyLose:Number(this.opInfo.total)-Number(this.opInfo.win)}
- ),Get.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100))}
- getGradeText(t){
- return["","C","B","A","S"][t]??""}
- show(){
- P4.showAttackType=!1,this.show2()}
- onRemoved(){
- mnt.getInstance().addResourceInfo(),UV.ensureMounted(S4.getInstance())}
- hide(){
- this.saveTeamIfChanged(),super.hide()}
- }
- ;
- Kt(Bet,"PVP2ReadyPopup"),zt(Bet,"_instance");
- let Uet=Bet;
- const Fet=class t extends Be{
- constructor(){
- super(),zt(this,"lblPoint",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblTicket",new GB("PVP_TICKET_ON","",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblTimer",new GB("Icon_Time02","",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblSettlement",new YD("",16755370,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"opponentList"),zt(this,"btnBuyTicket",new kU("UI_GEM","","티켓구매",.8,140,60)),zt(this,"btnRefreshOppo",new kU("UI_GEM","","새로고침",.8,140,60)),zt(this,"pvpInfo",null),zt(this,"userPvp",null),zt(this,"battleId",0),zt(this,"lastLoadTime",0),zt(this,"requestPending",!1),zt(this,"requestPending2",!1),zt(this,"timerRunning",!1),zt(this,"timerUpdateCount",0),zt(this,"rechargeTime",0),zt(this,"myHeroKindNums",[]),zt(this,"myHeroTrans",[]),this.lblPoint.x=12,this.lblPoint.y=4,this.addChild(this.lblPoint),this.lblTicket.iconScale=.9,this.lblTicket.x=12,this.lblTicket.y=30,this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.x=this.lblTicket.x+80,this.lblTimer.y=30,this.addChild(this.lblTimer),this.btnRefreshOppo.color=kU.BROWN,this.btnRefreshOppo.width=140,this.btnRefreshOppo.height=60,this.btnRefreshOppo.x=640-this.btnRefreshOppo.width-19,this.btnRefreshOppo.y=0,this.btnRefreshOppo.onClick=this.onChangeOpponentList.bind(this),this.addChild(this.btnRefreshOppo),this.btnBuyTicket.color=kU.BROWN,this.btnBuyTicket.width=140,this.btnBuyTicket.height=60,this.btnBuyTicket.x=this.btnRefreshOppo.x-this.btnBuyTicket.width-7,this.btnBuyTicket.y=0,this.btnBuyTicket.onClick=this.onBuyTicket.bind(this),this.addChild(this.btnBuyTicket),this.lblSettlement.y=200,this.addChild(this.lblSettlement),this.lblSettlement.visible=!1;
- const t=mnt.getInstance().listHeight-60-10;
- this.opponentList=new zI(C4,625,t),this.opponentList.x=0,this.opponentList.y=68,this.addChild(this.opponentList),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- onAdded(){
- this.pvpInfo&&this.startTimer()}
- onRemoved(){
- this.stopTimer()}
- setData(){
- this.updateButtonLabels(),this.pvpInfo&&ix.time-this.lastLoadTime<t.LOAD_COOLDOWN||this.loadInfo()}
- updateButtonLabels(){
- this.btnBuyTicket.text=AG.getText("COMMON_385","티켓 구매"),this.btnRefreshOppo.text=AG.getText("COMMON_60","새로고침")}
- async loadInfo(){
- var t;
- const i=await hD.getInstance().pvp.getInfo(!0);
- !1!==i.success?(this.pvpInfo=i.body,this.userPvp=null==(t=i.body)?void 0:t.userPvp,this.lastLoadTime=ix.time,this.parseTeamData(this.pvpInfo.team,this.myHeroKindNums,this.myHeroTrans),this.updateInfoLabels(),this.startTimer(),this.pvpInfo.isSettlement?this.showSettlement():(this.hideSettlement(),this.loadOpponentList())):mG.getInstance().showError(i)}
- async loadOpponentList(){
- const t=await hD.getInstance().pvp.getOpponentList(!0);
- !1!==t.success?this.displayOpponentList(t.body.opponents):mG.getInstance().showError(t)}
- displayOpponentList(t){
- t.sort((t,i)=>(Number(t.rank)||999)-(Number(i.rank)||999)),this.opponentList.dataProvider=t;
- const i=this.opponentList.itemList;
- if(i)for(const s of i)s.onFight=this.onReadyBattle.bind(this)}
- async onChangeOpponentList(){
- const t=await hD.getInstance().pvp.changeOpponentList(!0);
- !1!==t.success?(this.displayOpponentList(t.body.opponents),"gem"in t.body&&(_L.gem=t.body.gem,UV.getInstance().updateGem()),this.userPvp&&(this.userPvp.refreshCount=(this.userPvp.refreshCount||0)+1,this.updateRefreshInfo())):mG.getInstance().showError(t)}
- async onReadyBattle(t){
- this.userPvp&&(this.userPvp.ticket<=0?mG.getInstance().show(AG.getText("GAME_275","티켓이 부족합니다.")):(await this.getMyTeamInfo(),Uet.getInstance().setData(this.pvpInfo,this.userPvp,t),Uet.getInstance().show()))}
- async getMyTeamInfo(){
- const t=await hD.getInstance().pvp.getTeam(!0);
- !1!==t.success?t.body&&(this.pvpInfo.team=t.body):mG.getInstance().showError(t)}
- async endBattle(t){
- if(this.battleId<=0)return;
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- const i=await hD.getInstance().pvp.endBattle(this.battleId,t,!0);
- if(!1===i.success)return this.setRequestPending(!1),void mG.getInstance().showError(i);
- aV.getInstance().markDirty(),"gem"in i.body&&(_L.gem=i.body.gem,UV.getInstance().updateGem());
- const{
- gainPoint:s,newPoint:e}
- =i.body;
- this.userPvp&&(this.userPvp.point=e),this.battleId=0,this.updateInfoLabels(),this.setRequestPending(!1),this.loadInfo(),t&&nV.getInstance().getStatus()}
- setRequestPending(t){
- this.requestPending=t}
- setRequestPending2(t){
- this.requestPending2=t}
- getTicketCost(){
- var t;
- const i=Number((null==(t=this.userPvp)?void 0:t.ticketPurchaseCount)??0),s=EL.getInstance().getClientData("PVP_TICKET_COST").split("|").map(Number);
- return i<s.length?s[i]:s[s.length-1]}
- async onBuyTicket(){
- const t=this.getTicketCost();
- if(_L.gem<t)return void mG.getInstance().show(AG.getText("COMMON_352","보석이 부족합니다."));
- let i=AG.getText("GAME_283","##보석을 소모하여 무한 랭킹전 티켓을 1장 구매하시겠습니까?");
- dK.getInstance().show(i.replace("##",String(t)),this.buyTitcket.bind(this))}
- async buyTitcket(){
- if(1==this.requestPending2)return;
- this.setRequestPending2(!0);
- const t=await hD.getInstance().pvp.buyTicket(1,!0);
- if(0==t.success)return mG.getInstance().showError(t),void this.setRequestPending2(!1);
- !1!==t.success?(this.userPvp=t.body.userPvp,this.updateInfoLabels(),"gem"in t.body&&(_L.gem=t.body.gem,UV.getInstance().updateGem()),this.setRequestPending2(!1)):mG.getInstance().showError(t)}
- showSettlement(){
- this.lblSettlement.text=`${
- AG.getText("GAME_103","정산 시간입니다.")}
-  (23:00 ~ 23:59 UTC)`,this.lblSettlement.x=.5*(620-this.lblSettlement.width),this.lblSettlement.visible=!0,this.opponentList.dataProvider=[],this.btnRefreshOppo.activated=!1}
- hideSettlement(){
- this.lblSettlement.visible=!1}
- getGradeText(t){
- return["","C","B","A","S"][t]??""}
- updateInfoLabels(){
- if(!this.pvpInfo||!this.userPvp)return;
- let t="";
- t+=AG.getText("GAME_76","무한 랭킹전"),t+=" ( "+AG.getText("GAME_276","제 ##회 @@일차").replace("##",this.pvpInfo.episode.toString()).replace("@@",this.pvpInfo.round.toString())+" ) ",t+=` [ ${
- AG.getText("GAME_138","## 리그").replace("##",this.getGradeText(this.userPvp.grade))}
-  ]`,mnt.getInstance().updateTitle(t);
- const i=this.userPvp.rank??"";
- this.lblPoint.text=AG.getText("COMMON_37","점수")+`: ${
- this.userPvp.point.toLocaleString()}
- `+(i?` (${
- AG.getText("GAME_97","##위").replace("##",String(i))}
- )`:""),this.lblTicket.text=`${
- this.userPvp.ticket}
- /${
- this.userPvp.maxTicket}
- `;
- const s=this.getTicketCost();
- this.btnBuyTicket.iconText=String(s),this.updateButtonLabels(),this.updateRefreshInfo()}
- updateRefreshInfo(){
- var t;
- const i=(null==(t=this.userPvp)?void 0:t.refreshCount)||0;
- i<5?(this.btnRefreshOppo.showIconLabel=!0,this.btnRefreshOppo.showTextLabel=!0,this.btnRefreshOppo.iconLabel.iconScale=.8,this.btnRefreshOppo.iconLabel.iconHidden=!0,this.btnRefreshOppo.iconText=`${
- AG.getText("COMMON_16","무료")}
-  ${
- 5-i}
- /5`,this.btnRefreshOppo.text=AG.getText("COMMON_60","새로고침")):(this.btnRefreshOppo.showIconLabel=!0,this.btnRefreshOppo.showTextLabel=!0,this.btnRefreshOppo.iconLabel.iconScale=.8,this.btnRefreshOppo.iconLabel.iconHidden=!1,this.btnRefreshOppo.iconText="100",this.btnRefreshOppo.text=AG.getText("COMMON_60","새로고침")),this.btnRefreshOppo.activated=!0}
- startTimer(){
- this.timerRunning||(this.timerRunning=!0,this.timerUpdateCount=0,this.rechargeTime=Number(EL.getInstance().getClientData("PVP_TICKET_CHARGE_TIME")),this.updateTimer(),GM.getInstance().add(this.updateTimer,this))}
- stopTimer(){
- this.timerRunning&&(this.timerRunning=!1,GM.getInstance().remove(this.updateTimer,this))}
- updateTimer(){
- if(++this.timerUpdateCount<30)return;
- if(null==this.parent)return void this.stopTimer();
- if(this.timerUpdateCount=0,!this.userPvp)return;
- if(this.userPvp.ticket>=this.userPvp.maxTicket)return void(this.lblTimer.text=AG.getText("GAME_105","충전 완료"));
- const t=ix.time;
- if(t<=0)return;
- const i=new Date(this.userPvp.ticketTime).getTime()+60*this.rechargeTime*1e3-t;
- if(i<=0)return void(this.lblTimer.text=AG.getText("GAME_107","충전 중"));
- const s=Math.floor(i/6e4),e=Math.floor(i%6e4/1e3),n=s.toString().padStart(2,"0"),h=e.toString().padStart(2,"0");
- this.lblTimer.text=`${
- n}
- :${
- h}
- `}
- parseTeamData(t,i,s){
- if(i.length=0,s.length=0,t)for(const e of t.split("|")){
- const[t,n]=e.split("-").map(Number);
- i.push(t),s.push(n)}
- }
- }
- ;
- Kt(Fet,"PVPBattleSubView"),zt(Fet,"instance"),zt(Fet,"LOAD_COOLDOWN",18e4);
- let Het=Fet;
- const Wet=class t extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"btnClose",new L6),zt(this,"vsImage",new We(ZA.getTexture("UI_Ekkorr","UI_VS"))),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20)),zt(this,"lblMyName",new YD("My Name",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMyRank",new YD("My Rank",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMyPoint",new YD("My Point",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMyStats",new YD("My Stats",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMyWave",new YD("My Wave",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpName",new YD("Op Name",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpRank",new YD("Op Rank",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpPoint",new YD("Op Point",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpStats",new YD("Op Stats",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblOpWave",new YD("Op Wave",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHelp",new YD("Op Wave",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_16)),zt(this,"myIconBtns"),zt(this,"opIconBtns"),zt(this,"btnFight",new QL("전투")),zt(this,"requestPending",!1),zt(this,"pvpInfo"),zt(this,"userPvp"),zt(this,"opInfo"),zt(this,"myKindNums",[]),zt(this,"myTrans",[]),zt(this,"opKindNums",[]),zt(this,"opTrans",[]),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
- ),this.addChild(this.bg),this.bg.width=640,this.bg.height=750-Xti.getInstance().height,this.lblTitle.text=AG.getText("GAME_76","무한 랭킹전"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.addChild(this.lblMyName,this.lblMyStats),this.addChild(this.lblOpName,this.lblOpStats,this.lblHelp),this.lblOpName.y=this.lblTitle.y+this.lblTitle.height+20,this.lblOpRank.y=this.lblOpName.y+this.lblOpName.height,this.lblOpPoint.y=this.lblOpRank.y,this.lblOpStats.y=this.lblOpName.y,this.lblOpWave.y=this.lblOpStats.y,this.opIconBtns=[];
- let t=this.lblTitle.x+20,i=this.lblOpStats.y+this.lblOpStats.height;
- for(let s=0;
- s<10;
- ++s){
- const e=new O4;
- e.scale=.9,e.x=t+s%5*e.width,e.y=i+Math.floor(s/5)*e.height,e.activated=!1,e.hidePlusIcon(),this.addChild(e),this.opIconBtns.push(e)}
- this.vsImage.scale=.8,this.vsImage.x=.5*(this.bg.width-this.vsImage.width),this.vsImage.y=300,this.addChild(this.vsImage),this.lblMyName.y=this.vsImage.y+this.vsImage.height+15,this.lblMyRank.y=this.lblMyName.y+this.lblMyName.height,this.lblMyPoint.y=this.lblMyRank.y,this.lblMyStats.y=this.lblMyName.y,this.lblMyWave.y=this.lblMyStats.y,this.myIconBtns=[],i=this.lblMyStats.y+this.lblMyStats.height;
- for(let s=0;
- s<10;
- ++s){
- const e=new O4;
- e.scale=.9,e.x=t+s%5*e.width,e.y=i+Math.floor(s/5)*e.height,e.onClick=this.onClickMyHero.bind(this),this.addChild(e),this.myIconBtns.push(e)}
- this.y=KA.safeHeight-this.bg.height-Xti.getInstance().height,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.hide.bind(this),this.addChild(this.btnClose),this.btnFight.color=QL.RED,this.btnFight.width=200,this.btnFight.height=45,this.btnFight.x=.5*(this.bg.width-this.btnFight.width),this.btnFight.y=610,this.btnFight.onClick=this.onStartBattle.bind(this),this.addChild(this.btnFight),this.lblHelp.text=AG.getText("GAME_399","무한랭킹전에서 영웅은 기사단 레벨로 전투합니다."),this.lblHelp.x=.5*(this.bg.width-this.lblHelp.width),this.lblHelp.y=this.btnFight.y-this.lblHelp.height-10,this.addChild(this.lblHelp),this.updateLayout(),this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onClickMyHero(t){
- zet.getInstance().setData(this.pvpInfo.team,t),zet.getInstance().show()}
- async onStartBattle(){
- if(!this.userPvp)return;
- if(this.userPvp.ticket<=0)return void mG.getInstance().show(AG.getText("GAME_275","티켓이 부족합니다."));
- const t=Uet.getInstance();
- t.setData(this.pvpInfo,this.userPvp,this.opInfo),t.show()}
- onPVP(){
- mnt.getInstance().hideAllPvPPopups(),Pet.getInstance().setMatchData({
- episode:this.pvpInfo.episode,dayNum:this.pvpInfo.round,league:this.getGradeText(this.userPvp.grade),myName:_L.name,myRank:this.userPvp.rank,myScore:this.userPvp.point,myWin:this.userPvp.win,myLose:this.userPvp.lose,enemyName:this.opInfo.name,enemyRank:this.opInfo.rank,enemyScore:this.opInfo.point,enemyWin:this.opInfo.win,enemyLose:Number(this.opInfo.total)-Number(this.opInfo.win)}
- ),Get.getInstance().startMarchBattle(this.myKindNums,this.myTrans,this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100))}
- setRequestPending(t){
- this.requestPending=t}
- updateLayout(){
- this.lblMyName.x=this.lblTitle.x+25,this.lblMyRank.x=this.lblMyName.x,this.lblMyPoint.x=120,this.lblMyStats.x=this.width-this.lblMyStats.width-50,this.lblMyWave.x=400,this.lblOpName.x=this.lblMyName.x,this.lblOpRank.x=this.lblMyRank.x,this.lblOpPoint.x=this.lblMyPoint.x,this.lblOpStats.x=this.width-this.lblMyStats.width-50,this.lblOpWave.x=this.lblMyWave.x}
- updateLanguage(){
- let t="";
- t+=AG.getText("GAME_76","무한 랭킹전"),t+=" ( "+AG.getText("GAME_276","제 ##회 @@일차").replace("##",this.pvpInfo.episode.toString()).replace("@@",this.pvpInfo.round.toString())+" ) ",t+=` [ ${
- AG.getText("GAME_138","## 리그").replace("##",this.getGradeText(this.userPvp.grade))}
-  ]`,this.lblTitle.text=t,this.lblHelp.text=AG.getText("GAME_399","무한랭킹전에서 영웅은 기사단 레벨로 전투합니다."),this.lblHelp.x=.5*(this.bg.width-this.lblHelp.width)}
- setData(t,i,s){
- this.pvpInfo=t,this.userPvp=i,this.opInfo=s,this.updateInfo(),this.updateLanguage(),this.updateLayout()}
- updateInfo(){
- const t=AG.getText("GAME_97","##위").replace("##",this.userPvp.rank),i=AG.getText("COMMON_37","점수")+` : ${
- this.userPvp.point.toLocaleString()}
- `;
- this.lblMyName.text=`[${
- t}
- ] ${
- _L.name}
-  (${
- i}
- )`;
- let s=AG.getText("GAME_278","##전-@@승-$$패"),e=Number(this.userPvp.total)-Number(this.userPvp.win);
- this.lblMyStats.text=s.replace("##",this.userPvp.total.toString()).replace("@@",this.userPvp.win.toString()).replace("$$",e.toString()),this.updateMyTeam();
- const n=AG.getText("GAME_97","##위").replace("##",this.opInfo.rank),h=AG.getText("COMMON_37","점수")+` : ${
- this.opInfo.point.toLocaleString()}
- `;
- let r,o;
- this.lblOpName.text=`[${
- n}
- ] ${
- this.opInfo.name}
-  (${
- h}
- )`,e=Number(this.opInfo.total)-Number(this.opInfo.win),this.lblOpStats.text=s.replace("##",this.opInfo.total.toString()).replace("@@",this.opInfo.win.toString()).replace("$$",e.toString()),this.opKindNums=[],this.opTrans=[],this.parseTeamData(this.opInfo.team,this.opKindNums,this.opTrans);
- let a=this.opKindNums.length;
- for(let c=0;
- c<10;
- ++c)r=this.opIconBtns[c],o=yx.getVO(),c<a?(o.kindNum=this.opKindNums[c],o.trans=this.opTrans[c],o.level=Math.floor(this.opInfo.maxWave/100),r.setDataWith(c,o),r.setAlphaToFrame(1)):(o.kindNum=-1,r.setDataWith(c,o),r.setAlphaToFrame(.3))}
- updateMyTeam(){
- let t,i;
- this.myKindNums=[],this.myTrans=[],this.parseTeamData(this.pvpInfo.team,this.myKindNums,this.myTrans);
- let s=this.myKindNums.length;
- for(let e=0;
- e<10;
- ++e)t=this.myIconBtns[e],i=yx.getVO(),e<s?(i.kindNum=this.myKindNums[e],i.trans=this.myTrans[e],i.level=Math.floor(_L.maxWave/100),t.setDataWith(e,i),t.setAlphaToFrame(1)):(i.kindNum=-1,t.setDataWith(e,i),t.setAlphaToFrame(.3))}
- parseTeamData(t,i,s){
- if(i.length=0,s.length=0,t)for(const e of t.split("|")){
- const[t,n]=e.split("-").map(Number);
- i.push(t),s.push(n)}
- }
- show(){
- LV.getInstance().addChild(this)}
- hide(){
- mnt.getInstance().addResourceInfo(),null!=this.parent&&this.parent.removeChild(this)}
- onAdded(){
- this.addResourceInfo()}
- onRemoved(){
- UV.ensureMounted(S4.getInstance())}
- addResourceInfo(){
- this.addChild(UV.getInstance()),this.addChild(E4.getInstance())}
- getGradeText(t){
- return["","C","B","A","S"][t]??""}
- }
- ;
- Kt(Wet,"PVPReadyPopup"),zt(Wet,"_instance");
- let jet=Wet;
- const $et=class extends XI{
- constructor(){
- let t;
- super(),zt(this,"bg"),zt(this,"icons"),zt(this,"posList",[0,1,2,3,4,640]),zt(this,"pvos",[]),this.bg=new We(ZA.getTexture("UI_Ekkorr","blackRect")),this.bg.alpha=.1,this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icons=[];
- for(let i=0;
- i<5;
- ++i)t=new O4,t.setMode(mK.HERO_PVP),t.scale=.9,t.x=30+i*t.width,this.addChild(t),this.icons.push(t),this.posList[i]=t.x;
- this.posList.push(640)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- setData(t){
- let i;
- this.pvos=t;
- const s=this.pvos.length;
- for(let e=0;
- e<this.icons.length;
- ++e)i=this.icons[e],e<s?(i.setDataWith(e,this.pvos[e].vo),i.visible=!0,i.hideLevel(),-1==this.pvos[e].vo.kindNum?i.hidePlusIcon():i.setNumber(this.pvos[e].count)):i.visible=!1}
- onClick(t,i){
- this.pvos.length;
- let s=-1;
- for(let e=0;
- e<this.icons.length;
- ++e)if(t>this.posList[e]&&t<this.posList[e+1]){
- s=e;
- break}
- -1!=s&&s<this.pvos.length&&zet.getInstance().addHero(this.pvos[s].vo)}
- }
- ;
- Kt($et,"PvPHeroSelectItemRenderer");
- let Vet=$et;
- const Ket=class t extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"btnClose",new L6),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20)),zt(this,"myIconBtns"),zt(this,"lblOwn",new YD("보유",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"filterIcons"),zt(this,"list"),zt(this,"myTeam"),zt(this,"arrKindNums",[]),zt(this,"arrTransList",[]),zt(this,"allHeroList",[]),zt(this,"allHeroObj",new Map),zt(this,"_selectedIndex",0),zt(this,"newMyTeamList"),zt(this,"orgMyTeamList"),zt(this,"_selectedTribes",[1,2,3,4]),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
- ),this.addChild(this.bg),this.bg.width=640,this.bg.height=750-Xti.getInstance().height,this.lblTitle.text=AG.getText("GAME_76","무한 랭킹전"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.myIconBtns=[];
- let t,i=this.lblTitle.x+20,s=this.lblTitle.y+this.lblTitle.height+20;
- for(let e=0;
- e<10;
- ++e){
- const t=new O4;
- t.scale=.9,t.x=i+e%5*t.width,t.y=s+Math.floor(e/5)*t.height,t.onClick=this.onClickMyHero.bind(this),this.addChild(t),this.myIconBtns.push(t)}
- this.lblOwn.x=i,this.lblOwn.y=260,this.addChild(this.lblOwn),this.y=KA.safeHeight-this.bg.height-Xti.getInstance().height,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.hide.bind(this),this.addChild(this.btnClose),this.filterIcons=[];
- for(let e=0;
- e<4;
- ++e)t=new g9(e),t.scale=.8,this.addChild(t),this.filterIcons.push(t),t.onClick=this.onFilterIconClick.bind(this);
- this.list=new zI(Vet,630,500),this.addChild(this.list),this.updateLayout(),this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateLayout(){
- this.list.x=5,this.list.y=this.lblOwn.y+this.lblOwn.height+5,this.list.setListHeight(this.bg.height-this.list.y-15);
- let t,i=this.lblOwn.y+.5*this.lblOwn.height-5,s=this.bg.width+.5*this.filterIcons[0].width-50;
- for(let e=this.filterIcons.length-1;
- e>-1;
- --e)t=this.filterIcons[e],t.x=s-t.width-1,t.y=i,s=t.x}
- updateLanguage(){
- this.lblTitle.text=AG.getText("팀편성","팀편성"),this.lblOwn.text=AG.getText("COMMON_11","보유")}
- setData(t,i){
- this.myTeam=t,this.orgMyTeamList=t?t.split("|"):[],this._selectedTribes=[1,2,3,4],this.filterIcons.forEach(t=>{
- t.selected=!0}
- ),this.arrKindNums=[],this.arrTransList=[],this.parseTeamData(this.myTeam,this.arrKindNums,this.arrTransList),this.updateHeroIcons(),this.updateList(),this.selectedIndex=i,this.updateLanguage(),this.updateLayout()}
- updateHeroIcons(){
- let t,i,s=this.arrKindNums.length;
- for(let e=0;
- e<10;
- ++e)t=this.myIconBtns[e],t.selected=!1,i=yx.getVO(),e<s?(i.kindNum=this.arrKindNums[e],i.trans=this.arrTransList[e],i.level=Math.floor(_L.maxWave/100),t.setDataWith(e,i),t.setAlphaToFrame(1)):(i.kindNum=-1,t.setDataWith(e,i),t.setAlphaToFrame(.3))}
- parseTeamData(t,i,s){
- if(i.length=0,s.length=0,t)for(const e of t.split("|")){
- const[t,n]=e.split("-").map(Number);
- i.push(t),s.push(n)}
- }
- getAllHeroList(){
- let t;
- this.allHeroList=[],this.allHeroObj.clear();
- let i,s=vx.getInstance().list.length;
- for(let e=0;
- e<s;
- e++){
- t=vx.getInstance().list[e];
- let i=`${
- t.kindNum}
- -${
- t.trans}
- `,s=this.allHeroObj.get(i);
- s?s.count++:(s=new Xet,s.vo.kindNum=t.kindNum,s.vo.trans=t.trans,s.vo.level=Math.floor(_L.maxWave/100),s.count=1,this.allHeroList.push(s),this.allHeroObj.set(i,s))}
- s=vx.getInstance().ownedUnitList.length;
- for(let e=0;
- e<s;
- e++){
- i=vx.getInstance().ownedUnitList[e];
- for(let t=0;
- t<4;
- t++){
- let s=0==t?i.count:i.trans[t-1];
- if(s>0){
- let e=`${
- i.kindNum}
- -${
- t}
- `,n=this.allHeroObj.get(e);
- n?n.count+=s:(n=new Xet,n.vo.kindNum=i.kindNum,n.vo.trans=t,n.vo.level=Math.floor(_L.maxWave/100),n.count=s,this.allHeroList.push(n),this.allHeroObj.set(e,n))}
- }
- }
- }
- updateList(){
- let t=[];
- this.getAllHeroList();
- let i=this.arrKindNums.length;
- for(let e=0;
- e<i;
- e++){
- let t=`${
- this.arrKindNums[e]}
- -${
- this.arrTransList[e]}
- `,i=this.allHeroObj.get(t);
- i&&i.count--}
- i=this.allHeroList.length;
- for(let e=0;
- e<i;
- e++){
- let i=this.allHeroList[e];
- 0!=this._selectedTribes.includes(i.vo.tribe)&&(i.count<1||t.push(i))}
- t.sort((t,i)=>t.vo.enhance!==i.vo.enhance?i.vo.enhance-t.vo.enhance:t.vo.level!==i.vo.level?i.vo.level-t.vo.level:t.vo.grade!==i.vo.grade?i.vo.grade-t.vo.grade:t.vo.tribe-i.vo.tribe);
- let s=new Xet;
- s.vo.kindNum=-1,t.unshift(s),this.list.dataProvider=ZI.chunkArray(t,5)}
- set selectedIndex(t){
- this.myIconBtns.forEach(t=>{
- t.selected=!1}
- ),t>=9?t=9:t>this.arrKindNums.length&&(t=this.arrKindNums.length),this._selectedIndex=t,t>=0&&(this.myIconBtns[t].selected=!0)}
- get selectedIndex(){
- return this._selectedIndex}
- onClickMyHero(t){
- this.selectedIndex!=t?-1!=this.selectedIndex?this.selectedIndex!=t&&(this.selectedIndex<this.arrKindNums.length&&t<this.arrKindNums.length&&([this.arrKindNums[this.selectedIndex],this.arrKindNums[t]]=[this.arrKindNums[t],this.arrKindNums[this.selectedIndex]],[this.arrTransList[this.selectedIndex],this.arrTransList[t]]=[this.arrTransList[t],this.arrTransList[this.selectedIndex]],this.updateHeroIcons()),this.selectedIndex=t):this.selectedIndex=t:this.selectedIndex=-1}
- addHero(t){
- -1!=this.selectedIndex&&(-1==t.kindNum?this.selectedIndex<this.arrKindNums.length&&(this.arrKindNums.splice(this.selectedIndex,1),this.arrTransList.splice(this.selectedIndex,1)):this.selectedIndex<this.arrKindNums.length?(this.arrKindNums[this.selectedIndex]=t.kindNum,this.arrTransList[this.selectedIndex]=t.trans):this.arrKindNums.length<10&&(this.arrKindNums.push(t.kindNum),this.arrTransList.push(t.trans)),this.updateHeroIcons(),this.updateList(),-1==t.kindNum?this.selectedIndex=this.selectedIndex:this.selectedIndex++)}
- teamChanged(){
- if(null==this.orgMyTeamList)return!1;
- this.newMyTeamList=[];
- for(let i=0;
- i<this.arrKindNums.length;
- i++)this.newMyTeamList.push(this.arrKindNums[i]+"-"+this.arrTransList[i]);
- const t=this.orgMyTeamList.length;
- if(t!=this.newMyTeamList.length)return!0;
- for(let i=0;
- i<t;
- i++)if(this.orgMyTeamList[i]!=this.newMyTeamList[i])return!0;
- return!1}
- getMyTeamStr(){
- return this.newMyTeamList.join("|")}
- onFilterIconClick(t,i){
- this._selectedTribes.length=0;
- const s=this.filterIcons.length;
- for(let e=0;
- e<s;
- ++e)this.filterIcons[e].selected&&this._selectedTribes.push(e+1);
- this.updateList()}
- show(){
- LV.getInstance().addChild(this)}
- async hide(t=!0){
- if(t&&this.teamChanged()){
- if(0==this.arrKindNums.length){
- const t=AG.getText("병사를 배치해야 합니다.","병사를 배치해야 합니다.");
- return void mG.getInstance().show(t)}
- const t=await hD.getInstance().pvp.updateTeam(this.getMyTeamStr(),!0);
- if(!1===t.success)return void mG.getInstance().showError(t);
- jet.getInstance().pvpInfo.team=t.body,jet.getInstance().updateMyTeam()}
- jet.getInstance().addResourceInfo(),null!=this.parent&&this.parent.removeChild(this)}
- onAdded(){
- this.addResourceInfo()}
- addResourceInfo(){
- this.addChild(UV.getInstance()),this.addChild(E4.getInstance())}
- onRemoved(){
- UV.ensureMounted(S4.getInstance())}
- }
- ;
- Kt(Ket,"PVPHeroSelectPopup"),zt(Ket,"_instance");
- let zet=Ket;
- const qet=class{
- constructor(){
- zt(this,"vo",yx.getVO()),zt(this,"count",0)}
- }
- ;
- Kt(qet,"PvPUnitVO");
- let Xet=qet;
- const Yet=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblResult",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblPoint",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblType",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg);
- const t=.5*(this.bg.height-this.lblResult.height);
- this.lblResult.wordWrap=!0,this.lblResult.wordWrapWidth=100,this.lblResult.align="center",this.lblResult.x=35,this.lblResult.y=t,this.addChild(this.lblResult),this.lblPoint.x=140,this.lblPoint.y=t,this.addChild(this.lblPoint),this.lblType.x=240,this.lblType.y=t,this.addChild(this.lblType),this.lblName.x=360,this.lblName.y=t,this.addChild(this.lblName)}
- setData(t){
- this.data=t,t.win?(this.lblResult.text=AG.getText("COMMON_380","승리"),this.lblResult.textColor=aD.COLOR_DEEP_SKYBLUE):(this.lblResult.text=AG.getText("COMMON_381","패배"),this.lblResult.textColor=aD.COLOR_RED),this.lblResult.x=5+.5*(100-this.lblResult.width),this.lblResult.y=.5*(this.bg.height-this.lblResult.height);
- const i=t.gainPoint>=0?"+":"";
- this.lblPoint.text=`${
- i}
- ${
- t.gainPoint}
- `,this.lblPoint.textColor=t.gainPoint>=0?aD.COLOR_YELLOW:aD.COLOR_RED,this.lblType.text=t.attack?AG.getText("COMMON_382","공격"):AG.getText("COMMON_383","방어"),this.lblName.text=t.name||""}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(Yet,"PVPHistoryItemRenderer");
- let Jet=Yet;
- const Qet=class t extends Be{
- constructor(){
- super(),zt(this,"lblTitle",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblHdrResult",new YD("승패",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrPoint",new YD("점수",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrType",new YD("공/방",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrName",new YD("상대",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"list"),zt(this,"lblEmpty",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.lblTitle.y=5,this.addChild(this.lblTitle),this.lblHdrResult.align="center",this.lblHdrResult.x=35,this.lblHdrResult.y=35,this.addChild(this.lblHdrResult),this.lblHdrPoint.x=145,this.lblHdrPoint.y=35,this.addChild(this.lblHdrPoint),this.lblHdrType.x=235,this.lblHdrType.y=35,this.addChild(this.lblHdrType),this.lblHdrName.x=365,this.lblHdrName.y=35,this.addChild(this.lblHdrName),aD.setLabelWrapWidth(this.lblHdrResult,100),aD.setLabelWrapWidth(this.lblHdrPoint,140),aD.setLabelWrapWidth(this.lblHdrType,120),aD.setLabelWrapWidth(this.lblHdrName,230);
- const t=mnt.getInstance().listHeight-35-10;
- this.list=new zI(Jet,620,t-40),this.list.x=0,this.addChild(this.list),this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty),this.updateLanguage(),this.updateLayout()}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- updateLayout(){
- this.lblTitle.x=.5*(620-this.lblTitle.width);
- let t=0;
- const i=[this.lblHdrResult,this.lblHdrPoint,this.lblHdrType,this.lblHdrName],s=i.length;
- for(let n=0;
- n<s;
- ++n)t=Math.max(t,i[n].height);
- this.list.y=i[0].y+t+5,this.lblHdrResult.x=5+.5*(100-this.lblHdrResult.width),this.lblHdrPoint.x=140+.5*(30-this.lblHdrPoint.width),this.lblHdrType.x=240+.5*(60-this.lblHdrType.width);
- const e=mnt.getInstance().listHeight-this.list.y;
- this.list.setListHeight(e)}
- setData(){
- this.loadHistory(),this.updateLanguage(),this.updateLayout()}
- async loadHistory(){
- const t=await hD.getInstance().pvp.getBattleHistory(!0);
- if(!1===t.success)return void mG.getInstance().showError(t);
- const i=t.body||[];
- 0===i.length?(this.list.dataProvider=[],this.lblEmpty.visible=!0):(this.lblEmpty.visible=!1,this.list.dataProvider=i)}
- updateLanguage(){
- this.lblTitle.text=AG.getText("GAME_110","전투기록"),this.lblHdrResult.text=AG.getText("GAME_116","승패"),this.lblHdrPoint.text=AG.getText("COMMON_37","점수"),this.lblHdrType.text=AG.getText("GAME_112","공/방"),this.lblHdrName.text=AG.getText("GAME_113","상대"),this.lblEmpty.text=AG.getText("GAME_111","전투 기록이 없습니다."),this.lblEmpty.x=.5*(620-this.lblEmpty.width)}
- }
- ;
- Kt(Qet,"PVPHistorySubView"),zt(Qet,"instance");
- let Zet=Qet;
- const tnt=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblEpisode",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblName",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblPoint",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblRecord",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg);
- const t=.5*(this.bg.height-this.lblEpisode.height);
- this.lblEpisode.x=45,this.lblEpisode.y=t,this.addChild(this.lblEpisode),this.lblName.x=115,this.lblName.y=t,this.addChild(this.lblName),this.lblPoint.x=360,this.lblPoint.y=t,this.addChild(this.lblPoint),this.lblRecord.x=500,this.lblRecord.y=t,this.addChild(this.lblRecord),aD.setLabelWrapWidth(this.lblRecord,this.bg.x+this.bg.width-this.lblRecord.x)}
- setData(t){
- this.data=t,this.lblEpisode.text=AG.getValueReplace("GAME_95","##",t.episode,`${
- t.episode}
- 회`),this.lblEpisode.textColor=aD.COLOR_YELLOW,this.lblName.text=t.name||"",this.lblPoint.text=`${
- t.point.toLocaleString()}
- `,this.lblRecord.text=AG.getValueReplaceMulti("GAME_96",["##","@@"],[t.total,t.win],`${
- t.total}
- 전 ${
- t.win}
- 승`),this.lblRecord.y=.5*(this.bg.height-this.lblRecord.height)}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(tnt,"PVPHOFItemRenderer");
- let int=tnt;
- const snt=class t extends Be{
- constructor(){
- super(),zt(this,"lblTitle",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblHdrEpisode",new YD("회차",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrName",new YD("닉네임",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrPoint",new YD("점수",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrRecord",new YD("전적",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"currentPage",0),zt(this,"totalHOFs",0),zt(this,"btnPrevPage"),zt(this,"btnNextPage"),zt(this,"lblPage"),zt(this,"list"),zt(this,"loadEpisode",0),zt(this,"mapDataList",new Map),zt(this,"dataList"),this.lblTitle.y=5,this.addChild(this.lblTitle),this.lblHdrEpisode.x=25,this.lblHdrEpisode.y=35,this.addChild(this.lblHdrEpisode),this.lblHdrName.x=115,this.lblHdrName.y=35,this.addChild(this.lblHdrName),this.lblHdrPoint.x=365,this.lblHdrPoint.y=35,this.addChild(this.lblHdrPoint),this.lblHdrRecord.x=505,this.lblHdrRecord.y=35,this.addChild(this.lblHdrRecord),aD.setLabelWrapWidth(this.lblHdrEpisode,90),aD.setLabelWrapWidth(this.lblHdrName,210),aD.setLabelWrapWidth(this.lblHdrPoint,140),aD.setLabelWrapWidth(this.lblHdrRecord,150),this.btnPrevPage=new dV("left"),this.btnPrevPage.onClick=()=>{
- this.gotoPage(this.currentPage-1)}
- ,this.addChild(this.btnPrevPage),this.lblPage=new YD("1/1",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18),this.addChild(this.lblPage),this.btnNextPage=new dV("right"),this.btnNextPage.onClick=()=>{
- this.gotoPage(this.currentPage+1)}
- ,this.addChild(this.btnNextPage),this.list=new zI(int,620,470),this.list.x=0,this.addChild(this.list),this.updateLanguage(),this.updateLayout()}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- gotoPage(i){
- const s=this.totalHOFs,e=Math.max(1,Math.ceil(s/t.PAGE_SIZE)),n=Math.max(0,Math.min(i,e-1));
- n!==this.currentPage&&(this.currentPage=n,this.setData())}
- setPageInfo(t,i){
- const s=i>1;
- if(this.btnPrevPage.visible=s,this.btnNextPage.visible=s,this.lblPage.visible=s,!s)return;
- this.lblPage.text=`${
- t+1}
-  / ${
- i}
- `;
- const e=this.lblTitle.y+.5*this.lblTitle.height;
- this.btnPrevPage.x=this.list.x,this.btnPrevPage.y=e-.5*this.btnPrevPage.height,this.lblPage.x=this.btnPrevPage.x+this.btnPrevPage.width+8,this.lblPage.y=e-.5*this.lblPage.height,this.btnNextPage.x=this.lblPage.x+this.lblPage.width+8,this.btnNextPage.y=e-.5*this.btnNextPage.height,this.btnPrevPage.alpha=t<=0?.7:1,this.btnNextPage.alpha=t>=i-1?.7:1}
- updateLayout(){
- this.lblTitle.x=.5*(620-this.lblTitle.width);
- let t=0;
- const i=[this.lblHdrEpisode,this.lblHdrName,this.lblHdrPoint,this.lblHdrRecord],s=i.length;
- for(let n=0;
- n<s;
- ++n)t=Math.max(t,i[n].height);
- this.list.y=i[0].y+t+5,this.lblHdrEpisode.x=50+.5*(20-this.lblHdrEpisode.width),this.lblHdrPoint.x=360+.5*(40-this.lblHdrPoint.width),this.lblHdrRecord.x=500+.5*(50-this.lblHdrRecord.width);
- const e=mnt.getInstance().listHeight-this.list.y;
- this.list.setListHeight(e)}
- async setData(i=!1){
- Het.getInstance().pvpInfo&&this.loadEpisode!=Number(Het.getInstance().pvpInfo.episode)&&this.mapDataList.clear(),!i&&this.mapDataList.get(this.currentPage)||await this.loadHOF(),this.dataList=this.mapDataList.get(this.currentPage)??[],this.list.dataProvider=this.dataList,this.list.scrollTo(0),this.updateLanguage(),this.updateLayout();
- const s=Math.max(1,Math.ceil(this.totalHOFs/t.PAGE_SIZE));
- this.setPageInfo(this.currentPage,s)}
- async loadHOF(){
- const t=await hD.getInstance().pvp.getHOF(this.currentPage+1,!0);
- !1!==t.success?(0==this.currentPage&&(this.loadEpisode=Number(Het.getInstance().pvpInfo.episode)??0),this.totalHOFs=t.body.total??0,this.mapDataList.set(this.currentPage,t.body.list||[])):mG.getInstance().showError(t)}
- updateLanguage(){
- this.lblTitle.text=AG.getText("GAME_109","명예의 전당"),this.lblHdrEpisode.text=AG.getText("GAME_114","회차"),this.lblHdrName.text=AG.getText("COMMON_58","닉네임"),this.lblHdrPoint.text=AG.getText("COMMON_37","점수"),this.lblHdrRecord.text=AG.getText("GAME_115","전적")}
- }
- ;
- Kt(snt,"PVPHOFSubView"),zt(snt,"instance"),zt(snt,"PAGE_SIZE",20);
- let ent=snt;
- const nnt=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblRank",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblRecord",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblPoint",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),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)}
- setData(t){
- this.data=t,this.lblRank.text=t.rank?`${
- t.rank}
- `:"-",this.lblName.text=t.name,this.lblRecord.text=`${
- t.win}
- W / ${
- t.total-t.win}
- L`,this.lblPoint.text=`${
- t.point.toLocaleString()}
- `,this.lblRecord.x=427.5-.5*this.lblRecord.width,this.lblPoint.x=this.bg.width-47.5-.5*this.lblPoint.width,t.name===_L.name?(this.lblName.textColor=aD.COLOR_YELLOW,this.lblRank.textColor=aD.COLOR_YELLOW):(this.lblName.textColor=16777215,this.lblRank.textColor=16777215)}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(nnt,"PVPRankItemRenderer");
- let hnt=nnt;
- const rnt=class t extends Be{
- constructor(){
- super(),zt(this,"lblTitle",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblHdrResult",new YD("승패",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrPoint",new YD("점수",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrType",new YD("공/방",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrName",new YD("상대",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"rankList"),zt(this,"lblMyRank",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"myRankItem"),this.lblHdrResult.x=40,this.lblHdrResult.y=5,this.addChild(this.lblHdrResult),this.lblHdrPoint.x=112,this.lblHdrPoint.y=5,this.addChild(this.lblHdrPoint),this.lblHdrType.x=410,this.lblHdrType.y=5,this.addChild(this.lblHdrType),this.lblHdrName.x=545,this.lblHdrName.y=5,this.addChild(this.lblHdrName),aD.setLabelWrapWidth(this.lblHdrResult,100),aD.setLabelWrapWidth(this.lblHdrPoint,140),aD.setLabelWrapWidth(this.lblHdrType,120),aD.setLabelWrapWidth(this.lblHdrName,230);
- const t=mnt.getInstance().listHeight-5-10-57;
- this.rankList=new zI(hnt,620,t),this.rankList.x=0,this.rankList.y=0,this.addChild(this.rankList),this.lblMyRank.x=5,this.lblMyRank.y=515,this.myRankItem=new hnt,this.myRankItem.x=.5*(620-this.myRankItem.width)-5,this.myRankItem.y=this.rankList.y+this.rankList.height+5,this.addChild(this.myRankItem)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- setData(){
- this.loadRank(),this.updateLanguage(),this.updateLayout()}
- updateLayout(){
- let t=0;
- const i=[this.lblHdrResult,this.lblHdrPoint,this.lblHdrType,this.lblHdrName],s=i.length;
- for(let n=0;
- n<s;
- ++n)t=Math.max(t,i[n].height);
- this.rankList.y=i[0].y+t+5,this.lblHdrResult.x=45+.5*(20-this.lblHdrResult.width),this.lblHdrType.x=410+.5*(30-this.lblHdrType.width),this.lblHdrName.x=545+.5*(30-this.lblHdrName.width);
- const e=mnt.getInstance().listHeight-t-10-57;
- this.rankList.setListHeight(e),this.myRankItem.y=this.rankList.y+this.rankList.height-10}
- updateLanguage(){
- this.lblHdrResult.text=AG.getText("COMMON_20","랭킹"),this.lblHdrPoint.text=AG.getText("COMMON_58","닉네임"),this.lblHdrType.text=AG.getText("GAME_115","전적"),this.lblHdrName.text=AG.getText("COMMON_37","점수")}
- async loadRank(){
- await hD.getInstance().pvp.getInfo(!0);
- const t=await hD.getInstance().pvp.getRank(!0);
- if(!1===t.success)return void mG.getInstance().showError(t);
- const{
- rankList:i,myRankInfo:s}
- =t.body;
- if(this.rankList.dataProvider=i||[],s){
- const t=AG.getText("COMMON_374","내 순위"),i=AG.getValueReplace("GAME_97","##",s.rank,`${
- s.rank}
- 위`);
- this.lblMyRank.text=`${
- t}
- : ${
- i}
-  | ${
- s.point.toLocaleString()}
-  pt | ${
- s.win}
- W / ${
- s.total-s.win}
- L`,this.myRankItem.setData(s)}
- else this.lblMyRank.text=AG.getText("GAME_100","전적 없음"),this.myRankItem.setData({
- name:_L.name,win:0,total:0,point:0,rank:null}
- )}
- }
- ;
- Kt(rnt,"PVPRankSubView"),zt(rnt,"instance");
- let ont=rnt;
- const ant=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblRank",new YD("",aD.COLOR_BRIGHT_ORANGE,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"iconGem"),zt(this,"lblGem",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"iconMedal"),zt(this,"lblMedal",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=610,this.bg.height=48,this.bg.x=5,this.addChild(this.bg);
- const t=.5*(this.bg.height-this.lblRank.height);
- this.lblRank.x=20,this.lblRank.y=t,this.addChild(this.lblRank),this.iconGem=new We(ZA.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=22,this.iconGem.height=22,this.iconGem.x=234,this.iconGem.y=.5*(this.bg.height-22),this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+28,this.lblGem.y=t,this.addChild(this.lblGem),this.iconMedal=new We(ZA.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconMedal.width=22,this.iconMedal.height=22,this.iconMedal.x=420,this.iconMedal.y=.5*(this.bg.height-22),this.addChild(this.iconMedal),this.lblMedal.x=this.iconMedal.x+28,this.lblMedal.y=t,this.addChild(this.lblMedal)}
- setData(t){
- this.data=t,this.lblRank.text=this.getRankTexts(t),this.lblGem.text=String(t.gem),this.lblMedal.text=String(t.honorCoin),this.lblRank.x=10+.5*(80-this.lblRank.width)}
- getRankTexts(t){
- let i="";
- return"FIXED_RANK"==t.type?i=1==t.rank?AG.getValueReplace("GAME_97","##",1,"1위"):3==t.rank?AG.getValueReplaceMulti("GAME_98",["##","@@"],[2,3],"2~3위"):AG.getValueReplaceMulti("GAME_98",["##","@@"],[4,10],"4~10위"):10==t.rank?i=AG.getValueReplace("GAME_99","##",10,"상위 10%"):30==t.rank?i=AG.getValueReplace("GAME_99","##",30,"상위 30%"):50==t.rank?i=AG.getValueReplace("GAME_99","##",50,"상위 50%"):70==t.rank?i=AG.getValueReplace("GAME_99","##",70,"상위 70%"):100==t.rank&&(i=AG.getValueReplace("GAME_99","##",100,"상위 100%")),i}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(ant,"PVPRewardItemRenderer");
- let cnt=ant;
- const lnt=class t{
- constructor(){
- zt(this,"leagueRewards",{
- }
- ),zt(this,"initialized",!1)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- if(null!=t&&(this.leagueRewards={
- }
- ,t))for(let i=0;
- i<t.length;
- i++){
- t[i];
- for(const i of t)this.leagueRewards[i.gradeName]=i.rewards;
- this.initialized=!0}
- }
- }
- ;
- Kt(lnt,"PvPRewardDataManager"),zt(lnt,"instance");
- let unt=lnt;
- const dnt=["C","B","A","S"],fnt=class t extends Be{
- constructor(){
- super(),zt(this,"lblRulesTitle",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"ruleLines",[]),zt(this,"lblLeagueTitle",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrRank",new YD("등수",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrGem",new YD("보석",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblHdrMedal",new YD("명예코인",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"list"),zt(this,"leagueTabs",[]),zt(this,"currentLeague","S"),zt(this,"rules",["무한랭킹전은 4일 단위로 진행됩니다.","4개 등급(S, A, B, C 리그)으로 구분됩니다.","매일 정산 시 상위 50%는 상위 등급으로 승급합니다.","4일째 S-리그 우승자는 명예의 전당에 등록됩니다."]),this.addChild(this.lblRulesTitle);
- const t=this.rules.length;
- for(let n=0;
- n<t;
- ++n){
- const t=new YD("",13421772,aD.DEFAULT_DESC_FONT_OPTION_16);
- t.x=15,this.addChild(t),this.ruleLines.push(t),aD.setLabelWrapWidth(t,640-2*t.x)}
- this.addChild(this.lblLeagueTitle),this.lblHdrRank.x=25,this.addChild(this.lblHdrRank),this.lblHdrGem.x=250,this.addChild(this.lblHdrGem),this.lblHdrMedal.x=425,this.addChild(this.lblHdrMedal),this.list=new zI(cnt,620,310),this.list.x=0,this.addChild(this.list);
- let i=3;
- const s=dnt.length;
- for(let n=0;
- n<s;
- ++n){
- const t=new B6(`${
- dnt[n]}
-  리그`,145);
- t.width=152,t.x=i,t.onClick=()=>this.selectLeague(dnt[n]),this.addChild(t),this.leagueTabs.push(t),i+=155}
- this.updateLanguage(),this.updateLayout();
- const e=mnt.getInstance().listHeight-this.list.y-this.leagueTabs[0].height-20;
- this.list.setListHeight(e)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- updateLayout(){
- let t=5;
- const i=this.ruleLines.length;
- for(let o=0;
- o<i;
- ++o)this.ruleLines[o].y=t,t+=this.ruleLines[o].height;
- const s=t+12;
- this.lblLeagueTitle.y=s;
- const e=s+28;
- this.lblHdrRank.y=e,this.lblHdrGem.y=e,this.lblHdrMedal.y=e,this.list.y=e+25;
- const n=mnt.getInstance().listHeight-this.list.y-(this.leagueTabs[0].height+20);
- this.list.setListHeight(n);
- const h=this.list.y+this.list.height+10,r=dnt.length;
- for(let o=0;
- o<r;
- ++o)this.leagueTabs[o].y=h}
- async setData(){
- if(0==unt.getInstance().initialized){
- let t=await _D.getInstance().getBook(bD.PVP_RANK_REWARD);
- unt.getInstance().setBookData(t)}
- this.selectLeague("S"),this.updateLanguage(),this.updateLayout()}
- selectLeague(t){
- this.currentLeague=t;
- const i=dnt.indexOf(t);
- for(let e=0;
- e<this.leagueTabs.length;
- e++)this.leagueTabs[e].selected=e===i;
- this.lblLeagueTitle.text=AG.getValueReplace("GAME_137","##",t,`${
- t}
-  리그 보상`),this.lblLeagueTitle.x=.5*(620-this.lblLeagueTitle.width);
- const s=unt.getInstance().leagueRewards[t]||[];
- this.list.dataProvider=s}
- getRankTexts(){
- return[AG.getValueReplace("GAME_97","##",1,"1위"),AG.getValueReplaceMulti("GAME_98",["##","@@"],[2,3],"2~3위"),AG.getValueReplaceMulti("GAME_98",["##","@@"],[4,10],"4~10위"),AG.getValueReplace("GAME_99","##",10,"상위 10%"),AG.getValueReplace("GAME_99","##",30,"상위 30%"),AG.getValueReplace("GAME_99","##",50,"상위 50%"),AG.getValueReplace("GAME_99","##",70,"상위 70%")]}
- updateLanguage(){
- const t=["무한랭킹전은 4일 단위로 진행됩니다.","4개 등급(S, A, B, C 리그)으로 구분됩니다.","매일 정산 시 상위 50%는 상위 등급으로 승급합니다.","4일째 S-리그 우승자는 명예의 전당에 등록됩니다."],i=["GAME_131","GAME_132","GAME_133","GAME_134"],s=t.length;
- for(let n=0;
- n<s;
- ++n)this.ruleLines[n].text=AG.getText(i[n],t[n]);
- this.lblHdrRank.text=AG.getText("COMMON_388","등수"),this.lblHdrGem.text=AG.getText("COMMON_350","보석"),this.lblHdrMedal.text=AG.getText("GAME_88","명예코인");
- const e=this.leagueTabs.length;
- for(let n=0;
- n<e;
- ++n)this.leagueTabs[n].text=AG.getValueReplace("GAME_138","##",dnt[n],`${
- dnt[n]}
-  리그`)}
- }
- ;
- Kt(fnt,"PVPRewardSubView"),zt(fnt,"instance");
- let pnt=fnt;
- const gnt=class t extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"btnClose",new L6),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"tapBattle",new B6("대전",120)),zt(this,"tapRank",new B6("랭킹",120)),zt(this,"tapHistory",new B6("기록",120)),zt(this,"tapHOF",new B6("전당",120)),zt(this,"tapReward",new B6("보상",120)),zt(this,"tabs"),zt(this,"_currentSubView",null),zt(this,"subViewY",0),this.tabs=[this.tapBattle,this.tapRank,this.tapHistory,this.tapHOF,this.tapReward],this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
- ),this.addChild(this.bg),this.bg.width=640,this.y=Math.min(KA.safeHeight-750,KA.viewMainY),this.bg.height=KA.safeHeight-this.y-Xti.getInstance().height,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.onCloseBtnClick.bind(this),this.addChild(this.btnClose),this.lblTitle.text=AG.getText("GAME_76","무한 랭킹전"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.updateLayout(),this.tapBattle.onClick=()=>this.selectTab(0),this.tapRank.onClick=()=>this.selectTab(1),this.tapHistory.onClick=()=>this.selectTab(2),this.tapHOF.onClick=()=>this.selectTab(3),this.tapReward.onClick=()=>this.selectTab(4),this.subViewY=this.tapBattle.y+this.tapBattle.height+5,this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get height(){
- return this.bg.height}
- get listHeight(){
- return this.height-this.subViewY}
- updateLayout(){
- let t=5;
- for(const i of this.tabs)i.width=124,i.x=t,i.y=85,this.addChild(i),t+=i.width+2}
- updateLanguage(){
- let t=AG.getText("GAME_76","무한 랭킹전");
- const i=Het.getInstance().pvpInfo;
- i&&(t+=" ( "+AG.getText("GAME_276","제 ##회 @@일차").replace("##",i.episode.toString()).replace("@@",i.round.toString())+" ) ",t+=` [ ${
- AG.getText("GAME_138","## 리그").replace("##",this.getGradeText(i.userPvp.grade))}
-  ]`),this.lblTitle.text=t,this.tapBattle.text=AG.getText("GAME_101","대전"),this.tapRank.text=AG.getText("COMMON_20","랭킹"),this.tapHistory.text=AG.getText("COMMON_39","기록"),this.tapHOF.text=AG.getText("GAME_108","전당"),this.tapReward.text=AG.getText("COMMON_22","보상")}
- updateTitle(t){
- this.lblTitle.text=t}
- getGradeText(t){
- return["","C","B","A","S"][t]??""}
- onCloseBtnClick(){
- this.hide()}
- setSubView(t){
- this._currentSubView!==t&&(null!=this._currentSubView&&this.removeChild(this._currentSubView),this._currentSubView=t,null!=this._currentSubView&&(this._currentSubView.x=10,this._currentSubView.y=this.subViewY,this.addChild(this._currentSubView)))}
- selectTab(t){
- for(let i=0;
- i<this.tabs.length;
- i++)this.tabs[i].selected=i===t;
- switch(t){
- case 0:Het.getInstance().setData(),this.setSubView(Het.getInstance());
- break;
- case 1:ont.getInstance().setData(),this.setSubView(ont.getInstance());
- break;
- case 2:Zet.getInstance().setData(),this.setSubView(Zet.getInstance());
- break;
- case 3:ent.getInstance().setData(),this.setSubView(ent.getInstance());
- break;
- case 4:pnt.getInstance().setData(),this.setSubView(pnt.getInstance())}
- }
- show(){
- LV.getInstance().addChild(this),this.selectTab(0),this.updateLanguage(),this.updateLayout()}
- hide(){
- null!=this.parent&&this.parent.removeChild(this)}
- onAdded(){
- S4.getInstance().visible=!1,this.addResourceInfo()}
- onRemoved(){
- S4.getInstance().visible=!0,S4.getInstance().addChild(UV.getInstance()),S4.getInstance().addChild(E4.getInstance())}
- addResourceInfo(){
- this.addChild(UV.getInstance()),this.addChild(E4.getInstance()),this.addChild(this.btnClose)}
- hideAllPvPPopups(){
- zet.getInstance().hide(!1),jet.getInstance().hide(),this.hide(),S4.getInstance().visible=!0,S4.getInstance().addChild(UV.getInstance()),S4.getInstance().addChild(E4.getInstance())}
- async endBattle(t){
- Het.getInstance().endBattle(t)}
- onBackButton(){
- return!!(this.btnClose&&this.btnClose.parent&&this.btnClose.visible)&&(this.onCloseBtnClick(),!0)}
- }
- ;
- Kt(gnt,"PVPBattlePopup"),zt(gnt,"_instance");
- let mnt=gnt;
- var wnt=(t=>(t[t.DUNGEON=1]="DUNGEON",t[t.INFINITE_RANKING=2]="INFINITE_RANKING",t[t.DAILY_RANKING=3]="DAILY_RANKING",t[t.CHALLENGE_TOWER=4]="CHALLENGE_TOWER",t))(wnt||{
- }
- );
- const vnt=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblDesc",new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"icon"),zt(this,"lastTitle",""),zt(this,"lastDesc",""),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Ekkorr","Battle_1")),this.icon.x=2,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblTitle.x=135,this.lblTitle.y=15,this.addChild(this.lblTitle),this.lblDesc.x=this.lblTitle.x,this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+5,this.addChild(this.lblDesc)}
- setData(t){
- this.data=t,this.refreshTexts(),this.icon.texture=ZA.getTexture("UI_Ekkorr",`Battle_${
- t.type}
- `)}
- refreshTimer(){
- this.data&&this.refreshTexts()}
- refreshTexts(){
- const t=this.data,i=AG.getText(t.nameLangId,t.name);
- let s=i,e="";
- const n=C6.getInstance();
- if(t.isComingSoon)e="coming soon";
- else if(n.has())switch(t.type){
- case 1:{
- const t=n.getDungeon();
- t&&(e=`${
- AG.getText("GAME_559","티켓")}
-  ${
- t.ticket}
- /${
- t.maxTicket}
- ${
- this.formatTicketCountdownMinutes(t.ticket,t.maxTicket,t.ticketTime,t.ticketRechargeMs)}
- `);
- break}
- case 2:{
- const t=n.getPvp();
- if(t){
- const n=this.getPvpGradeText(t.grade);
- n&&(s=`${
- i}
-  ( ${
- AG.getValueReplace("GAME_138","##",n,n+"리그")}
-  )`);
- const h=t.ticketTime?new Date(t.ticketTime).getTime():0;
- e=`${
- AG.getText("GAME_559","티켓")}
-  ${
- t.ticket}
- /${
- t.maxTicket}
- ${
- this.formatTicketCountdownMinutes(t.ticket,t.maxTicket,h,t.ticketRechargeMs)}
- `}
- break}
- case 3:{
- const t=n.getDailyRanking();
- t&&(s=`${
- i}
-  ( ${
- t.joined?AG.getText("COMMON_370","참여"):AG.getText("GAME_560","미참여")}
-  )`,e=`${
- AG.getText("COMMON_29","남은시간")}
-  : ${
- this.formatRemainUntilUtcMidnight()}
- `);
- break}
- case 4:{
- const t=n.getTower();
- if(t){
- s=`${
- i}
-  ( ${
- AG.getValueReplace("GAME_561","##",t.seasonNumber,t.seasonNumber+"회차")}
-  : ${
- t.currentFloor}
- F )`;
- const n=this.formatTicketCountdownMs(t.ticket,t.maxTicket,t.ticketTime,t.ticketRechargeMs),h=this.formatRemainMs(t.seasonEndTime-ix.time);
- e=`${
- AG.getText("GAME_559","티켓")}
-  ${
- t.ticket}
- /${
- t.maxTicket}
- ${
- n}
-    ${
- AG.getText("COMMON_29","남은시간")}
-  : ${
- h}
- `}
- break}
- }
- else e=AG.getText(t.descLangId,t.desc);
- s!==this.lastTitle&&(this.lastTitle=s,this.lblTitle.text=s),e!==this.lastDesc&&(this.lastDesc=e,this.lblDesc.text=e)}
- formatTicketCountdownMinutes(t,i,s,e){
- if(t>=i)return"";
- if(!s||!e)return"";
- const n=e-(ix.time-s);
- if(n<=0)return"";
- const h=Math.ceil(n/6e4);
- return`  ( ${
- String(h).padStart(2,"0")}
- M )`}
- formatTicketCountdownMs(t,i,s,e){
- if(t>=i)return"";
- if(!s||!e)return"";
- const n=e-(ix.time-s);
- if(n<=0)return"";
- const h=Math.floor(n/1e3);
- return`  ( ${
- String(Math.floor(h/60)).padStart(2,"0")}
- :${
- String(h%60).padStart(2,"0")}
-  )`}
- getPvpGradeText(t){
- return["","C","B","A","S"][t]??""}
- formatRemainUntilUtcMidnight(){
- const t=new Date(ix.time),i=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+1);
- return this.formatRemainMs(i-ix.time)}
- formatRemainMs(t){
- return t<=0?"00M":uU.displayTimeAsDHHMM(Math.floor(t/1e3))}
- onClick(t,i){
- if(this.data.isComingSoon)vV.getInstance().showMessage("coming soon");
- else switch(this.data.type){
- case 1:Mit.getInstance().setData(),P6.getInstance().currentSubView=Mit.getInstance();
- break;
- case 2:mnt.getInstance().show();
- break;
- case 3:Bst.getInstance().setData(),P6.getInstance().currentSubView=Bst.getInstance();
- break;
- case 4:Qtt.getInstance().setData(),P6.getInstance().currentSubView=Qtt.getInstance()}
- }
- }
- ;
- Kt(vnt,"BattleItemRenderer");
- let bnt=vnt;
- const ynt=class t extends aG{
- constructor(){
- super(),zt(this,"heroIcon",new vK),zt(this,"lblMessage",new YD("",16768324,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblMessage2",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnConfirm",new kU("UI_CLOSE_BTN","","확인",.7,200,70)),this.title=AG.getText("GAME_179","영웅 뽑기 결과"),this.heroIcon.setMode(mK.HERO_LIST),this.contentContainer.addChild(this.heroIcon),this.contentContainer.addChild(this.lblMessage),this.lblMessage2.textColor=16777215,this.contentContainer.addChild(this.lblMessage2),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.RED,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm),this.updateLayout()}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- updateLayout(){
- const t=.5*this.width;
- this.heroIcon.x=t-.5*this.heroIcon.width,this.heroIcon.y=90,this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=this.heroIcon.y+this.heroIcon.height+20,this.lblMessage2.x=t-.5*this.lblMessage2.width,this.lblMessage2.y=this.lblMessage.y+this.lblMessage.height+5,this.btnConfirm.x=t-.5*this.btnConfirm.width,this.btnConfirm.y=this.lblMessage2.y+this.lblMessage2.height+30,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
- showResult(t,i){
- this.title=AG.getText("GAME_179","영웅 뽑기 결과");
- const s=vx.getInstance().getBookVO(t);
- if(!s)return;
- const e=new yx;
- e.kindNum=t,e.level=1,e.enhance=0,e.trans=0,this.heroIcon.setData(e);
- const n=AG.getText(s.getNameKey(),s.name);
- this.lblMessage.text=AG.getValueReplace("GAME_180","##",n,`${
- s.name}
-  영웅을 획득하였습니다.`),this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage2.text=-1==i?AG.getText("GAME_301","[내 영웅]으로 이동했습니다."):AG.getText("GAME_300","슬롯에 추가되었습니다."),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
- }
- ;
- Kt(ynt,"HeroGachaResultPopup"),zt(ynt,"instance");
- let _nt=ynt;
- const Mnt=class t extends aG{
- constructor(){
- super(),zt(this,"treasureIcon",new f6),zt(this,"lblMessage",new YD("",16768324,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblMessage2",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnConfirm",new kU("UI_CLOSE_BTN","","확인",.7,200,70)),this.title=AG.getText("GAME_183","유물 뽑기 결과"),this.contentContainer.addChild(this.treasureIcon),this.contentContainer.addChild(this.lblMessage),this.lblMessage2.textColor=16777215,this.contentContainer.addChild(this.lblMessage2),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.RED,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm),this.updateLayout()}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- updateLayout(){
- const t=.5*this.width;
- this.treasureIcon.x=t-.5*this.treasureIcon.width,this.treasureIcon.y=90,this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=this.treasureIcon.y+this.treasureIcon.height+20,this.lblMessage2.x=t-.5*this.lblMessage2.width,this.lblMessage2.y=this.lblMessage.y+this.lblMessage.height+5,this.btnConfirm.x=t-.5*this.btnConfirm.width,this.btnConfirm.y=this.lblMessage2.y+this.lblMessage2.height+30,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
- showResult(t,i,s){
- this.title=AG.getText("GAME_183","유물 뽑기 결과");
- const e=Wx.getInstance().getBookDataByKindNum(t);
- if(!e)return;
- const n=new $x;
- n.kindNum=t,n.grade=e.grade,n.enhance=0,this.treasureIcon.setVO(n);
- const h=AG.getText(e.getNameKey(),e.name);
- let r;
- this.lblMessage.text=AG.getValueReplace("GAME_185","##",h,`${
- h}
-  유물을 뽑았습니다!`),this.lblMessage.x=.5*(this.width-this.lblMessage.width),r=s.length>i.length?AG.getText("GAME_300","슬롯에 추가되었습니다."):AG.getText("GAME_302","[내유물]로 이동했습니다."),this.lblMessage2.text=r,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
- }
- ;
- Kt(Mnt,"TreasureGachaResultPopup"),zt(Mnt,"instance");
- let Ent=Mnt;
- const Ant=class t extends D4{
- constructor(){
- super(),zt(this,"lblHonorCoin",new GB("PVP_COIN_ON","0",aD.COLOR_PURPLE_PINK,aD.DEFAULT_FONT_OPTION_18)),this.closeBtn.visible=!0,this.closeBtn.interactive=!0,this.closeBtn.on("pointertap",this.onBack,this),this.lblHonorCoin.text=String(_L.honorCoin),this.lblHonorCoin.y=.5*(this.bg.height-this.lblHonorCoin.height),this.addChild(this.lblHonorCoin),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.lblHonorCoin.x=this.closeBtn.x-this.lblHonorCoin.width-10}
- setData(){
- this.lblHonorCoin.text=String(_L.honorCoin),this.updateLanguage()}
- onBack(){
- Ght.getInstance().setData(),P6.getInstance().currentSubView=Ght.getInstance()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_87","명예상점")),this.updateLayout()}
- }
- ;
- Kt(Ant,"HonorShopSubMenu"),zt(Ant,"instance");
- let Snt=Ant;
- const Tnt=class t extends Be{
- constructor(t,i,s=1){
- super(),zt(this,"dim",null),zt(this,"transIcon"),zt(this,"resultIcon",null),zt(this,"particles",[]),zt(this,"cx",0),zt(this,"cy",0),zt(this,"transStartY",0),zt(this,"transEndY",0),zt(this,"transLeftX",0),zt(this,"startedAt",0),zt(this,"lastEmittedAt",0),zt(this,"emittedCount",0),zt(this,"finished",!1),zt(this,"grade"),zt(this,"resultKindNum"),zt(this,"resultTransStep"),zt(this,"onComplete",null),this.grade=t,this.resultKindNum=i,this.resultTransStep=s,this.buildDim(),this.buildTransIcon(),this.eventMode="static",this.on("pointertap",()=>{
- }
- ),IL.getInstance().addChild(this),this.on("removed",()=>this.finish()),this.startedAt=Date.now(),this.lastEmittedAt=this.startedAt,GM.getInstance().add(this.onFrame,this)}
- buildDim(){
- const t=ZA.getTexture("UI_Ekkorr","Black");
- t&&(this.dim=new We(t),this.dim.width=KA.stageWidth,this.dim.height=KA.stageHeight,this.dim.alpha=0,this.addChild(this.dim))}
- buildTransIcon(){
- const i=5===this.grade?"UI_TreasureTrans5":"UI_TreasureTrans6";
- this.transIcon=new We(ZA.getTexture("UI_Ekkorr",i)),this.transIcon.anchor.set(0,0);
- const s=this.transIcon.width,e=this.transIcon.height,n=KA.stageWidth,h=UV.getInstance().toGlobal({
- x:0,y:0}
- );
- this.transLeftX=(n-s)/2,this.transStartY=h.y,this.transEndY=this.transStartY+t.SLIDE_DOWN_PX,this.transIcon.x=this.transLeftX,this.transIcon.y=this.transStartY,this.transIcon.alpha=0,this.addChild(this.transIcon),this.cx=this.transLeftX+s/2,this.cy=this.transEndY+e/2}
- onFrame(){
- if(this.finished)return;
- const t=Date.now(),i=t-this.startedAt;
- this.updateDim(i),this.updateTransIcon(i),this.updateParticleSpawn(i,t),this.updateParticles(t),this.updateResultIcon(i),this.updateFadeout(i)}
- updateDim(i){
- if(this.dim)if(i<t.PHASE1_MS){
- const s=i/t.PHASE1_MS;
- this.dim.alpha=s*t.DIM_ALPHA}
- else this.dim.alpha=t.DIM_ALPHA}
- updateTransIcon(i){
- if(i<t.PHASE1_MS){
- const s=i/t.PHASE1_MS,e=this.easeOutCubic(s);
- this.transIcon.alpha=e,this.transIcon.y=this.transStartY+(this.transEndY-this.transStartY)*e}
- else this.transIcon.alpha=1,this.transIcon.y=this.transEndY}
- updateParticleSpawn(i,s){
- const e=t.PHASE1_MS,n=t.PHASE1_MS+t.PHASE2_MS;
- i<e||i>n||this.emittedCount>=t.PARTICLE_COUNT||s-this.lastEmittedAt<t.PARTICLE_EMIT_INTERVAL_MS||(this.emitParticle(s),this.lastEmittedAt=s,this.emittedCount++)}
- emitParticle(i){
- const s=ZA.getTexture("UI_Ekkorr","RewardEffect0001"),e=new We(s);
- e.anchor.set(.5),e.x=this.cx,e.y=this.cy,e.alpha=1,e.scale.set(t.PARTICLE_SCALE_START);
- const n=Math.random()*Math.PI*2,h=t.PARTICLE_SPEED_MIN+Math.random()*(t.PARTICLE_SPEED_MAX-t.PARTICLE_SPEED_MIN),r=Math.cos(n)*h,o=Math.sin(n)*h;
- this.addChild(e),this.particles.push({
- spr:e,vx:r,vy:o,bornAt:i}
- )}
- updateParticles(i){
- for(let s=this.particles.length-1;
- s>=0;
- s--){
- const e=this.particles[s],n=(i-e.bornAt)/t.PARTICLE_LIFETIME_MS;
- if(n>=1){
- e.spr.destroy(),this.particles.splice(s,1);
- continue}
- e.spr.x+=e.vx,e.spr.y+=e.vy,e.spr.alpha=1-n;
- const h=t.PARTICLE_SCALE_START+(t.PARTICLE_SCALE_END-t.PARTICLE_SCALE_START)*n;
- e.spr.scale.set(h)}
- }
- updateResultIcon(i){
- if(i<t.RESULT_REVEAL_AT)return;
- this.resultIcon||(this.resultIcon=new f6,this.resultIcon.setDataWithKindNum(this.resultKindNum),this.resultIcon.hideEnhance(),this.resultIcon.showTrans(this.resultTransStep),this.resultIcon.x=this.transLeftX-5,this.resultIcon.y=this.transEndY-5,this.resultIcon.alpha=0,this.addChild(this.resultIcon));
- const s=(i-t.RESULT_REVEAL_AT)/t.RESULT_FADE_MS,e=Math.max(0,Math.min(1,s));
- this.resultIcon.alpha=e,this.transIcon.alpha=1-.6*e}
- updateFadeout(i){
- if(i<t.FADEOUT_AT)return;
- const s=(i-t.FADEOUT_AT)/t.FADEOUT_MS,e=Math.max(0,Math.min(1,s));
- this.alpha=1-e,e>=1&&this.finish()}
- finish(){
- if(!this.finished){
- this.finished=!0,GM.getInstance().remove(this.onFrame,this),this.parent&&this.parent.removeChild(this);
- for(const t of this.particles)t.spr.destroy();
- this.particles=[],this.onComplete&&this.onComplete(),this.destroy({
- children:!0}
- )}
- }
- easeOutCubic(t){
- return 1-Math.pow(1-t,3)}
- }
- ;
- Kt(Tnt,"TreasureTransRewardEffect"),zt(Tnt,"PHASE1_MS",1e3),zt(Tnt,"PHASE2_MS",2e3),zt(Tnt,"RESULT_REVEAL_AT",1800),zt(Tnt,"RESULT_FADE_MS",400),zt(Tnt,"FADEOUT_AT",3800),zt(Tnt,"FADEOUT_MS",400),zt(Tnt,"SLIDE_DOWN_PX",100),zt(Tnt,"PARTICLE_COUNT",80),zt(Tnt,"PARTICLE_SPEED_MIN",1),zt(Tnt,"PARTICLE_SPEED_MAX",2.4),zt(Tnt,"PARTICLE_LIFETIME_MS",1400),zt(Tnt,"PARTICLE_SCALE_START",.4),zt(Tnt,"PARTICLE_SCALE_END",1.6),zt(Tnt,"PARTICLE_EMIT_INTERVAL_MS",25),zt(Tnt,"DIM_ALPHA",.55);
- let Cnt=Tnt;
- const knt=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17)),zt(this,"lblMessage2",new YD("",aD.COLOR_YELLOW,aD.DEFAULT_FONT_OPTION_17)),zt(this,"btnConfirm",new kU("UI_GEM","0",AG.getText("GAME_67","진화"),.8,200,70)),zt(this,"onConfirm",null),this.title="",this.outSideClickHide=!0,this.lblMessage2.visible=!1,this.contentContainer.addChild(this.lblMessage,this.lblMessage2,this.btnConfirm),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.onClick=this.onCancelClick.bind(this),aD.setLabelWrapWidth(this.lblMessage,this.width-60),aD.setLabelWrapWidth(this.lblMessage2,this.width-60)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showWith(t,i,s,e=1){
- this.onConfirm=s,this.lblMessage.text=AG.getValueReplace("GAME_854","##",t,`${
- t}
-  영웅을 진화하시겠습니까?`),e>1?(this.lblMessage2.text=`${
- t}
-  x ${
- e}
- `,this.lblMessage2.visible=!0):this.lblMessage2.visible=!1,this.btnConfirm.text=AG.getText("GAME_67","진화"),this.btnConfirm.iconText=String(i*e),this.updateLayout(),super.show()}
- onConfirmClick(){
- const t=this.onConfirm;
- this.onConfirm=null,this.hide(),t&&t()}
- onCancelClick(){
- this.onConfirm=null,this.hide()}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=90;
- let t=this.lblMessage.y+this.lblMessage.height+30;
- this.lblMessage2.visible&&(this.lblMessage2.x=.5*(this.width-this.lblMessage2.width),this.lblMessage2.y=this.lblMessage.y+this.lblMessage.height+15,t=this.lblMessage2.y+this.lblMessage2.height+30),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
- onBackButton(){
- return this.onCancelClick(),!0}
- }
- ;
- Kt(knt,"EvolveMaterialConfirmPopup"),zt(knt,"_instance");
- let Ont=knt;
- const Int=Object.freeze(Object.defineProperty({
- __proto__:null,EvolveMaterialConfirmPopup:Ont}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),xnt=class t extends aG{
- constructor(){
- super(),zt(this,"grade",5),zt(this,"NUM_SLOTS",3),zt(this,"slotContainer",new Be),zt(this,"slotIcons",[]),zt(this,"slotCountLabels",[]),zt(this,"lblDesc",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"btnChange",new kU("UI_GEM","100","재료변경",.8,180,70)),zt(this,"btnTrans",new kU("UI_GEM","300","초월하기",.8,180,70)),this.contentContainer.addChild(this.lblDesc,this.slotContainer,this.btnChange,this.btnTrans);
- for(let t=0;
- t<this.NUM_SLOTS;
- t++){
- const i=new vK;
- i.mode=mK.BOOK,i.scale.set(.85),i.eventMode="static",i.cursor="pointer";
- const s=t;
- i.on("pointertap",()=>{
- this.onMaterialIconClick(s)}
- ),this.slotContainer.addChild(i),this.slotIcons.push(i);
- const e=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16);
- this.slotContainer.addChild(e),this.slotCountLabels.push(e)}
- this.btnChange.labelOrder=kU.TEXT_FIRST,this.btnChange.color=kU.RED,this.btnChange.onClick=()=>this.onChangeClick(),this.btnTrans.labelOrder=kU.TEXT_FIRST,this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=()=>this.onTransClick(),this.outSideClickHide=!0}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- showFor(i){
- if(this.grade=i,this.isAllOwnedTransed(i))return void this.showAllOwnedTransedMessage(i);
- this.title=AG.getValueReplace("GAME_1151","##",i,`${
- i}
- ★ 유물 초월`),this.lblDesc.text=AG.getText("GAME_1153","재료 영웅 3기를 소비하여 보유 유물 중 1개를 무작위로 초월합니다.");
- const s=5===i,e=ZA.getTexture("UI_Ekkorr",s?"UI_GEM":"PVP_COIN_ON");
- this.btnChange.iconLabel.texture=e,this.btnChange.iconText=String(s?t.CHANGE_COST_GRADE5:t.CHANGE_COST_GRADE6),this.btnChange.text=AG.getText("GAME_1154","재료변경"),this.btnTrans.iconLabel.texture=e,this.btnTrans.iconText=String(s?t.COST_GRADE5:t.COST_GRADE6),this.btnTrans.text=AG.getText("GAME_1155","초월하기"),this.refreshSlots(),this.updateLayout(),super.show()}
- refreshSlots(){
- const t=Oht.getInstance().transInfo,i=t?5===this.grade?t.grade5Materials:t.grade6Materials:[];
- let s=!0;
- for(let e=0;
- e<this.NUM_SLOTS;
- e++){
- const t=i[e]??0,n=this.slotIcons[e],h=this.slotCountLabels[e];
- if(t>0){
- n.setDataWithKindNum(t),n.visible=!0;
- const i=vx.getInstance().ownedUnitList.find(i=>i.kindNum===t),e=(null==i?void 0:i.count)??0,r=e>=1;
- r||(s=!1),h.text=`${
- e}
-  / 1`,h.textColor=r?aD.DEFAULT_COLOR:16737894,h.visible=!0}
- else n.visible=!1,h.visible=!1}
- this.btnTrans.activated=s}
- updateLayout(){
- const t=.5*this.width;
- this.lblDesc.x=t-.5*this.lblDesc.width,this.lblDesc.y=100;
- const i=t-.5*(120*this.NUM_SLOTS+30*(this.NUM_SLOTS-1)),s=this.lblDesc.y+this.lblDesc.height+20;
- for(let h=0;
- h<this.NUM_SLOTS;
- h++){
- const t=this.slotIcons[h],e=this.slotCountLabels[h];
- t.x=i+150*h,t.y=s,e.x=t.x+.5*(120-e.width)-8,e.y=t.y+75}
- const e=s+75+60,n=this.btnChange.width+16+this.btnTrans.width;
- this.btnChange.x=t-.5*n,this.btnChange.y=e,this.btnTrans.x=this.btnChange.x+this.btnChange.width+16,this.btnTrans.y=e,this.height=e+this.btnTrans.height+50}
- async onChangeClick(){
- if(this.isAllOwnedTransed())return void this.showAllOwnedTransedMessage();
- const i=5===this.grade,s=i?t.CHANGE_COST_GRADE5:t.CHANGE_COST_GRADE6;
- if(i){
- if(_L.gem<s)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."))}
- else if(_L.honorCoin<s)return void vV.getInstance().showMessage(AG.getText("GAME_194","명예코인이 부족합니다."));
- const e=await hD.getInstance().treasure.changeTransMaterials(this.grade);
- !1!==(null==e?void 0:e.success)?(_L.setUserInfo(e.body),Oht.getInstance().transInfo=e.body.transInfo,UV.getInstance().updateAll(),this.refreshSlots(),this.updateLayout(),Oht.getInstance().refresh()):mG.getInstance().showError(e)}
- async onTransClick(){
- if(this.isAllOwnedTransed())return void this.showAllOwnedTransedMessage();
- const i=5===this.grade,s=i?t.COST_GRADE5:t.COST_GRADE6;
- if(i){
- if(_L.gem<s)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."))}
- else if(_L.honorCoin<s)return void vV.getInstance().showMessage(AG.getText("GAME_194","명예코인이 부족합니다."));
- const e=await hD.getInstance().treasure.transTreasure(this.grade);
- if(!1===(null==e?void 0:e.success))return void mG.getInstance().showError(e);
- _L.setUserInfo(e.body),Wx.getInstance().setData(e.body.treasure,e.body.dungeon),e.body.transInfo&&(Oht.getInstance().transInfo=e.body.transInfo),UV.getInstance().updateAll(),this.hide();
- const n=e.body.transedKindNum;
- n&&Oht.getInstance().showResultFlowAfterTrans(this.grade,n)}
- async onMaterialIconClick(t){
- const i=Oht.getInstance().transInfo,s=(i?5===this.grade?i.grade5Materials:i.grade6Materials:[])[t];
- if(!s||s<=0)return;
- const e=vx.getInstance(),n=e.getBookVO(s),h=n?AG.getText(n.getNameKey(),n.name):"";
- if(e.getOwnedUnitCount(s,0)>=1)return;
- const r=e.bookList.find(t=>t.evolKindNum===s),o=r?e.getOwnedUnitCount(r.kindNum,0):0;
- if(r&&o>=1){
- const t=X9[r.grade]??0;
- return void Ont.getInstance().showWith(h,t,()=>{
- this.evolveMaterialPreHero(r.kindNum)}
- )}
- r?vV.getInstance().showMessage(AG.getValueReplace("GAME_832","##",h,`${
- h}
- 으로 진화할 수 있는 영웅이 없습니다.`)):vV.getInstance().showMessage(AG.getValueReplace("GAME_831","##",h,`${
- h}
- 을 보유하고 있지 않습니다.`))}
- async evolveMaterialPreHero(t){
- const i=await hD.getInstance().hero.evolveOwned(`${
- t}
- -1`,!0);
- i&&!1!==i.success?(_L.setUserInfo(i.body),UV.getInstance().updateAll(),this.refreshSlots(),this.updateLayout()):mG.getInstance().showError(i)}
- isAllOwnedTransed(t=this.grade){
- const i=Wx.getInstance(),s=[...i.equipedList,...i.ownedList].filter(i=>i&&i.grade===t);
- return 0!==s.length&&s.every(t=>(t.trans||0)>0)}
- showAllOwnedTransedMessage(t=this.grade){
- vV.getInstance().showMessage(AG.getValueReplace("GAME_1157","##",t,`보유한 ${
- t}
- 성 유물을 모두 초월하였습니다.`))}
- }
- ;
- Kt(xnt,"TreasureTransConfirmPopup"),zt(xnt,"instance"),zt(xnt,"COST_GRADE5",300),zt(xnt,"COST_GRADE6",300),zt(xnt,"CHANGE_COST_GRADE5",100),zt(xnt,"CHANGE_COST_GRADE6",100);
- let Nnt=xnt;
- const Pnt=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"mainContainer",new Be),zt(this,"gradeIcon"),zt(this,"lblTitle",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblOwned",new GB("menu_icon_04_on","0 / 20",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblTrans",new GB("TransIcon","0",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnTrans",new aK("초월",130)),zt(this,"lblTodayUsed",new YD("",6737151,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=90,this.mainContainer.addChild(this.bg),this.gradeIcon=new We(ZA.getTexture("UI_Ekkorr","UI_TreasureTrans5")),this.gradeIcon.x=15,this.gradeIcon.y=.5*(this.bg.height-this.gradeIcon.height),this.mainContainer.addChild(this.gradeIcon),this.lblTitle.x=135,this.lblTitle.y=12,this.mainContainer.addChild(this.lblTitle),this.lblOwned.iconScale=.5,this.lblOwned.x=135,this.lblOwned.y=50,this.mainContainer.addChild(this.lblOwned),this.lblTrans.iconScale=1.3,this.lblTrans.y=50,this.mainContainer.addChild(this.lblTrans),this.btnTrans.height=60,this.btnTrans.width=130,this.btnTrans.x=this.bg.width-this.btnTrans.width-15,this.btnTrans.y=.5*(this.bg.height-this.btnTrans.height),this.mainContainer.addChild(this.btnTrans),this.btnTrans.on("pointertap",this.onTransClick,this),this.lblTodayUsed.visible=!1,this.mainContainer.addChild(this.lblTodayUsed),this.addChild(this.mainContainer)}
- setData(i){
- this.data=i;
- const s=i.grade,e=Number(i.owned)||0,n=Number(i.trans)||0,h=Number(i.threshold)||0,r=!0===i.dailyAvailable;
- this.gradeIcon.texture=ZA.getTexture("UI_Ekkorr",5===s?"UI_TreasureTrans5":"UI_TreasureTrans6"),this.gradeIcon.y=.5*(this.bg.height-this.gradeIcon.height),this.lblTitle.text=AG.getValueReplace("GAME_1151","##",s,`${
- s}
- ★ 유물 초월`),this.lblOwned.text=`${
- e}
- `,this.lblOwned.textColor=e>=h?aD.DEFAULT_COLOR:16737894,this.lblTrans.text=`${
- n}
- `,this.lblTrans.x=this.lblOwned.x+this.lblOwned.width+30;
- const o=t.hasAnyUntransedOwned(s),a=e>=h&&r&&o;
- if(this.btnTrans.activated=a,this.btnTrans.text=AG.getText("GAME_820","초월"),r)this.lblTodayUsed.visible=!1;
- else{
- const t=AG.getText("GAME_1150","오늘 사용함");
- this.lblTodayUsed.text=`(${
- t}
- )`,this.lblTodayUsed.visible=!0,this.lblTodayUsed.x=this.btnTrans.x-this.lblTodayUsed.width-12,this.lblTodayUsed.y=this.btnTrans.y+.5*(this.btnTrans.height-this.lblTodayUsed.height)}
- }
- onTransClick(){
- if(!this.data)return;
- const i=this.data.grade,s=!0===this.data.dailyAvailable,e=Number(this.data.owned)||0,n=Number(this.data.threshold)||0;
- t.hasAnyUntransedOwned(i)?s&&(e<n||Nnt.getInstance().showFor(i)):vV.getInstance().showMessage(AG.getValueReplace("GAME_1157","##",i,`보유한 ${
- i}
- 성 유물을 모두 초월하였습니다.`))}
- static hasAnyUntransedOwned(t){
- const i=Wx.getInstance();
- return[...i.equipedList,...i.ownedList].some(i=>i&&i.grade===t&&0===(i.trans||0))}
- }
- ;
- Kt(Pnt,"TreasureTransItemRenderer");
- let Rnt=Pnt;
- const Dnt={
- 1:"HUMAN_ICON",2:"ELF_ICON",3:"UNDEAD_ICON",4:"ORC_ICON",5:"ICON_UNIT",6:"ICON_MELEE",7:"ICON_RANGE",8:"ICON_AIR",9:"ICON_BOSS",10:"ICON_MONSTER",11:"ICON_TOWER",12:"ICON_ATTACK",13:"UI_HEART",14:"ICON_DEFENSE",15:"UI_CRITICAL_DAMAGE",16:"UI_CRITICAL_PERCENT",17:"UI_ATTACK_RANGE",18:"UI_REVIVE_TIME",19:"UI_ATTACK_SPEED",20:"UI_MOVE_SPEED",21:"ICON_QUEST",22:"ICON_GOLD",23:"ICON_TIME",24:"UI_LEVELUP",25:"ICON_UP",26:"ICON_DOWN",27:"ICON_OPEN",28:"ICON_UNIT_START"}
- ;
- function Lnt(t){
- return Dnt[t]||""}
- Kt(Lnt,"getBuffTextureName");
- const Gnt=class extends Be{
- constructor(){
- super(),zt(this,"iconList",[]),zt(this,"lblValue",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16));
- for(let t=0;
- t<5;
- t++){
- const i=new We(ZA.getTexture("UI_Ekkorr","ELF_ICON"));
- i.x=28*t,this.addChild(i),this.iconList.push(i)}
- this.lblValue.x=10,this.lblValue.y=.5*(this.iconList[0].height-this.lblValue.height),this.addChild(this.lblValue)}
- setVO(t,i){
- let s=0,e=t.skillIcon1;
- 2===i&&(e=t.skillIcon2);
- for(let r=0;
- r<5;
- r++){
- let t=this.iconList[r];
- r<e.length?(t.texture=ZA.getTexture("UI_Ekkorr",Lnt(e[r])),t.visible=!0,s+=t.width):t.visible=!1}
- this.lblValue.x=s+15;
- const n=1===i?1:2,h=t.getAbilityId(n,t.trans||0);
- this.lblValue.text=$D.displayLargeNumberAsAlphabet(Bx.getInstance().getValue(h,t.enhance))+"%"}
- }
- ;
- Kt(Gnt,"TreasureBuffInfo");
- let Bnt=Gnt;
- const Unt=class t extends aG{
- constructor(){
- super(),zt(this,"icon",new f6),zt(this,"lblFinalMsg",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblName",new YD("",16766282,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"buffInfo1",new Bnt),zt(this,"buffInfo2",new Bnt),zt(this,"lblBuffDesc1",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblBuffDesc2",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"setIcons",[]),zt(this,"lblBody",new YD("",13421772,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnChange",new kU("UI_GEM",String(t.CHANGE_GEM_COST),"변경",.7,t.BTN_W_CHANGE,t.BTN_H)),zt(this,"btnSelect",new aK(AG.getText("GAME_1170","선택"),t.BTN_W_SELECT)),zt(this,"btnConfirm",new sG("확인")),zt(this,"mode","choose"),zt(this,"kindNum",0),zt(this,"transStep",1),zt(this,"onChangeClick",null),zt(this,"onSelectClick",null),zt(this,"onClosePopup",null),this.title=AG.getText("GAME_4","유물"),this.icon.x=50,this.icon.y=80,this.contentContainer.addChild(this.icon),this.contentContainer.addChild(this.lblFinalMsg),this.contentContainer.addChild(this.lblName),this.contentContainer.addChild(this.lblBuffDesc1),this.contentContainer.addChild(this.lblBuffDesc2),aD.setLabelWrapWidth(this.lblBuffDesc1,500),aD.setLabelWrapWidth(this.lblBuffDesc2,500);
- for(let i=0;
- i<t.MAX_SET_ICONS;
- i++){
- const t=new f6;
- t.visible=!1,this.contentContainer.addChild(t),this.setIcons.push(t)}
- this.contentContainer.addChild(this.lblBody),this.btnChange.text=AG.getText("COMMON_5","변경"),this.btnChange.onClick=()=>this.handleChange(),this.contentContainer.addChild(this.btnChange),this.btnSelect.onClick=()=>this.handleSelect(),this.btnSelect.height=t.BTN_H+2,this.contentContainer.addChild(this.btnSelect),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.onClick=()=>this.handleConfirmFinal(),this.contentContainer.addChild(this.btnConfirm),this.btnClose.onClick=()=>this.handleClose()}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- showChoose(t,i,s,e,n){
- this.mode="choose",this.kindNum=t,this.transStep=i,this.onChangeClick=s,this.onSelectClick=e,this.onClosePopup=n,this.applyMode(),super.show()}
- showFinal(t,i,s){
- this.mode="final",this.kindNum=t,this.transStep=i,this.onChangeClick=null,this.onSelectClick=null,this.onClosePopup=s,this.applyMode(),super.show()}
- resizeFor(i){
- this.bg.width=t.POPUP_W,this.bg.height=i,this.width=t.POPUP_W,this.height=i}
- applyMode(){
- this.icon.setDataWithKindNum(this.kindNum),this.icon.hideEnhance(),this.icon.showTrans(this.transStep);
- const t=Wx.getInstance().getBookDataByKindNum(this.kindNum),i=`${
- t?AG.getText(t.getNameKey(),t.name):""}
-   (${
- AG.getValueReplace("GAME_1173","##",this.transStep,`${
- this.transStep}
- 초월`)}
- )`;
- "final"===this.mode?this.applyFinalLayout(t,i):this.applyChooseLayout(t,i)}
- applyFinalLayout(i,s){
- this.lblBody.visible=!1,this.btnChange.visible=!1,this.btnSelect.visible=!1,this.btnConfirm.visible=!0,this.btnClose.visible=!0;
- const e=this.icon.x+this.icon.width+15;
- this.lblFinalMsg.text=AG.getText("GAME_1174","유물이 초월되었습니다."),this.lblFinalMsg.visible=!0,this.lblFinalMsg.x=e,this.lblFinalMsg.y=this.icon.y,this.lblName.text=s,this.lblName.visible=!0,this.lblName.x=e,aD.setLabelWrapWidth(this.lblName,this.width-this.lblName.x-10),this.lblName.y=this.lblFinalMsg.y+this.lblFinalMsg.height+8;
- const n=this.applyAbilities(i)+70+10;
- this.layoutSetIcons(i,n);
- const h=n+100+35;
- this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=h,this.resizeFor(h+this.btnConfirm.height+t.BOTTOM_PAD)}
- applyAbilities(t){
- const i=this.icon.y+this.icon.height+20,s=(null==t?void 0:t.desc)?t.desc.split("|").map(t=>t.trim()):[];
- if(t&&s.length>0){
- const i=AG.getText(t.skillCode,s[0]);
- this.lblBuffDesc1.text=`+ ${
- i}
-  : ${
- $D.displayLargeNumberAsAlphabet(t.getSkill1Value())}
- %`,this.lblBuffDesc1.visible=!0}
- else this.lblBuffDesc1.visible=!1;
- if(t&&t.skillCode2&&s.length>1){
- const i=AG.getText(t.skillCode2,s[1]);
- this.lblBuffDesc2.text=`+ ${
- i}
-  : ${
- $D.displayLargeNumberAsAlphabet(t.getSkill2Value())}
- %`,this.lblBuffDesc2.visible=!0}
- else this.lblBuffDesc2.visible=!1;
- return this.lblBuffDesc1.x=50,this.lblBuffDesc1.y=i,this.lblBuffDesc2.x=50,this.lblBuffDesc2.y=i+30,i}
- applyChooseLayout(i,s){
- this.btnConfirm.visible=!1,this.btnChange.visible=!0,this.btnSelect.visible=!0,this.btnClose.visible=!1;
- const e=this.icon.x+this.icon.width+15;
- this.lblFinalMsg.text=AG.getText("GAME_1174","유물이 초월되었습니다."),this.lblFinalMsg.visible=!0,this.lblFinalMsg.x=e,this.lblFinalMsg.y=this.icon.y,this.lblName.text=s,this.lblName.visible=!0,this.lblName.x=e,aD.setLabelWrapWidth(this.lblName,this.width-this.lblName.x-0),this.lblName.y=this.lblFinalMsg.y+this.lblFinalMsg.height+8;
- const n=this.applyAbilities(i)+70+10;
- this.layoutSetIcons(i,n),this.lblBody.text=AG.getValueReplace("GAME_1171","##",t.CHANGE_GEM_COST,`보석 ${
- t.CHANGE_GEM_COST}
- 개를 이용해서 변경할 수 있습니다.`)+`\n(${
- AG.getText("GAME_1172","1번만 변경 가능")}
- )`,this.lblBody.visible=!0,this.lblBody.y=n+100+15,this.lblBody.x=.5*(this.width-this.lblBody.width);
- const h=this.lblBody.y+this.lblBody.height+35,r=t.BTN_W_CHANGE+20+t.BTN_W_SELECT,o=.5*(this.width-r);
- this.btnChange.x=o,this.btnChange.y=h,this.btnSelect.x=o+t.BTN_W_CHANGE+20,this.btnSelect.y=h,this.btnChange.activated=_L.gem>=t.CHANGE_GEM_COST,this.resizeFor(h+t.BTN_H+t.BOTTOM_PAD)}
- layoutSetIcons(t,i){
- if(!t){
- for(const t of this.setIcons)t.visible=!1;
- return}
- const s=Yx.getInstance().getSetsByTreasureKindNum(t.kindNum);
- if(!s||0===s.length){
- for(const t of this.setIcons)t.visible=!1;
- return}
- const e=s[0],n=Wx.getInstance(),h=new Set([...n.equipedKindNums,...n.ownedList.map(t=>t.kindNum)]),r=Math.min(e.itemList.length,this.setIcons.length);
- let o=50;
- for(let a=0;
- a<this.setIcons.length;
- a++){
- const t=this.setIcons[a];
- if(a>=r){
- t.visible=!1;
- continue}
- const s=e.itemList[a],c=n.getBookDataByKindNum(s);
- c?(t.setVO(c),t.hideEnhance(),t.scale.set(.8),t.x=o,t.y=i,t.alpha=h.has(s)?1:.55,t.visible=!0,s===this.kindNum?t.showTrans(this.transStep):h.has(s)||t.hideTrans(),o+=.8*t.width+10):t.visible=!1}
- }
- handleChange(){
- if(_L.gem<t.CHANGE_GEM_COST)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."));
- const i=this.onChangeClick;
- this.onChangeClick=null,this.onClosePopup=null,this.hide(),i&&i()}
- handleSelect(){
- const t=this.onSelectClick;
- this.onSelectClick=null,this.onClosePopup=null,this.hide(),t&&t()}
- handleConfirmFinal(){
- const t=this.onClosePopup;
- this.onClosePopup=null,this.hide(),t&&t()}
- handleClose(){
- const t=this.onClosePopup;
- this.onChangeClick=null,this.onSelectClick=null,this.onClosePopup=null,this.hide(),t&&t()}
- }
- ;
- Kt(Unt,"TreasureTransResultPopup"),zt(Unt,"CHANGE_GEM_COST",200),zt(Unt,"instance"),zt(Unt,"MAX_SET_ICONS",6),zt(Unt,"BTN_W_CHANGE",180),zt(Unt,"BTN_W_SELECT",140),zt(Unt,"BTN_H",60),zt(Unt,"POPUP_W",580),zt(Unt,"BOTTOM_PAD",50);
- let Fnt=Unt;
- const Hnt=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_1168","유물 초월 안내");
- const t=AG.getValueReplace("GAME_1152","##",5,"5★ 유물을 20개 이상 보유시 하루 1회씩 초월이 가능합니다."),i=AG.getValueReplace("GAME_1152","##",6,"6★ 유물을 20개 이상 보유시 하루 1회씩 초월이 가능합니다."),s=AG.getText("GAME_1169","유물을 초월하면, 한계돌파를 통해 최대 레벨을 20에서 50까지 확장할 수 있습니다.");
- this.lblGuide.text=`1. ${
- t}
- \n\n2. ${
- i}
- \n\n3. ${
- s}
- `,this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
- getDefaultPositionY(){
- return.45*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(Hnt,"TreasureTransGuidePopup"),zt(Hnt,"_instance");
- let Wnt=Hnt;
- const jnt=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage"),zt(this,"bgInput"),zt(this,"inputEl"),zt(this,"lblHint"),zt(this,"btnCancel"),zt(this,"btnConfirm"),zt(this,"slotId",-1),zt(this,"requestPending",!1),zt(this,"onSuccess",null),this.title=AG.getText("GAME_1097","프리셋 이름 변경");
- const t=aD.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=aD.COLOR_WHITE,t.lineHeight=30,t.fontWeight="normal",this.lblMessage=new YD(AG.getText("GAME_1098","프리셋 이름을 작성해주세요."),aD.DEFAULT_COLOR,t),this.addChild(this.lblMessage),aD.setLabelWrapWidth(this.lblMessage,this.width-40),this.bgInput=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_Slot2"),leftWidth:4,topHeight:4,rightWidth:4,bottomHeight:4}
- ),this.bgInput.visible=!1,this.bgInput.x=40,this.bgInput.width=this.width-2*this.bgInput.x,this.bgInput.height=70,this.addChild(this.bgInput),this.inputEl=this.createHTMLInput(),this.lblHint=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblHint),this.btnCancel=new q3(AG.getText("COMMON_2","취소")),this.btnCancel.outlineText=!0,this.btnCancel.width=240,this.btnCancel.height=65,this.btnCancel.onClick=this.onCancelClick.bind(this),this.addChild(this.btnCancel),this.btnConfirm=new q3(AG.getText("COMMON_1","확인")),this.btnConfirm.color=q3.COLOR_ORANGE,this.btnConfirm.outlineText=!0,this.btnConfirm.width=this.btnCancel.width,this.btnConfirm.height=this.btnCancel.height,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm),this.updateLayout(),this.on("removed",this.onRemoved)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- createHTMLInput(){
- const i=document.createElement("input");
- return i.type="text",i.maxLength=t.MAX_INPUT_LEN,i.style.position="absolute",i.style.fontFamily="Arial",i.style.fontSize="18px",i.style.textAlign="center",i.style.display="none",i.style.color="white",i.style.background="transparent",i.style.border="2px solid #684f3e",i.style.borderRadius="6px",i.style.boxSizing="border-box",i.addEventListener("input",()=>this.updateHint()),document.body.appendChild(i),i}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=80,this.bgInput.x=40,this.bgInput.y=this.lblMessage.y+this.lblMessage.height+20,this.lblHint.x=this.bgInput.x,this.lblHint.y=this.bgInput.y+this.bgInput.height+5,this.btnCancel.x=this.bgInput.x,this.btnCancel.y=this.lblHint.y+this.lblHint.height+20,this.btnConfirm.x=this.bgInput.x+this.bgInput.width-this.btnConfirm.width,this.btnConfirm.y=this.btnCancel.y,this.height=this.btnCancel.y+this.btnCancel.height+50}
- showForSlot(t,i,s=null){
- this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.slotId=t,this.inputEl.value=i??"",this.onSuccess=s,this.updateHint(),super.show()}
- onShowMotionComplete(){
- super.onShowMotionComplete(),this.showInputOverlay()}
- hide(){
- this.hideInputOverlay(),super.hide()}
- onRemoved(){
- this.hideInputOverlay()}
- showInputOverlay(){
- const t=this.toGlobal(this.bgInput.position),i=KA.stage.scale;
- this.inputEl.style.display="block",this.inputEl.style.left=t.x+"px",this.inputEl.style.top=t.y+"px",this.inputEl.style.width=`${
- Math.floor(this.bgInput.width*i.x)}
- px`,this.inputEl.style.height=`${
- Math.floor(this.bgInput.height*i.y)}
- px`,this.inputEl.placeholder=AG.getText("GAME_1097","프리셋 이름 입력"),setTimeout(()=>this.inputEl.focus(),50)}
- hideInputOverlay(){
- this.inputEl.style.display="none",this.inputEl.blur()}
- updateHint(){
- const i=this.inputEl.value.length;
- this.lblHint.text=`${
- i}
-  / ${
- t.MAX_INPUT_LEN}
- `}
- onCancelClick(){
- this.hide()}
- async onConfirmClick(){
- if(this.requestPending)return;
- if(this.slotId<0)return;
- const t=(this.inputEl.value??"").trim();
- this.requestPending=!0;
- const i=await hD.getInstance().treasure.renamePreset(this.slotId,t);
- if(this.requestPending=!1,!1!==i.success){
- if(_L.setUserInfo(i.body),Wx.getInstance().setData(i.body.treasure,i.body.dungeon),UV.getInstance().updateAll(),vV.getInstance().showMessage(AG.getText("GAME_1099","프리셋 이름이 변경되었습니다.")),this.onSuccess)try{
- this.onSuccess()}
- catch(_gt){
- }
- this.hide()}
- else mG.getInstance().showError(i)}
- }
- ;
- Kt(jnt,"TreasurePresetRenamePopup"),zt(jnt,"_instance"),zt(jnt,"MAX_INPUT_LEN",8);
- let $nt=jnt;
- const Vnt=class t extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"slotButtons",[]),zt(this,"btnSave"),zt(this,"btnReset"),zt(this,"lblSaveHint"),zt(this,"lockOverlay"),zt(this,"lblLock"),zt(this,"saveMode",!1),zt(this,"requestPending",!1),zt(this,"longPressTimers",[null,null,null,null,null]),zt(this,"longPressFired",[!1,!1,!1,!1,!1]),zt(this,"onApplied",null),this.bg=new Gf,this.bg.roundRect(0,0,t.WIDTH,t.HEIGHT,6),this.bg.fill({
- color:2825487,alpha:.6}
- ),this.addChild(this.bg);
- for(let h=0;
- h<5;
- h++){
- const i=new B6(this.getSlotName(h),t.SLOT_BUTTON_WIDTH,16);
- i.autoResize=!1,i.lbl.textSize=16,i.width=t.SLOT_BUTTON_WIDTH,i.height=t.SLOT_BUTTON_HEIGHT,i.x=8+h*(t.SLOT_BUTTON_WIDTH+t.SLOT_GAP),i.y=4+.5*(t.ROW_HEIGHT-i.height),i.on("pointertap",()=>{
- this.longPressFired[h]?this.longPressFired[h]=!1:this.onSlotClick(h)}
- ,this),i.on("pointerdown",()=>this.startLongPress(h),this),i.on("pointerup",()=>this.cancelLongPress(h),this),i.on("pointerupoutside",()=>this.cancelLongPress(h),this),i.on("pointercancel",()=>this.cancelLongPress(h),this),i.selected=!1,this.slotButtons.push(i),this.addChild(i)}
- const i=t.ROW_HEIGHT+8,s=t.ACTION_BUTTON_WIDTH,e=t.SLOT_BUTTON_HEIGHT;
- this.btnReset=new lK("리셋",s,8),this.btnReset.width=s,this.btnReset.height=e,this.btnReset.x=640-s-t.ACTION_BUTTON_RIGHT_MARGIN,this.btnReset.y=i+.5*(t.ROW_HEIGHT-e),this.btnReset.on("pointertap",this.onResetClick,this),this.addChild(this.btnReset),this.btnSave=new sG("저장",s,8),this.btnSave.width=s,this.btnSave.height=e,this.btnSave.x=this.btnReset.x-s-t.ACTION_BUTTON_GAP,this.btnSave.y=i+.5*(t.ROW_HEIGHT-e),this.btnSave.on("pointertap",this.onSaveClick,this),this.addChild(this.btnSave),this.lblSaveHint=new YD("프리셋 길게 누르면 이름 변경",16767354,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSaveHint.setWrapWidth(360),this.lblSaveHint.x=12,this.lblSaveHint.visible=!0,this.addChild(this.lblSaveHint),this.recenterHint(),this.lockOverlay=new Be;
- const n=new Gf;
- n.beginFill(0,.7),n.drawRoundedRect(0,0,t.WIDTH,t.HEIGHT,6),n.endFill(),this.lockOverlay.addChild(n),this.lblLock=new YD("1~5등급 유물 전부 보유 시 해금",16764040,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblLock.x=.5*(t.WIDTH-this.lblLock.width),this.lblLock.y=.5*(t.HEIGHT-this.lblLock.height),this.lockOverlay.addChild(this.lblLock),this.lockOverlay.eventMode="static",this.addChild(this.lockOverlay)}
- get barHeight(){
- return t.HEIGHT}
- getSlotName(t){
- const i=t+1;
- return AG.getValueReplace("GAME_744","##",String(i),`${
- i}
-  번`)}
- getSlotDisplayLabel(t){
- const i=Wx.getInstance().presets[t];
- return i&&i.label&&i.label.length>0?i.label:this.getSlotName(t)}
- startLongPress(i){
- this.cancelLongPress(i),Wx.getInstance().presetUnlocked&&(this.saveMode||this.requestPending||(this.longPressFired[i]=!1,this.longPressTimers[i]=setTimeout(()=>{
- this.longPressFired[i]=!0,this.longPressTimers[i]=null,this.openRenamePopup(i)}
- ,t.LONG_PRESS_MS)))}
- cancelLongPress(t){
- null!==this.longPressTimers[t]&&(clearTimeout(this.longPressTimers[t]),this.longPressTimers[t]=null)}
- openRenamePopup(t){
- const i=Wx.getInstance().presets[t];
- i&&$nt.getInstance().showForSlot(t,i.label,()=>this.update())}
- update(){
- const i=Wx.getInstance(),s=i.presetUnlocked;
- this.lockOverlay.visible=!s,this.lblLock.text=AG.getText("GAME_743","1~5등급 유물 전부 보유 시 해금"),this.lblLock.x=.5*(t.WIDTH-this.lblLock.width);
- const e=i.getActivePresetSlot();
- for(let t=0;
- t<this.slotButtons.length;
- t++){
- const s=this.slotButtons[t],n=i.presets[t].hasEntries,h=e===t,r=this.getSlotName(t);
- let o=this.getSlotDisplayLabel(t);
- this.saveMode&&(o=n?AG.getValueReplace("GAME_746","##",r,`${
- r}
-  덮어쓰기`):AG.getValueReplace("GAME_745","##",r,`${
- r}
-  저장`)),s.text=o,s.selected=!this.saveMode&&h,s.alpha=this.saveMode||n?1:.65}
- this.saveMode?this.btnSave.text=AG.getText("COMMON_2","취소"):this.btnSave.text=AG.getText("GAME_527","저장"),this.btnReset.text=AG.getText("COMMON_368","리셋"),this.btnReset.alpha=this.saveMode?.4:1,this.btnReset.eventMode=this.saveMode?"none":"static",this.lblSaveHint.visible=!0,this.lblSaveHint.text=this.saveMode?AG.getText("GAME_747","저장할 슬롯을 선택하세요"):AG.getText("GAME_1100","프리셋 길게 누르면 이름 변경"),this.recenterHint()}
- recenterHint(){
- const i=t.ROW_HEIGHT+8;
- this.lblSaveHint.y=i+.5*(t.ROW_HEIGHT-this.lblSaveHint.height)}
- setSaveMode(t){
- this.saveMode=t,this.update()}
- updateLanguage(){
- this.update()}
- async onSlotClick(t){
- if(this.requestPending)return;
- const i=Wx.getInstance();
- if(!i.presetUnlocked)return;
- const s=i.presets[t];
- if(this.saveMode){
- if(0===i.equipedList.length)return vV.getInstance().showMessage(AG.getText("GAME_752","최소한 유물 1개 이상은 배치되어 있어야 합니다.")),void this.setSaveMode(!1);
- const e=this.getSlotName(t),n=s.hasEntries?AG.getValueReplace("GAME_749","##",e,`${
- e}
-  프리셋을 덮어쓰시겠습니까?`):AG.getValueReplace("GAME_748","##",e,`${
- e}
-  프리셋에 현재 상태를 저장하시겠습니까?`);
- return void dK.getInstance().show(n,async()=>{
- await this.doSave(t,s.label),this.setSaveMode(!1)}
- )}
- s.hasEntries?i.getActivePresetSlot()!==t?dK.getInstance().show(AG.getText("GAME_750","선택한 프리셋으로 교체하시겠습니까?"),async()=>{
- await this.doApply(t)}
- ):vV.getInstance().showMessage(AG.getText("GAME_754","이미 적용된 프리셋입니다.")):vV.getInstance().showMessage(AG.getText("GAME_753","비어있는 슬롯입니다. 저장 버튼으로 저장하세요."))}
- onSaveClick(){
- if(this.requestPending)return;
- const t=Wx.getInstance();
- t.presetUnlocked&&(this.saveMode?this.setSaveMode(!1):0!==t.equipedList.length?this.setSaveMode(!0):vV.getInstance().showMessage(AG.getText("GAME_752","최소한 유물 1개 이상은 배치되어 있어야 합니다.")))}
- onResetClick(){
- if(this.requestPending)return;
- if(this.saveMode)return;
- const t=Wx.getInstance();
- t.presetUnlocked&&(0!==t.equipedList.length?dK.getInstance().show(AG.getText("GAME_751","모든 유물을 장착해제 하겠습니까?\n유물 재료는 모두 돌려받고, 레벨은 +0으로 초기화됩니다."),async()=>{
- await this.doBatchUnequip()}
- ):vV.getInstance().showMessage(AG.getText("GAME_755","장착해제할 유물이 없습니다.")))}
- async doSave(t,i){
- if(this.requestPending)return;
- this.requestPending=!0;
- const s=Wx.getInstance(),e=s.equipedList.map(t=>t.kindNum),n=s.equipedList.map(t=>t.enhance||0),h=await hD.getInstance().treasure.savePreset(t,i,e,n);
- this.requestPending=!1,!1!==h.success?(_L.setUserInfo(h.body),s.setData(h.body.treasure,h.body.dungeon),UV.getInstance().updateAll(),this.update(),vV.getInstance().showMessage(AG.getText("GAME_756","프리셋이 저장되었습니다."))):mG.getInstance().showError(h)}
- async doApply(t){
- if(this.requestPending)return;
- this.requestPending=!0;
- const i=await hD.getInstance().treasure.applyPreset(t);
- this.requestPending=!1,!1!==i.success?(_L.setUserInfo(i.body),Wx.getInstance().setData(i.body.treasure,i.body.dungeon),UV.getInstance().updateAll(),this.update(),vV.getInstance().showMessage(AG.getText("GAME_757","프리셋이 적용되었습니다.")),this.onApplied&&this.onApplied()):mG.getInstance().showError(i)}
- async doBatchUnequip(){
- if(this.requestPending)return;
- this.requestPending=!0;
- const t=await hD.getInstance().treasure.batchUnequipTreasures();
- this.requestPending=!1,!1!==t.success?(_L.setUserInfo(t.body),Wx.getInstance().setData(t.body.treasure,t.body.dungeon),UV.getInstance().updateAll(),this.update(),vV.getInstance().showMessage(AG.getText("GAME_758","장착해제할 유물이 없습니다.")),this.onApplied&&this.onApplied()):mG.getInstance().showError(t)}
- }
- ;
- Kt(Vnt,"TreasurePresetBar"),zt(Vnt,"WIDTH",630),zt(Vnt,"ROW_HEIGHT",42),zt(Vnt,"HEIGHT",2*Vnt.ROW_HEIGHT+8),zt(Vnt,"SLOT_BUTTON_WIDTH",118),zt(Vnt,"SLOT_BUTTON_HEIGHT",38),zt(Vnt,"SLOT_GAP",4),zt(Vnt,"ACTION_BUTTON_WIDTH",120),zt(Vnt,"ACTION_BUTTON_RIGHT_MARGIN",10),zt(Vnt,"ACTION_BUTTON_GAP",6),zt(Vnt,"LONG_PRESS_MS",500);
- let Knt=Vnt;
- const znt=class t extends Be{
- constructor(i,s,e,n,h=1,r=150,o=70){
- super(),zt(this,"bg",new qL),zt(this,"topLabel"),zt(this,"bottomLabel"),zt(this,"container",new Be),zt(this,"_customTextColorSet",!1),zt(this,"enabled",!0),zt(this,"_activated",!0),zt(this,"_color",-1),zt(this,"_activatedTextColor",1),zt(this,"_deactivatedTextColor",10066329),zt(this,"onClick"),this.bg.width=r,this.bg.height=o,this.topLabel=new GB(i,s),this.topLabel.iconScale=h,this.bottomLabel=new GB(e,n),this.bottomLabel.iconScale=h,this.bg.x=.5*-this.bg.width,this.bg.y=.5*-this.bg.height,this.updateLabelPositions(),this.container.x=.5*this.bg.width,this.container.y=.5*this.bg.height,this.container.addChild(this.bg),this.container.addChild(this.topLabel),this.container.addChild(this.bottomLabel),this.addChild(this.container),this.eventMode="static",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this),this.color=t.GREEN,this.hitArea=new Pi(0,0,this.bg.width,this.bg.height)}
- updateLabelPositions(){
- const t=""!==this.topLabel.text,i=""!==this.bottomLabel.text;
- if(this.topLabel.visible=t,this.bottomLabel.visible=i,!t&&!i)return;
- if(t&&!i)return this.topLabel.x=.5*-this.topLabel.width,void(this.topLabel.y=.5*-this.topLabel.height);
- if(!t&&i)return this.bottomLabel.x=.5*-this.bottomLabel.width,void(this.bottomLabel.y=.5*-this.bottomLabel.height);
- const s=this.topLabel.height,e=.5*-(s+2+this.bottomLabel.height)+2;
- this.topLabel.x=.5*-this.topLabel.width,this.topLabel.y=e,this.bottomLabel.x=.5*-this.bottomLabel.width,this.bottomLabel.y=e+s+2}
- set activated(i){
- this._activated=i,this._activated?this.bg.setIndex(this._color):this.bg.setIndex(t.GRAY),this.updateTextColor()}
- get activated(){
- return this._activated}
- set color(i){
- if(i===this._color)return;
- if(this._color=i,this.bg.setIndex(this._color),this._customTextColorSet)return;
- let s=this._activatedTextColor;
- switch(this._color){
- case t.BROWN:s=YD.LIGHT_BROWN;
- break;
- case t.GREEN:s=YD.LIGHT_GREEN;
- break;
- case t.LIGHT_GREEN:s=15593912;
- break;
- case t.RED:s=16367536;
- break;
- case t.VIOLET:s=16442110;
- break;
- case t.BLUE:s=13890291;
- break;
- case t.GRAY:s=12303291}
- s!==this._activatedTextColor&&(this._activatedTextColor=s,this.updateTextColor())}
- get color(){
- return this._color}
- get activatedTextColor(){
- return this._activatedTextColor}
- set activatedTextColor(t){
- t!==this._activatedTextColor&&(this._activatedTextColor=t,this._customTextColorSet=!0,this.updateTextColor())}
- get deactivatedTextColor(){
- return this._deactivatedTextColor}
- set deactivatedTextColor(t){
- t!==this._deactivatedTextColor&&(this._deactivatedTextColor=t,this.updateTextColor())}
- updateTextColor(){
- this._activated?(this.topLabel.textColor=this._activatedTextColor,this.bottomLabel.textColor=this._activatedTextColor):(this.topLabel.textColor=this._deactivatedTextColor,this.bottomLabel.textColor=this._deactivatedTextColor)}
- set topIcon(t){
- this.topLabel.texture=ZA.getTexture("UI_Ekkorr",t),this.updateLabelPositions()}
- set topText(t){
- this.topLabel.text=t,this.updateLabelPositions()}
- get topText(){
- return this.topLabel.text}
- set topIconScale(t){
- this.topLabel.iconScale=t,this.updateLabelPositions()}
- set bottomIcon(t){
- this.bottomLabel.texture=ZA.getTexture("UI_Ekkorr",t),this.updateLabelPositions()}
- set bottomText(t){
- this.bottomLabel.text=t,this.updateLabelPositions()}
- get bottomText(){
- return this.bottomLabel.text}
- set bottomIconScale(t){
- this.bottomLabel.iconScale=t,this.updateLabelPositions()}
- set height(t){
- this.bg.height=t,this.bg.y=.5*-this.bg.height,this.updateLabelPositions(),this.container.y=.5*this.bg.height,this.hitArea=new Pi(0,0,this.bg.width,this.bg.height)}
- get height(){
- return this.bg.height}
- set width(t){
- this.bg.width=t,this.bg.x=.5*-this.bg.width,this.updateLabelPositions(),this.container.x=.5*this.bg.width,this.hitArea=new Pi(0,0,this.bg.width,this.bg.height)}
- get width(){
- return this.bg.width}
- onDown(t){
- !1!==this._activated&&(this.container.scale=.9)}
- onUp(t){
- !1!==this._activated&&(this.container.scale=1)}
- onTap(t){
- !1!==this._activated&&(KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),WL(),null!=this.onClick&&this.onClick())}
- }
- ;
- Kt(znt,"CommonTwoIconButton"),zt(znt,"RED",0),zt(znt,"GREEN",1),zt(znt,"BROWN",2),zt(znt,"LIGHT_GREEN",3),zt(znt,"VIOLET",4),zt(znt,"BLUE",5),zt(znt,"GRAY",6),zt(znt,"ORANGE",7);
- let qnt=znt;
- const Xnt=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblSetCount",new YD("",10066329,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"icon",new f6),zt(this,"buffInfo1",new Bnt),zt(this,"buffInfo2",new Bnt),zt(this,"mainContainer",new Be),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideFrame(),this.icon.x=15,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=12,this.mainContainer.addChild(this.lblName),this.mainContainer.addChild(this.lblSetCount),this.buffInfo1.x=135,this.buffInfo1.y=44,this.mainContainer.addChild(this.buffInfo1),this.buffInfo2.x=385,this.buffInfo2.y=44,this.mainContainer.addChild(this.buffInfo2),this.addChild(this.mainContainer),aD.setLabelWrapWidth(this.lblName,this.bg.x+this.bg.width-this.lblName.x-30)}
- onClick(t,i){
- const s=this.data;
- aht.getInstance().show(s,cht.equip)}
- setData(t){
- this.data=t;
- const i=t;
- this.icon.setVO(i);
- let s="";
- TL.getInstance().development&&(s=i.kindNum+". "),this.lblName.text=s+AG.getText(i.getNameKey(),i.name);
- const e=Yx.getInstance().getSetCountInfo(i.kindNum);
- e.total<1?this.lblSetCount.visible=!1:(this.lblSetCount.text=`(${
- e.equipedCount}
- /${
- e.total}
- )`,e.equipedCount<e.total?this.lblSetCount.textColor=10066329:this.lblSetCount.textColor=aD.COLOR_BRIGHT_GREEN,this.lblSetCount.visible=!0),this.lblName.y=20-.5*this.lblName.height,this.lblSetCount.x=this.lblName.x+this.lblName.width+3,this.lblSetCount.y=this.lblName.y+.5*(this.lblName.height-this.lblSetCount.height-1),this.buffInfo1.setVO(i,1),this.buffInfo2.setVO(i,2),(i.desc?i.desc.split("|"):[]).length>1&&i.skillCode2?this.buffInfo2.visible=!0:this.buffInfo2.visible=!1,this.updateCache()}
- updateCache(){
- }
- clearCache(){
- }
- }
- ;
- Kt(Xnt,"TreasureInventoryItemRenderer");
- let Ynt=Xnt;
- const Jnt=class extends XI{
- constructor(){
- let t;
- super(),zt(this,"bg"),zt(this,"icons"),zt(this,"labels"),zt(this,"posList",[0,1,2,3,4,5,640]),zt(this,"mainContainer",new Be),zt(this,"kindNumArray",[]),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=90,this.bg.visible=!1,this.mainContainer.addChild(this.bg),this.icons=[],this.labels=[],aD.DEFAULT_OUTLINE_FONT_OPTION_18.fill=aD.COLOR_WHITE;
- for(let i=0;
- i<7;
- ++i)t=new f6,t.x=11+i*(t.width+18),t.y=7,t.hideEnhance(),this.mainContainer.addChild(t),this.icons.push(t),this.posList[i]=t.x;
- this.posList.push(640),this.addChild(this.mainContainer)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- setData(t){
- const i=t;
- if(!i)return;
- this.kindNumArray=i;
- const s=Wx.getInstance(),e=new Set;
- for(const r of s.equipedList)e.add(r.kindNum);
- for(const r of s.ownedList)e.add(r.kindNum);
- let n;
- const h=i.length;
- for(let r=0;
- r<this.icons.length;
- ++r)n=this.icons[r],r<h?(n.setDataWithKindNum(i[r]),n.visible=!0,n.alpha=e.has(i[r])?1:.35):n.visible=!1}
- clearCache(){
- }
- onClick(t,i){
- this.kindNumArray.length;
- let s=-1;
- for(let e=0;
- e<this.icons.length;
- ++e)if(t>this.posList[e]&&t<this.posList[e+1]){
- s=e;
- break}
- -1!=s&&s<this.kindNumArray.length&&this.icons[s].visible&&this.goDetail(this.kindNumArray[s])}
- goDetail(t){
- tht.getInstance().hide(),aht.getInstance().showInBook(t)}
- }
- ;
- Kt(Jnt,"TreasureBookItemRenderer");
- let Qnt=Jnt;
- const Znt=class t extends O8{
- constructor(){
- super(),zt(this,"lblTitle"),zt(this,"list"),this.lblTitle=new YD(AG.getText("GAME_220","도감"),16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20),this.addChild(this.lblTitle);
- const t=Math.min(KA.safeHeight-750,KA.viewMainY);
- this.list=new R3(Qnt,630,KA.getBookListHeight(t)),this.addChild(this.list),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get className(){
- return"TreasureBookPopup"}
- updateLayout(){
- let t=UV.getInstance().height;
- this.lblTitle.x=10,this.lblTitle.y=t+15,t=this.lblTitle.y+this.lblTitle.height+15,this.list.x=5,this.list.y=t,this.list.setListHeight(this.bg.height-this.list.y-15)}
- setData(){
- this.lblTitle.text=AG.getText("GAME_220","도감"),this.updateList(),this.updateLayout()}
- updateList(){
- const t=Wx.getInstance();
- let i,s=[];
- const e=t.bookList.length;
- for(let h=0;
- h<e;
- ++h)i=t.bookList[h],s.push(i.kindNum);
- s.sort((i,s)=>{
- const e=t.getBookDataByKindNum(i),n=t.getBookDataByKindNum(s);
- return e&&n?n.grade-e.grade:1}
- );
- const n=this.list.getDataLen();
- if(this.list.dataProvider=ZI.chunkArray(s,7),n>this.list.getDataLen()){
- const t=Math.floor(Math.abs(this.list.getContainerY())/80);
- this.list.scrollTo(t)}
- }
- }
- ;
- Kt(Znt,"TreasureBookPopup"),zt(Znt,"_instance");
- let tht=Znt;
- const iht=class t extends x6{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- super()}
- setData(){
- Sht.getInstance().setData(),this.currentSubView=Sht.getInstance(),UV.getInstance().setMode(GV.DUNGEON)}
- get className(){
- return"TreasureView"}
- updateLanguage(){
- this.setData()}
- }
- ;
- Kt(iht,"TreasureView"),zt(iht,"instance");
- let sht=iht;
- const eht=class t extends D4{
- constructor(){
- super(),zt(this,"btnClose",new L6),zt(this,"btnBook",new aK("Book",110)),zt(this,"lblMaxCapacity",new GB("menu_icon_04_on","0/10",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.addChild(this.btnClose),this.btnClose.onClick=()=>{
- Sht.getInstance().setData(),sht.getInstance().currentSubView=Sht.getInstance()}
- ,this.btnBook.width=110,this.btnBook.height=45,this.btnBook.y=.5*(this.bg.height-this.btnBook.height),this.addChild(this.btnBook),this.btnBook.on("pointertap",this.onBook,this),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.btnBook.x=this.btnClose.x-this.btnBook.width-5}
- update(){
- const t=Wx.getInstance().maxSlots,i=Wx.getInstance().equipedKindNums.length;
- this.lblMaxCapacity.text=`${
- i}
- /${
- t}
- `}
- setData(){
- this.update(),this.updateLanguage()}
- onBook(){
- tht.getInstance().setData(),tht.getInstance().show2()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_82","내유물")),this.btnBook.text=AG.getText("GAME_220","도감"),this.updateLayout()}
- }
- ;
- Kt(eht,"TreasureInventorySubMenu"),zt(eht,"instance");
- let nht=eht;
- const hht=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"lblEmpty",new YD("보유한 유물이 없습니다.",10066329,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.list=new R3(Ynt,630,KA.listHeight),this.list.x=5,this.list.y=nht.getInstance().height,this.lblEmpty.x=220,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.list),this.addChild(this.lblEmpty),this.addChild(nht.getInstance()),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onRemoved(){
- }
- setData(){
- nht.getInstance().update(),nht.getInstance().updateLanguage();
- const t=[...Wx.getInstance().ownedList];
- t.sort((t,i)=>{
- const s=Yx.getInstance(),e=s.getSetsByTreasureKindNum(t.kindNum),n=s.getSetsByTreasureKindNum(i.kindNum),h=0==e.length;
- if(h!=(0==n.length))return h?1:-1;
- if(t.grade!=i.grade)return i.grade-t.grade;
- const r=e.length>0?e[0].kindNum:0,o=n.length>0?n[0].kindNum:0;
- return r!=o?o-r:i.sortId-t.sortId}
- ),this.list.getDataLen(),this.list.dataProvider=t,t.length,this.lblEmpty.visible=0===t.length}
- get className(){
- return"TreasureInventorySubView"}
- updateLanguage(){
- this.lblEmpty.text=AG.getText("GAME_90","보유한 유물이 없습니다."),this.setData(),nht.getInstance().updateLanguage()}
- }
- ;
- Kt(hht,"TreasureInventorySubView"),zt(hht,"instance");
- let rht=hht;
- const oht=class t extends O8{
- constructor(){
- super(),zt(this,"abilityBg"),zt(this,"setBg"),zt(this,"icon",new f6),zt(this,"lblName",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblMaxLevel",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblAbilityTitle",new YD("유물능력",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"buffInfo1",new Bnt),zt(this,"buffInfo2",new Bnt),zt(this,"lblBuffDesc1",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_DESC_FONT_OPTION_16)),zt(this,"lblBuffDesc2",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_DESC_FONT_OPTION_16)),zt(this,"lblSetTitle",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"setContainer",new Be),zt(this,"tierLabels",[]),zt(this,"skillLabels",[]),zt(this,"setIcons",[]),zt(this,"lblFooter",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblHonorCoin",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnAction",new kU("UI_GEM","","",.8,160,60)),zt(this,"btnLimitBreak",new kU("PVP_COIN_ON","","",.7,180,60)),zt(this,"btn10LimitBreak",new kU("PVP_COIN_ON","","+10",.7,180,60)),zt(this,"btn100LimitBreak",new kU("PVP_COIN_ON","","+100",.7,180,60)),zt(this,"btnMaxLimitBreak",new kU("PVP_COIN_ON","","MAX",.7,180,60)),zt(this,"multiLimitBreakContainer",new Be),zt(this,"btnResetLimitBreak",new kU("UI_GEM_ICON","","",.7,180,60)),zt(this,"contentContainer",new Be),zt(this,"vo"),zt(this,"mode","unequip"),zt(this,"limitBreakTimer",null),zt(this,"limitBreakStartValue",-1),zt(this,"limitBreakStartHonorCoin",-1),zt(this,"requestPending",!1),zt(this,"bookVo"),this.bg.height<850&&(this.bg.height=850,this.y=KA.safeHeight-850),this.addChild(this.contentContainer),this.icon.hideFrame(),this.icon.x=11,this.icon.y=50,this.contentContainer.addChild(this.icon),this.lblName.x=this.icon.x+this.icon.width+20,this.lblName.y=this.icon.y+5,this.contentContainer.addChild(this.lblName),this.lblMaxLevel.x=this.lblName.x,this.lblMaxLevel.y=this.lblName.y+this.lblName.height+8,this.contentContainer.addChild(this.lblMaxLevel),this.abilityBg=new yB,this.abilityBg.setIndex(2),this.abilityBg.width=620,this.abilityBg.height=130,this.abilityBg.x=11,this.abilityBg.y=this.icon.y+this.icon.height+15,this.contentContainer.addChild(this.abilityBg),this.lblAbilityTitle.text=AG.getText("GAME_146","유물능력"),this.lblAbilityTitle.x=this.abilityBg.x+15,this.lblAbilityTitle.y=this.abilityBg.y+8,this.contentContainer.addChild(this.lblAbilityTitle),this.buffInfo1.x=this.lblAbilityTitle.x,this.buffInfo1.y=this.lblAbilityTitle.y+30,this.lblBuffDesc1.x=this.lblAbilityTitle.x,this.lblBuffDesc1.y=this.buffInfo1.y+2,this.contentContainer.addChild(this.lblBuffDesc1),this.buffInfo2.x=this.lblAbilityTitle.x,this.buffInfo2.y=this.buffInfo1.y+28,this.lblBuffDesc2.x=this.lblAbilityTitle.x,this.lblBuffDesc2.y=this.buffInfo2.y+2,this.contentContainer.addChild(this.lblBuffDesc2);
- const i=this.abilityBg.width-2*this.abilityBg.x;
- aD.setLabelWrapWidth(this.lblBuffDesc1,i),aD.setLabelWrapWidth(this.lblBuffDesc2,i),this.setBg=new yB,this.setBg.setIndex(2),this.setBg.width=620,this.setBg.height=450,this.setBg.x=11,this.setBg.y=this.abilityBg.y+this.abilityBg.height+10,this.contentContainer.addChild(this.setBg),this.lblSetTitle.x=this.setBg.x+15,this.lblSetTitle.y=this.setBg.y+8,this.contentContainer.addChild(this.lblSetTitle),this.setContainer.x=this.setBg.x+15,this.setContainer.y=this.lblSetTitle.y+30,this.contentContainer.addChild(this.setContainer);
- const s=this.setBg.width-2*this.setBg.x;
- for(let e=0;
- e<t.MAX_SET_TIERS;
- e++){
- const t=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_16);
- t.visible=!1,this.setContainer.addChild(t),this.tierLabels.push(t),aD.setLabelWrapWidth(t,s)}
- for(let e=0;
- e<t.MAX_SET_TIERS*t.MAX_SKILLS_PER_TIER;
- e++){
- const t=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_DESC_FONT_OPTION_16);
- t.visible=!1,this.setContainer.addChild(t),this.skillLabels.push(t),aD.setLabelWrapWidth(t,s)}
- for(let e=0;
- e<t.MAX_SET_ICONS;
- e++){
- const t=new f6;
- t.hideEnhance(),t.scale.set(.9),t.visible=!1,this.setContainer.addChild(t),this.setIcons.push(t)}
- this.lblFooter.text=AG.getText("GAME_151","※ 유물재료회수를 하면, 투자한 유물재료는 100% 회수되고, 유물은 판매됩니다."),this.lblFooter.x=20,this.lblFooter.y=this.setBg.y+this.setBg.height+10,aD.setLabelWrapWidth(this.lblFooter,600),this.contentContainer.addChild(this.lblFooter),this.btnAction.showIconLabel=!1,this.btnAction.showTextLabel=!0,this.btnAction.onClick=this.onActionClick.bind(this),this.contentContainer.addChild(this.btnAction),this.btnLimitBreak.labelOrder=kU.TEXT_FIRST,this.btnLimitBreak.text="Max +",this.btnLimitBreak.color=kU.GREEN,this.btnLimitBreak.visible=!1,this.btnLimitBreak.onClick=()=>this.onLimitBreakClick(1),this.contentContainer.addChild(this.btnLimitBreak),this.setupLimitBreakOptionButton(this.btn10LimitBreak,"+10",()=>{
- this.onLimitBreakClick(this.getLimitBreakIncrement(10))}
- ),this.setupLimitBreakOptionButton(this.btn100LimitBreak,"+100",()=>{
- this.onLimitBreakClick(this.getLimitBreakIncrement(100))}
- ),this.setupLimitBreakOptionButton(this.btnMaxLimitBreak,"MAX",()=>{
- this.onLimitBreakClick(this.getMaxLimitBreakIncrement())}
- ),this.multiLimitBreakContainer.visible=!1,this.multiLimitBreakContainer.addChild(this.btn10LimitBreak,this.btn100LimitBreak,this.btnMaxLimitBreak),this.contentContainer.addChild(this.multiLimitBreakContainer),this.btnResetLimitBreak.labelOrder=kU.TEXT_FIRST,this.btnResetLimitBreak.text=AG.getText("GAME_1148","명예코인회수"),this.btnResetLimitBreak.iconText=String(t.LIMIT_BREAK_RESET_GEM_COST),this.btnResetLimitBreak.color=kU.BLUE,this.btnResetLimitBreak.visible=!1,this.btnResetLimitBreak.onClick=this.onResetLimitBreakClick.bind(this),this.contentContainer.addChild(this.btnResetLimitBreak),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get className(){
- return"TreasureDetailPopup"}
- setupLimitBreakOptionButton(t,i,s){
- t.labelOrder=kU.TEXT_FIRST,t.text=i,t.color=kU.GREEN,t.showIconLabel=!0,t.showTextLabel=!0,t.visible=!1,t.onClick=s}
- hide(){
- (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&this.syncLimitBreakToServer(),super.hide()}
- onAdded(){
- super.onAdded(),UV.getInstance().setMode(GV.TREASURE_DETAIL)}
- onRemoved(){
- super.onRemoved(),"book"===this.mode&&tht.getInstance().show2()}
- async onActionClick(){
- (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&await this.syncLimitBreakToServer(),"unequip"===this.mode?this.onUnequip():"equip"===this.mode&&this.onEquip()}
- onLimitBreakClick(i=1){
- if(!this.vo)return;
- const s=FG.getInstance();
- if(!s.loaded)return void vV.getInstance().showMessage(AG.getText("GAME_LOADING","잠시 후 다시 시도해주세요."));
- if(this.vo.limitBreak>=s.getMaxLevel())return;
- if(i<=0)return;
- const e=Math.min(this.vo.limitBreak+i,s.getMaxLevel());
- if(e-this.vo.limitBreak<=0)return;
- const n=s.getCost(this.vo.grade,this.vo.limitBreak,e);
- n>0&&_L.honorCoin<n?vV.getInstance().showMessage(AG.getText("GAME_194","명예코인이 부족합니다.")):(1!==i||this.multiLimitBreakContainer.visible||(this.multiLimitBreakContainer.visible=!0,this.updateLayout()),this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),-1===this.limitBreakStartValue&&(this.limitBreakStartValue=this.vo.limitBreak,this.limitBreakStartHonorCoin=_L.honorCoin),_L.honorCoin-=n,this.vo.limitBreak=e,UV.getInstance().updateAll(),this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout(),Sht.getInstance().setData(),rht.getInstance().setData(),this.limitBreakTimer=setTimeout(async()=>{
- await this.syncLimitBreakToServer(),this.multiLimitBreakContainer.visible=!1,this.updateLayout()}
- ,t.LIMIT_BREAK_DEBOUNCE_DELAY))}
- async syncLimitBreakToServer(){
- if(this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),-1===this.limitBreakStartValue||!this.vo)return this.resetLimitBreak(),!0;
- const t=this.vo.limitBreak-this.limitBreakStartValue;
- if(t<=0)return this.resetLimitBreak(),!0;
- const i=this.vo.kindNum,s=this.limitBreakStartValue,e=this.limitBreakStartHonorCoin,n=await hD.getInstance().treasure.limitBreak(i,t);
- return!1===n.success?(this.vo&&this.vo.kindNum===i&&(this.vo.limitBreak=s),_L.honorCoin=e,UV.getInstance().updateAll(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout()),Sht.getInstance().setData(),rht.getInstance().setData(),this.resetLimitBreak(),mG.getInstance().showError(n),!1):(_L.setUserInfo(n.body),Wx.getInstance().setData(n.body.treasure,n.body.dungeon),UV.getInstance().updateAll(),Sht.getInstance().setData(),rht.getInstance().setData(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout()),this.resetLimitBreak(),!0)}
- resetLimitBreak(){
- this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),this.limitBreakStartValue=-1,this.limitBreakStartHonorCoin=-1}
- getLimitBreakIncrement(t){
- if(!this.vo)return 0;
- const i=FG.getInstance();
- if(!i.loaded)return 0;
- const s=i.getMaxLevel()-this.vo.limitBreak;
- return s<=0?0:Math.min(t,s)}
- getMaxLimitBreakIncrement(){
- if(!this.vo)return 0;
- const t=FG.getInstance();
- return t.loaded?Math.max(0,t.getMaxLevel()-this.vo.limitBreak):0}
- async onResetLimitBreakClick(){
- if(!this.vo)return;
- if(this.vo.limitBreak<1)return;
- if(this.multiLimitBreakContainer.visible=!1,this.updateLayout(),_L.gem<t.LIMIT_BREAK_RESET_GEM_COST)return void vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다."));
- (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&await this.syncLimitBreakToServer();
- const i=dK.getInstance();
- i.outSideClickHide=!0,i.show(AG.getValueReplace("GAME_1149","##",t.LIMIT_BREAK_RESET_GEM_COST,"보석 1000개로 한계돌파를 초기화하시겠습니까?")+`\n(${
- AG.getText("GAME_1149A","누적된 명예코인이 환불됩니다.")}
- )`,async()=>{
- if(!this.vo)return;
- const t=await hD.getInstance().treasure.resetLimitBreak(this.vo.kindNum);
- !1!==t.success?(_L.setUserInfo(t.body),Wx.getInstance().setData(t.body.treasure,t.body.dungeon),UV.getInstance().updateAll(),Sht.getInstance().setData(),rht.getInstance().setData(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout())):mG.getInstance().showError(t)}
- ),i.y=.5*(KA.stageHeight-i.height)}
- async onUnequip(){
- if(!this.vo)return;
- const t=await hD.getInstance().treasure.unequipTreasure(this.vo.kindNum);
- !1!==t.success?(_L.setUserInfo(t.body),Wx.getInstance().setData(t.body.treasure,t.body.dungeon),UV.getInstance().updateAll(),Sht.getInstance().setData(),this.hide()):mG.getInstance().showError(t)}
- async onEquip(){
- if(!this.vo)return;
- if(1==this.checkSlotMax())return;
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- const t=await hD.getInstance().treasure.equipTreasure(this.vo.kindNum);
- if(!1===t.success)return this.setRequestPending(!1),"TREASURE_MAX_SLOTS"==t.error?void this.checkSlotMax():void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),Wx.getInstance().setData(t.body.treasure,t.body.dungeon),UV.getInstance().updateAll(),Sht.getInstance().setData(),rht.getInstance().setData(),this.setRequestPending(!1),this.hide()}
- setRequestPending(t){
- this.requestPending=t}
- checkSlotMax(){
- const t=Wx.getInstance().maxSlots,i=Wx.getInstance().equipedKindNums.length,s=EL.getInstance().getTreasureMaxSlots();
- return i>=t&&(t<s?vV.getInstance().showMessage(AG.getText("GAME_296","유물을 배치할 슬롯이 없습니다.")+"\n"+AG.getText("GAME_51","슬롯을 추가로 확장해주세요.")):vV.getInstance().showMessage(AG.getText("GAME_296","유물을 배치할 슬롯이 없습니다.")+"\n"+AG.getValueReplace("GAME_297","##",s,"최대 ##개까지 배치할 수 있습니다.")),!0)}
- async show(t,i="unequip"){
- await uht.cleanup(),this.mode=i,this.multiLimitBreakContainer.visible=!1,t&&this.updateTreasureInfo(t),this.lblFooter.text=`※ ${
- AG.getText("GAME_151","유물재료회수를 하면, 투자한 유물재료는 100% 회수되고, 유물은 판매됩니다.")}
- `,this.updateActionButton(),this.updateLayout(),this.show2()}
- showInBook(t,i="book"){
- const s=Wx.getInstance().getBookDataByKindNum(t);
- s&&(this.bookVo||(this.bookVo=new $x),this.bookVo.clone(s),this.show(this.bookVo,i))}
- updateTreasureInfo(t){
- this.vo=t,this.icon.setVO(t),this.lblName.text=AG.getText(t.getNameKey(),t.name);
- const i=t.limitBreak>0?` (+${
- t.limitBreak}
- )`:"";
- this.lblMaxLevel.text=`${
- AG.getText("COMMON_389","최대레벨")}
-  : ${
- t.maxLv+t.limitBreak}
- ${
- i}
- `,this.lblAbilityTitle.text=AG.getText("GAME_146","유물능력");
- const s=t.desc?t.desc.split("|"):[],e=s.length;
- for(let h=0;
- h<e;
- ++h)s[h]=s[h].trim();
- let n;
- this.buffInfo1.setVO(t,1),s.length>0?(n=AG.getText(t.skillCode,s[0]),this.lblBuffDesc1.text=`+ ${
- n}
-  : ${
- $D.displayLargeNumberAsAlphabet(t.getSkill1Value())}
- %`,this.lblBuffDesc1.visible=!0):this.lblBuffDesc1.visible=!1,t.skillCode2&&s.length>1?(n=AG.getText(t.skillCode2,s[1]),this.lblBuffDesc2.text=`+ ${
- n}
-  : ${
- $D.displayLargeNumberAsAlphabet(t.getSkill2Value())}
- %`,this.lblBuffDesc2.visible=!0,this.buffInfo2.setVO(t,2),this.buffInfo2.visible=!0):(this.buffInfo2.visible=!1,this.lblBuffDesc2.visible=!1),this.updateSetInfo(t)}
- updateSetInfo(t){
- const i=Yx.getInstance().getSetsByTreasureKindNum(t.kindNum);
- if(0===i.length)return this.lblSetTitle.text="",void this.hideAllSetPool();
- const s=i[0],e=Wx.getInstance(),n=e.equipedKindNums,h=s.itemList.filter(t=>n.includes(t)).length;
- this.lblSetTitle.text=AG.getText(s.getTitleKey(),s.title);
- let r=0,o=0;
- const a=Wx.getInstance(),c=new Map;
- for(const d of a.equipedList)c.set(d.kindNum,d.trans||0);
- const l=s.itemList.filter(t=>n.includes(t)).map(t=>c.get(t)??0).sort((t,i)=>i-t);
- for(let d=0;
- d<s.numSetList.length;
- d++){
- const t=s.numSetList[d],i=h>=t,e=i?l[t-1]??0:0,n=i?e>0?aD.COLOR_ORANGE:aD.COLOR_BRIGHT_GREEN:10066329;
- if(d<this.tierLabels.length){
- const i=this.tierLabels[d],h=e>0?" "+"◆".repeat(e):"";
- i.text=`${
- AG.getText("GAME_148","세트효과")}
-  ${
- d+1}
-  (${
- t}
- /${
- s.itemList.length}
- )${
- h}
- `,i.textColor=n,i.y=r,i.visible=!0}
- r+=28;
- const a=s.descList[d]||[],c=s.skillList[d]||[];
- for(let h=0;
- h<c.length;
- h++){
- if(o<this.skillLabels.length){
- const t=this.skillLabels[o],i=s.getValueAt(e,d,h);
- t.text=`  + ${
- AG.getText(c[h],a[h])||""}
-  : ${
- $D.displayLargeNumberAsAlphabet(i)}
- %`,t.textColor=n,t.y=r,t.visible=!0}
- o++,r+=22}
- r+=10}
- for(let d=s.numSetList.length;
- d<this.tierLabels.length;
- d++)this.tierLabels[d].visible=!1;
- for(let d=o;
- d<this.skillLabels.length;
- d++)this.skillLabels[d].visible=!1;
- r+=5;
- let u=0;
- for(let d=0;
- d<this.setIcons.length;
- d++){
- const t=this.setIcons[d];
- if(t.removeAllListeners(),d<s.itemList.length){
- const i=s.itemList[d],h=e.getBookDataByKindNum(i);
- if(h){
- t.setVO(h),t.hideEnhance(),t.x=u,t.y=r;
- const s=n.includes(i);
- t.alpha=s?1:.3,t.visible=!0,s?(t.eventMode="none",t.cursor="default"):(t.eventMode="static",t.cursor="pointer",t.on("pointertap",()=>this.onSetIconClick(i))),u+=.9*t.width+15}
- else t.visible=!1}
- else t.visible=!1}
- }
- onSetIconClick(t){
- const i=Wx.getInstance(),s=i.equipedList.some(i=>i.kindNum===t)||i.ownedList.some(i=>i.kindNum===t);
- let e;
- const n=i.getBookDataByKindNum(t);
- if(!s){
- e=AG.getText("GAME_329","보유하지 않은 유물입니다."),n&&(e=`[ ${
- AG.getText(n.getNameKey(),n.name)}
-  ]\n${
- e}
- `);
- const t=vV.getInstance();
- return t.textAlignCenter=!0,void t.showMessage(e)}
- e=AG.getText("GAME_331","장착하시겠습니까?"),n&&(e=`[ ${
- AG.getText(n.getNameKey(),n.name)}
-  ]\n${
- e}
- `);
- const h=dK.getInstance();
- h.textAlignCenter=!0,h.show(e,async()=>{
- const i=await hD.getInstance().treasure.equipTreasure(t);
- if(!1===i.success)return"TREASURE_MAX_SLOTS"===i.error?void this.checkSlotMax():void mG.getInstance().showError(i);
- _L.setUserInfo(i.body),Wx.getInstance().setData(i.body.treasure,i.body.dungeon),UV.getInstance().updateAll(),Sht.getInstance().setData(),rht.getInstance().setData(),this.vo&&this.updateTreasureInfo(this.vo)}
- )}
- hideAllSetPool(){
- for(const t of this.tierLabels)t.visible=!1;
- for(const t of this.skillLabels)t.visible=!1;
- for(const t of this.setIcons)t.visible=!1}
- updateActionButton(){
- "unequip"===this.mode?(this.btnAction.text=AG.getText("GAME_150","등록해제"),this.btnAction.color=kU.RED):"equip"===this.mode&&(this.btnAction.text=AG.getText("GAME_149","등록"),this.btnAction.color=kU.BROWN),"book"===this.mode||"shop"===this.mode?this.btnAction.visible=!1:this.btnAction.visible=!0,this.updateLimitBreakButton()}
- updateLimitBreakButton(){
- if(!this.vo)return this.btnLimitBreak.visible=!1,this.btnResetLimitBreak.visible=!1,void(this.multiLimitBreakContainer.visible=!1);
- if("book"===this.mode||"shop"===this.mode)return this.btnLimitBreak.visible=!1,this.btnResetLimitBreak.visible=!1,void(this.multiLimitBreakContainer.visible=!1);
- const t=FG.getInstance();
- if(!t.loaded)return this.btnLimitBreak.visible=!1,this.btnResetLimitBreak.visible=!1,void(this.multiLimitBreakContainer.visible=!1);
- const i=(this.vo.enhance||0)>=this.vo.maxLv,s=(this.vo.trans||0)>=1,e=this.vo.limitBreak<t.getMaxLevel();
- if(i&&s&&e){
- const i=t.getNextLevelCost(this.vo.grade,this.vo.limitBreak);
- this.btnLimitBreak.iconText=$D.displayLargeNumberAsAlphabet(i),this.btnLimitBreak.visible=!0}
- else this.btnLimitBreak.visible=!1,this.multiLimitBreakContainer.visible=!1;
- this.btnResetLimitBreak.visible=this.vo.limitBreak>=1,this.updateMultiLimitBreakButtons()}
- updateMultiLimitBreakButtons(){
- if(!this.vo||!this.btnLimitBreak.visible)return void(this.multiLimitBreakContainer.visible=!1);
- const t=FG.getInstance();
- if(!t.loaded)return void(this.multiLimitBreakContainer.visible=!1);
- this.updateLimitBreakOptionButton(this.btn10LimitBreak,10,"+10"),this.updateLimitBreakOptionButton(this.btn100LimitBreak,100,"+100");
- const i=this.getMaxLimitBreakIncrement();
- if(i>1){
- const s=t.getCost(this.vo.grade,this.vo.limitBreak,this.vo.limitBreak+i);
- this.btnMaxLimitBreak.text="MAX",this.btnMaxLimitBreak.iconText=$D.displayLargeNumberAsAlphabet(s),this.btnMaxLimitBreak.activated=_L.honorCoin>=s,this.btnMaxLimitBreak.visible=!0}
- else this.btnMaxLimitBreak.visible=!1;
- this.btn10LimitBreak.visible||this.btn100LimitBreak.visible||this.btnMaxLimitBreak.visible||(this.multiLimitBreakContainer.visible=!1)}
- updateLimitBreakOptionButton(t,i,s){
- if(!this.vo)return void(t.visible=!1);
- const e=FG.getInstance(),n=this.getLimitBreakIncrement(i);
- if(n<i)return void(t.visible=!1);
- const h=e.getCost(this.vo.grade,this.vo.limitBreak,this.vo.limitBreak+n);
- t.text=s,t.iconText=$D.displayLargeNumberAsAlphabet(h),t.activated=_L.honorCoin>=h,t.visible=!0}
- updateLayout(){
- const t=this.bg.height-75,i=[];
- this.btnLimitBreak.visible&&i.push(this.btnLimitBreak),this.btnResetLimitBreak.visible&&i.push(this.btnResetLimitBreak),this.btnAction.visible&&i.push(this.btnAction);
- const s=i.reduce((t,i)=>t+i.width,0)+12*Math.max(0,i.length-1);
- let e=.5*(this.bg.width-s);
- for(const h of i)h.x=e,h.y=t,e+=h.width+12;
- if(this.multiLimitBreakContainer.visible&&this.btnLimitBreak.visible){
- const t=5;
- let i=this.btnLimitBreak.y;
- const s=[this.btn10LimitBreak,this.btn100LimitBreak,this.btnMaxLimitBreak];
- for(const e of s)e.visible&&(i-=e.height+t,e.x=this.btnLimitBreak.x,e.y=i)}
- this.lblFooter.y=t-this.lblFooter.height-7;
- let n=this.lblFooter.y-7-this.setBg.y;
- n>550&&(n=550),this.setBg.height=n}
- }
- ;
- Kt(oht,"TreasureDetailPopup"),zt(oht,"_instance"),zt(oht,"MAX_SET_TIERS",3),zt(oht,"MAX_SKILLS_PER_TIER",3),zt(oht,"MAX_SET_ICONS",6),zt(oht,"LIMIT_BREAK_RESET_GEM_COST",1e3),zt(oht,"LIMIT_BREAK_DEBOUNCE_DELAY",3e3);
- let aht=oht;
- var cht=(t=>(t.unequip="unequip",t.equip="equip",t.book="book",t.shop="shop",t))(cht||{
- }
- );
- const lht=class t extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblSetCount",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"btnUpgrade",new qnt("Core1","0","Core1","")),zt(this,"btn10",new qnt("Core1","0","Core1","")),zt(this,"btn100",new qnt("Core1","0","Core1","")),zt(this,"multiLevelContainer",new Be),zt(this,"rapidClickCount",0),zt(this,"lastRapidClickTime",0),zt(this,"isMultiLevel",!1),zt(this,"frameRunning",!1),zt(this,"lastCoresSnapshot",""),zt(this,"detailClickBlockedUntil",0),zt(this,"icon",new f6),zt(this,"buffInfo1",new Bnt),zt(this,"buffInfo2",new Bnt),zt(this,"mainContainer",new Be),zt(this,"hideTimer",null),zt(this,"cnt",0),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideFrame(),this.icon.x=15,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=12,this.mainContainer.addChild(this.lblName),this.mainContainer.addChild(this.lblSetCount),this.buffInfo1.x=135,this.buffInfo1.y=44,this.mainContainer.addChild(this.buffInfo1),this.buffInfo2.x=325,this.buffInfo2.y=44,this.mainContainer.addChild(this.buffInfo2),this.btnUpgrade.topIconScale=.7,this.btnUpgrade.bottomIconScale=.7,this.btnUpgrade.color=qnt.BROWN,this.btnUpgrade.height=60,this.btnUpgrade.width=110,this.btnUpgrade.x=this.bg.width-this.btnUpgrade.width-10,this.btnUpgrade.y=.5*(this.bg.height-this.btnUpgrade.height)-2,this.mainContainer.addChild(this.btnUpgrade),this.btnUpgrade.on("pointerdown",()=>this.blockDetailClick(),this),this.btnUpgrade.on("pointertap",()=>this.onUpgradeOrLimitBreak(),this),this.addChild(this.mainContainer),this.addChild(this.multiLevelContainer),this.multiLevelContainer.visible=!1,this.btn10.topIconScale=.7,this.btn10.bottomIconScale=.7,this.btn10.color=qnt.BROWN,this.btn10.height=60,this.btn10.width=110,this.btn10.x=this.btnUpgrade.x-this.btn10.width-5,this.btn10.y=this.btnUpgrade.y,this.multiLevelContainer.addChild(this.btn10),this.btn10.on("pointerdown",()=>this.blockDetailClick(),this),this.btn10.on("pointertap",()=>{
- const t=this.data,i=this.getNextEnhanceIncrement(t.enhance,10,t.maxLv+t.limitBreak);
- i>0&&this.onUpgradeMulti(i)}
- ,this),this.btn100.topIconScale=.7,this.btn100.bottomIconScale=.7,this.btn100.color=qnt.BROWN,this.btn100.height=60,this.btn100.width=110,this.btn100.x=this.btn10.x-this.btn100.width-5,this.btn100.y=this.btnUpgrade.y,this.multiLevelContainer.addChild(this.btn100),this.btn100.on("pointerdown",()=>this.blockDetailClick(),this),this.btn100.on("pointertap",()=>{
- const t=this.data,i=this.getNextEnhanceIncrement(t.enhance,100,t.maxLv+t.limitBreak);
- i>0&&this.onUpgradeMulti(i)}
- ,this),aD.setLabelWrapWidth(this.lblName,this.btnUpgrade.x-this.lblName.x)}
- isLimitBreakAvailable(t){
- if(!t)return!1;
- if((t.trans||0)<1)return!1;
- const i=FG.getInstance();
- return!(!i.loaded||t.limitBreak>=i.getMaxLevel()||(t.enhance||0)<t.maxLv)}
- splitForTwoLines(t){
- const i=(t??"").trim();
- if(!i)return{
- top:"",bottom:""}
- ;
- if(i.length<=8)return{
- top:i,bottom:""}
- ;
- const s=i.indexOf(" ");
- if(s>0)return{
- top:i.slice(0,s),bottom:i.slice(s+1).trim()}
- ;
- const e=Math.ceil(i.length/2);
- return{
- top:i.slice(0,e),bottom:i.slice(e)}
- }
- onUpgradeOrLimitBreak(){
- const t=this.data;
- t&&(t.enhance>=t.maxLv+t.limitBreak&&this.isLimitBreakAvailable(t)?aht.getInstance().show(t,cht.unequip):this.onUpgradeMulti(1))}
- getNextEnhanceIncrement(t,i,s){
- const e=t%i;
- let n=0===e?i:i-e;
- return s>0&&(n=Math.min(n,s-t),n=Math.max(n,0)),n}
- calcTotalEnhanceCost(t,i){
- if(i<=0)return[0,0,0,0];
- const s=i*(2*t.enhance+i+1)/2;
- return t.openCost.map(i=>Math.floor(i*t.upCost*s))}
- getNonZeroCores(t){
- const i=[];
- for(let s=0;
- s<t.length;
- s++)t[s]>0&&i.push({
- idx:s,cost:t[s]}
- );
- return i.sort((t,i)=>i.cost-t.cost),i}
- setCoreButton(t,i){
- const s=this.getNonZeroCores(i);
- s.length>=2?(t.topIcon=`Core${
- s[0].idx+1}
- `,t.topText=$D.displayLargeNumberAsAlphabet(s[0].cost),t.bottomIcon=`Core${
- s[1].idx+1}
- `,t.bottomText=$D.displayLargeNumberAsAlphabet(s[1].cost)):1===s.length?(t.topIcon=`Core${
- s[0].idx+1}
- `,t.topText=$D.displayLargeNumberAsAlphabet(s[0].cost),t.bottomText=""):(t.topText="",t.bottomText="")}
- isPointInButton(t,i,s){
- return!!t.visible&&i>=t.x&&i<=t.x+t.width&&s>=t.y&&s<=t.y+t.height}
- isPointInMultiLevelButton(t,i){
- return!!this.multiLevelContainer.visible&&(this.isPointInButton(this.btn10,t,i)||this.isPointInButton(this.btn100,t,i))}
- blockDetailClick(t=300){
- this.detailClickBlockedUntil=Math.max(this.detailClickBlockedUntil,Date.now()+t)}
- onClick(t,i){
- if(Date.now()<this.detailClickBlockedUntil)return;
- if(this.isPointInMultiLevelButton(t,i))return;
- if(t>=this.btnUpgrade.x-10)return;
- const s=this.data;
- aht.getInstance().show(s,cht.unequip)}
- onUpgradeMulti(i){
- const s=this.data;
- if(1===i){
- const t=Date.now();
- t-this.lastRapidClickTime<500?this.rapidClickCount++:this.rapidClickCount=1,this.lastRapidClickTime=t,this.rapidClickCount>=3&&!this.multiLevelContainer.visible&&(this.rapidClickCount=0,this.showMultiLevel())}
- const e=s.maxLv+s.limitBreak;
- if(s.enhance>=e)return void vV.getInstance().showMessage(AG.getText("GAME_139","최대 강화 레벨입니다."));
- const n=Math.min(i,e-s.enhance);
- if(n<=0)return;
- const h=this.calcTotalEnhanceCost(s,n),r=Wx.getInstance(),o=r.getCores();
- for(let t=0;
- t<4;
- t++)if(h[t]>o[t])return void vV.getInstance().showMessage(AG.getText("GAME_155","유물재료가 부족합니다."));
- r.core1-=h[0],r.core2-=h[1],r.core3-=h[2],r.core4-=h[3],Rx.getInstance().userCores=r.getCores(),UV.getInstance().updateAll(),s.enhance+=n,this.setData(s),t.targetEnhances.set(s.kindNum,s.enhance),t.markDirtyAndSchedule(),s.enhance>=e?(this.blockDetailClick(),this.hideMultiLevel()):this.isMultiLevel&&this.resetHideTimer(),NV.get().play(this,2,.5*(this.bg.height-104))}
- showMultiLevel(){
- if(!this.data)return;
- const t=this.data;
- t.enhance>=t.maxLv+t.limitBreak||(this.isMultiLevel=!0,this.multiLevelContainer.visible=!0,this.updateMultiLevelButtons(),this.startButtonUpdateInterval(),this.resetHideTimer())}
- hideMultiLevel(){
- this.isMultiLevel=!1,this.multiLevelContainer.visible=!1,this.stopButtonUpdateInterval(),this.clearHideTimer()}
- resetHideTimer(){
- this.clearHideTimer(),this.hideTimer=setTimeout(()=>{
- this.hideMultiLevel()}
- ,t.HIDE_DELAY)}
- clearHideTimer(){
- null!==this.hideTimer&&(clearTimeout(this.hideTimer),this.hideTimer=null)}
- updateMultiLevelButtons(){
- if(!this.multiLevelContainer.visible)return;
- if(!this.data)return;
- const t=this.data,i=Wx.getInstance().getCores();
- let s=!1;
- const e=[{
- btn:this.btn10,unit:10}
- ,{
- btn:this.btn100,unit:100}
- ];
- for(const{
- btn:n,unit:h}
- of e){
- const e=this.getNextEnhanceIncrement(t.enhance,h,t.maxLv+t.limitBreak);
- if(e>0){
- const h=this.calcTotalEnhanceCost(t,e);
- this.setCoreButton(n,h);
- let r=!0;
- for(let t=0;
- t<4;
- t++)if(h[t]>i[t]){
- r=!1;
- break}
- n.activated=r,n.visible=!0,s=!0}
- else n.visible=!1}
- s||(this.blockDetailClick(),this.hideMultiLevel())}
- onFrame(){
- var t,i,s,e;
- if(this.cnt-- >0)return;
- if(null==(null==(e=null==(s=null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent)?void 0:s.parent)?void 0:e.parent))return void this.stopButtonUpdateInterval();
- if(this.cnt=30,!this.multiLevelContainer.visible)return;
- const n=Wx.getInstance().getCores(),h=`${
- n[0]}
- ,${
- n[1]}
- ,${
- n[2]}
- ,${
- n[3]}
- `;
- h!==this.lastCoresSnapshot&&(this.lastCoresSnapshot=h,this.updateMultiLevelButtons())}
- startButtonUpdateInterval(){
- this.frameRunning||(this.frameRunning=!0,this.lastCoresSnapshot="",GM.getInstance().add(this.onFrame,this))}
- stopButtonUpdateInterval(){
- this.frameRunning&&(this.frameRunning=!1,GM.getInstance().remove(this.onFrame,this))}
- static markDirtyAndSchedule(){
- t.isDirty=!0,null!==t.updateTimer&&clearTimeout(t.updateTimer),t.updateTimer=setTimeout(()=>{
- t.sendToServer(),t.updateTimer=null,t.isDirty=!1}
- ,t.DEBOUNCE_DELAY)}
- static async sendToServer(){
- if(0===t.targetEnhances.size)return;
- const i=[],s=[];
- t.targetEnhances.forEach((t,e)=>{
- i.push(e),s.push(t)}
- ),t.targetEnhances.clear();
- let e=await hD.getInstance().treasure.batchUpgradeTreasure(i.join("|"),s.join("|"));
- if(!1===e.success){
- const t=await hD.getInstance().treasure.getMyTreasureList();
- return t.success&&(_L.setUserInfo(t.body),Wx.getInstance().setData(t.body.treasure,t.body.dungeon),UV.getInstance().updateAll(),Sht.getInstance().setData()),void mG.getInstance().showError(e)}
- _L.setUserInfo(e.body),Wx.getInstance().setData(e.body.treasure,e.body.dungeon),UV.getInstance().updateAll()}
- static async cleanup(){
- null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.isDirty&&(await t.sendToServer(),t.isDirty=!1)}
- setData(t){
- this.data=t;
- const i=t;
- this.icon.setVO(i);
- const s=AG.getText(i.getNameKey(),i.name);
- this.lblName.text=s;
- const e=Yx.getInstance().getSetCountInfo(i.kindNum);
- e.total<1?this.lblSetCount.visible=!1:(this.lblSetCount.text=`(${
- e.equipedCount}
- /${
- e.total}
- )`,e.equipedCount<e.total?this.lblSetCount.textColor=10066329:this.lblSetCount.textColor=aD.COLOR_BRIGHT_GREEN,this.lblSetCount.visible=!0),this.lblName.y=20-.5*this.lblName.height,this.lblSetCount.x=this.lblName.x+this.lblName.width+3,this.lblSetCount.y=this.lblName.y+.5*(this.lblName.height-this.lblSetCount.height-1),this.buffInfo1.setVO(i,1),this.buffInfo2.setVO(i,2),(i.desc?i.desc.split("|"):[]).length>1&&i.skillCode2?this.buffInfo2.visible=!0:this.buffInfo2.visible=!1,i.enhance<i.maxLv+i.limitBreak?(this.btnUpgrade.topLabel.iconHidden=!1,this.btnUpgrade.bottomLabel.iconHidden=!1,this.btnUpgrade.topLabel.textSize=17,this.btnUpgrade.bottomLabel.textSize=17,this.btnUpgrade.topLabel.textColor=16777215,this.btnUpgrade.bottomLabel.textColor=16777215,this.setCoreButton(this.btnUpgrade,i.getEnhanceCost()),this.btnUpgrade.activated=!0,this.btnUpgrade.visible=!0):this.isLimitBreakAvailable(i)?(this.btnUpgrade.topLabel.iconHidden=!0,this.btnUpgrade.bottomLabel.iconHidden=!0,this.btnUpgrade.topLabel.textSize=17,this.btnUpgrade.bottomLabel.textSize=17,this.btnUpgrade.topLabel.textColor=16766282,this.btnUpgrade.bottomLabel.textColor=16766282,this.btnUpgrade.topText="Max +",this.btnUpgrade.bottomText="",this.btnUpgrade.activated=!0,this.btnUpgrade.visible=!0):(this.btnUpgrade.topLabel.iconHidden=!0,this.btnUpgrade.bottomLabel.iconHidden=!0,this.btnUpgrade.topLabel.textSize=17,this.btnUpgrade.bottomLabel.textSize=17,this.btnUpgrade.topLabel.textColor=16777215,this.btnUpgrade.bottomLabel.textColor=16777215,this.btnUpgrade.topText="Max",this.btnUpgrade.bottomText="",this.btnUpgrade.activated=!1,this.btnUpgrade.visible=!0),this.updateMultiLevelButtons(),this.updateCache()}
- updateCache(){
- }
- clearCache(){
- }
- }
- ;
- Kt(lht,"TreasureItemRenderer"),zt(lht,"updateTimer",null),zt(lht,"DEBOUNCE_DELAY",3e3),zt(lht,"isDirty",!1),zt(lht,"targetEnhances",new Map),zt(lht,"HIDE_DELAY",5e3);
- let uht=lht;
- const dht=class t extends AB{
- constructor(){
- super(),zt(this,"lblGuide"),zt(this,"btnGoDungeon"),this.lblGuide=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.btnGoDungeon=new aK("던전 바로가기",200),this.btnGoDungeon.height=45,this.contentContainer.addChild(this.btnGoDungeon),this.btnGoDungeon.on("pointertap",this.onGoDungeon,this),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- this.title=AG.getText("GAME_391","유물 안내");
- const t=[`1. ${
- AG.getText("GAME_392","[유물]은 [던전] 재료를 이용해서 구매하거나 업그레이드 할 수 있습니다.")}
- `,`2. ${
- AG.getText("GAME_393","[던전]은 [전투-던전] 메뉴를 통해 접근할 수 있습니다.")}
- `,`3. ${
- AG.getText("GAME_394","모든 [유물]은 오직 1개씩만 보유할 수 있습니다. 중복으로 보유할 수 없습니다.")}
- `,`4. ${
- AG.getText("GAME_395","[유물]을 장착해제 하면, 강화레벨이 0으로 초기화 되고, 강화레벨에 들어간 던전재료는 모두 돌려받습니다.")}
- `,`5. ${
- AG.getText("GAME_396","낮은 등급의 유물을 구매하면, [상점]에 높은 등급의 유물이 등장합니다. 높은 등급의 유물을 얻으려면, 낮은 등급의 유물들을 모두 구매하세요.")}
- `,`6. ${
- AG.getText("GAME_397","[상점]에는 1성부터 5성까지의 유물만 등장합니다. 모든 유물을 다 구매하면, [명예상점]에서 6성 유물을 구매할 수 있게 됩니다.")}
- `];
- this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.btnGoDungeon.text=AG.getText("GAME_398","던전 바로가기"),this.btnGoDungeon.x=.5*(this.width-this.btnGoDungeon.width),this.btnGoDungeon.y=this.lblGuide.y+this.lblGuide.height+15,this.height=this.btnGoDungeon.y+this.btnGoDungeon.height+30,await this.loadImage(),super.show()}
- onGoDungeon(){
- this.hide();
- const t=Xti.getInstance();
- S4.getInstance().setExpandedMode(!1),P6.getInstance().setData(),S4.getInstance().currentView=P6.getInstance(),AV.currentIndex=4;
- for(let i=0;
- i<6;
- i++)t.getMenu(i).selected=4===i;
- Xti.getInstance().setMenuSelected(4),Mit.getInstance().setData(),P6.getInstance().currentSubView=Mit.getInstance()}
- getDefaultPositionY(){
- return.45*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- Kt(dht,"TreasureGuidePopup"),zt(dht,"_instance");
- let fht=dht;
- const pht=class t extends aG{
- constructor(){
- super(),zt(this,"onConfirmed",null),zt(this,"lblQuestion",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblCost",new GB("UI_GEM","0",16768256,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnCancel",new kU("","","취소",.8,150,70)),zt(this,"btnConfirm",new kU("UI_GEM","200","확인",.8,180,70)),this.contentContainer.addChild(this.lblQuestion,this.lblCost,this.btnCancel,this.btnConfirm),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.outSideClickHide=!0}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- showConfirm(t,i){
- this.onConfirmed=i,this.title=AG.getText("GAME_242","유물 슬롯 확장"),this.lblQuestion.text=AG.getText("GAME_243","유물 슬롯을 추가하시겠습니까? "),this.lblCost.text=`${
- t.toLocaleString()}
- `,this.btnConfirm.iconText=String(t),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
- onConfirmClick(){
- this.hide(),this.onConfirmed&&(this.onConfirmed(),this.onConfirmed=null)}
- updateLayout(){
- const t=.5*this.width;
- this.lblQuestion.x=t-.5*this.lblQuestion.width,this.lblQuestion.y=90,this.lblCost.x=t-.5*this.lblCost.width,this.lblCost.y=this.lblQuestion.y+this.lblQuestion.height+25;
- const i=this.lblCost.y+this.lblCost.height+40,s=this.btnConfirm.width+16+this.btnCancel.width;
- this.btnConfirm.x=t-.5*s,this.btnConfirm.y=i,this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+16,this.btnCancel.y=i,this.height=i+this.btnConfirm.height+50}
- }
- ;
- Kt(pht,"TreasureSlotExpandPopup"),zt(pht,"instance");
- let ght=pht;
- const mht=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"buffInfo1",new Bnt),zt(this,"buffInfo2",new Bnt),zt(this,"btnBuy",new qnt("Core1","0","Core1","")),zt(this,"icon",new f6),zt(this,"mainContainer",new Be),zt(this,"requestPending",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideEnhance(),this.icon.hideFrame(),this.icon.x=15,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=12,this.mainContainer.addChild(this.lblName),this.buffInfo1.x=135,this.buffInfo1.y=44,this.mainContainer.addChild(this.buffInfo1),this.buffInfo2.x=315,this.buffInfo2.y=44,this.mainContainer.addChild(this.buffInfo2),this.btnBuy.topIconScale=.7,this.btnBuy.bottomIconScale=.7,this.btnBuy.color=qnt.BROWN,this.btnBuy.height=60,this.btnBuy.width=120,this.btnBuy.x=this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.mainContainer.addChild(this.btnBuy),this.btnBuy.on("pointertap",this.onBuy,this),this.addChild(this.mainContainer)}
- getNonZeroCores(t){
- const i=[];
- for(let s=0;
- s<t.length;
- s++)t[s]>0&&i.push({
- idx:s,cost:t[s]}
- );
- return i.sort((t,i)=>i.cost-t.cost),i}
- setCoreButton(t,i){
- const s=this.getNonZeroCores(i);
- s.length>=2?(t.topIcon=`Core${
- s[0].idx+1}
- `,t.topText=$D.displayLargeNumberAsAlphabet(s[0].cost),t.bottomIcon=`Core${
- s[1].idx+1}
- `,t.bottomText=$D.displayLargeNumberAsAlphabet(s[1].cost)):1===s.length?(t.topIcon=`Core${
- s[0].idx+1}
- `,t.topText=$D.displayLargeNumberAsAlphabet(s[0].cost),t.bottomText=""):(t.topText="",t.bottomText="")}
- async onBuy(t){
- const i=this.data.bookVO,s=i.openCost,e=Wx.getInstance().getCores();
- for(let r=0;
- r<4;
- r++)if(s[r]>e[r])return void vV.getInstance().showMessage(AG.getText("GAME_155","유물재료가 부족합니다."));
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- let n=await hD.getInstance().treasure.buy(i.kindNum);
- if(0==n.success)return this.setRequestPending(!1),void mG.getInstance().showError(n);
- const h=Wx.getInstance().equipedKindNums;
- _L.setUserInfo(n.body),Wx.getInstance().setData(n.body.treasure,n.body.dungeon),Oht.invalidateCachedTransInfo(),Wx.getInstance().equipedKindNums.length>h.length?vV.getInstance().showMessage(AG.getText("GAME_300","슬롯에 추가되었습니다.")):vV.getInstance().showMessage(AG.getText("GAME_302","[내유물]로 이동했습니다.")),UV.getInstance().updateAll(),_ht.getInstance().setData(),this.setRequestPending(!1),nV.getInstance().getStatus()}
- setRequestPending(t){
- this.requestPending=t}
- setData(t){
- this.data=t;
- const i=t.bookVO;
- this.icon.setVO(i),this.lblName.text=AG.getText(i.getNameKey(),i.name),this.buffInfo1.setVO(i,1),i.skillCode2?(this.buffInfo2.visible=!0,this.buffInfo2.setVO(i,2)):this.buffInfo2.visible=!1,this.setCoreButton(this.btnBuy,i.openCost),this.updateCache()}
- updateCache(){
- }
- clearCache(){
- }
- onClick(t,i){
- if(t>=this.btnBuy.x-10)return;
- const s=this.data.bookVO;
- aht.getInstance().showInBook(s.kindNum,cht.shop)}
- }
- ;
- Kt(mht,"TreasureShopItemRenderer");
- let wht=mht;
- const vht=class t extends D4{
- constructor(){
- super(),zt(this,"lblTime",new YD("04:00",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblCost",new GB("UI_GEM","100",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnRefresh",new aK("새로고침",110)),zt(this,"btnClose",new L6),zt(this,"cnt",0),zt(this,"duration",3600),zt(this,"lastUpdateTime",0),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.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=()=>{
- Sht.getInstance().updateLanguage(),sht.getInstance().currentSubView=Sht.getInstance()}
- ,this.lastUpdateTime=Date.now(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- 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}
- onAdded(){
- this.lastUpdateTime=Wx.getInstance().lastBuyRefreshTime,GM.getInstance().add(this.onFrame,this)}
- onRemoved(){
- GM.getInstance().remove(this.onFrame,this)}
- onFrame(){
- if(this.cnt-- >0)return;
- this.cnt=5;
- let t=this.duration-.001*(ix.time-this.lastUpdateTime);
- t<=0&&(t=0),this.updateCostLabel(t),this.lblTime.text=uU.displayTimeAsMMSS(t),this.updateLayout()}
- updateCostLabel(t){
- if(t>0)this.lblCost.text=String(100),this.lblCost.textColor=aD.DEFAULT_COLOR,this.btnRefresh.hideRedDot();
- else if(this.lblCost.text="FREE",this.lblCost.textColor=aD.COLOR_DEEP_SKYBLUE,!Wx.getInstance().allPurchased){
- this.btnRefresh.showRedDot();
- const t=5-Math.floor(.5*this.btnRefresh.width),i=-Math.floor(.5*this.btnRefresh.height)-7;
- this.btnRefresh.updateRedDotPos(t,i)}
- }
- async onRefresh(){
- if(this.duration-.001*(ix.time-this.lastUpdateTime)>0)return dK.getInstance().show(AG.getValueReplace("GAME_210","##",100,"보석 100개를 사용하고, 유물목록을 새로 갱신하겠습니다.")+"\n("+AG.getValueReplace("GAME_54","##",60,"60분마다 무료로 목록을 갱신할 수 있습니다.")+")",()=>this.onRefreshTreasures(!0)),void(dK.getInstance().y=480);
- this.onRefreshTreasures(!1)}
- async onRefreshTreasures(t){
- let i=await hD.getInstance().treasure.refreshBuyableTreasureList(t);
- 0!=i.success?(_L.setUserInfo(i.body),_ht.getInstance().setData(),UV.getInstance().updateAll(),this.lastUpdateTime=Wx.getInstance().lastBuyRefreshTime):mG.getInstance().showError(i)}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_154","유물 상점")),this.btnRefresh.text=AG.getText("COMMON_60","새로고침"),this.updateLayout()}
- }
- ;
- Kt(vht,"TreasureShopSubMenu"),zt(vht,"instance");
- let bht=vht;
- const yht=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"lblEmpty",new YD("구매 가능한 유물이 없습니다.",10066329,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),this.list=new R3(wht,630,KA.listHeight),this.list.x=5,this.list.y=bht.getInstance().height,this.lblEmpty.align="center",this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.list),this.addChild(this.lblEmpty),this.addChild(bht.getInstance()),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onRemoved(){
- }
- setData(){
- HV.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"TreasureShop"),bht.getInstance().updateLanguage();
- const t=Wx.getInstance();
- let i=[];
- const s=Math.min(t.buyableCount,5);
- for(let e=0;
- e<s;
- e++){
- const s=t.buyableList[e],n=t.getBookDataByKindNum(s.kindNum);
- n&&i.push({
- slotId:s.slotId,bookVO:n}
- )}
- if(this.list.dataProvider=i,0===i.length){
- this.lblEmpty.visible=!0,t.allPurchased?this.lblEmpty.text=AG.getText("GAME_156","모든 유물을 구매했습니다.")+"\n"+AG.getText("GAME_157","명예상점에서 유물을 구매하세요."):this.lblEmpty.text=AG.getText("GAME_158","구매 가능한 유물이 없습니다.");
- const i=320;
- this.lblEmpty.x=i-.5*this.lblEmpty.width}
- else this.lblEmpty.visible=!1}
- get className(){
- return"TreasureShopSubView"}
- updateLanguage(){
- this.lblEmpty.text=AG.getText("GAME_158","구매 가능한 유물이 없습니다."),this.setData(),bht.getInstance().updateLanguage()}
- }
- ;
- Kt(yht,"TreasureShopSubView"),zt(yht,"instance");
- let _ht=yht;
- const Mht=class t extends D4{
- constructor(){
- super(),zt(this,"lblMaxCapacity",new GB("menu_icon_04_on","0/10",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnShop",new aK("상점",110)),zt(this,"btnMyTreasure",new aK("내유물",110)),zt(this,"btnPreset",new aK("프리셋",90)),zt(this,"btnTrans",new aK("초월",110)),zt(this,"btnGuide"),zt(this,"btnSlotAdd"),zt(this,"requestPending",!1),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnShop.width=110,this.btnShop.height=45,this.btnShop.y=.5*(this.bg.height-this.btnShop.height),this.addChild(this.btnShop),this.btnMyTreasure.width=110,this.btnMyTreasure.height=45,this.btnMyTreasure.y=.5*(this.bg.height-this.btnMyTreasure.height),this.addChild(this.btnMyTreasure),this.btnPreset.width=90,this.btnPreset.height=45,this.btnPreset.y=.5*(this.bg.height-this.btnPreset.height),this.addChild(this.btnPreset),this.btnTrans.width=110,this.btnTrans.height=45,this.btnTrans.y=.5*(this.bg.height-this.btnTrans.height),this.addChild(this.btnTrans),this.layoutRightButtons(),this.btnShop.on("pointertap",this.onShop,this),this.btnMyTreasure.on("pointertap",this.onMyTreasure,this),this.btnPreset.on("pointertap",this.onPreset,this),this.btnTrans.on("pointertap",this.onTrans,this),this.btnSlotAdd=new mB("UI_Ekkorr","Btn_Plus"),this.btnSlotAdd.y=this.lblMaxCapacity.y+.5*(this.lblMaxCapacity.height-this.btnSlotAdd.height),this.addChild(this.btnSlotAdd),this.btnSlotAdd.onClick=this.onSlotAddBtnClick.bind(this),this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- fht.getInstance().showGuide()}
- ),HV.getInstance().registerSubMenuButtonGetter(t=>"btnShop"===t&&this.btnShop.visible?{
- parent:this,btn:{
- x:this.btnShop.x,y:this.btnShop.y,width:this.btnShop.width,height:this.btnShop.height}
- }
- :null),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.layoutRightButtons(),this.btnSlotAdd.x=this.lblMaxCapacity.x+this.lblMaxCapacity.width+5,this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
- layoutRightButtons(){
- this.btnShop.x=640-this.btnShop.width-6,this.btnMyTreasure.x=this.btnShop.x-this.btnMyTreasure.width-2,this.btnTrans.x=this.btnMyTreasure.x-this.btnTrans.width-2;
- const t=this.btnTrans.visible?this.btnTrans.x:this.btnMyTreasure.x;
- this.btnPreset.x=t-this.btnPreset.width-2}
- update(){
- const t=Wx.getInstance(),i=t.maxSlots,s=t.equipedKindNums.length;
- this.lblMaxCapacity.text=`${
- s}
- /${
- i}
- `;
- const e=EL.getInstance().getTreasureMaxSlots();
- this.btnSlotAdd.visible=i<e,this.btnPreset.visible=t.presetUnlocked;
- const n=Kt(t=>5===t.grade||6===t.grade,"isTransTarget"),h=t.equipedList.filter(n).length+t.ownedList.filter(n).length;
- this.btnTrans.visible=h>=20,this.layoutRightButtons()}
- setData(){
- this.update()}
- onShop(){
- _ht.getInstance().setData(),sht.getInstance().currentSubView=_ht.getInstance()}
- onMyTreasure(){
- rht.getInstance().setData(),rht.getInstance().list.showTopItem(),sht.getInstance().currentSubView=rht.getInstance()}
- onPreset(){
- sht.getInstance().currentSubView!==Sht.getInstance()&&(Sht.getInstance().setData(),sht.getInstance().currentSubView=Sht.getInstance()),Sht.getInstance().togglePresetBar()}
- onTrans(){
- Oht.getInstance().setData(),sht.getInstance().currentSubView=Oht.getInstance()}
- async onSlotAddBtnClick(){
- let t=EL.getInstance().getClientData("TREASURE_SLOT_EXPAND_COSTS");
- t||(t="150|300|500|700|1000|1000|1000|1000|1000|1000");
- const i=Wx.getInstance().maxSlots-EL.getInstance().getTreasureInitialSlots();
- if(i<0)return void vV.getInstance().showMessage(AG.getText("GAME_212","슬롯을 확장할 수 없습니다."));
- const s=t.split("|").map(Number);
- _L.gem<s[i]?vV.getInstance().showMessage(AG.getText("COMMON_352","보석이 부족합니다.")):ght.getInstance().showConfirm(s[i],()=>{
- this.executeExpandSlot()}
- )}
- async executeExpandSlot(){
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- let t=await hD.getInstance().treasure.buyTreasureSlot();
- if(0==t.success)return this.setRequestPending(!1),void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),UV.getInstance().updateGem(),Sht.getInstance().setData(),this.setRequestPending(!1)}
- setRequestPending(t){
- this.requestPending=t}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_4","유물")),this.btnShop.text=AG.getText("COMMON_356","상점"),this.btnMyTreasure.text=AG.getText("GAME_82","내유물"),this.btnPreset.text=AG.getText("GAME_742","프리셋"),this.btnTrans.text=AG.getText("GAME_820","초월"),this.updateLayout()}
- }
- ;
- Kt(Mht,"TreasureSubMenu"),zt(Mht,"instance");
- let Eht=Mht;
- const Aht=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"lblEmpty",new YD("보유한 유물이 없습니다.",10066329,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"presetBar"),zt(this,"listBaseY",0),zt(this,"listBaseHeight",0),this.listBaseY=Eht.getInstance().height,this.listBaseHeight=KA.listHeight,this.list=new R3(uht,630,this.listBaseHeight),this.list.x=5,this.list.y=this.listBaseY,this.lblEmpty.x=220,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.list),this.addChild(this.lblEmpty),this.addChild(Eht.getInstance()),this.presetBar=new Knt,this.presetBar.x=5,this.presetBar.y=Eht.getInstance().height+4,this.presetBar.visible=!1,this.presetBar.onApplied=()=>{
- this.setData()}
- ,this.addChild(this.presetBar),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onRemoved(){
- uht.cleanup(),this.setMultiLevel(!1)}
- setPresetBarVisible(t){
- this.presetBar.visible=t,t&&this.presetBar.update();
- const i=this.presetBar.barHeight+8;
- t?(this.list.y=this.listBaseY+i,this.list.setListHeight(this.listBaseHeight-i),this.lblEmpty.y=200+i):(this.list.y=this.listBaseY,this.list.setListHeight(this.listBaseHeight),this.lblEmpty.y=200)}
- togglePresetBar(){
- this.setPresetBarVisible(!this.presetBar.visible)}
- get isPresetBarVisible(){
- return this.presetBar.visible}
- setMultiLevel(t){
- const i=this.list.getItemList();
- for(const s of i)t?s.showMultiLevel():s.hideMultiLevel()}
- setData(){
- Eht.getInstance().setData(),Eht.getInstance().updateLanguage(),this.presetBar.visible&&this.presetBar.update();
- const t=[...Wx.getInstance().equipedList];
- t.sort((t,i)=>{
- const s=Yx.getInstance(),e=s.getSetsByTreasureKindNum(t.kindNum),n=s.getSetsByTreasureKindNum(i.kindNum),h=0==e.length;
- if(h!=(0==n.length))return h?1:-1;
- if(t.grade!=i.grade)return i.grade-t.grade;
- const r=e.length>0?e[0].kindNum:0,o=n.length>0?n[0].kindNum:0;
- return r!=o?o-r:i.sortId-t.sortId}
- );
- const i=this.list.getDataLen();
- if(this.list.dataProvider=t,i>t.length){
- const t=Math.floor(Math.abs(this.list.getContainerY())/80+1);
- this.list.scrollTo(t)}
- this.lblEmpty.text=AG.getText("GAME_90","보유한 유물이 없습니다."),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.lblEmpty.visible=0===t.length,this.setMultiLevel(!1)}
- get className(){
- return"TreasureSubView"}
- updateLanguage(){
- this.lblEmpty.text=AG.getText("GAME_90","보유한 유물이 없습니다."),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.setData()}
- }
- ;
- Kt(Aht,"TreasureSubView"),zt(Aht,"instance");
- let Sht=Aht;
- const Tht=class t extends D4{
- constructor(){
- super(),zt(this,"btnClose",new L6),zt(this,"btnGuide"),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.btnClose.onClick=()=>{
- Sht.getInstance().updateLanguage(),sht.getInstance().currentSubView=Sht.getInstance()}
- ,this.addChild(this.btnClose),this.lblTitle.y=12,this.btnGuide=new mB("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
- Wnt.getInstance().showGuide()}
- ),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_1167","유물 초월")),this.updateLayout()}
- }
- ;
- Kt(Tht,"TreasureTransSubMenu"),zt(Tht,"instance");
- let Cht=Tht;
- const kht=class t extends O6{
- constructor(){
- super(),zt(this,"transInfo",null),zt(this,"list"),zt(this,"pendingResultShown",!1),zt(this,"lastFetchUtcDay",-1),this.list=new R3(Rnt,630,KA.listHeight),this.list.x=5,this.list.y=Cht.getInstance().height,this.addChild(this.list),this.addChild(Cht.getInstance())}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- static invalidateCachedTransInfo(){
- this.instance&&this.instance.invalidateCache()}
- async setData(){
- Cht.getInstance().updateLanguage(),this.pendingResultShown=!1;
- const i=this.getCurrentUtcDay();
- let s;
- if(this.transInfo&&this.lastFetchUtcDay===i)s=this.transInfo;
- else{
- const t=await hD.getInstance().treasure.getTransMaterials(!1);
- if(!1===(null==t?void 0:t.success))return void(this.list.dataProvider=[]);
- s=t.body,this.transInfo=s,this.lastFetchUtcDay=i}
- this.list.dataProvider=[{
- grade:5,owned:s.grade5OwnedCount,trans:s.grade5TransCount,threshold:t.TRANS_OWN_THRESHOLD,dailyAvailable:s.grade5Available}
- ,{
- grade:6,owned:s.grade6OwnedCount,trans:s.grade6TransCount,threshold:t.TRANS_OWN_THRESHOLD,dailyAvailable:s.grade6Available}
- ],this.restorePendingResultIfAny(s)}
- async refresh(){
- this.invalidateCache(),await this.setData()}
- invalidateCache(){
- this.lastFetchUtcDay=-1,this.transInfo=null}
- getCurrentUtcDay(){
- const t=new Date(gP.serverTime);
- return 1e4*t.getUTCFullYear()+100*(t.getUTCMonth()+1)+t.getUTCDate()}
- restorePendingResultIfAny(t){
- if(this.pendingResultShown)return;
- const i=null==t?void 0:t.pendingTransKindNum,s=null==t?void 0:t.pendingTransGrade;
- i&&s&&(this.pendingResultShown=!0,!(null==t?void 0:t.pendingTransChanged)&&this.hasOtherUntransedCandidate(s,i)?this.showChoosePopup(i,s):this.showFinalPopup(i))}
- hasOtherUntransedCandidate(t,i){
- const s=Wx.getInstance();
- return[...s.equipedList,...s.ownedList].some(s=>s&&s.grade===t&&0===(s.trans||0)&&s.kindNum!==i)}
- showResultFlowAfterTrans(t,i){
- const s=new Cnt(t,i,1),e=this.hasOtherUntransedCandidate(t,i);
- s.onComplete=()=>{
- e?this.showChoosePopup(i,t):this.showFinalPopup(i)}
- }
- showChoosePopup(t,i){
- Fnt.getInstance().showChoose(t,1,()=>this.onChangeRequested(i),()=>this.onSelectRequested(),()=>{
- }
- )}
- showFinalPopup(t){
- Fnt.getInstance().showFinal(t,1,()=>this.onSelectRequested())}
- async onChangeRequested(t){
- var i;
- const s=await hD.getInstance().treasure.changeTransResult();
- if(!1===(null==s?void 0:s.success)){
- mG.getInstance().showError(s);
- const t=(null==(i=null==s?void 0:s.body)?void 0:i.transInfo)??this.transInfo;
- return void((null==t?void 0:t.pendingTransKindNum)&&(null==t?void 0:t.pendingTransGrade)&&(t.pendingTransChanged?this.showFinalPopup(t.pendingTransKindNum):this.showChoosePopup(t.pendingTransKindNum,t.pendingTransGrade)))}
- _L.setUserInfo(s.body),Wx.getInstance().setData(s.body.treasure,s.body.dungeon),s.body.transInfo&&(this.transInfo=s.body.transInfo),UV.getInstance().updateAll();
- const e=s.body.transedKindNum;
- new Cnt(t,e,1).onComplete=()=>{
- this.showFinalPopup(e)}
- }
- async onSelectRequested(){
- const t=await hD.getInstance().treasure.confirmTransResult();
- if(!1===(null==t?void 0:t.success))return void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),Wx.getInstance().setData(t.body.treasure,t.body.dungeon),t.body.transInfo&&(this.transInfo=t.body.transInfo),UV.getInstance().updateAll();
- const i=t.body.transedKindNum;
- if(i){
- const t=Wx.getInstance().getBookDataByKindNum(i);
- if(t){
- const i=AG.getText(t.getNameKey(),t.name);
- vV.getInstance().showMessage(AG.getValueReplace("GAME_1156","##",i,`[${
- i}
- ] 이(가) 초월되었습니다!`))}
- }
- this.refresh()}
- }
- ;
- Kt(kht,"TreasureTransSubView"),zt(kht,"instance"),zt(kht,"TRANS_OWN_THRESHOLD",20);
- let Oht=kht;
- const Iht=class extends XI{
- constructor(){
- super(),zt(this,"bg"),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","UI_COIN_Big"))),zt(this,"btnBuy",new UB("PVP_COIN_ON","5000")),zt(this,"requestPending",!1),zt(this,"requestPending2",!1),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.x=5,this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon.x=27,this.icon.y=.4*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblName.x=135,this.lblName.y=.4*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.btnBuy.lbl.iconScale=.8,this.btnBuy.color=UB.BROWN,this.btnBuy.height=55,this.btnBuy.width=130,this.btnBuy.x=this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.on("pointerdown",this.onBuy,this),this.bg.eventMode="static",this.bg.cursor="pointer",this.bg.on("pointerdown",this.onShowGuide,this),aD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x-5)}
- async onBuy(){
- if(this.data.locked){
- const t=vV.getInstance();
- return t.showMessage(AG.getText("GAME_564","1성부터 5성 유물을 모두 구매해야, 6성 유물을 구매할 수 있습니다.")),void(t.y=KA.viewMainY+60)}
- if(_L.honorCoin<this.data.cost)mG.getInstance().show(AG.getText("GAME_194","명예코인이 부족합니다."));
- else if(1==this.data.kindNum){
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- const t=await hD.getInstance().treasure.buyTreasureWithHonorCoin(!0);
- if(!1===t.success)return this.setRequestPending(!1),"TREASURE_ALL_6STAR_OWNED"==t.error?void mG.getInstance().show(AG.getText("GAME_526","모든 유물을 뽑아서, 더이상 뽑을 유물이 없습니다.")):void mG.getInstance().showError(t);
- const i=Wx.getInstance().equipedKindNums;
- _L.setUserInfo(t.body),Oht.invalidateCachedTransInfo(),UV.getInstance().updateAll();
- const s=Wx.getInstance().equipedKindNums,e=t.body.addedTreasureKindNum;
- e&&Ent.getInstance().showResult(e,i,s),Dht.getInstance().setData(),Snt.getInstance().setData(),this.setRequestPending(!1),nV.getInstance().getStatus()}
- else if(2==this.data.kindNum){
- if(1==this.requestPending2)return;
- this.setRequestPending2(!0);
- const t=await hD.getInstance().hero.buyHeroWithHonorCoin(!0);
- if(!1===t.success)return this.setRequestPending2(!1),void mG.getInstance().showError(t);
- _L.setUserInfo(t.body),UV.getInstance().updateAll();
- const i=t.body.addedHeroId;
- if(-1!==i){
- const t=vx.getInstance().getVOWithId(i);
- t&&zii.getInstance().hireHero(t)}
- const s=t.body.addedHeroKindNum;
- s&&_nt.getInstance().showResult(s,i),Dht.getInstance().setData(),Snt.getInstance().setData(),this.setRequestPending2(!1),nV.getInstance().getStatus()}
- }
- setRequestPending(t){
- this.requestPending=t}
- setRequestPending2(t){
- this.requestPending2=t}
- setData(t){
- this.data=t,this.lblName.text=t.name,this.lblName.y=.4*(this.bg.height-this.lblName.height),t.icon&&(this.icon.texture=ZA.getTexture("UI_Ekkorr",t.icon)),this.btnBuy.text=t.cost.toString()}
- onShowGuide(){
- this.data&&(1===this.data.kindNum?g6.getInstance().showGuide():2===this.data.kindNum&&u6.getInstance().showGuide())}
- get height(){
- return this.bg.height+2}
- }
- ;
- Kt(Iht,"HonorShopItemRenderer");
- let xht=Iht;
- const Nht=class t extends O6{
- constructor(){
- super(),zt(this,"list"),this.list=new zI(xht,630,KA.listHeight),this.list.x=5,this.list.y=Snt.getInstance().height,this.addChild(this.list),this.addChild(Snt.getInstance())}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setData(){
- Snt.getInstance().setData();
- const t=[],i=EL.getInstance().getClientData("HONOR_SHOP_TREASURE_6_ACTIVE"),s=new Date(i),e=new Date,n=Wx.getInstance(),h=n.equipedList.length+n.ownedList.length,r=n.bookList.filter(t=>t.grade<=5).length,o=n.allPurchased||r>0&&h>=r;
- i&&e>=s&&t.push({
- kindNum:1,icon:"Icon_Relic_6",name:`${
- AG.getValueReplace("GAME_184","##",6,"6성 유물 뽑기")}
- `,cost:5e3,locked:!o}
- ),t.push({
- kindNum:2,icon:"Icon_Hero_5",name:`${
- AG.getValueReplace("GAME_181","##",5,"5성 병사 뽑기")}
- `,cost:4400}
- ),this.list.dataProvider=t}
- get className(){
- return"HonorShopSubView"}
- updateLanguage(){
- this.setData(),Snt.getInstance().updateLanguage()}
- updateHonorCoin(){
- Snt.getInstance().setData()}
- }
- ;
- Kt(Nht,"HonorShopSubView"),zt(Nht,"instance");
- let Pht=Nht;
- const Rht=class t extends D4{
- constructor(){
- super(),zt(this,"lblHonorCoin",new GB("PVP_COIN_ON","0",aD.COLOR_PURPLE_PINK,aD.DEFAULT_FONT_OPTION_18)),zt(this,"btnShop",new aK("명예상점",110)),this.btnShop.width=110,this.btnShop.height=45,this.btnShop.y=.5*(this.bg.height-this.btnShop.height),this.addChild(this.btnShop),this.btnShop.on("pointertap",this.onShop,this),this.lblHonorCoin.text=String(_L.honorCoin),this.lblHonorCoin.y=.5*(this.bg.height-this.lblHonorCoin.height),this.addChild(this.lblHonorCoin),this.updateLanguage()}
- static getInstance(){
- return null==t.instance&&(t.instance=new t),t.instance}
- updateLayout(){
- this.btnShop.x=640-this.btnShop.width-6,this.lblHonorCoin.x=this.btnShop.x-this.lblHonorCoin.width-10}
- onShop(){
- Pht.getInstance().setData(),P6.getInstance().currentSubView=Pht.getInstance()}
- setData(){
- this.lblHonorCoin.text=String(_L.honorCoin),this.updateLayout()}
- updateLanguage(){
- this.setTitle(AG.getText("GAME_70","전투")),this.btnShop.text=AG.getText("GAME_87","명예상점"),this.updateLayout()}
- }
- ;
- Kt(Rht,"BattleSubMenu"),zt(Rht,"instance");
- let Dht=Rht;
- const Lht=class t extends O6{
- constructor(){
- super(),zt(this,"list"),zt(this,"listData",[]),zt(this,"frameCount",0),zt(this,"rechargeRefreshCooldown",0),this.list=new zI(bnt,630,KA.listHeight),this.list.x=5,this.list.y=Dht.getInstance().height,this.addChild(this.list),this.addChild(Dht.getInstance()),this.listData.push({
- type:wnt.DUNGEON,name:"던전",desc:"던전에 도전하여 유물재료를 획득하세요",nameLangId:"GAME_74",descLangId:"GAME_75"}
- ),this.listData.push({
- type:wnt.INFINITE_RANKING,name:"무한 랭킹전",desc:"끝없는 전투에서 최고 기록에 도전하세요",nameLangId:"GAME_76",descLangId:"GAME_77"}
- ),this.listData.push({
- type:wnt.DAILY_RANKING,name:"일일 랭킹전",desc:"오늘의 랭킹 순위를 겨루세요",nameLangId:"GAME_78",descLangId:"GAME_79"}
- ),this.listData.push({
- type:wnt.CHALLENGE_TOWER,name:"도전의 탑",desc:"끝없이 올라가는 도전의 탑을 공략하세요.",nameLangId:"GAME_80",descLangId:"GAME_81"}
- )}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- async setData(){
- HV.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"Battle"),Dht.getInstance().setData(),this.list.dataProvider=this.listData,GM.getInstance().remove(this.onFrame,this),GM.getInstance().add(this.onFrame,this);
- const i=C6.getInstance();
- if(i.isStale(t.SUMMARY_TTL_MS))try{
- const t=await hD.getInstance().battle.getSummary(!1);
- (null==t?void 0:t.success)&&t.body&&(i.setSummary(t.body),this.refreshItems())}
- catch(_gt){
- }
- else this.refreshItems()}
- refreshItems(){
- const t=this.list.getItemList();
- for(const i of t)i&&"function"==typeof i.refreshTimer&&i.refreshTimer()}
- onFrame(){
- var t,i;
- if(null==(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent))return void GM.getInstance().remove(this.onFrame,this);
- if(this.frameCount++<30)return;
- this.frameCount=0;
- const s=C6.getInstance();
- s.has()&&(this.refreshItems(),(this.shouldRefetchForRecharge(s)||this.shouldRefetchForDailyRollover(s))&&ix.time>this.rechargeRefreshCooldown&&(this.rechargeRefreshCooldown=ix.time+1e4,this.refetchSummary()))}
- shouldRefetchForDailyRollover(t){
- const i=t.getDailyRanking();
- if(!i||!i.date)return!1;
- const s=new Date(ix.time),e=`${
- s.getUTCFullYear()}
- -${
- String(s.getUTCMonth()+1).padStart(2,"0")}
- -${
- String(s.getUTCDate()).padStart(2,"0")}
- `;
- return i.date!==e}
- shouldRefetchForRecharge(t){
- const i=ix.time,s=t.getDungeon();
- if(s&&s.ticket<s.maxTicket&&s.ticketRechargeMs>0&&i-s.ticketTime>=s.ticketRechargeMs)return!0;
- const e=t.getPvp();
- if(e&&e.ticket<e.maxTicket&&e.ticketRechargeMs>0&&e.ticketTime&&i-new Date(e.ticketTime).getTime()>=e.ticketRechargeMs)return!0;
- const n=t.getTower();
- return!!(n&&n.ticket<n.maxTicket&&n.ticketRechargeMs>0&&i-n.ticketTime>=n.ticketRechargeMs)}
- async refetchSummary(){
- try{
- const t=await hD.getInstance().battle.getSummary(!1);
- (null==t?void 0:t.success)&&t.body&&(C6.getInstance().setSummary(t.body),this.refreshItems())}
- catch(_gt){
- }
- }
- updateHonorCoin(){
- Dht.getInstance().setData()}
- }
- ;
- Kt(Lht,"BattleSubView"),zt(Lht,"instance"),zt(Lht,"SUMMARY_TTL_MS",3e5);
- let Ght=Lht;
TreasureIcon 1 hunks, 16021 statements
+ const nXt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","UI_T001"))),Kt(this,"bg",new He(QA.getTexture("UI_Ekkorr","HeroFrame_1_Bg"))),Kt(this,"cover",new He(QA.getTexture("UI_Ekkorr","HeroFrame_1"))),Kt(this,"lblEnhance",new JD("+0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"posList",[30,26,24,19,16,13,9]),Kt(this,"star",new He(QA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[3])),Kt(this,"trans",new He(QA.getTexture("UI_Ekkorr","Trans0001"))),this.icon.x=3,this.icon.y=3,this.bg.x=3,this.bg.y=3,this.addChild(this.bg),this.addChild(this.icon),this.cover.x=0,this.cover.y=0,this.addChild(this.cover),this.star.x=this.posList[3],this.star.y=this.bg.height-this.star.height,this.addChild(this.star),this.icon.x=.5*(this.bg.height-this.icon.height),this.icon.y=.5*(this.bg.height-this.icon.height),this.lblEnhance.x=this.bg.width-this.lblEnhance.width-1,this.lblEnhance.y=3,this.addChild(this.lblEnhance),this.trans.scale=1.2,this.trans.x=5,this.trans.y=7,this.trans.visible=!1,this.addChild(this.trans)}
+ setVO(t){
+ this.icon.texture=QA.getTexture("UI_Ekkorr",`UI_T${
+ wU.addZeros(3,t.kindNum)}
+ `),this.icon.width=this.icon.height=this.cover.width-6,this.icon.x=3,this.icon.y=2,this.lblEnhance.text=`+${
+ t.enhance}
+ `,this.star.texture=QA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[t.grade-1],this.star.x=this.posList[t.grade-1],this.bg.texture=QA.getTexture("UI_Ekkorr",`HeroFrame_${
+ t.grade}
+ _Bg`),this.cover.texture=QA.getTexture("UI_Ekkorr",`HeroFrame_${
+ t.grade}
+ `),t.trans&&t.trans>0?(this.trans.texture=QA.getTexture("UI_Ekkorr",`Trans000${
+ t.trans}
+ `),this.trans.visible=!0):this.trans.visible=!1}
+ hideTrans(){
+ this.trans.visible=!1}
+ showTrans(t){
+ t<=0?this.trans.visible=!1:(this.trans.texture=QA.getTexture("UI_Ekkorr",`Trans000${
+ t}
+ `),this.trans.visible=!0)}
+ setDataWithKindNum(t){
+ const i=Hx.getInstance().getBookDataByKindNum(t);
+ i&&this.setVO(i)}
+ hideFrame(){
+ this.bg.visible=!1,this.cover.visible=!1}
+ showFrame(){
+ this.bg.visible=!0,this.cover.visible=!0}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ hideEnhance(){
+ this.lblEnhance.visible=!1}
+ showEnhance(){
+ this.lblEnhance.visible=!0}
+ }
+ ;
+ Vt(nXt,"TreasureIcon");
+ let hXt=nXt;
+ const rXt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblDesc"),Kt(this,"btnConfirm"),Kt(this,"icons",[]),this.outSideClickHide=!0,this.title=SG.getValueReplace("GAME_184","##",6,"6성 유물 뽑기"),this.lblDesc=new JD("",13421772,cD.DEFAULT_FONT_OPTION_16),this.lblDesc.align="center",this.contentContainer.addChild(this.lblDesc),this.btnConfirm=new ZL(SG.getText("COMMON_1","확인")),this.btnConfirm.color=ZL.GREEN,this.btnConfirm.width=160,this.btnConfirm.height=50,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_218","유물 뽑기권"),this.btnConfirm.text=SG.getText("COMMON_1","확인");
+ const t=Hx.getInstance().bookList.filter(t=>6===t.grade);
+ this.update(t,this.title),await this.loadImage(),super.show()}
+ showGuideOfTreasureGacha(){
+ this.title=SG.getText("GAME_218","유물 뽑기권"),this.btnConfirm.text=SG.getText("COMMON_1","확인");
+ const t=Hx.getInstance().bookList.filter(t=>6===t.grade);
+ this.update(t,this.title),super.show()}
+ update(t,i){
+ var s,e;
+ for(const g of this.icons)this.contentContainer.removeChild(g);
+ this.icons=[];
+ const n=Hx.getInstance(),h=new Set;
+ for(const g of n.equipedList)h.add(g.kindNum);
+ for(const g of n.ownedList)h.add(g.kindNum);
+ const r=t.filter(t=>!h.has(t.kindNum)).length;
+ let o=SG.getText("GAME_603","아래 유물 중 랜덤한 유물을 획득합니다.")+" "+SG.getText("COMMON_475","획득 확률은 모두 동일합니다.");
+ if(r>0){
+ const t=(100/r).toFixed(2);
+ o+=`\n(${
+ SG.getText("COMMON_476","개별 획득 확률")}
+  : ${
+ t}
+ %(=1/${
+ r}
+ ))`}
+ this.lblDesc.text=o;
+ for(let g=0;
+ g<t.length;
+ g++){
+ const i=new hXt;
+ i.scale=.75,i.setDataWithKindNum(t[g].kindNum),i.hideEnhance(),i.alpha=h.has(t[g].kindNum)?.35:1,this.contentContainer.addChild(i),this.icons.push(i)}
+ const a=(null==(s=this.icons[0])?void 0:s.width)??70,c=(null==(e=this.icons[0])?void 0:e.height)??70,l=Math.ceil(t.length/7),u=7*a-12;
+ this.width=520,this.title=i,cD.setLabelWrapWidth(this.lblDesc,this.width-40),this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.lblDesc.y=65;
+ const d=this.lblDesc.y+this.lblDesc.height+15,f=.5*(this.width-u)+5;
+ for(let g=0;
+ g<this.icons.length;
+ g++){
+ const t=g%7,i=Math.floor(g/7);
+ this.icons[g].x=f+t*(a+-2),this.icons[g].y=d+i*(c+2)}
+ const p=d+l*(c+2)+10;
+ this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=p,this.height=p+this.btnConfirm.height+30,this.btnClose.x=this.width-this.btnClose.width-12}
+ }
+ ;
+ Vt(rXt,"TreasureDrawGuidePopup"),Kt(rXt,"_instance");
+ let oXt=rXt;
+ const aXt=class t{
+ constructor(){
+ Kt(this,"transInfo",null)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setData(t){
+ this.transInfo=t}
+ getData(){
+ return this.transInfo}
+ getTransMaterials(t,i){
+ return 5==t?this.transInfo.grade5Materials:6==t?this.transInfo.grade6Materials:[]}
+ getTransCost(t,i){
+ return 5==t||6==t?300:-1}
+ getMatChangeCost(t,i){
+ return 5==t||6==t?100:-1}
+ }
+ ;
+ Vt(aXt,"TreasureTransDataManager"),Kt(aXt,"instance");
+ let cXt=aXt;
+ const lXt=class t extends Ge{
+ constructor(t,i,s=1){
+ super(),Kt(this,"dim",null),Kt(this,"transIcon"),Kt(this,"resultIcon",null),Kt(this,"particles",[]),Kt(this,"cx",0),Kt(this,"cy",0),Kt(this,"transStartY",0),Kt(this,"transEndY",0),Kt(this,"transLeftX",0),Kt(this,"startedAt",0),Kt(this,"lastEmittedAt",0),Kt(this,"emittedCount",0),Kt(this,"finished",!1),Kt(this,"grade"),Kt(this,"resultKindNum"),Kt(this,"resultTransStep"),Kt(this,"onComplete",null),this.grade=t,this.resultKindNum=i,this.resultTransStep=s,this.buildDim(),this.buildTransIcon(),this.eventMode="static",this.on("pointertap",()=>{
+ }
+ ),xL.getInstance().addChild(this),this.on("removed",()=>this.finish()),this.startedAt=Date.now(),this.lastEmittedAt=this.startedAt,LM.getInstance().add(this.onFrame,this)}
+ buildDim(){
+ const t=QA.getTexture("UI_Ekkorr","Black");
+ t&&(this.dim=new He(t),this.dim.width=VA.stageWidth,this.dim.height=VA.stageHeight,this.dim.alpha=0,this.addChild(this.dim))}
+ buildTransIcon(){
+ const i=5===this.grade?"UI_TreasureTrans5":"UI_TreasureTrans6";
+ this.transIcon=new He(QA.getTexture("UI_Ekkorr",i)),this.transIcon.anchor.set(0,0);
+ const s=this.transIcon.width,e=this.transIcon.height,n=VA.stageWidth,h=kF.getInstance().toGlobal({
+ x:0,y:0}
+ );
+ this.transLeftX=(n-s)/2,this.transStartY=h.y,this.transEndY=this.transStartY+t.SLIDE_DOWN_PX,this.transIcon.x=this.transLeftX,this.transIcon.y=this.transStartY,this.transIcon.alpha=0,this.addChild(this.transIcon),this.cx=this.transLeftX+s/2,this.cy=this.transEndY+e/2}
+ onFrame(){
+ if(this.finished)return;
+ const t=Date.now(),i=t-this.startedAt;
+ this.updateDim(i),this.updateTransIcon(i),this.updateParticleSpawn(i,t),this.updateParticles(t),this.updateResultIcon(i),this.updateFadeout(i)}
+ updateDim(i){
+ if(this.dim)if(i<t.PHASE1_MS){
+ const s=i/t.PHASE1_MS;
+ this.dim.alpha=s*t.DIM_ALPHA}
+ else this.dim.alpha=t.DIM_ALPHA}
+ updateTransIcon(i){
+ if(i<t.PHASE1_MS){
+ const s=i/t.PHASE1_MS,e=this.easeOutCubic(s);
+ this.transIcon.alpha=e,this.transIcon.y=this.transStartY+(this.transEndY-this.transStartY)*e}
+ else this.transIcon.alpha=1,this.transIcon.y=this.transEndY}
+ updateParticleSpawn(i,s){
+ const e=t.PHASE1_MS,n=t.PHASE1_MS+t.PHASE2_MS;
+ i<e||i>n||this.emittedCount>=t.PARTICLE_COUNT||s-this.lastEmittedAt<t.PARTICLE_EMIT_INTERVAL_MS||(this.emitParticle(s),this.lastEmittedAt=s,this.emittedCount++)}
+ emitParticle(i){
+ const s=QA.getTexture("UI_Ekkorr","RewardEffect0001"),e=new He(s);
+ e.anchor.set(.5),e.x=this.cx,e.y=this.cy,e.alpha=1,e.scale.set(t.PARTICLE_SCALE_START);
+ const n=Math.random()*Math.PI*2,h=t.PARTICLE_SPEED_MIN+Math.random()*(t.PARTICLE_SPEED_MAX-t.PARTICLE_SPEED_MIN),r=Math.cos(n)*h,o=Math.sin(n)*h;
+ this.addChild(e),this.particles.push({
+ spr:e,vx:r,vy:o,bornAt:i}
+ )}
+ updateParticles(i){
+ for(let s=this.particles.length-1;
+ s>=0;
+ s--){
+ const e=this.particles[s],n=(i-e.bornAt)/t.PARTICLE_LIFETIME_MS;
+ if(n>=1){
+ e.spr.destroy(),this.particles.splice(s,1);
+ continue}
+ e.spr.x+=e.vx,e.spr.y+=e.vy,e.spr.alpha=1-n;
+ const h=t.PARTICLE_SCALE_START+(t.PARTICLE_SCALE_END-t.PARTICLE_SCALE_START)*n;
+ e.spr.scale.set(h)}
+ }
+ updateResultIcon(i){
+ if(i<t.RESULT_REVEAL_AT)return;
+ this.resultIcon||(this.resultIcon=new hXt,this.resultIcon.setDataWithKindNum(this.resultKindNum),this.resultIcon.hideEnhance(),this.resultIcon.showTrans(this.resultTransStep),this.resultIcon.x=this.transLeftX-5,this.resultIcon.y=this.transEndY-5,this.resultIcon.alpha=0,this.addChild(this.resultIcon));
+ const s=(i-t.RESULT_REVEAL_AT)/t.RESULT_FADE_MS,e=Math.max(0,Math.min(1,s));
+ this.resultIcon.alpha=e,this.transIcon.alpha=1-.6*e}
+ updateFadeout(i){
+ if(i<t.FADEOUT_AT)return;
+ const s=(i-t.FADEOUT_AT)/t.FADEOUT_MS,e=Math.max(0,Math.min(1,s));
+ this.alpha=1-e,e>=1&&this.finish()}
+ finish(){
+ if(!this.finished){
+ this.finished=!0,LM.getInstance().remove(this.onFrame,this),this.parent&&this.parent.removeChild(this);
+ for(const t of this.particles)t.spr.destroy();
+ this.particles=[],this.onComplete&&this.onComplete(),this.destroy({
+ children:!0}
+ )}
+ }
+ easeOutCubic(t){
+ return 1-Math.pow(1-t,3)}
+ }
+ ;
+ Vt(lXt,"TreasureTransRewardEffect"),Kt(lXt,"PHASE1_MS",1e3),Kt(lXt,"PHASE2_MS",2e3),Kt(lXt,"RESULT_REVEAL_AT",1800),Kt(lXt,"RESULT_FADE_MS",400),Kt(lXt,"FADEOUT_AT",3800),Kt(lXt,"FADEOUT_MS",400),Kt(lXt,"SLIDE_DOWN_PX",100),Kt(lXt,"PARTICLE_COUNT",80),Kt(lXt,"PARTICLE_SPEED_MIN",1),Kt(lXt,"PARTICLE_SPEED_MAX",2.4),Kt(lXt,"PARTICLE_LIFETIME_MS",1400),Kt(lXt,"PARTICLE_SCALE_START",.4),Kt(lXt,"PARTICLE_SCALE_END",1.6),Kt(lXt,"PARTICLE_EMIT_INTERVAL_MS",25),Kt(lXt,"DIM_ALPHA",.55);
+ let uXt=lXt;
+ const dXt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"mainContainer",new Ge),Kt(this,"gradeIcon"),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblOwned",new $B("menu_icon_04_on","0 / 20",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblTrans",new $B("TransIcon","0",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnTrans",new zWt("초월",130)),Kt(this,"lblTodayUsed",new JD("",6737151,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=90,this.mainContainer.addChild(this.bg),this.gradeIcon=new He(QA.getTexture("UI_Ekkorr","UI_TreasureTrans5")),this.gradeIcon.x=15,this.gradeIcon.y=.5*(this.bg.height-this.gradeIcon.height),this.mainContainer.addChild(this.gradeIcon),this.lblTitle.x=135,this.lblTitle.y=12,this.mainContainer.addChild(this.lblTitle),this.lblOwned.iconScale=.5,this.lblOwned.x=135,this.lblOwned.y=50,this.mainContainer.addChild(this.lblOwned),this.lblTrans.iconScale=1.3,this.lblTrans.y=50,this.mainContainer.addChild(this.lblTrans),this.btnTrans.height=60,this.btnTrans.width=130,this.btnTrans.x=this.bg.width-this.btnTrans.width-15,this.btnTrans.y=.5*(this.bg.height-this.btnTrans.height),this.mainContainer.addChild(this.btnTrans),this.btnTrans.on("pointertap",this.onTransClick,this),this.lblTodayUsed.visible=!1,this.mainContainer.addChild(this.lblTodayUsed),this.addChild(this.mainContainer)}
+ setData(t){
+ this.data=t;
+ const i=Number(t.grade),s=Number(t.owned)||0,e=Number(t.trans)||0,n=Number(t.threshold)||0,h=!0===t.dailyAvailable;
+ this.gradeIcon.texture=QA.getTexture("UI_Ekkorr",5===i?"UI_TreasureTrans5":"UI_TreasureTrans6"),this.gradeIcon.y=.5*(this.bg.height-this.gradeIcon.height),this.lblTitle.text=SG.getValueReplace("GAME_1151","##",i,`${
+ i}
+ ★ 유물 초월`),this.lblOwned.text=`${
+ s}
+ `,this.lblOwned.textColor=s>=n?cD.DEFAULT_COLOR:16737894,this.lblTrans.text=`${
+ e}
+ `,this.lblTrans.x=this.lblOwned.x+this.lblOwned.width+30;
+ const r=s>=n;
+ if(this.btnTrans.activated=r,this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.x=this.bg.width-this.btnTrans.width-15,h)this.lblTodayUsed.visible=!1;
+ else{
+ const t=SG.getText("GAME_1150","오늘 사용함");
+ this.lblTodayUsed.text=`(${
+ t}
+ )`,this.lblTodayUsed.visible=!0,this.lblTodayUsed.x=this.btnTrans.x-this.lblTodayUsed.width-12,this.lblTodayUsed.y=this.btnTrans.y+.5*(this.btnTrans.height-this.lblTodayUsed.height)}
+ }
+ onTransClick(){
+ if(!this.data)return;
+ const t=this.data.grade;
+ this.data.dailyAvailable,(Number(this.data.owned)||0)<(Number(this.data.threshold)||0)||L3t.getInstance().goDetailView(t,1,this.data.dailyAvailable)}
+ static hasAnyUntransedOwned(t){
+ const i=Hx.getInstance();
+ return[...i.equipedList,...i.ownedList].some(i=>i&&i.grade===t&&0===(i.trans||0))}
+ }
+ ;
+ Vt(dXt,"TreasureTransItemRenderer");
+ let fXt=dXt;
+ const pXt={
+ 1:"HUMAN_ICON",2:"ELF_ICON",3:"UNDEAD_ICON",4:"ORC_ICON",5:"ICON_UNIT",6:"ICON_MELEE",7:"ICON_RANGE",8:"ICON_AIR",9:"ICON_BOSS",10:"ICON_MONSTER",11:"ICON_TOWER",12:"ICON_ATTACK",13:"UI_HEART",14:"ICON_DEFENSE",15:"UI_CRITICAL_DAMAGE",16:"UI_CRITICAL_PERCENT",17:"UI_ATTACK_RANGE",18:"UI_REVIVE_TIME",19:"UI_ATTACK_SPEED",20:"UI_MOVE_SPEED",21:"ICON_QUEST",22:"ICON_GOLD",23:"ICON_TIME",24:"UI_LEVELUP",25:"ICON_UP",26:"ICON_DOWN",27:"ICON_OPEN",28:"ICON_UNIT_START"}
+ ;
+ function gXt(t){
+ return pXt[t]||""}
+ Vt(gXt,"getBuffTextureName");
+ const mXt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"iconList",[]),Kt(this,"lblValue",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16));
+ for(let t=0;
+ t<5;
+ t++){
+ const i=new He(QA.getTexture("UI_Ekkorr","ELF_ICON"));
+ i.x=28*t,this.addChild(i),this.iconList.push(i)}
+ this.lblValue.x=10,this.lblValue.y=.5*(this.iconList[0].height-this.lblValue.height),this.addChild(this.lblValue)}
+ setVO(t,i){
+ let s=0,e=t.skillIcon1;
+ 2===i&&(e=t.skillIcon2);
+ for(let r=0;
+ r<5;
+ r++){
+ let t=this.iconList[r];
+ r<e.length?(t.texture=QA.getTexture("UI_Ekkorr",gXt(e[r])),t.visible=!0,s+=t.width):t.visible=!1}
+ this.lblValue.x=s+15;
+ const n=1===i?1:2,h=t.getAbilityId(n,t.trans||0);
+ this.lblValue.text=VD.displayLargeNumberAsAlphabet(Gx.getInstance().getValue(h,t.enhance))+"%"}
+ }
+ ;
+ Vt(mXt,"TreasureBuffInfo");
+ let wXt=mXt;
+ const vXt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"icon",new hXt),Kt(this,"lblFinalMsg",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblName",new JD("",16766282,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"buffInfo1",new wXt),Kt(this,"buffInfo2",new wXt),Kt(this,"lblBuffDesc1",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblBuffDesc2",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"setIcons",[]),Kt(this,"lblBody",new JD("",13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnChange",new kU("UI_GEM",String(t.CHANGE_GEM_COST),"변경",.7,t.BTN_W_CHANGE,t.BTN_H)),Kt(this,"btnSelect",new zWt(SG.getText("GAME_1170","선택"),t.BTN_W_SELECT)),Kt(this,"btnConfirm",new eG("확인")),Kt(this,"mode","choose"),Kt(this,"kindNum",0),Kt(this,"transStep",1),Kt(this,"onChangeClick",null),Kt(this,"onSelectClick",null),Kt(this,"onClosePopup",null),this.title=SG.getText("GAME_4","유물"),this.icon.x=50,this.icon.y=80,this.contentContainer.addChild(this.icon),this.contentContainer.addChild(this.lblFinalMsg),this.contentContainer.addChild(this.lblName),this.contentContainer.addChild(this.lblBuffDesc1),this.contentContainer.addChild(this.lblBuffDesc2),cD.setLabelWrapWidth(this.lblBuffDesc1,500),cD.setLabelWrapWidth(this.lblBuffDesc2,500);
+ for(let i=0;
+ i<t.MAX_SET_ICONS;
+ i++){
+ const t=new hXt;
+ t.visible=!1,this.contentContainer.addChild(t),this.setIcons.push(t)}
+ this.contentContainer.addChild(this.lblBody),this.btnChange.text=SG.getText("COMMON_5","변경"),this.btnChange.onClick=()=>this.handleChange(),this.contentContainer.addChild(this.btnChange),this.btnSelect.onClick=()=>this.handleSelect(),this.btnSelect.height=t.BTN_H+2,this.contentContainer.addChild(this.btnSelect),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.onClick=()=>this.handleConfirmFinal(),this.contentContainer.addChild(this.btnConfirm),this.btnClose.onClick=()=>this.handleClose()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ showChoose(t,i,s,e,n){
+ this.mode="choose",this.kindNum=t,this.transStep=i,this.onChangeClick=s,this.onSelectClick=e,this.onClosePopup=n,this.applyMode(),super.show()}
+ showFinal(t,i,s){
+ this.mode="final",this.kindNum=t,this.transStep=i,this.onChangeClick=null,this.onSelectClick=null,this.onClosePopup=s,this.applyMode(),super.show()}
+ resizeFor(i){
+ this.bg.width=t.POPUP_W,this.bg.height=i,this.width=t.POPUP_W,this.height=i}
+ applyMode(){
+ this.icon.setDataWithKindNum(this.kindNum),this.icon.hideEnhance(),this.icon.showTrans(this.transStep);
+ const t=Hx.getInstance().getBookDataByKindNum(this.kindNum),i=`${
+ t?SG.getText(t.getNameKey(),t.name):""}
+   (${
+ SG.getValueReplace("GAME_1173","##",this.transStep,`${
+ this.transStep}
+ 초월`)}
+ )`;
+ "final"===this.mode?this.applyFinalLayout(t,i):this.applyChooseLayout(t,i)}
+ applyFinalLayout(i,s){
+ this.lblBody.visible=!1,this.btnChange.visible=!1,this.btnSelect.visible=!1,this.btnConfirm.visible=!0,this.btnClose.visible=!0;
+ const e=this.icon.x+this.icon.width+15;
+ this.lblFinalMsg.text=SG.getText("GAME_1174","유물이 초월되었습니다."),this.lblFinalMsg.visible=!0,this.lblFinalMsg.x=e,this.lblFinalMsg.y=this.icon.y,this.lblName.text=s,this.lblName.visible=!0,this.lblName.x=e,cD.setLabelWrapWidth(this.lblName,this.width-this.lblName.x-10),this.lblName.y=this.lblFinalMsg.y+this.lblFinalMsg.height+8;
+ const n=this.applyAbilities(i)+70+10;
+ this.layoutSetIcons(i,n);
+ const h=n+100+35;
+ this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=h,this.resizeFor(h+this.btnConfirm.height+t.BOTTOM_PAD)}
+ applyAbilities(t){
+ const i=this.icon.y+this.icon.height+20,s=(null==t?void 0:t.desc)?t.desc.split("|").map(t=>t.trim()):[];
+ if(t&&s.length>0){
+ const i=SG.getText(t.skillCode,s[0]);
+ this.lblBuffDesc1.text=`+ ${
+ i}
+  : ${
+ VD.displayLargeNumberAsAlphabet(t.getSkill1Value())}
+ %`,this.lblBuffDesc1.visible=!0}
+ else this.lblBuffDesc1.visible=!1;
+ if(t&&t.skillCode2&&s.length>1){
+ const i=SG.getText(t.skillCode2,s[1]);
+ this.lblBuffDesc2.text=`+ ${
+ i}
+  : ${
+ VD.displayLargeNumberAsAlphabet(t.getSkill2Value())}
+ %`,this.lblBuffDesc2.visible=!0}
+ else this.lblBuffDesc2.visible=!1;
+ return this.lblBuffDesc1.x=50,this.lblBuffDesc1.y=i,this.lblBuffDesc2.x=50,this.lblBuffDesc2.y=i+30,i}
+ applyChooseLayout(i,s){
+ this.btnConfirm.visible=!1,this.btnChange.visible=!0,this.btnSelect.visible=!0,this.btnClose.visible=!1;
+ const e=this.icon.x+this.icon.width+15;
+ this.lblFinalMsg.text=SG.getText("GAME_1174","유물이 초월되었습니다."),this.lblFinalMsg.visible=!0,this.lblFinalMsg.x=e,this.lblFinalMsg.y=this.icon.y,this.lblName.text=s,this.lblName.visible=!0,this.lblName.x=e,cD.setLabelWrapWidth(this.lblName,this.width-this.lblName.x-0),this.lblName.y=this.lblFinalMsg.y+this.lblFinalMsg.height+8;
+ const n=this.applyAbilities(i)+70+10;
+ this.layoutSetIcons(i,n),this.lblBody.text=SG.getValueReplace("GAME_1171","##",t.CHANGE_GEM_COST,`보석 ${
+ t.CHANGE_GEM_COST}
+ 개를 이용해서 변경할 수 있습니다.`)+`\n(${
+ SG.getText("GAME_1172","1번만 변경 가능")}
+ )`,this.lblBody.visible=!0,this.lblBody.y=n+100+15,this.lblBody.x=.5*(this.width-this.lblBody.width);
+ const h=this.lblBody.y+this.lblBody.height+35,r=t.BTN_W_CHANGE+20+t.BTN_W_SELECT,o=.5*(this.width-r);
+ this.btnChange.x=o,this.btnChange.y=h,this.btnSelect.x=o+t.BTN_W_CHANGE+20,this.btnSelect.y=h,this.btnChange.activated=ML.gem>=t.CHANGE_GEM_COST,this.resizeFor(h+t.BTN_H+t.BOTTOM_PAD)}
+ layoutSetIcons(t,i){
+ if(!t){
+ for(const t of this.setIcons)t.visible=!1;
+ return}
+ const s=Yx.getInstance().getSetsByTreasureKindNum(t.kindNum);
+ if(!s||0===s.length){
+ for(const t of this.setIcons)t.visible=!1;
+ return}
+ const e=s[0],n=Hx.getInstance(),h=new Set([...n.equipedKindNums,...n.ownedList.map(t=>t.kindNum)]),r=Math.min(e.itemList.length,this.setIcons.length);
+ let o=50;
+ for(let a=0;
+ a<this.setIcons.length;
+ a++){
+ const t=this.setIcons[a];
+ if(a>=r){
+ t.visible=!1;
+ continue}
+ const s=e.itemList[a],c=n.getBookDataByKindNum(s);
+ c?(t.setVO(c),t.hideEnhance(),t.scale.set(.8),t.x=o,t.y=i,t.alpha=h.has(s)?1:.55,t.visible=!0,s===this.kindNum?t.showTrans(this.transStep):h.has(s)||t.hideTrans(),o+=.8*t.width+10):t.visible=!1}
+ }
+ handleChange(){
+ if(ML.gem<t.CHANGE_GEM_COST)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ const i=this.onChangeClick;
+ this.onChangeClick=null,this.onClosePopup=null,this.hide(),i&&i()}
+ handleSelect(){
+ const t=this.onSelectClick;
+ this.onSelectClick=null,this.onClosePopup=null,this.hide(),t&&t()}
+ handleConfirmFinal(){
+ const t=this.onClosePopup;
+ this.onClosePopup=null,this.hide(),t&&t()}
+ handleClose(){
+ const t=this.onClosePopup;
+ this.onChangeClick=null,this.onSelectClick=null,this.onClosePopup=null,this.hide(),t&&t()}
+ }
+ ;
+ Vt(vXt,"TreasureTransResultPopup"),Kt(vXt,"CHANGE_GEM_COST",200),Kt(vXt,"instance"),Kt(vXt,"MAX_SET_ICONS",6),Kt(vXt,"BTN_W_CHANGE",180),Kt(vXt,"BTN_W_SELECT",140),Kt(vXt,"BTN_H",60),Kt(vXt,"POPUP_W",580),Kt(vXt,"BOTTOM_PAD",50);
+ let bXt=vXt;
+ const _Xt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_1168","유물 초월 안내");
+ const t=SG.getValueReplace("GAME_1152","##",5,"5★ 유물을 20개 이상 보유시 하루 1회씩 초월이 가능합니다."),i=SG.getValueReplace("GAME_1152","##",6,"6★ 유물을 20개 이상 보유시 하루 1회씩 초월이 가능합니다."),s=SG.getText("GAME_1169","유물을 초월하면, 한계돌파를 통해 최대 레벨을 20에서 50까지 확장할 수 있습니다.");
+ this.lblGuide.text=`1. ${
+ t}
+ \n\n2. ${
+ i}
+ \n\n3. ${
+ s}
+ `,this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.45*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(_Xt,"TreasureTransGuidePopup"),Kt(_Xt,"_instance");
+ let yXt=_Xt;
+ const MXt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage"),Kt(this,"bgInput"),Kt(this,"inputEl"),Kt(this,"lblHint"),Kt(this,"btnCancel"),Kt(this,"btnConfirm"),Kt(this,"slotId",-1),Kt(this,"requestPending",!1),Kt(this,"onSuccess",null),this.title=SG.getText("GAME_1097","프리셋 이름 변경");
+ const t=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ t.fill=cD.COLOR_WHITE,t.lineHeight=30,t.fontWeight="normal",this.lblMessage=new JD(SG.getText("GAME_1098","프리셋 이름을 작성해주세요."),cD.DEFAULT_COLOR,t),this.addChild(this.lblMessage),cD.setLabelWrapWidth(this.lblMessage,this.width-40),this.bgInput=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Slot2"),leftWidth:4,topHeight:4,rightWidth:4,bottomHeight:4}
+ ),this.bgInput.visible=!1,this.bgInput.x=40,this.bgInput.width=this.width-2*this.bgInput.x,this.bgInput.height=70,this.addChild(this.bgInput),this.inputEl=this.createHTMLInput(),this.lblHint=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblHint),this.btnCancel=new Kzt(SG.getText("COMMON_2","취소")),this.btnCancel.outlineText=!0,this.btnCancel.width=240,this.btnCancel.height=65,this.btnCancel.onClick=this.onCancelClick.bind(this),this.addChild(this.btnCancel),this.btnConfirm=new Kzt(SG.getText("COMMON_1","확인")),this.btnConfirm.color=Kzt.COLOR_ORANGE,this.btnConfirm.outlineText=!0,this.btnConfirm.width=this.btnCancel.width,this.btnConfirm.height=this.btnCancel.height,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm),this.updateLayout(),this.on("removed",this.onRemoved)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ createHTMLInput(){
+ const i=document.createElement("input");
+ return i.type="text",i.maxLength=t.MAX_INPUT_LEN,i.style.position="absolute",i.style.fontFamily="Arial",i.style.fontSize="18px",i.style.textAlign="center",i.style.display="none",i.style.color="white",i.style.background="transparent",i.style.border="2px solid #684f3e",i.style.borderRadius="6px",i.style.boxSizing="border-box",i.addEventListener("input",()=>this.updateHint()),document.body.appendChild(i),i}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=80,this.bgInput.x=40,this.bgInput.y=this.lblMessage.y+this.lblMessage.height+20,this.lblHint.x=this.bgInput.x,this.lblHint.y=this.bgInput.y+this.bgInput.height+5,this.btnCancel.x=this.bgInput.x,this.btnCancel.y=this.lblHint.y+this.lblHint.height+20,this.btnConfirm.x=this.bgInput.x+this.bgInput.width-this.btnConfirm.width,this.btnConfirm.y=this.btnCancel.y,this.height=this.btnCancel.y+this.btnCancel.height+50}
+ showForSlot(t,i,s=null){
+ this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.slotId=t,this.inputEl.value=i??"",this.onSuccess=s,this.updateHint(),super.show()}
+ onShowMotionComplete(){
+ super.onShowMotionComplete(),this.showInputOverlay()}
+ hide(){
+ this.hideInputOverlay(),super.hide()}
+ onRemoved(){
+ this.hideInputOverlay()}
+ showInputOverlay(){
+ const t=this.toGlobal(this.bgInput.position),i=VA.stage.scale;
+ this.inputEl.style.display="block",this.inputEl.style.left=t.x+"px",this.inputEl.style.top=t.y+"px",this.inputEl.style.width=`${
+ Math.floor(this.bgInput.width*i.x)}
+ px`,this.inputEl.style.height=`${
+ Math.floor(this.bgInput.height*i.y)}
+ px`,this.inputEl.placeholder=SG.getText("GAME_1097","프리셋 이름 입력"),setTimeout(()=>this.inputEl.focus(),50)}
+ hideInputOverlay(){
+ this.inputEl.style.display="none",this.inputEl.blur()}
+ updateHint(){
+ const i=this.inputEl.value.length;
+ this.lblHint.text=`${
+ i}
+  / ${
+ t.MAX_INPUT_LEN}
+ `}
+ onCancelClick(){
+ this.hide()}
+ async onConfirmClick(){
+ if(this.requestPending)return;
+ if(this.slotId<0)return;
+ const t=(this.inputEl.value??"").trim();
+ this.requestPending=!0;
+ const i=await rD.getInstance().treasure.renamePreset(this.slotId,t);
+ if(this.requestPending=!1,!1!==i.success){
+ if(ML.setUserInfo(i.body),Hx.getInstance().setData(i.body.treasure,i.body.dungeon),kF.getInstance().updateAll(),u2.getInstance().showMessage(SG.getText("GAME_1099","프리셋 이름이 변경되었습니다.")),this.onSuccess)try{
+ this.onSuccess()}
+ catch(Xst){
+ }
+ this.hide()}
+ else wG.getInstance().showError(i,i.errorAdditional??null)}
+ }
+ ;
+ Vt(MXt,"TreasurePresetRenamePopup"),Kt(MXt,"_instance"),Kt(MXt,"MAX_INPUT_LEN",8);
+ let EXt=MXt;
+ const AXt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"slotButtons",[]),Kt(this,"btnSave"),Kt(this,"btnReset"),Kt(this,"lblSaveHint"),Kt(this,"lockOverlay"),Kt(this,"lblLock"),Kt(this,"saveMode",!1),Kt(this,"requestPending",!1),Kt(this,"longPressTimers",[null,null,null,null,null]),Kt(this,"longPressFired",[!1,!1,!1,!1,!1]),Kt(this,"onApplied",null),this.bg=new Lf,this.bg.roundRect(0,0,t.WIDTH,t.HEIGHT,6),this.bg.fill({
+ color:2825487,alpha:.6}
+ ),this.addChild(this.bg);
+ for(let h=0;
+ h<5;
+ h++){
+ const i=new gzt(this.getSlotName(h),t.SLOT_BUTTON_WIDTH,16);
+ i.autoResize=!1,i.lbl.textSize=16,i.width=t.SLOT_BUTTON_WIDTH,i.height=t.SLOT_BUTTON_HEIGHT,i.x=8+h*(t.SLOT_BUTTON_WIDTH+t.SLOT_GAP),i.y=4+.5*(t.ROW_HEIGHT-i.height),i.on("pointertap",()=>{
+ this.longPressFired[h]?this.longPressFired[h]=!1:this.onSlotClick(h)}
+ ,this),i.on("pointerdown",()=>this.startLongPress(h),this),i.on("pointerup",()=>this.cancelLongPress(h),this),i.on("pointerupoutside",()=>this.cancelLongPress(h),this),i.on("pointercancel",()=>this.cancelLongPress(h),this),i.selected=!1,this.slotButtons.push(i),this.addChild(i)}
+ const i=t.ROW_HEIGHT+8,s=t.ACTION_BUTTON_WIDTH,e=t.SLOT_BUTTON_HEIGHT;
+ this.btnReset=new CWt("리셋",s,8),this.btnReset.width=s,this.btnReset.height=e,this.btnReset.x=640-s-t.ACTION_BUTTON_RIGHT_MARGIN,this.btnReset.y=i+.5*(t.ROW_HEIGHT-e),this.btnReset.on("pointertap",this.onResetClick,this),this.addChild(this.btnReset),this.btnSave=new eG("저장",s,8),this.btnSave.width=s,this.btnSave.height=e,this.btnSave.x=this.btnReset.x-s-t.ACTION_BUTTON_GAP,this.btnSave.y=i+.5*(t.ROW_HEIGHT-e),this.btnSave.on("pointertap",this.onSaveClick,this),this.addChild(this.btnSave),this.lblSaveHint=new JD("프리셋 길게 누르면 이름 변경",16767354,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSaveHint.setWrapWidth(360),this.lblSaveHint.x=12,this.lblSaveHint.visible=!0,this.addChild(this.lblSaveHint),this.recenterHint(),this.lockOverlay=new Ge;
+ const n=new Lf;
+ n.beginFill(0,.7),n.drawRoundedRect(0,0,t.WIDTH,t.HEIGHT,6),n.endFill(),this.lockOverlay.addChild(n),this.lblLock=new JD("1~5등급 유물 전부 보유 시 해금",16764040,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblLock.x=.5*(t.WIDTH-this.lblLock.width),this.lblLock.y=.5*(t.HEIGHT-this.lblLock.height),this.lockOverlay.addChild(this.lblLock),this.lockOverlay.eventMode="static",this.addChild(this.lockOverlay)}
+ get barHeight(){
+ return t.HEIGHT}
+ getSlotName(t){
+ const i=t+1;
+ return SG.getValueReplace("GAME_744","##",String(i),`${
+ i}
+  번`)}
+ getSlotDisplayLabel(t){
+ const i=Hx.getInstance().presets[t];
+ return i&&i.label&&i.label.length>0?i.label:this.getSlotName(t)}
+ startLongPress(i){
+ this.cancelLongPress(i),Hx.getInstance().presetUnlocked&&(this.saveMode||this.requestPending||(this.longPressFired[i]=!1,this.longPressTimers[i]=setTimeout(()=>{
+ this.longPressFired[i]=!0,this.longPressTimers[i]=null,this.openRenamePopup(i)}
+ ,t.LONG_PRESS_MS)))}
+ cancelLongPress(t){
+ null!==this.longPressTimers[t]&&(clearTimeout(this.longPressTimers[t]),this.longPressTimers[t]=null)}
+ openRenamePopup(t){
+ const i=Hx.getInstance().presets[t];
+ i&&EXt.getInstance().showForSlot(t,i.label,()=>this.update())}
+ update(){
+ const i=Hx.getInstance(),s=i.presetUnlocked;
+ this.lockOverlay.visible=!s,this.lblLock.text=SG.getText("GAME_743","1~5등급 유물 전부 보유 시 해금"),this.lblLock.x=.5*(t.WIDTH-this.lblLock.width);
+ const e=i.getActivePresetSlot();
+ for(let t=0;
+ t<this.slotButtons.length;
+ t++){
+ const s=this.slotButtons[t],n=i.presets[t].hasEntries,h=e===t,r=this.getSlotName(t);
+ let o=this.getSlotDisplayLabel(t);
+ this.saveMode&&(o=n?SG.getValueReplace("GAME_746","##",r,`${
+ r}
+  덮어쓰기`):SG.getValueReplace("GAME_745","##",r,`${
+ r}
+  저장`)),s.text=o,s.selected=!this.saveMode&&h,s.alpha=this.saveMode||n?1:.65}
+ this.saveMode?this.btnSave.text=SG.getText("COMMON_2","취소"):this.btnSave.text=SG.getText("GAME_527","저장"),this.btnReset.text=SG.getText("COMMON_368","리셋"),this.btnReset.alpha=this.saveMode?.4:1,this.btnReset.eventMode=this.saveMode?"none":"static",this.lblSaveHint.visible=!0,this.lblSaveHint.text=this.saveMode?SG.getText("GAME_747","저장할 슬롯을 선택하세요"):SG.getText("GAME_1100","프리셋 길게 누르면 이름 변경"),this.recenterHint()}
+ recenterHint(){
+ const i=t.ROW_HEIGHT+8;
+ this.lblSaveHint.y=i+.5*(t.ROW_HEIGHT-this.lblSaveHint.height)}
+ setSaveMode(t){
+ this.saveMode=t,this.update()}
+ updateLanguage(){
+ this.update()}
+ async onSlotClick(t){
+ if(this.requestPending)return;
+ const i=Hx.getInstance();
+ if(!i.presetUnlocked)return;
+ const s=i.presets[t];
+ if(this.saveMode){
+ if(0===i.equipedList.length)return u2.getInstance().showMessage(SG.getText("GAME_752","최소한 유물 1개 이상은 배치되어 있어야 합니다.")),void this.setSaveMode(!1);
+ const e=this.getSlotName(t),n=s.hasEntries?SG.getValueReplace("GAME_749","##",e,`${
+ e}
+  프리셋을 덮어쓰시겠습니까?`):SG.getValueReplace("GAME_748","##",e,`${
+ e}
+  프리셋에 현재 상태를 저장하시겠습니까?`);
+ return void b$t.getInstance().show(n,async()=>{
+ await this.doSave(t,s.label),this.setSaveMode(!1)}
+ )}
+ s.hasEntries?i.getActivePresetSlot()!==t?b$t.getInstance().show(SG.getText("GAME_750","선택한 프리셋으로 교체하시겠습니까?"),async()=>{
+ await this.doApply(t)}
+ ):u2.getInstance().showMessage(SG.getText("GAME_754","이미 적용된 프리셋입니다.")):u2.getInstance().showMessage(SG.getText("GAME_753","비어있는 슬롯입니다. 저장 버튼으로 저장하세요."))}
+ onSaveClick(){
+ if(this.requestPending)return;
+ const t=Hx.getInstance();
+ t.presetUnlocked&&(this.saveMode?this.setSaveMode(!1):0!==t.equipedList.length?this.setSaveMode(!0):u2.getInstance().showMessage(SG.getText("GAME_752","최소한 유물 1개 이상은 배치되어 있어야 합니다.")))}
+ onResetClick(){
+ if(this.requestPending)return;
+ if(this.saveMode)return;
+ const t=Hx.getInstance();
+ t.presetUnlocked&&(0!==t.equipedList.length?b$t.getInstance().show(SG.getText("GAME_751","모든 유물을 장착해제 하겠습니까?\n유물 재료는 모두 돌려받고, 레벨은 +0으로 초기화됩니다."),async()=>{
+ await this.doBatchUnequip()}
+ ):u2.getInstance().showMessage(SG.getText("GAME_755","장착해제할 유물이 없습니다.")))}
+ async doSave(t,i){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const s=Hx.getInstance(),e=s.equipedList.map(t=>t.kindNum),n=s.equipedList.map(t=>t.enhance||0),h=await rD.getInstance().treasure.savePreset(t,i,e,n);
+ this.requestPending=!1,!1!==h.success?(ML.setUserInfo(h.body),s.setData(h.body.treasure,h.body.dungeon),kF.getInstance().updateAll(),this.update(),u2.getInstance().showMessage(SG.getText("GAME_756","프리셋이 저장되었습니다."))):wG.getInstance().showError(h,h.errorAdditional??null)}
+ async doApply(t){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const i=await rD.getInstance().treasure.applyPreset(t);
+ this.requestPending=!1,!1!==i.success?(ML.setUserInfo(i.body),Hx.getInstance().setData(i.body.treasure,i.body.dungeon),kF.getInstance().updateAll(),this.update(),u2.getInstance().showMessage(SG.getText("GAME_757","프리셋이 적용되었습니다.")),this.onApplied&&this.onApplied()):wG.getInstance().showError(i,i.errorAdditional??null)}
+ async doBatchUnequip(){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const t=await rD.getInstance().treasure.batchUnequipTreasures();
+ this.requestPending=!1,!1!==t.success?(ML.setUserInfo(t.body),Hx.getInstance().setData(t.body.treasure,t.body.dungeon),kF.getInstance().updateAll(),this.update(),u2.getInstance().showMessage(SG.getText("GAME_758","장착해제할 유물이 없습니다.")),this.onApplied&&this.onApplied()):wG.getInstance().showError(t,t.errorAdditional??null)}
+ }
+ ;
+ Vt(AXt,"TreasurePresetBar"),Kt(AXt,"WIDTH",630),Kt(AXt,"ROW_HEIGHT",42),Kt(AXt,"HEIGHT",2*AXt.ROW_HEIGHT+8),Kt(AXt,"SLOT_BUTTON_WIDTH",118),Kt(AXt,"SLOT_BUTTON_HEIGHT",38),Kt(AXt,"SLOT_GAP",4),Kt(AXt,"ACTION_BUTTON_WIDTH",120),Kt(AXt,"ACTION_BUTTON_RIGHT_MARGIN",10),Kt(AXt,"ACTION_BUTTON_GAP",6),Kt(AXt,"LONG_PRESS_MS",500);
+ let SXt=AXt;
+ const TXt=class t extends Ge{
+ constructor(i,s,e,n,h=1,r=150,o=70){
+ super(),Kt(this,"bg",new YL),Kt(this,"topLabel"),Kt(this,"bottomLabel"),Kt(this,"container",new Ge),Kt(this,"_customTextColorSet",!1),Kt(this,"enabled",!0),Kt(this,"_activated",!0),Kt(this,"_color",-1),Kt(this,"_activatedTextColor",1),Kt(this,"_deactivatedTextColor",10066329),Kt(this,"onClick"),this.bg.width=r,this.bg.height=o,this.topLabel=new $B(i,s),this.topLabel.iconScale=h,this.bottomLabel=new $B(e,n),this.bottomLabel.iconScale=h,this.bg.x=.5*-this.bg.width,this.bg.y=.5*-this.bg.height,this.updateLabelPositions(),this.container.x=.5*this.bg.width,this.container.y=.5*this.bg.height,this.container.addChild(this.bg),this.container.addChild(this.topLabel),this.container.addChild(this.bottomLabel),this.addChild(this.container),this.eventMode="static",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this),this.color=t.GREEN,this.hitArea=new Ri(0,0,this.bg.width,this.bg.height)}
+ updateLabelPositions(){
+ const t=""!==this.topLabel.text,i=""!==this.bottomLabel.text;
+ if(this.topLabel.visible=t,this.bottomLabel.visible=i,!t&&!i)return;
+ if(t&&!i)return this.topLabel.x=.5*-this.topLabel.width,void(this.topLabel.y=.5*-this.topLabel.height);
+ if(!t&&i)return this.bottomLabel.x=.5*-this.bottomLabel.width,void(this.bottomLabel.y=.5*-this.bottomLabel.height);
+ const s=this.topLabel.height,e=.5*-(s+2+this.bottomLabel.height)+2;
+ this.topLabel.x=.5*-this.topLabel.width,this.topLabel.y=e,this.bottomLabel.x=.5*-this.bottomLabel.width,this.bottomLabel.y=e+s+2}
+ set activated(i){
+ this._activated=i,this._activated?this.bg.setIndex(this._color):this.bg.setIndex(t.GRAY),this.updateTextColor()}
+ get activated(){
+ return this._activated}
+ set color(i){
+ if(i===this._color)return;
+ if(this._color=i,this.bg.setIndex(this._color),this._customTextColorSet)return;
+ let s=this._activatedTextColor;
+ switch(this._color){
+ case t.BROWN:s=JD.LIGHT_BROWN;
+ break;
+ case t.GREEN:s=JD.LIGHT_GREEN;
+ break;
+ case t.LIGHT_GREEN:s=15593912;
+ break;
+ case t.RED:s=16367536;
+ break;
+ case t.VIOLET:s=16442110;
+ break;
+ case t.BLUE:s=13890291;
+ break;
+ case t.GRAY:s=12303291}
+ s!==this._activatedTextColor&&(this._activatedTextColor=s,this.updateTextColor())}
+ get color(){
+ return this._color}
+ get activatedTextColor(){
+ return this._activatedTextColor}
+ set activatedTextColor(t){
+ t!==this._activatedTextColor&&(this._activatedTextColor=t,this._customTextColorSet=!0,this.updateTextColor())}
+ get deactivatedTextColor(){
+ return this._deactivatedTextColor}
+ set deactivatedTextColor(t){
+ t!==this._deactivatedTextColor&&(this._deactivatedTextColor=t,this.updateTextColor())}
+ updateTextColor(){
+ this._activated?(this.topLabel.textColor=this._activatedTextColor,this.bottomLabel.textColor=this._activatedTextColor):(this.topLabel.textColor=this._deactivatedTextColor,this.bottomLabel.textColor=this._deactivatedTextColor)}
+ set topIcon(t){
+ this.topLabel.texture=QA.getTexture("UI_Ekkorr",t),this.updateLabelPositions()}
+ set topText(t){
+ this.topLabel.text=t,this.updateLabelPositions()}
+ get topText(){
+ return this.topLabel.text}
+ set topIconScale(t){
+ this.topLabel.iconScale=t,this.updateLabelPositions()}
+ set bottomIcon(t){
+ this.bottomLabel.texture=QA.getTexture("UI_Ekkorr",t),this.updateLabelPositions()}
+ set bottomText(t){
+ this.bottomLabel.text=t,this.updateLabelPositions()}
+ get bottomText(){
+ return this.bottomLabel.text}
+ set bottomIconScale(t){
+ this.bottomLabel.iconScale=t,this.updateLabelPositions()}
+ set height(t){
+ this.bg.height=t,this.bg.y=.5*-this.bg.height,this.updateLabelPositions(),this.container.y=.5*this.bg.height,this.hitArea=new Ri(0,0,this.bg.width,this.bg.height)}
+ get height(){
+ return this.bg.height}
+ set width(t){
+ this.bg.width=t,this.bg.x=.5*-this.bg.width,this.updateLabelPositions(),this.container.x=.5*this.bg.width,this.hitArea=new Ri(0,0,this.bg.width,this.bg.height)}
+ get width(){
+ return this.bg.width}
+ onDown(t){
+ !1!==this._activated&&(this.container.scale=.9)}
+ onUp(t){
+ !1!==this._activated&&(this.container.scale=1)}
+ onTap(t){
+ !1!==this._activated&&(zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),$L(),null!=this.onClick&&this.onClick())}
+ }
+ ;
+ Vt(TXt,"CommonTwoIconButton"),Kt(TXt,"RED",0),Kt(TXt,"GREEN",1),Kt(TXt,"BROWN",2),Kt(TXt,"LIGHT_GREEN",3),Kt(TXt,"VIOLET",4),Kt(TXt,"BLUE",5),Kt(TXt,"GRAY",6),Kt(TXt,"ORANGE",7);
+ let CXt=TXt;
+ const IXt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblSetCount",new JD("",10066329,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"icon",new hXt),Kt(this,"buffInfo1",new wXt),Kt(this,"buffInfo2",new wXt),Kt(this,"mainContainer",new Ge),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideFrame(),this.icon.x=15,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=12,this.mainContainer.addChild(this.lblName),this.mainContainer.addChild(this.lblSetCount),this.buffInfo1.x=135,this.buffInfo1.y=44,this.mainContainer.addChild(this.buffInfo1),this.buffInfo2.x=385,this.buffInfo2.y=44,this.mainContainer.addChild(this.buffInfo2),this.addChild(this.mainContainer),cD.setLabelWrapWidth(this.lblName,this.bg.x+this.bg.width-this.lblName.x-30)}
+ onClick(t,i){
+ const s=this.data;
+ HXt.getInstance().show(s,WXt.equip)}
+ setData(t){
+ this.data=t;
+ const i=t;
+ this.icon.setVO(i);
+ let s="";
+ CL.getInstance().development&&(s=i.kindNum+". "),this.lblName.text=s+SG.getText(i.getNameKey(),i.name);
+ const e=Yx.getInstance().getSetCountInfo(i.kindNum);
+ e.total<1?this.lblSetCount.visible=!1:(this.lblSetCount.text=`(${
+ e.equipedCount}
+ /${
+ e.total}
+ )`,e.equipedCount<e.total?this.lblSetCount.textColor=10066329:this.lblSetCount.textColor=cD.COLOR_BRIGHT_GREEN,this.lblSetCount.visible=!0),this.lblName.y=20-.5*this.lblName.height,this.lblSetCount.x=this.lblName.x+this.lblName.width+3,this.lblSetCount.y=this.lblName.y+.5*(this.lblName.height-this.lblSetCount.height-1),this.buffInfo1.setVO(i,1),this.buffInfo2.setVO(i,2),(i.desc?i.desc.split("|"):[]).length>1&&i.skillCode2?this.buffInfo2.visible=!0:this.buffInfo2.visible=!1,this.updateCache()}
+ updateCache(){
+ }
+ clearCache(){
+ }
+ }
+ ;
+ Vt(IXt,"TreasureInventoryItemRenderer");
+ let kXt=IXt;
+ const OXt=class extends qO{
+ constructor(){
+ let t;
+ super(),Kt(this,"bg"),Kt(this,"icons"),Kt(this,"labels"),Kt(this,"posList",[0,1,2,3,4,5,640]),Kt(this,"mainContainer",new Ge),Kt(this,"kindNumArray",[]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=90,this.bg.visible=!1,this.mainContainer.addChild(this.bg),this.icons=[],this.labels=[],cD.DEFAULT_OUTLINE_FONT_OPTION_18.fill=cD.COLOR_WHITE;
+ for(let i=0;
+ i<7;
+ ++i)t=new hXt,t.x=11+i*(t.width+18),t.y=7,t.hideEnhance(),this.mainContainer.addChild(t),this.icons.push(t),this.posList[i]=t.x;
+ this.posList.push(640),this.addChild(this.mainContainer)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ const i=t;
+ if(!i)return;
+ this.kindNumArray=i;
+ const s=Hx.getInstance(),e=new Set;
+ for(const r of s.equipedList)e.add(r.kindNum);
+ for(const r of s.ownedList)e.add(r.kindNum);
+ let n;
+ const h=i.length;
+ for(let r=0;
+ r<this.icons.length;
+ ++r)n=this.icons[r],r<h?(n.setDataWithKindNum(i[r]),n.visible=!0,n.alpha=e.has(i[r])?1:.35):n.visible=!1}
+ clearCache(){
+ }
+ onClick(t,i){
+ this.kindNumArray.length;
+ let s=-1;
+ for(let e=0;
+ e<this.icons.length;
+ ++e)if(t>this.posList[e]&&t<this.posList[e+1]){
+ s=e;
+ break}
+ -1!=s&&s<this.kindNumArray.length&&this.icons[s].visible&&this.goDetail(this.kindNumArray[s])}
+ goDetail(t){
+ NXt.getInstance().hide(),HXt.getInstance().showInBook(t)}
+ }
+ ;
+ Vt(OXt,"TreasureBookItemRenderer");
+ let xXt=OXt;
+ const RXt=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"lblTitle"),Kt(this,"list"),this.lblTitle=new JD(SG.getText("GAME_220","도감"),16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20),this.addChild(this.lblTitle);
+ const t=Math.min(VA.safeHeight-750,VA.viewMainY);
+ this.list=new d5(xXt,630,VA.getBookListHeight(t)),this.addChild(this.list),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get className(){
+ return"TreasureBookPopup"}
+ updateLayout(){
+ let t=kF.getInstance().height;
+ this.lblTitle.x=10,this.lblTitle.y=t+15,t=this.lblTitle.y+this.lblTitle.height+15,this.list.x=5,this.list.y=t,this.list.setListHeight(this.bg.height-this.list.y-15)}
+ setData(){
+ this.lblTitle.text=SG.getText("GAME_220","도감"),this.updateList(),this.updateLayout()}
+ updateList(){
+ const t=Hx.getInstance();
+ let i,s=[];
+ const e=t.bookList.length;
+ for(let h=0;
+ h<e;
+ ++h)i=t.bookList[h],s.push(i.kindNum);
+ s.sort((i,s)=>{
+ const e=t.getBookDataByKindNum(i),n=t.getBookDataByKindNum(s);
+ return e&&n?n.grade-e.grade:1}
+ );
+ const n=this.list.getDataLen();
+ if(this.list.dataProvider=QO.chunkArray(s,7),n>this.list.getDataLen()){
+ const t=Math.floor(Math.abs(this.list.getContainerY())/80);
+ this.list.scrollTo(t)}
+ }
+ }
+ ;
+ Vt(RXt,"TreasureBookPopup"),Kt(RXt,"_instance");
+ let NXt=RXt;
+ const PXt=class t extends uzt{
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ constructor(){
+ super()}
+ setData(){
+ w3t.getInstance().setData(),this.currentSubView=w3t.getInstance(),kF.getInstance().setMode(CF.DUNGEON)}
+ get className(){
+ return"TreasureView"}
+ updateLanguage(){
+ this.setData()}
+ }
+ ;
+ Vt(PXt,"TreasureView"),Kt(PXt,"instance");
+ let DXt=PXt;
+ const LXt=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"btnClose",new kKt),Kt(this,"btnBook",new zWt("Book",110)),Kt(this,"lblMaxCapacity",new $B("menu_icon_04_on","0/10",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.addChild(this.btnClose),this.btnClose.onClick=()=>{
+ w3t.getInstance().setData(),DXt.getInstance().currentSubView=w3t.getInstance()}
+ ,this.btnBook.width=110,this.btnBook.height=45,this.btnBook.y=.5*(this.bg.height-this.btnBook.height),this.addChild(this.btnBook),this.btnBook.on("pointertap",this.onBook,this),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.btnBook.x=this.btnClose.x-this.btnBook.width-5}
+ update(){
+ const t=Hx.getInstance().maxSlots,i=Hx.getInstance().equipedKindNums.length;
+ this.lblMaxCapacity.text=`${
+ i}
+ /${
+ t}
+ `}
+ setData(){
+ this.update(),this.updateLanguage()}
+ onBook(){
+ NXt.getInstance().setData(),NXt.getInstance().show2()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_82","내유물")),this.btnBook.text=SG.getText("GAME_220","도감"),this.updateLayout()}
+ }
+ ;
+ Vt(LXt,"TreasureInventorySubMenu"),Kt(LXt,"instance");
+ let GXt=LXt;
+ const BXt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"lblEmpty",new JD("보유한 유물이 없습니다.",10066329,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.list=new d5(kXt,630,VA.listHeight),this.list.x=5,this.list.y=GXt.getInstance().height,this.lblEmpty.x=220,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.list),this.addChild(this.lblEmpty),this.addChild(GXt.getInstance()),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ }
+ setData(){
+ GXt.getInstance().update(),GXt.getInstance().updateLanguage();
+ const t=[...Hx.getInstance().ownedList];
+ t.sort((t,i)=>{
+ const s=Yx.getInstance(),e=s.getSetsByTreasureKindNum(t.kindNum),n=s.getSetsByTreasureKindNum(i.kindNum),h=0==e.length;
+ if(h!=(0==n.length))return h?1:-1;
+ if(t.grade!=i.grade)return i.grade-t.grade;
+ const r=e.length>0?e[0].kindNum:0,o=n.length>0?n[0].kindNum:0;
+ return r!=o?o-r:i.sortId-t.sortId}
+ ),this.list.getDataLen(),this.list.dataProvider=t,t.length,this.lblEmpty.visible=0===t.length}
+ get className(){
+ return"TreasureInventorySubView"}
+ updateLanguage(){
+ this.lblEmpty.text=SG.getText("GAME_90","보유한 유물이 없습니다."),this.setData(),GXt.getInstance().updateLanguage()}
+ }
+ ;
+ Vt(BXt,"TreasureInventorySubView"),Kt(BXt,"instance");
+ let UXt=BXt;
+ const FXt=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"abilityBg"),Kt(this,"setBg"),Kt(this,"icon",new hXt),Kt(this,"lblName",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblMaxLevel",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblAbilityTitle",new JD("유물능력",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"buffInfo1",new wXt),Kt(this,"buffInfo2",new wXt),Kt(this,"lblBuffDesc1",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_DESC_FONT_OPTION_16)),Kt(this,"lblBuffDesc2",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_DESC_FONT_OPTION_16)),Kt(this,"lblSetTitle",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"setContainer",new Ge),Kt(this,"tierLabels",[]),Kt(this,"skillLabels",[]),Kt(this,"setIcons",[]),Kt(this,"lblFooter",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHonorCoin",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnAction",new kU("UI_GEM","","",.8,160,60)),Kt(this,"btnLimitBreak",new kU("PVP_COIN_ON","","",.7,180,60)),Kt(this,"btn10LimitBreak",new kU("PVP_COIN_ON","","+10",.7,180,60)),Kt(this,"btn100LimitBreak",new kU("PVP_COIN_ON","","+100",.7,180,60)),Kt(this,"btnMaxLimitBreak",new kU("PVP_COIN_ON","","MAX",.7,180,60)),Kt(this,"multiLimitBreakContainer",new Ge),Kt(this,"btnResetLimitBreak",new kU("UI_GEM_ICON","","",.7,180,60)),Kt(this,"contentContainer",new Ge),Kt(this,"vo"),Kt(this,"mode","unequip"),Kt(this,"limitBreakTimer",null),Kt(this,"limitBreakStartValue",-1),Kt(this,"limitBreakStartHonorCoin",-1),Kt(this,"requestPending",!1),Kt(this,"bookVo"),this.bg.height<850&&(this.bg.height=850,this.y=VA.safeHeight-850),this.addChild(this.contentContainer),this.icon.hideFrame(),this.icon.x=11,this.icon.y=50,this.contentContainer.addChild(this.icon),this.lblName.x=this.icon.x+this.icon.width+20,this.lblName.y=this.icon.y+5,this.contentContainer.addChild(this.lblName),this.lblMaxLevel.x=this.lblName.x,this.lblMaxLevel.y=this.lblName.y+this.lblName.height+8,this.contentContainer.addChild(this.lblMaxLevel),this.abilityBg=new TB,this.abilityBg.setIndex(2),this.abilityBg.width=620,this.abilityBg.height=130,this.abilityBg.x=11,this.abilityBg.y=this.icon.y+this.icon.height+15,this.contentContainer.addChild(this.abilityBg),this.lblAbilityTitle.text=SG.getText("GAME_146","유물능력"),this.lblAbilityTitle.x=this.abilityBg.x+15,this.lblAbilityTitle.y=this.abilityBg.y+8,this.contentContainer.addChild(this.lblAbilityTitle),this.buffInfo1.x=this.lblAbilityTitle.x,this.buffInfo1.y=this.lblAbilityTitle.y+30,this.lblBuffDesc1.x=this.lblAbilityTitle.x,this.lblBuffDesc1.y=this.buffInfo1.y+2,this.contentContainer.addChild(this.lblBuffDesc1),this.buffInfo2.x=this.lblAbilityTitle.x,this.buffInfo2.y=this.buffInfo1.y+28,this.lblBuffDesc2.x=this.lblAbilityTitle.x,this.lblBuffDesc2.y=this.buffInfo2.y+2,this.contentContainer.addChild(this.lblBuffDesc2);
+ const i=this.abilityBg.width-2*this.abilityBg.x;
+ cD.setLabelWrapWidth(this.lblBuffDesc1,i),cD.setLabelWrapWidth(this.lblBuffDesc2,i),this.setBg=new TB,this.setBg.setIndex(2),this.setBg.width=620,this.setBg.height=450,this.setBg.x=11,this.setBg.y=this.abilityBg.y+this.abilityBg.height+10,this.contentContainer.addChild(this.setBg),this.lblSetTitle.x=this.setBg.x+15,this.lblSetTitle.y=this.setBg.y+8,this.contentContainer.addChild(this.lblSetTitle),this.setContainer.x=this.setBg.x+15,this.setContainer.y=this.lblSetTitle.y+30,this.contentContainer.addChild(this.setContainer);
+ const s=this.setBg.width-2*this.setBg.x;
+ for(let e=0;
+ e<t.MAX_SET_TIERS;
+ e++){
+ const t=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ t.visible=!1,this.setContainer.addChild(t),this.tierLabels.push(t),cD.setLabelWrapWidth(t,s)}
+ for(let e=0;
+ e<t.MAX_SET_TIERS*t.MAX_SKILLS_PER_TIER;
+ e++){
+ const t=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_DESC_FONT_OPTION_16);
+ t.visible=!1,this.setContainer.addChild(t),this.skillLabels.push(t),cD.setLabelWrapWidth(t,s)}
+ for(let e=0;
+ e<t.MAX_SET_ICONS;
+ e++){
+ const t=new hXt;
+ t.hideEnhance(),t.scale.set(.9),t.visible=!1,this.setContainer.addChild(t),this.setIcons.push(t)}
+ this.lblFooter.text=SG.getText("GAME_151","※ 유물재료회수를 하면, 투자한 유물재료는 100% 회수되고, 유물은 판매됩니다."),this.lblFooter.x=20,this.lblFooter.y=this.setBg.y+this.setBg.height+10,cD.setLabelWrapWidth(this.lblFooter,600),this.contentContainer.addChild(this.lblFooter),this.btnAction.showIconLabel=!1,this.btnAction.showTextLabel=!0,this.btnAction.onClick=this.onActionClick.bind(this),this.contentContainer.addChild(this.btnAction),this.btnLimitBreak.labelOrder=kU.TEXT_FIRST,this.btnLimitBreak.text="Max +",this.btnLimitBreak.color=kU.GREEN,this.btnLimitBreak.visible=!1,this.btnLimitBreak.onClick=()=>this.onLimitBreakClick(1),this.contentContainer.addChild(this.btnLimitBreak),this.setupLimitBreakOptionButton(this.btn10LimitBreak,"+10",()=>{
+ this.onLimitBreakClick(this.getLimitBreakIncrement(10))}
+ ),this.setupLimitBreakOptionButton(this.btn100LimitBreak,"+100",()=>{
+ this.onLimitBreakClick(this.getLimitBreakIncrement(100))}
+ ),this.setupLimitBreakOptionButton(this.btnMaxLimitBreak,"MAX",()=>{
+ this.onLimitBreakClick(this.getMaxLimitBreakIncrement())}
+ ),this.multiLimitBreakContainer.visible=!1,this.multiLimitBreakContainer.addChild(this.btn10LimitBreak,this.btn100LimitBreak,this.btnMaxLimitBreak),this.contentContainer.addChild(this.multiLimitBreakContainer),this.btnResetLimitBreak.labelOrder=kU.TEXT_FIRST,this.btnResetLimitBreak.text=SG.getText("GAME_1148","명예코인회수"),this.btnResetLimitBreak.iconText=String(t.LIMIT_BREAK_RESET_GEM_COST),this.btnResetLimitBreak.color=kU.BLUE,this.btnResetLimitBreak.visible=!1,this.btnResetLimitBreak.onClick=this.onResetLimitBreakClick.bind(this),this.contentContainer.addChild(this.btnResetLimitBreak),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get className(){
+ return"TreasureDetailPopup"}
+ setupLimitBreakOptionButton(t,i,s){
+ t.labelOrder=kU.TEXT_FIRST,t.text=i,t.color=kU.GREEN,t.showIconLabel=!0,t.showTextLabel=!0,t.visible=!1,t.onClick=s}
+ hide(){
+ (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&this.syncLimitBreakToServer(),super.hide()}
+ onAdded(){
+ super.onAdded(),kF.getInstance().setMode(CF.TREASURE_DETAIL)}
+ onRemoved(){
+ super.onRemoved(),"book"===this.mode&&NXt.getInstance().show2()}
+ async onActionClick(){
+ (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&await this.syncLimitBreakToServer(),"unequip"===this.mode?this.onUnequip():"equip"===this.mode&&this.onEquip()}
+ onLimitBreakClick(i=1){
+ if(!this.vo)return;
+ const s=KG.getInstance();
+ if(!s.loaded)return void u2.getInstance().showMessage(SG.getText("GAME_LOADING","잠시 후 다시 시도해주세요."));
+ if(this.vo.limitBreak>=s.getMaxLevel())return;
+ if(i<=0)return;
+ const e=Math.min(this.vo.limitBreak+i,s.getMaxLevel());
+ if(e-this.vo.limitBreak<=0)return;
+ const n=s.getCost(this.vo.grade,this.vo.limitBreak,e);
+ n>0&&ML.honorCoin<n?u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다.")):(1!==i||this.multiLimitBreakContainer.visible||(this.multiLimitBreakContainer.visible=!0,this.updateLayout()),this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),-1===this.limitBreakStartValue&&(this.limitBreakStartValue=this.vo.limitBreak,this.limitBreakStartHonorCoin=ML.honorCoin),ML.honorCoin-=n,this.vo.limitBreak=e,kF.getInstance().updateAll(),this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout(),w3t.getInstance().setData(),UXt.getInstance().setData(),this.limitBreakTimer=setTimeout(async()=>{
+ await this.syncLimitBreakToServer(),this.multiLimitBreakContainer.visible=!1,this.updateLayout()}
+ ,t.LIMIT_BREAK_DEBOUNCE_DELAY))}
+ async syncLimitBreakToServer(){
+ if(this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),-1===this.limitBreakStartValue||!this.vo)return this.resetLimitBreak(),!0;
+ const t=this.vo.limitBreak-this.limitBreakStartValue;
+ if(t<=0)return this.resetLimitBreak(),!0;
+ const i=this.vo.kindNum,s=this.limitBreakStartValue,e=this.limitBreakStartHonorCoin,n=await rD.getInstance().treasure.limitBreak(i,t);
+ return!1===n.success?(this.vo&&this.vo.kindNum===i&&(this.vo.limitBreak=s),ML.honorCoin=e,kF.getInstance().updateAll(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout()),w3t.getInstance().setData(),UXt.getInstance().setData(),this.resetLimitBreak(),wG.getInstance().showError(n),!1):(ML.setUserInfo(n.body),Hx.getInstance().setData(n.body.treasure,n.body.dungeon),kF.getInstance().updateAll(),w3t.getInstance().setData(),UXt.getInstance().setData(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout()),this.resetLimitBreak(),!0)}
+ resetLimitBreak(){
+ this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),this.limitBreakStartValue=-1,this.limitBreakStartHonorCoin=-1}
+ getLimitBreakIncrement(t){
+ if(!this.vo)return 0;
+ const i=KG.getInstance();
+ if(!i.loaded)return 0;
+ const s=i.getMaxLevel()-this.vo.limitBreak;
+ return s<=0?0:Math.min(t,s)}
+ getMaxLimitBreakIncrement(){
+ if(!this.vo)return 0;
+ const t=KG.getInstance();
+ return t.loaded?Math.max(0,t.getMaxLevel()-this.vo.limitBreak):0}
+ async onResetLimitBreakClick(){
+ if(!this.vo)return;
+ if(this.vo.limitBreak<1)return;
+ if(this.multiLimitBreakContainer.visible=!1,this.updateLayout(),ML.gem<t.LIMIT_BREAK_RESET_GEM_COST)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&await this.syncLimitBreakToServer();
+ const i=b$t.getInstance();
+ i.outSideClickHide=!0,i.show(SG.getValueReplace("GAME_1149","##",t.LIMIT_BREAK_RESET_GEM_COST,"보석 1000개로 한계돌파를 초기화하시겠습니까?")+`\n(${
+ SG.getText("GAME_1149A","누적된 명예코인이 환불됩니다.")}
+ )`,async()=>{
+ if(!this.vo)return;
+ const t=await rD.getInstance().treasure.resetLimitBreak(this.vo.kindNum);
+ !1!==t.success?(ML.setUserInfo(t.body),Hx.getInstance().setData(t.body.treasure,t.body.dungeon),kF.getInstance().updateAll(),w3t.getInstance().setData(),UXt.getInstance().setData(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout())):wG.getInstance().showError(t)}
+ ),i.y=.5*(VA.stageHeight-i.height)}
+ async onUnequip(){
+ if(!this.vo)return;
+ const t=await rD.getInstance().treasure.unequipTreasure(this.vo.kindNum);
+ !1!==t.success?(ML.setUserInfo(t.body),Hx.getInstance().setData(t.body.treasure,t.body.dungeon),kF.getInstance().updateAll(),w3t.getInstance().setData(),this.hide()):wG.getInstance().showError(t)}
+ async onEquip(){
+ if(!this.vo)return;
+ if(1==this.checkSlotMax())return;
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=await rD.getInstance().treasure.equipTreasure(this.vo.kindNum);
+ if(!1===t.success)return this.setRequestPending(!1),"TREASURE_MAX_SLOTS"==t.error?void this.checkSlotMax():void wG.getInstance().showError(t);
+ ML.setUserInfo(t.body),Hx.getInstance().setData(t.body.treasure,t.body.dungeon),kF.getInstance().updateAll(),w3t.getInstance().setData(),UXt.getInstance().setData(),this.setRequestPending(!1),this.hide()}
+ setRequestPending(t){
+ this.requestPending=t}
+ checkSlotMax(){
+ const t=Hx.getInstance().maxSlots,i=Hx.getInstance().equipedKindNums.length,s=AL.getInstance().getTreasureMaxSlots();
+ return i>=t&&(t<s?u2.getInstance().showMessage(SG.getText("GAME_296","유물을 배치할 슬롯이 없습니다.")+"\n"+SG.getText("GAME_51","슬롯을 추가로 확장해주세요.")):u2.getInstance().showMessage(SG.getText("GAME_296","유물을 배치할 슬롯이 없습니다.")+"\n"+SG.getValueReplace("GAME_297","##",s,"최대 ##개까지 배치할 수 있습니다.")),!0)}
+ async show(t,i="unequip"){
+ await jXt.cleanup(),this.mode=i,this.multiLimitBreakContainer.visible=!1,t&&this.updateTreasureInfo(t),this.lblFooter.text=`※ ${
+ SG.getText("GAME_151","유물재료회수를 하면, 투자한 유물재료는 100% 회수되고, 유물은 판매됩니다.")}
+ `,this.updateActionButton(),this.updateLayout(),this.show2()}
+ showInBook(t,i="book"){
+ const s=Hx.getInstance().getBookDataByKindNum(t);
+ s&&(this.bookVo||(this.bookVo=new $x),this.bookVo.clone(s),this.show(this.bookVo,i))}
+ updateTreasureInfo(t){
+ this.vo=t,this.icon.setVO(t),this.lblName.text=SG.getText(t.getNameKey(),t.name);
+ const i=t.limitBreak>0?` (+${
+ t.limitBreak}
+ )`:"";
+ this.lblMaxLevel.text=`${
+ SG.getText("COMMON_389","최대레벨")}
+  : ${
+ t.maxLv+t.limitBreak}
+ ${
+ i}
+ `,this.lblAbilityTitle.text=SG.getText("GAME_146","유물능력");
+ const s=t.desc?t.desc.split("|"):[],e=s.length;
+ for(let h=0;
+ h<e;
+ ++h)s[h]=s[h].trim();
+ let n;
+ this.buffInfo1.setVO(t,1),s.length>0?(n=SG.getText(t.skillCode,s[0]),this.lblBuffDesc1.text=`+ ${
+ n}
+  : ${
+ VD.displayLargeNumberAsAlphabet(t.getSkill1Value())}
+ %`,this.lblBuffDesc1.visible=!0):this.lblBuffDesc1.visible=!1,t.skillCode2&&s.length>1?(n=SG.getText(t.skillCode2,s[1]),this.lblBuffDesc2.text=`+ ${
+ n}
+  : ${
+ VD.displayLargeNumberAsAlphabet(t.getSkill2Value())}
+ %`,this.lblBuffDesc2.visible=!0,this.buffInfo2.setVO(t,2),this.buffInfo2.visible=!0):(this.buffInfo2.visible=!1,this.lblBuffDesc2.visible=!1),this.updateSetInfo(t)}
+ updateSetInfo(t){
+ const i=Yx.getInstance().getSetsByTreasureKindNum(t.kindNum);
+ if(0===i.length)return this.lblSetTitle.text="",void this.hideAllSetPool();
+ const s=i[0],e=Hx.getInstance(),n=e.equipedKindNums,h=s.itemList.filter(t=>n.includes(t)).length;
+ this.lblSetTitle.text=SG.getText(s.getTitleKey(),s.title);
+ let r=0,o=0;
+ const a=Hx.getInstance(),c=new Map;
+ for(const d of a.equipedList)c.set(d.kindNum,d.trans||0);
+ const l=s.itemList.filter(t=>n.includes(t)).map(t=>c.get(t)??0).sort((t,i)=>i-t);
+ for(let d=0;
+ d<s.numSetList.length;
+ d++){
+ const t=s.numSetList[d],i=h>=t,e=i?l[t-1]??0:0,n=i?e>0?cD.COLOR_ORANGE:cD.COLOR_BRIGHT_GREEN:10066329;
+ if(d<this.tierLabels.length){
+ const i=this.tierLabels[d],h=e>0?" "+"◆".repeat(e):"";
+ i.text=`${
+ SG.getText("GAME_148","세트효과")}
+  ${
+ d+1}
+  (${
+ t}
+ /${
+ s.itemList.length}
+ )${
+ h}
+ `,i.textColor=n,i.y=r,i.visible=!0}
+ r+=28;
+ const a=s.descList[d]||[],c=s.skillList[d]||[];
+ for(let h=0;
+ h<c.length;
+ h++){
+ if(o<this.skillLabels.length){
+ const t=this.skillLabels[o],i=s.getValueAt(e,d,h);
+ t.text=`  + ${
+ SG.getText(c[h],a[h])||""}
+  : ${
+ VD.displayLargeNumberAsAlphabet(i)}
+ %`,t.textColor=n,t.y=r,t.visible=!0}
+ o++,r+=22}
+ r+=10}
+ for(let d=s.numSetList.length;
+ d<this.tierLabels.length;
+ d++)this.tierLabels[d].visible=!1;
+ for(let d=o;
+ d<this.skillLabels.length;
+ d++)this.skillLabels[d].visible=!1;
+ r+=5;
+ let u=0;
+ for(let d=0;
+ d<this.setIcons.length;
+ d++){
+ const t=this.setIcons[d];
+ if(t.removeAllListeners(),d<s.itemList.length){
+ const i=s.itemList[d],h=e.getBookDataByKindNum(i);
+ if(h){
+ t.setVO(h),t.hideEnhance(),t.x=u,t.y=r;
+ const s=n.includes(i);
+ t.alpha=s?1:.3,t.visible=!0,s?(t.eventMode="none",t.cursor="default"):(t.eventMode="static",t.cursor="pointer",t.on("pointertap",()=>this.onSetIconClick(i))),u+=.9*t.width+15}
+ else t.visible=!1}
+ else t.visible=!1}
+ }
+ onSetIconClick(t){
+ const i=Hx.getInstance(),s=i.equipedList.some(i=>i.kindNum===t)||i.ownedList.some(i=>i.kindNum===t);
+ let e;
+ const n=i.getBookDataByKindNum(t);
+ if(!s){
+ e=SG.getText("GAME_329","보유하지 않은 유물입니다."),n&&(e=`[ ${
+ SG.getText(n.getNameKey(),n.name)}
+  ]\n${
+ e}
+ `);
+ const t=u2.getInstance();
+ return t.textAlignCenter=!0,void t.showMessage(e)}
+ e=SG.getText("GAME_331","장착하시겠습니까?"),n&&(e=`[ ${
+ SG.getText(n.getNameKey(),n.name)}
+  ]\n${
+ e}
+ `);
+ const h=b$t.getInstance();
+ h.textAlignCenter=!0,h.show(e,async()=>{
+ const i=await rD.getInstance().treasure.equipTreasure(t);
+ if(!1===i.success)return"TREASURE_MAX_SLOTS"===i.error?void this.checkSlotMax():void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),Hx.getInstance().setData(i.body.treasure,i.body.dungeon),kF.getInstance().updateAll(),w3t.getInstance().setData(),UXt.getInstance().setData(),this.vo&&this.updateTreasureInfo(this.vo)}
+ )}
+ hideAllSetPool(){
+ for(const t of this.tierLabels)t.visible=!1;
+ for(const t of this.skillLabels)t.visible=!1;
+ for(const t of this.setIcons)t.visible=!1}
+ updateActionButton(){
+ "unequip"===this.mode?(this.btnAction.text=SG.getText("GAME_150","등록해제"),this.btnAction.color=kU.RED):"equip"===this.mode&&(this.btnAction.text=SG.getText("GAME_149","등록"),this.btnAction.color=kU.BROWN),"book"===this.mode||"shop"===this.mode?this.btnAction.visible=!1:this.btnAction.visible=!0,this.updateLimitBreakButton()}
+ updateLimitBreakButton(){
+ if(!this.vo)return this.btnLimitBreak.visible=!1,this.btnResetLimitBreak.visible=!1,void(this.multiLimitBreakContainer.visible=!1);
+ if("book"===this.mode||"shop"===this.mode)return this.btnLimitBreak.visible=!1,this.btnResetLimitBreak.visible=!1,void(this.multiLimitBreakContainer.visible=!1);
+ const t=KG.getInstance();
+ if(!t.loaded)return this.btnLimitBreak.visible=!1,this.btnResetLimitBreak.visible=!1,void(this.multiLimitBreakContainer.visible=!1);
+ const i=(this.vo.enhance||0)>=this.vo.maxLv,s=(this.vo.trans||0)>=1,e=this.vo.limitBreak<t.getMaxLevel();
+ if(i&&s&&e){
+ const i=t.getNextLevelCost(this.vo.grade,this.vo.limitBreak);
+ this.btnLimitBreak.iconText=VD.displayLargeNumberAsAlphabet(i),this.btnLimitBreak.visible=!0}
+ else this.btnLimitBreak.visible=!1,this.multiLimitBreakContainer.visible=!1;
+ this.btnResetLimitBreak.visible=this.vo.limitBreak>=1,this.updateMultiLimitBreakButtons()}
+ updateMultiLimitBreakButtons(){
+ if(!this.vo||!this.btnLimitBreak.visible)return void(this.multiLimitBreakContainer.visible=!1);
+ const t=KG.getInstance();
+ if(!t.loaded)return void(this.multiLimitBreakContainer.visible=!1);
+ this.updateLimitBreakOptionButton(this.btn10LimitBreak,10,"+10"),this.updateLimitBreakOptionButton(this.btn100LimitBreak,100,"+100");
+ const i=this.getMaxLimitBreakIncrement();
+ if(i>1){
+ const s=t.getCost(this.vo.grade,this.vo.limitBreak,this.vo.limitBreak+i);
+ this.btnMaxLimitBreak.text="MAX",this.btnMaxLimitBreak.iconText=VD.displayLargeNumberAsAlphabet(s),this.btnMaxLimitBreak.activated=ML.honorCoin>=s,this.btnMaxLimitBreak.visible=!0}
+ else this.btnMaxLimitBreak.visible=!1;
+ this.btn10LimitBreak.visible||this.btn100LimitBreak.visible||this.btnMaxLimitBreak.visible||(this.multiLimitBreakContainer.visible=!1)}
+ updateLimitBreakOptionButton(t,i,s){
+ if(!this.vo)return void(t.visible=!1);
+ const e=KG.getInstance(),n=this.getLimitBreakIncrement(i);
+ if(n<i)return void(t.visible=!1);
+ const h=e.getCost(this.vo.grade,this.vo.limitBreak,this.vo.limitBreak+n);
+ t.text=s,t.iconText=VD.displayLargeNumberAsAlphabet(h),t.activated=ML.honorCoin>=h,t.visible=!0}
+ updateLayout(){
+ const t=this.bg.height-75,i=[];
+ this.btnLimitBreak.visible&&i.push(this.btnLimitBreak),this.btnResetLimitBreak.visible&&i.push(this.btnResetLimitBreak),this.btnAction.visible&&i.push(this.btnAction);
+ const s=i.reduce((t,i)=>t+i.width,0)+12*Math.max(0,i.length-1);
+ let e=.5*(this.bg.width-s);
+ for(const h of i)h.x=e,h.y=t,e+=h.width+12;
+ if(this.multiLimitBreakContainer.visible&&this.btnLimitBreak.visible){
+ const t=5;
+ let i=this.btnLimitBreak.y;
+ const s=[this.btn10LimitBreak,this.btn100LimitBreak,this.btnMaxLimitBreak];
+ for(const e of s)e.visible&&(i-=e.height+t,e.x=this.btnLimitBreak.x,e.y=i)}
+ this.lblFooter.y=t-this.lblFooter.height-7;
+ let n=this.lblFooter.y-7-this.setBg.y;
+ n>550&&(n=550),this.setBg.height=n}
+ }
+ ;
+ Vt(FXt,"TreasureDetailPopup"),Kt(FXt,"_instance"),Kt(FXt,"MAX_SET_TIERS",3),Kt(FXt,"MAX_SKILLS_PER_TIER",3),Kt(FXt,"MAX_SET_ICONS",6),Kt(FXt,"LIMIT_BREAK_RESET_GEM_COST",1e3),Kt(FXt,"LIMIT_BREAK_DEBOUNCE_DELAY",3e3);
+ let HXt=FXt;
+ var WXt=(t=>(t.unequip="unequip",t.equip="equip",t.book="book",t.shop="shop",t))(WXt||{
+ }
+ );
+ const $Xt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblSetCount",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnUpgrade",new CXt("Core1","0","Core1","")),Kt(this,"btn10",new CXt("Core1","0","Core1","")),Kt(this,"btn100",new CXt("Core1","0","Core1","")),Kt(this,"multiLevelContainer",new Ge),Kt(this,"rapidClickCount",0),Kt(this,"lastRapidClickTime",0),Kt(this,"isMultiLevel",!1),Kt(this,"frameRunning",!1),Kt(this,"lastCoresSnapshot",""),Kt(this,"detailClickBlockedUntil",0),Kt(this,"icon",new hXt),Kt(this,"buffInfo1",new wXt),Kt(this,"buffInfo2",new wXt),Kt(this,"mainContainer",new Ge),Kt(this,"hideTimer",null),Kt(this,"cnt",0),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideFrame(),this.icon.x=15,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=12,this.mainContainer.addChild(this.lblName),this.mainContainer.addChild(this.lblSetCount),this.buffInfo1.x=135,this.buffInfo1.y=44,this.mainContainer.addChild(this.buffInfo1),this.buffInfo2.x=325,this.buffInfo2.y=44,this.mainContainer.addChild(this.buffInfo2),this.btnUpgrade.topIconScale=.7,this.btnUpgrade.bottomIconScale=.7,this.btnUpgrade.color=CXt.BROWN,this.btnUpgrade.height=60,this.btnUpgrade.width=110,this.btnUpgrade.x=this.bg.width-this.btnUpgrade.width-10,this.btnUpgrade.y=.5*(this.bg.height-this.btnUpgrade.height)-2,this.mainContainer.addChild(this.btnUpgrade),this.btnUpgrade.on("pointerdown",()=>this.blockDetailClick(),this),this.btnUpgrade.on("pointertap",()=>this.onUpgradeOrLimitBreak(),this),this.addChild(this.mainContainer),this.addChild(this.multiLevelContainer),this.multiLevelContainer.visible=!1,this.btn10.topIconScale=.7,this.btn10.bottomIconScale=.7,this.btn10.color=CXt.BROWN,this.btn10.height=60,this.btn10.width=110,this.btn10.x=this.btnUpgrade.x-this.btn10.width-5,this.btn10.y=this.btnUpgrade.y,this.multiLevelContainer.addChild(this.btn10),this.btn10.on("pointerdown",()=>this.blockDetailClick(),this),this.btn10.on("pointertap",()=>{
+ const t=this.data,i=this.getNextEnhanceIncrement(t.enhance,10,t.maxLv+t.limitBreak);
+ i>0&&this.onUpgradeMulti(i)}
+ ,this),this.btn100.topIconScale=.7,this.btn100.bottomIconScale=.7,this.btn100.color=CXt.BROWN,this.btn100.height=60,this.btn100.width=110,this.btn100.x=this.btn10.x-this.btn100.width-5,this.btn100.y=this.btnUpgrade.y,this.multiLevelContainer.addChild(this.btn100),this.btn100.on("pointerdown",()=>this.blockDetailClick(),this),this.btn100.on("pointertap",()=>{
+ const t=this.data,i=this.getNextEnhanceIncrement(t.enhance,100,t.maxLv+t.limitBreak);
+ i>0&&this.onUpgradeMulti(i)}
+ ,this),cD.setLabelWrapWidth(this.lblName,this.btnUpgrade.x-this.lblName.x)}
+ isLimitBreakAvailable(t){
+ if(!t)return!1;
+ if((t.trans||0)<1)return!1;
+ const i=KG.getInstance();
+ return!(!i.loaded||t.limitBreak>=i.getMaxLevel()||(t.enhance||0)<t.maxLv)}
+ splitForTwoLines(t){
+ const i=(t??"").trim();
+ if(!i)return{
+ top:"",bottom:""}
+ ;
+ if(i.length<=8)return{
+ top:i,bottom:""}
+ ;
+ const s=i.indexOf(" ");
+ if(s>0)return{
+ top:i.slice(0,s),bottom:i.slice(s+1).trim()}
+ ;
+ const e=Math.ceil(i.length/2);
+ return{
+ top:i.slice(0,e),bottom:i.slice(e)}
+ }
+ onUpgradeOrLimitBreak(){
+ const t=this.data;
+ t&&(t.enhance>=t.maxLv+t.limitBreak&&this.isLimitBreakAvailable(t)?HXt.getInstance().show(t,WXt.unequip):this.onUpgradeMulti(1))}
+ getNextEnhanceIncrement(t,i,s){
+ const e=t%i;
+ let n=0===e?i:i-e;
+ return s>0&&(n=Math.min(n,s-t),n=Math.max(n,0)),n}
+ calcTotalEnhanceCost(t,i){
+ if(i<=0)return[0,0,0,0];
+ const s=i*(2*t.enhance+i+1)/2;
+ return t.openCost.map(i=>Math.floor(i*t.upCost*s))}
+ getNonZeroCores(t){
+ const i=[];
+ for(let s=0;
+ s<t.length;
+ s++)t[s]>0&&i.push({
+ idx:s,cost:t[s]}
+ );
+ return i.sort((t,i)=>i.cost-t.cost),i}
+ setCoreButton(t,i){
+ const s=this.getNonZeroCores(i);
+ s.length>=2?(t.topIcon=`Core${
+ s[0].idx+1}
+ `,t.topText=VD.displayLargeNumberAsAlphabet(s[0].cost),t.bottomIcon=`Core${
+ s[1].idx+1}
+ `,t.bottomText=VD.displayLargeNumberAsAlphabet(s[1].cost)):1===s.length?(t.topIcon=`Core${
+ s[0].idx+1}
+ `,t.topText=VD.displayLargeNumberAsAlphabet(s[0].cost),t.bottomText=""):(t.topText="",t.bottomText="")}
+ isPointInButton(t,i,s){
+ return!!t.visible&&i>=t.x&&i<=t.x+t.width&&s>=t.y&&s<=t.y+t.height}
+ isPointInMultiLevelButton(t,i){
+ return!!this.multiLevelContainer.visible&&(this.isPointInButton(this.btn10,t,i)||this.isPointInButton(this.btn100,t,i))}
+ blockDetailClick(t=300){
+ this.detailClickBlockedUntil=Math.max(this.detailClickBlockedUntil,Date.now()+t)}
+ onClick(t,i){
+ if(Date.now()<this.detailClickBlockedUntil)return;
+ if(this.isPointInMultiLevelButton(t,i))return;
+ if(t>=this.btnUpgrade.x-10)return;
+ const s=this.data;
+ HXt.getInstance().show(s,WXt.unequip)}
+ onUpgradeMulti(i){
+ const s=this.data;
+ if(1===i){
+ const t=Date.now();
+ t-this.lastRapidClickTime<500?this.rapidClickCount++:this.rapidClickCount=1,this.lastRapidClickTime=t,this.rapidClickCount>=3&&!this.multiLevelContainer.visible&&(this.rapidClickCount=0,this.showMultiLevel())}
+ const e=s.maxLv+s.limitBreak;
+ if(s.enhance>=e)return void u2.getInstance().showMessage(SG.getText("GAME_139","최대 강화 레벨입니다."));
+ const n=Math.min(i,e-s.enhance);
+ if(n<=0)return;
+ const h=this.calcTotalEnhanceCost(s,n),r=Hx.getInstance(),o=r.getCores();
+ for(let t=0;
+ t<4;
+ t++)if(h[t]>o[t])return void u2.getInstance().showMessage(SG.getText("GAME_155","유물재료가 부족합니다."));
+ r.core1-=h[0],r.core2-=h[1],r.core3-=h[2],r.core4-=h[3],Nx.getInstance().userCores=r.getCores(),kF.getInstance().updateAll(),s.enhance+=n,this.setData(s),t.targetEnhances.set(s.kindNum,s.enhance),t.markDirtyAndSchedule(),s.enhance>=e?(this.blockDetailClick(),this.hideMultiLevel()):this.isMultiLevel&&this.resetHideTimer(),zjt.get().play(this,2,.5*(this.bg.height-104))}
+ showMultiLevel(){
+ if(!this.data)return;
+ const t=this.data;
+ t.enhance>=t.maxLv+t.limitBreak||(this.isMultiLevel=!0,this.multiLevelContainer.visible=!0,this.updateMultiLevelButtons(),this.startButtonUpdateInterval(),this.resetHideTimer())}
+ hideMultiLevel(){
+ this.isMultiLevel=!1,this.multiLevelContainer.visible=!1,this.stopButtonUpdateInterval(),this.clearHideTimer()}
+ resetHideTimer(){
+ this.clearHideTimer(),this.hideTimer=setTimeout(()=>{
+ this.hideMultiLevel()}
+ ,t.HIDE_DELAY)}
+ clearHideTimer(){
+ null!==this.hideTimer&&(clearTimeout(this.hideTimer),this.hideTimer=null)}
+ updateMultiLevelButtons(){
+ if(!this.multiLevelContainer.visible)return;
+ if(!this.data)return;
+ const t=this.data,i=Hx.getInstance().getCores();
+ let s=!1;
+ const e=[{
+ btn:this.btn10,unit:10}
+ ,{
+ btn:this.btn100,unit:100}
+ ];
+ for(const{
+ btn:n,unit:h}
+ of e){
+ const e=this.getNextEnhanceIncrement(t.enhance,h,t.maxLv+t.limitBreak);
+ if(e>0){
+ const h=this.calcTotalEnhanceCost(t,e);
+ this.setCoreButton(n,h);
+ let r=!0;
+ for(let t=0;
+ t<4;
+ t++)if(h[t]>i[t]){
+ r=!1;
+ break}
+ n.activated=r,n.visible=!0,s=!0}
+ else n.visible=!1}
+ s||(this.blockDetailClick(),this.hideMultiLevel())}
+ onFrame(){
+ var t,i,s,e;
+ if(this.cnt-- >0)return;
+ if(null==(null==(e=null==(s=null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent)?void 0:s.parent)?void 0:e.parent))return void this.stopButtonUpdateInterval();
+ if(this.cnt=30,!this.multiLevelContainer.visible)return;
+ const n=Hx.getInstance().getCores(),h=`${
+ n[0]}
+ ,${
+ n[1]}
+ ,${
+ n[2]}
+ ,${
+ n[3]}
+ `;
+ h!==this.lastCoresSnapshot&&(this.lastCoresSnapshot=h,this.updateMultiLevelButtons())}
+ startButtonUpdateInterval(){
+ this.frameRunning||(this.frameRunning=!0,this.lastCoresSnapshot="",LM.getInstance().add(this.onFrame,this))}
+ stopButtonUpdateInterval(){
+ this.frameRunning&&(this.frameRunning=!1,LM.getInstance().remove(this.onFrame,this))}
+ static markDirtyAndSchedule(){
+ t.isDirty=!0,null!==t.updateTimer&&clearTimeout(t.updateTimer),t.updateTimer=setTimeout(()=>{
+ t.sendToServer(),t.updateTimer=null,t.isDirty=!1}
+ ,t.DEBOUNCE_DELAY)}
+ static async sendToServer(){
+ if(0===t.targetEnhances.size)return;
+ const i=[],s=[];
+ t.targetEnhances.forEach((t,e)=>{
+ i.push(e),s.push(t)}
+ ),t.targetEnhances.clear();
+ let e=await rD.getInstance().treasure.batchUpgradeTreasure(i.join("|"),s.join("|"));
+ if(!1===e.success){
+ const t=await rD.getInstance().treasure.getMyTreasureList();
+ return t.success&&(ML.setUserInfo(t.body),Hx.getInstance().setData(t.body.treasure,t.body.dungeon),kF.getInstance().updateAll(),w3t.getInstance().setData()),void wG.getInstance().showError(e)}
+ ML.setUserInfo(e.body),Hx.getInstance().setData(e.body.treasure,e.body.dungeon),kF.getInstance().updateAll()}
+ static async cleanup(){
+ null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.isDirty&&(await t.sendToServer(),t.isDirty=!1)}
+ setData(t){
+ this.data=t;
+ const i=t;
+ this.icon.setVO(i);
+ const s=SG.getText(i.getNameKey(),i.name);
+ this.lblName.text=s;
+ const e=Yx.getInstance().getSetCountInfo(i.kindNum);
+ e.total<1?this.lblSetCount.visible=!1:(this.lblSetCount.text=`(${
+ e.equipedCount}
+ /${
+ e.total}
+ )`,e.equipedCount<e.total?this.lblSetCount.textColor=10066329:this.lblSetCount.textColor=cD.COLOR_BRIGHT_GREEN,this.lblSetCount.visible=!0),this.lblName.y=20-.5*this.lblName.height,this.lblSetCount.x=this.lblName.x+this.lblName.width+3,this.lblSetCount.y=this.lblName.y+.5*(this.lblName.height-this.lblSetCount.height-1),this.buffInfo1.setVO(i,1),this.buffInfo2.setVO(i,2),(i.desc?i.desc.split("|"):[]).length>1&&i.skillCode2?this.buffInfo2.visible=!0:this.buffInfo2.visible=!1,i.enhance<i.maxLv+i.limitBreak?(this.btnUpgrade.topLabel.iconHidden=!1,this.btnUpgrade.bottomLabel.iconHidden=!1,this.btnUpgrade.topLabel.textSize=17,this.btnUpgrade.bottomLabel.textSize=17,this.btnUpgrade.topLabel.textColor=16777215,this.btnUpgrade.bottomLabel.textColor=16777215,this.setCoreButton(this.btnUpgrade,i.getEnhanceCost()),this.btnUpgrade.activated=!0,this.btnUpgrade.visible=!0):this.isLimitBreakAvailable(i)?(this.btnUpgrade.topLabel.iconHidden=!0,this.btnUpgrade.bottomLabel.iconHidden=!0,this.btnUpgrade.topLabel.textSize=17,this.btnUpgrade.bottomLabel.textSize=17,this.btnUpgrade.topLabel.textColor=16766282,this.btnUpgrade.bottomLabel.textColor=16766282,this.btnUpgrade.topText="Max +",this.btnUpgrade.bottomText="",this.btnUpgrade.activated=!0,this.btnUpgrade.visible=!0):(this.btnUpgrade.topLabel.iconHidden=!0,this.btnUpgrade.bottomLabel.iconHidden=!0,this.btnUpgrade.topLabel.textSize=17,this.btnUpgrade.bottomLabel.textSize=17,this.btnUpgrade.topLabel.textColor=16777215,this.btnUpgrade.bottomLabel.textColor=16777215,this.btnUpgrade.topText="Max",this.btnUpgrade.bottomText="",this.btnUpgrade.activated=!1,this.btnUpgrade.visible=!0),this.updateMultiLevelButtons(),this.updateCache()}
+ updateCache(){
+ }
+ clearCache(){
+ }
+ }
+ ;
+ Vt($Xt,"TreasureItemRenderer"),Kt($Xt,"updateTimer",null),Kt($Xt,"DEBOUNCE_DELAY",3e3),Kt($Xt,"isDirty",!1),Kt($Xt,"targetEnhances",new Map),Kt($Xt,"HIDE_DELAY",5e3);
+ let jXt=$Xt;
+ const VXt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblRankTitle",new JD("rank",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblRankNum",new JD("",cD.DEFAULT_COLOR,cD.ORANGE_OUTLINE_FONT_OPTION_28)),Kt(this,"lblNameInfo",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblDetail",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnFight",new ZL("전투")),Kt(this,"onFight"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),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=ZL.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.data&&this.onFight&&this.onFight(this.data)}
+ ,this.addChild(this.btnFight)}
+ setData(t){
+ 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.lblNameInfo.text=`${
+ t.name}
+  ( Lv.${
+ s}
+  )`;
+ const e=Number(t.total)||0,n=Number(t.win)||0,h=e-n;
+ this.lblDetail.text=`${
+ t.point.toLocaleString()}
+ `+SG.getText("COMMON_37","점수").charAt(0)+`  ( ${
+ e}
+ -${
+ n}
+ -${
+ h}
+  )`,this.btnFight.text=SG.getText("GAME_70","전투")}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(VXt,"PVPOpponentItemRenderer");
+ let KXt=VXt;
+ const zXt=class{
+ constructor(t){
+ Kt(this,"state"),Kt(this,"initialSeed"),Kt(this,"callCount",0),this.initialSeed=t>>>0,this.state=this.initialSeed}
+ next(){
+ this.state=this.state+1831565813>>>0;
+ let t=this.state;
+ return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),this.callCount++,((t^t>>>14)>>>0)/4294967296}
+ nextInt(t){
+ return Math.floor(this.next()*t)}
+ range(t,i){
+ return t+this.next()*(i-t)}
+ chance(t){
+ return this.next()<t}
+ pick(t){
+ return t[this.nextInt(t.length)]}
+ getSeed(){
+ return this.initialSeed}
+ getCallCount(){
+ return this.callCount}
+ getState(){
+ return this.state}
+ }
+ ;
+ Vt(zXt,"BattleRandom");
+ let qXt=zXt;
+ const YXt=class extends He{
+ constructor(t,i){
+ super(QA.getTexture(t,i)),this.anchor.set(.5,1),this.eventMode="none"}
+ setTexture(t,i){
+ this.texture=QA.getTexture(t,i)}
+ }
+ ;
+ Vt(YXt,"MapObject");
+ let XXt=YXt;
+ const JXt=class{
+ constructor(){
+ Kt(this,"player"),Kt(this,"friendList",[]),Kt(this,"enemyList",[]),Kt(this,"weaponList",[]),Kt(this,"effectList",[]),Kt(this,"unitScale",1),Kt(this,"sortCooldown",0),Kt(this,"SORT_INTERVAL",15),Kt(this,"frameTime",0),Kt(this,"avgFrameTime",0),Kt(this,"frameCount",0),Kt(this,"PERFORMANCE_LOG_INTERVAL",300),Kt(this,"killCount",0),Kt(this,"battleTime",0),Kt(this,"totalDamageDealt",0),Kt(this,"totalDamageTaken",0),Kt(this,"nextSummonedUnitId",1e6),Kt(this,"random",new qXt(Date.now())),Kt(this,"determinismCaptureEnabled",!1),Kt(this,"frameHashes",[]),Kt(this,"eventHashes",[]),Kt(this,"FRAME_HASH_INTERVAL",60),Kt(this,"execute",Vt(()=>{
+ const t=performance.now();
+ this.executePlayer(),this.executeUnits(this.friendList),this.executeEnemies(),this.executeWeapons(),this.executeEffects(),this.checkProgress(),this.captureFrameHashIfNeeded(),this.updatePerformance(t),this.battleTime++,++this.sortCooldown>=this.SORT_INTERVAL&&(this.sortCooldown=0,this.updateZIndexSorting())}
+ ,"execute"))}
+ initRandom(t){
+ this.random=new qXt(t??Date.now())}
+ enableDeterminismCapture(){
+ this.determinismCaptureEnabled=!0,this.frameHashes=[],this.eventHashes=[]}
+ getDeterminismReport(){
+ var t,i;
+ return{
+ seed:(null==(t=this.random)?void 0:t.getSeed())??0,randomCallCount:(null==(i=this.random)?void 0:i.getCallCount())??0,frames:this.frameHashes,events:this.eventHashes}
+ }
+ captureFrameHashIfNeeded(){
+ this.determinismCaptureEnabled&&this.battleTime%this.FRAME_HASH_INTERVAL===0&&this.frameHashes.push({
+ frame:this.battleTime,hash:this.computeStateHash()}
+ )}
+ captureEventHash(t,i){
+ this.determinismCaptureEnabled&&this.eventHashes.push({
+ frame:this.battleTime,type:t,hash:this.hashString(`${
+ t}
+ :${
+ i}
+ `)}
+ )}
+ computeStateHash(){
+ let t=2166136261;
+ const i=Vt(i=>{
+ t^=0|i,t=Math.imul(t,16777619)>>>0}
+ ,"mix"),s=Vt(t=>{
+ var s,e,n,h;
+ if(!t||t.removed)return;
+ const r=t;
+ i(100*t.x|0),i(100*t.y|0),i(100*r.hp|0),i(100*r.attackCoolDown|0),i(100*r.skillCoolDown|0),i(0|r.initDelay),i(100*r.mana|0),i(100*r.currentFrame|0),i(0|r.state),i(0|r.stateChangeTimer),i(0|r.numStun),i(0|r.numFreeze),i(0|r.numPoison),i(0|r.numCurse),i(0|r.numBinding),i(0|r.numShock),i(0|r.direction);
+ const o=r.target;
+ i(o?0|o.id||0|o.kindNum:0),i(0|(null==(s=r.buffList)?void 0:s.length)||0),i(0|(null==(e=r.dotDamageList)?void 0:e.length)||0),i(0|(null==(n=r.dotHealList)?void 0:n.length)||0),i(0|(null==(h=r.effectList)?void 0:h.length)||0)}
+ ,"mixUnit");
+ this.player&&s(this.player);
+ for(let e=0;
+ e<this.friendList.length;
+ e++)s(this.friendList[e]);
+ for(let e=0;
+ e<this.enemyList.length;
+ e++)s(this.enemyList[e]);
+ return this.random&&(i(this.random.getState()),i(this.random.getCallCount())),t>>>0}
+ hashString(t){
+ let i=2166136261;
+ for(let s=0;
+ s<t.length;
+ s++)i^=t.charCodeAt(s),i=Math.imul(i,16777619)>>>0;
+ return i>>>0}
+ updateZIndexSorting(){
+ const t=rB.getInstance();
+ t.sortableChildren||(t.sortableChildren=!0);
+ const i=t.children;
+ for(let s=0;
+ s<i.length;
+ s++)i[s].zIndex=i[s].y;
+ t.sortChildren()}
+ executePlayer(){
+ this.player&&this.player.execute()}
+ executeUnits(t){
+ t.length>0&&(0===this.battleTime||this.battleTime);
+ for(let i=t.length-1;
+ i>=0;
+ i--){
+ const s=t[i];
+ s.isCastle?(s.removed&&(s.removed=!1),s.execute()):s.removed?(s.remove(),t.splice(i,1)):(s.execute(),s.removed&&(s.remove(),t.splice(i,1)))}
+ }
+ executeEnemies(){
+ this.enemyList.length>0&&(0===this.battleTime||this.battleTime);
+ for(let t=this.enemyList.length-1;
+ t>=0;
+ t--){
+ const i=this.enemyList[t];
+ i.removed?(this.onEnemyKilled(i),i.remove(),this.enemyList.splice(t,1)):(i.execute(),i.removed&&(this.onEnemyKilled(i),i.remove(),this.enemyList.splice(t,1)))}
+ }
+ executeWeapons(){
+ 60===this.battleTime&&this.weaponList.length;
+ for(let t=this.weaponList.length-1;
+ t>=0;
+ t--){
+ const i=this.weaponList[t];
+ i.removed?this.weaponList.splice(t,1):(i.execute(),i.removed&&this.weaponList.splice(t,1))}
+ }
+ executeEffects(){
+ for(let t=this.effectList.length-1;
+ t>=0;
+ t--){
+ const i=this.effectList[t];
+ i.removed?this.effectList.splice(t,1):(i.execute(),i.removed&&this.effectList.splice(t,1))}
+ }
+ onEnemyKilled(t){
+ this.killCount++}
+ cleanup(){
+ for(let e=this.weaponList.length-1;
+ e>=0;
+ e--)this.weaponList[e].remove();
+ this.weaponList.length=0;
+ const t=mB.getInstance();
+ for(let e=t.children.length-1;
+ e>=0;
+ e--)t.children[e].remove();
+ for(let e=this.effectList.length-1;
+ e>=0;
+ e--)this.effectList[e].remove();
+ this.effectList.length=0;
+ const i=sB.getInstance();
+ for(let e=i.children.length-1;
+ e>=0;
+ e--){
+ const t=i.children[e];
+ "function"==typeof(null==t?void 0:t.remove)?t.remove():i.removeChild(t)}
+ for(let e=this.friendList.length-1;
+ e>=0;
+ e--){
+ const t=this.friendList[e];
+ t.target&&t.target.removeBlockedEnemy(t),t.clearBlockedEnemies(),t.remove()}
+ this.friendList.length=0;
+ for(let e=this.enemyList.length-1;
+ e>=0;
+ e--){
+ const t=this.enemyList[e];
+ t.target&&t.target.removeBlockedEnemy(t),t.clearBlockedEnemies(),t.remove()}
+ this.enemyList.length=0,nB.getInstance().removeChildren(),nB.getInstance().visible=!0,tB.getInstance().removeChildren(),tB.getInstance().visible=!0;
+ const s=rB.getInstance();
+ for(let e=s.children.length-1;
+ e>=0;
+ e--){
+ const t=s.children[e];
+ t instanceof $Q||t instanceof XXt||t.removeFromParent()}
+ this.killCount=0,this.battleTime=0,this.sortCooldown=0,this.frameTime=0,this.avgFrameTime=0,this.frameCount=0,this.totalDamageDealt=0,this.totalDamageTaken=0,this.nextSummonedUnitId=1e6}
+ allocateSummonedUnitId(){
+ return this.nextSummonedUnitId++}
+ addWeapon(t){
+ this.weaponList.includes(t)||this.weaponList.push(t)}
+ removeWeapon(t){
+ const i=this.weaponList.indexOf(t);
+ -1!==i&&this.weaponList.splice(i,1)}
+ addEffect(t){
+ this.effectList.includes(t)||this.effectList.push(t)}
+ removeEffect(t){
+ const i=this.effectList.indexOf(t);
+ -1!==i&&this.effectList.splice(i,1)}
+ getNearbyUnits(t,i,s,e){
+ return s}
+ updatePerformance(t){
+ this.frameTime=performance.now()-t,this.avgFrameTime=(this.avgFrameTime*this.frameCount+this.frameTime)/(this.frameCount+1),this.frameCount++,this.frameCount%this.PERFORMANCE_LOG_INTERVAL===0&&(this.avgFrameTime,this.avgFrameTime,this.avgFrameTime=0,this.frameCount=0)}
+ getPerformanceStats(){
+ return{
+ avgFrameTime:this.avgFrameTime,fps:1e3/Math.max(this.avgFrameTime,.001),unitCount:this.friendList.length+this.enemyList.length}
+ }
+ getPlayer(){
+ return this.player}
+ getEnemyList(){
+ return this.enemyList}
+ getFriendList(){
+ return this.friendList}
+ getBattleType(){
+ return this.battleType}
+ getStatistics(){
+ return{
+ killCount:this.killCount,surviveTime:this.battleTime,damageDealt:this.totalDamageDealt,damageTaken:this.totalDamageTaken}
+ }
+ hide(){
+ this.player&&(this.player.visible=!1);
+ for(const e of this.friendList)e.visible=!1;
+ for(const e of this.enemyList)e.visible=!1;
+ for(let e=this.weaponList.length-1;
+ e>=0;
+ e--)this.weaponList[e].remove();
+ this.weaponList.length=0;
+ const t=mB.getInstance();
+ for(let e=t.children.length-1;
+ e>=0;
+ e--)t.children[e].remove();
+ for(let e=this.effectList.length-1;
+ e>=0;
+ e--)this.effectList[e].remove();
+ this.effectList.length=0;
+ const i=sB.getInstance();
+ for(let e=i.children.length-1;
+ e>=0;
+ e--)i.children[e].remove();
+ tB.getInstance().removeChildren();
+ const s=rB.getInstance();
+ for(let e=s.children.length-1;
+ e>=0;
+ e--){
+ const t=s.children[e];
+ t instanceof XXt||(t instanceof $Q?t.battleController!==this&&null!=t.battleController||(t.visible=!1):t.removeFromParent())}
+ }
+ showUnit(t){
+ if(!t)return;
+ t.visible=!0,t.renderable=!0,t.alpha=1;
+ const i=t.sp;
+ i&&(i.visible=!0)}
+ show(){
+ this.showUnit(this.player);
+ for(const t of this.friendList)this.showUnit(t);
+ for(const t of this.enemyList)this.showUnit(t)}
+ }
+ ;
+ Vt(JXt,"BaseBattleController");
+ let QXt=JXt;
+ const ZXt=class extends QXt{
+ constructor(){
+ super(...arguments),Kt(this,"battleEnded",!1),Kt(this,"battleResult",null)}
+ checkProgress(){
+ this.battleEnded||(this.checkVictory()?this.handleVictory():this.checkDefeat()&&this.handleDefeat())}
+ handleVictory(){
+ this.battleEnded||(this.battleEnded=!0,this.battleResult={
+ success:!0,statistics:this.getStatistics()}
+ ,this.onVictoryCallback(),this.scheduleReturnToMain())}
+ handleDefeat(){
+ this.battleEnded||(this.battleEnded=!0,this.battleResult={
+ success:!1,statistics:this.getStatistics()}
+ ,this.onDefeatCallback(),this.scheduleReturnToMain())}
+ scheduleReturnToMain(){
+ setTimeout(()=>{
+ this.returnToMain()}
+ ,3e3)}
+ cleanup(){
+ super.cleanup(),this.battleEnded=!1,this.battleResult=null}
+ isBattleEnded(){
+ return this.battleEnded}
+ getBattleResult(){
+ return this.battleResult}
+ }
+ ;
+ Vt(ZXt,"SingleBattleController");
+ let tJt=ZXt;
+ const iJt=class t{
+ constructor(i){
+ Kt(this,"lsKey"),Kt(this,"btnContainer",null),Kt(this,"btnLabel",null),Kt(this,"cycle",Vt(()=>{
+ const i=$D.subBattleSpeed??1,s=t.SPEED_CYCLE,e=s.indexOf(i),n=s[e<0?0:(e+1)%s.length];
+ this.apply(n),this.saveSpeed(n)}
+ ,"cycle")),this.lsKey=i}
+ loadSavedSpeed(){
+ try{
+ const i=localStorage.getItem(this.lsKey);
+ if(!i)return 1;
+ const s=Number(i);
+ return Number.isFinite(s)?t.SPEED_CYCLE.indexOf(s)<0?1:s:1}
+ catch{
+ return 1}
+ }
+ saveSpeed(t){
+ try{
+ localStorage.setItem(this.lsKey,String(t))}
+ catch{
+ }
+ }
+ apply(t){
+ $D.subBattleSpeed=t,$D.speedMode=t,qG.getInstance().setSpeed(t),this.btnLabel&&(this.btnLabel.text=`x${
+ t}
+ `)}
+ enter(){
+ this.apply(this.loadSavedSpeed())}
+ enterFixed(t=1){
+ this.apply(t)}
+ exit(){
+ null!=$D.subBattleSpeed&&($D.subBattleSpeed=null,Xt(async()=>{
+ const{
+ TopMenu:t}
+ =await Promise.resolve().then(()=>vhi);
+ return{
+ TopMenu:t}
+ }
+ ,void 0).then(({
+ TopMenu:t}
+ )=>{
+ t.getInstance().updateGameSpeed()}
+ ).catch(()=>{
+ $D.speedMode=1,qG.getInstance().setSpeed(1)}
+ ))}
+ attachButton(t,i,s){
+ this.detachButton();
+ const e=new Ge;
+ e.x=i,e.y=s;
+ const n=new Lf;
+ n.roundRect(0,0,66,33,16.5).fill({
+ color:0,alpha:.55}
+ ).stroke({
+ width:1.2,color:16777215,alpha:.4}
+ ),e.addChild(n);
+ const h=new Hg({
+ text:`x${
+ $D.subBattleSpeed??1}
+ `,style:{
+ fontFamily:"Arial",fontSize:21,fontWeight:"700",fill:16777215,stroke:{
+ color:0,width:2}
+ }
+ }
+ );
+ h.anchor.set(.5,.5),h.x=33,h.y=16.5,e.addChild(h),e.eventMode="static",e.cursor="pointer",e.hitArea=new Ri(0,0,66,33),e.on("pointerup",this.cycle),t.addChild(e),this.btnContainer=e,this.btnLabel=h}
+ detachButton(){
+ this.btnContainer&&(this.btnContainer.off("pointerup",this.cycle),this.btnContainer.parent&&this.btnContainer.parent.removeChild(this.btnContainer),this.btnContainer.destroy({
+ children:!0}
+ ),this.btnContainer=null,this.btnLabel=null)}
+ }
+ ;
+ Vt(iJt,"BattleSpeedHelper"),Kt(iJt,"SPEED_CYCLE",[1,2]);
+ let sJt=iJt;
+ const eJt=class extends r5{
+ constructor(){
+ super(),Kt(this,"receivedIcon"),Kt(this,"activatedBg"),Kt(this,"_activated",!0),Kt(this,"_received",!1),this.activatedBg=new He(QA.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.activatedBg.visible=!this._activated,this.addChild(this.activatedBg),this.receivedIcon=new He(QA.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)}
+ }
+ ;
+ Vt(eJt,"PvPRewardItem");
+ let nJt=eJt;
+ const hJt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"reward"),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"btnConfirm",new kU("","","확인",.8,200,70)),Kt(this,"onConfirm",null),Kt(this,"autoReturnTimer",null),this.title=SG.getText("GAME_76","무한 랭킹전"),this.reward=new nJt,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=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!1}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.clearAutoReturnTimer(),jni.getInstance().returnToIdleBattle(),this.hide(),Zqt.getInstance().addChild(kF.getInstance()),B5t.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=SG.getText("GAME_76","무한 랭킹전"),this.lblMessage.text=SG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=SG.getText("COMMON_1","확인");
+ const i=Number(AL.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()}
+ displayGemGathering(t,i){
+ let s=t.getGlobalPosition(),e=VA.stage.toLocal(s);
+ Q6t.getInstance().getGemInAchieve(e.x+.5*t.width-15,e.y+.5*t.height-20,i,Math.min(30,i),this,1.2)}
+ showDefeat(t=null){
+ this.onConfirm=t,this.title=SG.getText("GAME_76","무한 랭킹전"),this.lblMessage.text=SG.getText("COMMON_387","전투에 패배하였습니다."),this.lblMessage.textColor=16711680,this.btnConfirm.color=kU.RED,this.btnConfirm.text=SG.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}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(hJt,"PVPResultPopup"),Kt(hJt,"_instance"),Kt(hJt,"AUTO_RETURN_DELAY",5e3);
+ let rJt=hJt;
+ const oJt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblReward",new $B("Core1","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblGemReward",new $B("UI_GEM","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblHonorReward",new $B("PVP_COIN_ON","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnConfirm",new kU("","","확인",.8,200,70)),Kt(this,"onConfirm",null),Kt(this,"autoReturnTimer",null),this.title=SG.getText("GAME_74","던전"),this.lblMessage.align="center",this.lblMessage.y=85,this.contentContainer.addChild(this.lblMessage,this.lblReward,this.lblGemReward,this.lblHonorReward,this.btnConfirm),this.lblGemReward.visible=!1,this.lblHonorReward.visible=!1,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide()}
+ hide(){
+ this.clearAutoReturnTimer(),jni.getInstance().returnToIdleBattle(),super.hide(),this.onConfirm&&(this.onConfirm(),this.onConfirm=null)}
+ startAutoReturnTimer(){
+ this.clearAutoReturnTimer(),this.autoReturnTimer=setTimeout(()=>{
+ this.onConfirmClick()}
+ ,t.AUTO_RETURN_DELAY)}
+ clearAutoReturnTimer(){
+ this.autoReturnTimer&&(clearTimeout(this.autoReturnTimer),this.autoReturnTimer=null)}
+ showVictory(t=null,i=0,s=0,e=""){
+ if(this.onConfirm=t,this.title=e||SG.getText("GAME_74","던전"),this.lblMessage.text=SG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=SG.getText("COMMON_1","확인"),i>0&&s>0){
+ this.lblReward.visible=!0,this.lblReward.texture=QA.getTexture("UI_Ekkorr",`Core${
+ i}
+ `);
+ const t=s,e=VR.getInstance().getGameplayMultiplier(OR.Core),n=Math.floor(t*e)-t;
+ this.lblReward.text=n>0?`${
+ VD.displayLargeNumberAsAlphabet(t)}
+  + ${
+ VD.displayLargeNumberAsAlphabet(n)}
+ `:VD.displayLargeNumberAsAlphabet(t)}
+ else this.lblReward.visible=!1;
+ this.lblGemReward.visible=!1,this.lblHonorReward.visible=!1,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
+ showTowerVictory(t=null,i=0,s=0,e=""){
+ this.onConfirm=t,this.title=e||SG.getText("GAME_74","던전"),this.lblMessage.text=SG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.lblReward.visible=!1;
+ const n=i>0||s>0;
+ this.lblGemReward.visible=n,this.lblHonorReward.visible=n,this.lblGemReward.text=`${
+ i}
+ `,this.lblHonorReward.text=`${
+ s}
+ `,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
+ showGuildWarBattle(t,i=null,s=0,e=0,n=""){
+ this.onConfirm=i,this.title=n||SG.getText("GAME_74","던전"),this.lblMessage.text=SG.getText(t?"COMMON_386":"COMMON_387",t?"전투에 승리하였습니다.":"전투에 패배하였습니다."),this.lblMessage.textColor=t?65280:16711680,this.btnConfirm.color=t?kU.GREEN:kU.RED,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.lblReward.visible=!1;
+ const h=s>0||e>0;
+ this.lblGemReward.visible=h,this.lblHonorReward.visible=h,this.lblGemReward.text=`${
+ s}
+ `,this.lblHonorReward.text=`${
+ e}
+ `,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
+ showDefeat(t=null,i=""){
+ this.onConfirm=t,this.title=i||SG.getText("GAME_74","던전"),this.lblMessage.text=SG.getText("COMMON_387","전투에 패배하였습니다."),this.lblMessage.textColor=16711680,this.btnConfirm.color=kU.RED,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.lblReward.visible=!1,this.lblGemReward.visible=!1,this.lblHonorReward.visible=!1,this.updateLayout(),super.show(),this.startAutoReturnTimer()}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85;
+ let t=this.lblMessage.y+this.lblMessage.height+20;
+ if(this.lblReward.visible&&(this.lblReward.x=.5*(this.width-this.lblReward.width),this.lblReward.y=t,t=this.lblReward.y+this.lblReward.height+20),this.lblGemReward.visible||this.lblHonorReward.visible){
+ const i=20,s=this.lblGemReward.width+i+this.lblHonorReward.width,e=.5*(this.width-s);
+ this.lblGemReward.x=e,this.lblGemReward.y=t,this.lblHonorReward.x=e+this.lblGemReward.width+i,this.lblHonorReward.y=t,t=t+this.lblGemReward.height+20}
+ this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+60}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(oJt,"DungeonResultPopup"),Kt(oJt,"_instance"),Kt(oJt,"AUTO_RETURN_DELAY",5e3);
+ let aJt=oJt;
+ const cJt=class extends Lf{
+ render(t,i){
+ if(this.clear(),!UQ.enabled)return;
+ const s=UQ.CELL_SIZE,e=Math.ceil(t/s),n=Math.ceil(i/s);
+ for(let h=0;
+ h<n;
+ h++)for(let t=0;
+ t<e;
+ t++){
+ const i=t*s+s/2,e=h*s+s/2;
+ UQ.isBlocked(i,e)&&this.rect(t*s,h*s,s,s)}
+ this.fill({
+ color:16724804,alpha:.35}
+ )}
+ }
+ ;
+ Vt(cJt,"TerrainDebugOverlay");
+ let lJt=cJt;
+ const uJt=class{
+ constructor(){
+ Kt(this,"dx",null),Kt(this,"dy",null),Kt(this,"gridW",0),Kt(this,"gridH",0),Kt(this,"CELL_SIZE",UQ.CELL_SIZE)}
+ build(t,i,s){
+ const e=this.CELL_SIZE;
+ this.gridW=Math.ceil(t/e),this.gridH=Math.ceil(i/e);
+ const n=this.gridW*this.gridH;
+ this.dx=new Int8Array(n),this.dy=new Int8Array(n);
+ const h=new Int32Array(n);
+ h.fill(2147483647);
+ const r=4*n,o=new Int32Array(r),a=new Int32Array(r);
+ let c=0;
+ const l=Vt((t,i)=>{
+ let s=c++;
+ for(o[s]=t,a[s]=i;
+ s>0;
+ ){
+ const t=s-1>>1;
+ if(o[t]<=o[s])break;
+ const i=o[t];
+ o[t]=o[s],o[s]=i;
+ const e=a[t];
+ a[t]=a[s],a[s]=e,s=t}
+ }
+ ,"push"),u=Math.max(0,Math.floor(s.x/e)),d=Math.max(0,Math.floor(s.y/e)),f=Math.min(this.gridW-1,Math.ceil((s.x+s.w)/e)-1),p=Math.min(this.gridH-1,Math.ceil((s.y+s.h)/e)-1),g=e/2;
+ for(let b=d;
+ b<=p;
+ b++)for(let t=u;
+ t<=f;
+ t++){
+ const i=t*e+g,s=b*e+g;
+ if(UQ.isBlocked(i,s))continue;
+ const n=b*this.gridW+t;
+ h[n]=0,l(0,n)}
+ const m=[1,-1,0,0,1,1,-1,-1],w=[0,0,1,-1,1,-1,1,-1],v=[10,10,10,10,14,14,14,14];
+ for(;
+ c>0;
+ ){
+ const t=o[0],i=a[0];
+ if(c--,c>0){
+ o[0]=o[c],a[0]=a[c];
+ let t=0;
+ for(;
+ ;
+ ){
+ const i=2*t+1,s=2*t+2;
+ let e=t;
+ if(i<c&&o[i]<o[e]&&(e=i),s<c&&o[s]<o[e]&&(e=s),e===t)break;
+ const n=o[e];
+ o[e]=o[t],o[t]=n;
+ const h=a[e];
+ a[e]=a[t],a[t]=h,t=e}
+ }
+ if(t>h[i])continue;
+ const s=i%this.gridW,n=(i-s)/this.gridW;
+ for(let o=0;
+ o<8;
+ o++){
+ const i=s+m[o],a=n+w[o];
+ if(i<0||i>=this.gridW||a<0||a>=this.gridH)continue;
+ if(UQ.isBlocked(i*e+g,a*e+g))continue;
+ const u=a*this.gridW+i,d=t+v[o];
+ d<h[u]&&(h[u]=d,this.dx[u]=-m[o],this.dy[u]=-w[o],c<r&&l(d,u))}
+ }
+ }
+ sample(t,i){
+ if(null===this.dx||null===this.dy)return{
+ dx:0,dy:0}
+ ;
+ const s=Math.floor(t/this.CELL_SIZE),e=Math.floor(i/this.CELL_SIZE);
+ if(s<0||s>=this.gridW||e<0||e>=this.gridH)return{
+ dx:0,dy:0}
+ ;
+ const n=e*this.gridW+s;
+ return{
+ dx:this.dx[n],dy:this.dy[n]}
+ }
+ dispose(){
+ this.dx=null,this.dy=null,this.gridW=0,this.gridH=0}
+ }
+ ;
+ Vt(uJt,"FlowField");
+ let dJt=uJt;
+ var fJt=(t=>(t[t.HORIZONTAL=1]="HORIZONTAL",t[t.VERTICAL=2]="VERTICAL",t))(fJt||{
+ }
+ );
+ const pJt=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.GUILD_WAR),Kt(this,"currentAllyOffsets",[]),Kt(this,"currentEnemyOffsets",[]),Kt(this,"battleMode",1),Kt(this,"mapIndex",1),Kt(this,"zoomLevel",.7),Kt(this,"prevGameScale",1),Kt(this,"prevGameX",0),Kt(this,"prevGameY",0),Kt(this,"prevBackgroundVisible",!0),Kt(this,"prevZoomEnabled",!0),Kt(this,"hasViewStateBackup",!1),Kt(this,"heroKindNums",[60,58,78,54,56]),Kt(this,"soldierKindNums",[1,4,7,20,13]),Kt(this,"enemyHeroKindNums",[78,78,78,78,78]),Kt(this,"enemySoldierKindNums",[20,9,14,8,21]),Kt(this,"allyCorpSoldierTiers",[null,null,null,null,null]),Kt(this,"enemyCorpSoldierTiers",[null,null,null,null,null]),Kt(this,"allyKnightLevel",1),Kt(this,"enemyKnightLevel",1),Kt(this,"enemyHeroLevelBonus",0),Kt(this,"onComplete",null),Kt(this,"onAfterReturnToIdle",null),Kt(this,"lastReward",{
+ gem:0,honorCoin:0}
+ ),Kt(this,"spawnedVOs",[]),Kt(this,"allyHeroes",[]),Kt(this,"enemyHeroes",[]),Kt(this,"initialAllyCount",0),Kt(this,"initialEnemyCount",0),Kt(this,"terrainOverlay",null),Kt(this,"allyFlowField",null),Kt(this,"enemyFlowField",null),Kt(this,"aliveCounter",null),Kt(this,"hudAllyText",null),Kt(this,"hudEnemyText",null),Kt(this,"hudTimerText",null),Kt(this,"hudAllyFill",null),Kt(this,"hudEnemyFill",null),Kt(this,"hudBarDivider",null),Kt(this,"hudBarInnerX",0),Kt(this,"hudBarInnerY",0),Kt(this,"hudBarInnerW",0),Kt(this,"hudBarInnerH",0),Kt(this,"damageMeterRaised",!1),Kt(this,"meterToggleBtnArrow",null),Kt(this,"damageMeter",null),Kt(this,"meterEntries",[]),Kt(this,"separationGrid",new Map),Kt(this,"separationFlatList",[]),Kt(this,"antijamTimer",0),Kt(this,"numBlockReleased",!1),Kt(this,"btnSpeed",null),Kt(this,"btnSpeedLabel",null)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ setMode(t){
+ this.battleMode=t,this.mapIndex=2===t?2:1}
+ setMapIndex(t){
+ this.mapIndex=t,this.battleMode=2===t||3===t?2:1}
+ setZoomLevel(t){
+ this.zoomLevel=t,this.unitScale=t,this.applyZoom()}
+ cycleZoom(){
+ const i=t.ZOOM_LEVELS;
+ let s=i.indexOf(this.zoomLevel);
+ s<0&&(s=0);
+ const e=(s+1)%i.length;
+ this.setZoomLevel(i[e])}
+ applyZoom(){
+ const t=this.zoomLevel;
+ this.unitScale=t;
+ const i=HB.getInstance();
+ i.scale.set(1,1),i.x=0,i.y=VA.SAFE_AREA_TOP;
+ const s=QG.getInstance();
+ s.scale.set(1,1),s.x=0,s.y=0;
+ for(const e of this.friendList)e.scale.set(t,t);
+ for(const e of this.enemyList)e.scale.set(t,t)}
+ captureViewState(){
+ const t=HB.getInstance();
+ this.prevGameScale=t.scale.x,this.prevGameX=t.x,this.prevGameY=t.y,this.prevBackgroundVisible=QG.getInstance().visible,this.prevZoomEnabled=jhi.zoomEnabled,this.hasViewStateBackup=!0}
+ restoreViewState(){
+ if(!this.hasViewStateBackup)return;
+ const t=HB.getInstance();
+ t.scale.set(this.prevGameScale,this.prevGameScale),t.x=this.prevGameX,t.y=this.prevGameY;
+ const i=QG.getInstance();
+ i.visible=this.prevBackgroundVisible,i.scale.set(1,1),i.x=0,i.y=0,jhi.zoomEnabled=this.prevZoomEnabled,this.hasViewStateBackup=!1}
+ async setupTestTerrain(){
+ const i=t.FIELD_WIDTH,s=t.FIELD_HEIGHT,e=2===this.battleMode,n=1/UQ.CELL_SIZE,h=`mask${
+ this.mapIndex}
+ `,r=QA.getTexture("GW_BG2",h);
+ if(!r)return;
+ if(!UQ.loadFromTexture(i,s,r,n,0,0))return;
+ UQ.enabled=!0,UQ.pruneTrappedIslands();
+ const o=60,a=e?{
+ x:0,y:0,w:i,h:o}
+ :{
+ x:i-o,y:0,w:o,h:s}
+ ,c=e?{
+ x:0,y:s-o,w:i,h:o}
+ :{
+ x:0,y:0,w:o,h:s}
+ ;
+ this.allyFlowField=new dJt,this.allyFlowField.build(i,s,a),this.enemyFlowField=new dJt,this.enemyFlowField.build(i,s,c),this.terrainOverlay=new lJt,this.terrainOverlay.render(i,s),this.terrainOverlay.visible=!1,HB.getInstance().addChild(this.terrainOverlay)}
+ teardownTerrain(){
+ this.terrainOverlay&&(this.terrainOverlay.removeFromParent(),this.terrainOverlay.destroy({
+ children:!0}
+ ),this.terrainOverlay=null),this.allyFlowField&&(this.allyFlowField.dispose(),this.allyFlowField=null),this.enemyFlowField&&(this.enemyFlowField.dispose(),this.enemyFlowField=null),UQ.unload()}
+ snapUnitsToTerrain(){
+ if(!UQ.enabled)return;
+ const t=Vt(t=>{
+ if(!t.isAir&&!t.isCastle){
+ if(UQ.isBlocked(t.x,t.y)){
+ const i=UQ.snapToNearestPassable(t.x,t.y,160);
+ t.x=i.x,t.y=i.y}
+ if(UQ.isBlocked(t.xDefault,t.yDefault)){
+ const i=UQ.snapToNearestPassable(t.xDefault,t.yDefault,160);
+ t.xDefault=i.x,t.yDefault=i.y}
+ if(t.isPatrolMode&&UQ.isBlocked(t.patrolPoint.x,t.patrolPoint.y)){
+ const i=UQ.snapToNearestPassable(t.patrolPoint.x,t.patrolPoint.y,160);
+ t.patrolPoint.x=i.x,t.patrolPoint.y=i.y}
+ if(t.needsReposition&&UQ.isBlocked(t.repositionX,t.repositionY)){
+ const i=UQ.snapToNearestPassable(t.repositionX,t.repositionY,160);
+ t.repositionX=i.x,t.repositionY=i.y}
+ }
+ }
+ ,"snap");
+ for(const i of this.friendList)t(i),i.flowField=this.allyFlowField;
+ for(const i of this.enemyList)t(i),i.flowField=this.enemyFlowField}
+ setTeams(i){
+ const s=t.CORP_COUNT;
+ if(i.allyHeroes)for(let t=0;
+ t<s;
+ t++)t<i.allyHeroes.length&&(this.heroKindNums[t]=i.allyHeroes[t]);
+ if(i.allySoldiers)for(let t=0;
+ t<s;
+ t++)t<i.allySoldiers.length&&(this.soldierKindNums[t]=i.allySoldiers[t]);
+ if(i.enemyHeroes)for(let t=0;
+ t<s;
+ t++)t<i.enemyHeroes.length&&(this.enemyHeroKindNums[t]=i.enemyHeroes[t]);
+ if(i.enemySoldiers)for(let t=0;
+ t<s;
+ t++)t<i.enemySoldiers.length&&(this.enemySoldierKindNums[t]=i.enemySoldiers[t]);
+ if(i.allyCorpSoldierTiers)for(let t=0;
+ t<s;
+ t++)this.allyCorpSoldierTiers[t]=i.allyCorpSoldierTiers[t]??null;
+ else for(let t=0;
+ t<s;
+ t++)this.allyCorpSoldierTiers[t]=null;
+ if(i.enemyCorpSoldierTiers)for(let t=0;
+ t<s;
+ t++)this.enemyCorpSoldierTiers[t]=i.enemyCorpSoldierTiers[t]??null;
+ else for(let t=0;
+ t<s;
+ t++)this.enemyCorpSoldierTiers[t]=null;
+ this.allyKnightLevel=Math.max(0,i.allyKnightLevel??1),this.enemyKnightLevel=Math.max(0,i.enemyKnightLevel??1),this.enemyHeroLevelBonus=Math.max(0,i.enemyHeroLevelBonus??0)}
+ async startBattle(){
+ this.cleanup(),this.lastReward={
+ gem:0,honorCoin:0}
+ ,VR.getInstance().setBattleContext(xR.GuildPvp),this.initRandom(),HB.getInstance().setDay();
+ const i=[t.OFFSET_FRONT,t.OFFSET_FRONT,t.OFFSET_FRONT,t.OFFSET_REAR,t.OFFSET_REAR];
+ this.currentAllyOffsets=[...i],this.currentEnemyOffsets=[...i],this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.captureViewState();
+ const s=2===this.battleMode,e=`gwbg${
+ this.mapIndex}
+ `;
+ QG.getInstance().setMapBackground("GW_BG2",e),QG.getInstance().visible=!0,jhi.zoomEnabled=!1,await this.setupTestTerrain();
+ for(let n=0;
+ n<t.CORP_COUNT;
+ n++)s?await this.setupCorpVertical(n,!0):await this.setupCorp(n,!0);
+ for(let n=0;
+ n<t.CORP_COUNT;
+ n++)s?await this.setupCorpVertical(n,!1):await this.setupCorp(n,!1);
+ this.setupEnemyLists(),this.snapUnitsToTerrain(),this.initialAllyCount=this.friendList.length,this.initialEnemyCount=this.enemyList.length,jni.getInstance().switchToBattle(this),QG.getInstance().setMapBackground("GW_BG2",e),QG.getInstance().visible=!0,jhi.zoomEnabled=!1,this.applyZoom(),this.updateZIndexSorting(),this.enterGuildWarSpeed(),this.setupDamageMeter(),this.setupAliveCounter(),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),qG.getInstance().add(this.execute,this),qG.getInstance().add(this.clampHeroPosition,this)}
+ clampHeroPosition(){
+ if(2===this.battleMode){
+ const i=t.CORP_X_MIN,s=t.CORP_X_MAX;
+ for(const t of this.allyHeroes)t.x<i?t.x=i:t.x>s&&(t.x=s);
+ for(const t of this.enemyHeroes)t.x<i?t.x=i:t.x>s&&(t.x=s)}
+ else{
+ const t=200,i=920;
+ for(const s of this.allyHeroes)s.y<t?s.y=t:s.y>i&&(s.y=i);
+ for(const s of this.enemyHeroes)s.y<t?s.y=t:s.y>i&&(s.y=i)}
+ }
+ computeCorpY(i,s){
+ const e=t.CORP_COUNT,n=(t.SOLDIER_ROWS-1)*t.SOLDIER_Y_SPACING/2,h=200+n,r=940-n;
+ return h+(t.HORIZONTAL_CORP_ROW[i]??0)/(e-1)*(r-h)}
+ async setupCorp(i,s){
+ const e=this.computeCorpY(i,s),n=s?this.heroKindNums[i]:this.enemyHeroKindNums[i],h=s?this.soldierKindNums[i]:this.enemySoldierKindNums[i],r=s?this.allyKnightLevel:this.enemyKnightLevel,o=s?r:r+this.enemyHeroLevelBonus,a=s?this.currentAllyOffsets[i]:this.currentEnemyOffsets[i];
+ if(n>0){
+ const i=t.ALLY_HERO_X+a-t.HORIZONTAL_START_OFFSET,h=s?i:t.FIELD_WIDTH-i+t.HORIZONTAL_ENEMY_EXTRA_OFFSET,r=await this.spawnUnit(n,h,e,s,!1,o);
+ r&&(s?this.allyHeroes.push(r):this.enemyHeroes.push(r))}
+ const c=s?this.allyCorpSoldierTiers[i]:this.enemyCorpSoldierTiers[i],l=Array.isArray(c),u=[];
+ for(let d=0;
+ d<t.SOLDIER_COLS;
+ d++)for(let i=0;
+ i<t.SOLDIER_ROWS;
+ i++){
+ const n=t.ALLY_SOLDIER_X_START+d*t.SOLDIER_X_SPACING+a-t.HORIZONTAL_START_OFFSET,h=s?n:t.FIELD_WIDTH-n+t.HORIZONTAL_ENEMY_EXTRA_OFFSET,r=e+-108+i*t.SOLDIER_Y_SPACING;
+ u.push({
+ x:h,y:r}
+ )}
+ if(l){
+ let t=0;
+ const i=u.length;
+ for(const e of c){
+ if(!e||e.kindNum<=0||e.count<=0)continue;
+ const n=r+(e.plusLevel||0),h=Math.min(e.count,i-t);
+ for(let i=0;
+ i<h;
+ i++){
+ const i=u[t++];
+ await this.spawnUnit(e.kindNum,i.x,i.y,s,!0,n)}
+ if(t>=i)break}
+ }
+ else if(h>0)for(const t of u)await this.spawnUnit(h,t.x,t.y,s,!0)}
+ async setupCorpVertical(i,s){
+ const e=s?this.heroKindNums[i]:this.enemyHeroKindNums[i],n=s?this.soldierKindNums[i]:this.enemySoldierKindNums[i],h=s?this.allyKnightLevel:this.enemyKnightLevel,r=s?h:h+this.enemyHeroLevelBonus,o=i>=t.REAR_CORP_START_INDEX_M2,a=o?t.REAR_CORP_PERP_COUNT_M2:t.FRONT_CORP_PERP_COUNT_M2,c=o?t.REAR_CORP_ALONG_COUNT_M2:t.FRONT_CORP_ALONG_COUNT_M2,l=o?t.REAR_CORP_X_SPACING_M2:t.FRONT_CORP_X_SPACING_M2,u=o?t.REAR_CORP_Y_SPACING_M2:t.FRONT_CORP_Y_SPACING_M2,d=t.SOLDIER_HERO_GAP_M2,f=t.CORP_X_START_M2[i],p=f+(a-1)*l/2,g=o?t.OFFSET_REAR:t.OFFSET_FRONT,m=s?t.ALLY_FRONT_Y_M2-g:t.ENEMY_FRONT_Y_M2+g,w=(c-1)*u+d,v=s?m+w:m-w;
+ if(e>0){
+ const t=await this.spawnUnit(e,p,v,s,!1,r);
+ t&&(s?this.allyHeroes.push(t):this.enemyHeroes.push(t))}
+ const b=[];
+ for(let t=c-1;
+ t>=0;
+ t--)for(let i=0;
+ i<a;
+ i++){
+ const e=f+i*l,n=t*u,h=s?m+n:m-n;
+ b.push({
+ x:e,y:h}
+ )}
+ const _=s?this.allyCorpSoldierTiers[i]:this.enemyCorpSoldierTiers[i];
+ if(Array.isArray(_)){
+ let t=0;
+ const i=b.length;
+ for(const e of _){
+ if(!e||e.kindNum<=0||e.count<=0)continue;
+ const n=h+(e.plusLevel||0),r=Math.min(e.count,i-t);
+ for(let i=0;
+ i<r;
+ i++){
+ const i=b[t++];
+ await this.spawnUnit(e.kindNum,i.x,i.y,s,!0,n)}
+ if(t>=i)break}
+ }
+ else if(n>0)for(const t of b)await this.spawnUnit(n,t.x,t.y,s,!0)}
+ async spawnUnit(i,s,e,n,h,r){
+ const o=wx.getInstance().getBookVO(i);
+ if(!o)return null;
+ const a=await H2.getInstance().getUnit(o.className);
+ a.battleController=this;
+ const c=t.TRANS_OVERRIDES.get(i)??0;
+ let l;
+ l="number"==typeof r&&Number.isFinite(r)?Math.max(0,r):(n?t.ALLY_LEVEL_OVERRIDES:t.ENEMY_LEVEL_OVERRIDES).get(i)??1;
+ const u=bx.getVO();
+ if(u.id=-1,u.kindNum=i,u.trans=c,u.level=l,u.enhance=0,this.spawnedVOs.push(u),a.setData(u),this.applyRawBvoStats(a,i,c,l),a.numBlock=0,a.initDelay=0,a.showTombstone=!1,a.maxRevive=0,a.reviveInterval=0,a.totalDamageDealt=0,a.aggressiveRetarget=!0,a.detectRange=h?1333:1500,a.detectRange2=a.detectRange*a.detectRange,h&&a.unitType===ix.RANGE){
+ const i=t.SOLDIER_RANGE_MULT_MIN,s=t.SOLDIER_RANGE_MULT_MAX,e=i+this.random.next()*(s-i);
+ a.atkRange=a.atkRange*e,a.atkRange2=a.atkRange*a.atkRange;
+ const n=t.RANGE_SOLDIER_MOVE_SPD_MULT_MIN,h=t.RANGE_SOLDIER_MOVE_SPD_MULT_MAX,r=n+this.random.next()*(h-n);
+ a.orgMoveSpd=a.moveSpd=a.moveSpd*r}
+ if(!h&&a.unitType===ix.MELEE){
+ const i=t.MELEE_HERO_HP_MULT;
+ a.baseMaxHp*=i,a.orgMaxHp*=i,a.maxHp*=i,a.hp=a.maxHp,a.health=a.maxHp}
+ if(h&&a.unitType===ix.MELEE){
+ const i=t.MELEE_SOLDIER_HP_MULT;
+ a.baseMaxHp*=i,a.orgMaxHp*=i,a.maxHp*=i,a.hp=a.maxHp,a.health=a.maxHp}
+ if(a.unitType===ix.MELEE){
+ const i=h?t.MELEE_SOLDIER_ATK_RANGE_BONUS:t.MELEE_HERO_ATK_RANGE_BONUS;
+ a.atkRange=t.MELEE_ATK_RANGE+i,a.atkRange2=a.atkRange*a.atkRange}
+ if(a.unitType===ix.MELEE){
+ const i=t.MELEE_MOVE_SPD_MULT_MIN,s=t.MELEE_MOVE_SPD_MULT_MAX,e=i+this.random.next()*(s-i);
+ a.orgMoveSpd=a.moveSpd=a.moveSpd*e}
+ if(!h&&a.unitType===ix.RANGE){
+ const i=t.RANGE_HERO_ATK_RANGE_MULT;
+ a.atkRange=a.atkRange*i,a.atkRange2=a.atkRange*a.atkRange}
+ a.attackCoolDown=0,a.skillCallIndex=0,a.attackCallIndex=0,a.attackIndex=0,2===this.battleMode&&(s=Math.max(t.CORP_X_MIN,Math.min(t.CORP_X_MAX,s))),a.x=s,a.y=e;
+ const d=t.MARCH_ADVANCE_DISTANCE;
+ let f=0;
+ if(h&&a.unitType===ix.MELEE){
+ const i=t.MELEE_SOLDIER_LANE_OFFSET;
+ f=(2*this.random.next()-1)*i,a.__antiJamDir=this.random.next()<.5?-1:1,a.__antiJamDriftFrames=0}
+ const p=t.FIELD_WIDTH,g=t.FIELD_HEIGHT,m=10;
+ if(2===this.battleMode){
+ const i=s+f,h=n?e-d:e+d;
+ a.xDefault=Math.max(t.CORP_X_MIN,Math.min(t.CORP_X_MAX,i)),a.yDefault=Math.max(m,Math.min(g-m,h))}
+ else{
+ const t=n?s+d:s-d,i=e+f;
+ a.xDefault=Math.max(m,Math.min(p-m,t)),a.yDefault=Math.max(m,Math.min(g-m,i))}
+ return a.lookAt(n?1:-1),a.healthBar.setHealthColor(n),a.isAir&&a.onFlyEnter(!0),rB.getInstance().addChild(a),n?this.friendList.push(a):this.enemyList.push(a),a}
+ applyRawBvoStats(t,i,s=0,e=1){
+ const n=wx.getInstance().getBookVO(i);
+ if(!n)return;
+ const h=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1));
+ t.baseMaxHp=n.hp*h,t.baseAtkDmg=n.atkDmg*h,t.baseDef=n.def*h,t.orgMaxHp=t.maxHp=n.hp*h,t.orgAtkDmg=t.atkDmg=n.atkDmg*h,t.orgDef=t.def=n.def*h,t.phyDef=n.phyDef*h,t.magDef=n.magDef*h,t.hp=t.maxHp,t.health=t.maxHp}
+ 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}
+ checkProgress(){
+ if(this.applySoftSeparation(),++this.antijamTimer>=t.ANTIJAM_CHECK_INTERVAL&&(this.antijamTimer=0,this.applyAntiJam()),this.applyJamDrift(),this.damageMeter&&this.battleTime%t.METER_UPDATE_INTERVAL===0&&this.updateDamageMeter(),this.aliveCounter&&this.battleTime%t.COUNTER_UPDATE_INTERVAL===0&&this.updateAliveCounter(),!this.numBlockReleased&&this.battleTime%60==0){
+ const i=t.FREE_COMBAT_THRESHOLD;
+ if(this.friendList.length<=i||this.enemyList.length<=i){
+ for(let t=0;
+ t<this.friendList.length;
+ t++)this.friendList[t].numBlock=0;
+ for(let t=0;
+ t<this.enemyList.length;
+ t++)this.enemyList[t].numBlock=0;
+ this.numBlockReleased=!0}
+ }
+ super.checkProgress()}
+ applyAntiJam(){
+ const t=2===this.battleMode;
+ this.applyAntiJamForTeam(this.friendList,!0,t),this.applyAntiJamForTeam(this.enemyList,!1,t)}
+ applyAntiJamForTeam(i,s,e){
+ const n=e?0:s?1:-1,h=e?s?-1:1:0,r=t.ANTIJAM_FRONT_DIST,o=t.ANTIJAM_BLOCKED_RADIUS,a=o*o,c=t.ANTIJAM_DRIFT_FRAMES,l=s?new Set(this.allyHeroes):new Set(this.enemyHeroes);
+ for(let t=0;
+ t<i.length;
+ t++){
+ const s=i[t];
+ if(!s.isAlive||s.removed)continue;
+ if(s.unitType!==ix.MELEE)continue;
+ if(l.has(s))continue;
+ const e=s.x+n*r,o=s.y+h*r;
+ let u=!1;
+ for(let t=0;
+ t<i.length;
+ t++){
+ const n=i[t];
+ if(n===s)continue;
+ if(!n.isAlive||n.removed)continue;
+ const h=n.x-e,r=n.y-o;
+ if(h*h+r*r<a){
+ u=!0;
+ break}
+ }
+ u&&(s.__antiJamDriftFrames=c)}
+ }
+ applyJamDrift(){
+ const i=2===this.battleMode,s=t.ANTIJAM_DRIFT_PER_FRAME;
+ this.applyJamDriftForTeam(this.friendList,i,s),this.applyJamDriftForTeam(this.enemyList,i,s)}
+ applyJamDriftForTeam(t,i,s){
+ for(let e=0;
+ e<t.length;
+ e++){
+ const n=t[e];
+ if(!n.isAlive||n.removed)continue;
+ const h=n.__antiJamDriftFrames;
+ if(!h||h<=0)continue;
+ const r=n.__antiJamDir;
+ r&&(i?n.x+=r*s:n.y+=r*s,n.__antiJamDriftFrames=h-1)}
+ }
+ applySoftSeparation(){
+ const i=t.SEPARATION_CELL,s=this.separationGrid,e=this.separationFlatList;
+ s.clear(),e.length=0;
+ let n=0;
+ const h=Vt(t=>{
+ if(!t.isAlive||t.removed||t.isImmovable||t.isCastle)return;
+ t.__sepIdx=n++,e.push(t);
+ const h=1e5*Math.floor(t.x/i)+Math.floor(t.y/i);
+ let r=s.get(h);
+ r||(r=[],s.set(h,r)),r.push(t)}
+ ,"addUnit");
+ for(let t=0;
+ t<this.friendList.length;
+ t++)h(this.friendList[t]);
+ for(let t=0;
+ t<this.enemyList.length;
+ t++)h(this.enemyList[t]);
+ for(let r=0;
+ r<e.length;
+ r++){
+ const n=e[r],h=Math.floor(n.x/i),o=Math.floor(n.y/i),a=n.__sepIdx;
+ for(let i=-1;
+ i<=1;
+ i++)for(let e=-1;
+ e<=1;
+ e++){
+ const r=s.get(1e5*(h+e)+(o+i));
+ if(r)for(let i=0;
+ i<r.length;
+ i++){
+ const s=r[i];
+ if(s.__sepIdx<=a)continue;
+ if(UQ.enabled&&n.isAir!==s.isAir)continue;
+ const e=n.x-s.x,h=n.y-s.y,o=n.radius+s.radius+t.SEPARATION_BUFFER,c=e*e+h*h;
+ if(c>=o*o)continue;
+ if(c<.01){
+ UQ.enabled&&!s.isAir&&UQ.isBlocked(s.x+.5,s.y)?!n.isAir&&UQ.isBlocked(n.x-.5,n.y)||(n.x-=.5):s.x+=.5;
+ continue}
+ const l=Math.sqrt(c),u=.5*(o-l)*t.SEPARATION_STRENGTH,d=e/l,f=h/l;
+ if(UQ.enabled){
+ const t=!n.isAir&&UQ.isBlocked(n.x,n.y),i=!s.isAir&&UQ.isBlocked(s.x,s.y);
+ t||!n.isAir&&UQ.isBlocked(n.x+d*u,n.y+f*u)||(n.x+=d*u,n.y+=f*u),i||!s.isAir&&UQ.isBlocked(s.x-d*u,s.y-f*u)||(s.x-=d*u,s.y-=f*u)}
+ else n.x+=d*u,n.y+=f*u,s.x-=d*u,s.y-=f*u}
+ }
+ }
+ }
+ countAlive(t){
+ let i=0;
+ for(const s of t)!s.isAlive||s.removed||s.isSummoned||i++;
+ return i}
+ checkVictory(){
+ return 0!==this.initialEnemyCount&&0===this.countAlive(this.enemyList)}
+ checkDefeat(){
+ return 0!==this.initialAllyCount&&(0===this.countAlive(this.friendList)||this.battleTime>=t.TIME_LIMIT_FRAMES)}
+ onVictoryCallback(){
+ const i=this.fireOnComplete("WIN");
+ setTimeout(async()=>{
+ if(i)try{
+ await i}
+ catch{
+ }
+ qG.getInstance().remove(this.execute,this),aJt.getInstance().showGuildWarBattle(!0,()=>this.returnToIdleAndFireAfter(),this.lastReward.gem,this.lastReward.honorCoin,SG.getText("GAME_502","길드전"))}
+ ,t.RESULT_POPUP_DELAY_MS)}
+ onDefeatCallback(){
+ const i=this.fireOnComplete("LOSE");
+ setTimeout(async()=>{
+ if(i)try{
+ await i}
+ catch{
+ }
+ qG.getInstance().remove(this.execute,this),aJt.getInstance().showGuildWarBattle(!1,()=>this.returnToIdleAndFireAfter(),this.lastReward.gem,this.lastReward.honorCoin,SG.getText("GAME_502","길드전"))}
+ ,t.RESULT_POPUP_DELAY_MS)}
+ returnToIdleAndFireAfter(){
+ jni.getInstance().returnToIdleBattle();
+ const t=this.onAfterReturnToIdle;
+ if(this.onAfterReturnToIdle=null,t)try{
+ t()}
+ catch(Xst){
+ }
+ }
+ fireOnComplete(t){
+ const i=this.onComplete;
+ if(this.onComplete=null,i)try{
+ const s=i(t);
+ if(s&&"function"==typeof s.then)return s.then(()=>{
+ }
+ ,t=>{
+ }
+ )}
+ catch(Xst){
+ }
+ }
+ returnToMain(){
+ }
+ scheduleReturnToMain(){
+ }
+ setupAliveCounter(){
+ this.cleanupAliveCounter();
+ const i=t.FIELD_WIDTH;
+ this.aliveCounter=new Ge;
+ const s=i-24,e=new Lf;
+ e.roundRect(12,4,s,24,12).fill({
+ color:0,alpha:.5}
+ ),this.aliveCounter.addChild(e),this.hudBarInnerX=13,this.hudBarInnerY=5,this.hudBarInnerW=s-2,this.hudBarInnerH=22,this.hudAllyFill=new Lf,this.aliveCounter.addChild(this.hudAllyFill),this.hudEnemyFill=new Lf,this.aliveCounter.addChild(this.hudEnemyFill),this.hudBarDivider=new Lf,this.aliveCounter.addChild(this.hudBarDivider),this.hudAllyText=new Hg({
+ text:"0/0",style:t.HUD_COUNT_STYLE_ALLY}
+ ),this.hudAllyText.anchor.set(0,.5),this.hudAllyText.x=24,this.hudAllyText.y=16,this.aliveCounter.addChild(this.hudAllyText),this.hudEnemyText=new Hg({
+ text:"0/0",style:t.HUD_COUNT_STYLE_ENEMY}
+ ),this.hudEnemyText.anchor.set(1,.5),this.hudEnemyText.x=12+s-12,this.hudEnemyText.y=16,this.aliveCounter.addChild(this.hudEnemyText);
+ const n=new Hg({
+ text:"VS",style:t.HUD_VS_STYLE}
+ );
+ n.anchor.set(.5,.5),n.x=i/2,n.y=16,this.aliveCounter.addChild(n);
+ const h=new Lf;
+ h.roundRect(12,4,s,24,12).stroke({
+ width:1.5,color:16777215,alpha:.3}
+ ),this.aliveCounter.addChild(h),this.hudTimerText=new Hg({
+ text:"0:00",style:t.HUD_TIMER_VALUE_STYLE}
+ ),this.hudTimerText.anchor.set(.5,0),this.hudTimerText.x=i/2,this.hudTimerText.y=31,this.aliveCounter.addChild(this.hudTimerText),this.aliveCounter.x=0,this.aliveCounter.y=VA.SAFE_AREA_TOP+7,e5t.getInstance().addChild(this.aliveCounter),this.setupSpeedButton(12,s,4,24),this.updateAliveCounter()}
+ loadSavedBattleSpeed(){
+ try{
+ const i=localStorage.getItem(t.SPEED_LS_KEY);
+ if(!i)return 1;
+ const s=Number(i);
+ return Number.isFinite(s)?t.SPEED_CYCLE.indexOf(s)<0?1:s:1}
+ catch{
+ return 1}
+ }
+ saveBattleSpeed(i){
+ try{
+ localStorage.setItem(t.SPEED_LS_KEY,String(i))}
+ catch{
+ }
+ }
+ setupSpeedButton(t,i,s,e){
+ if(!this.aliveCounter)return;
+ const n=t+i-44,h=s+e+3,r=new Ge;
+ r.x=n,r.y=h;
+ const o=new Lf;
+ o.roundRect(0,0,44,22,11).fill({
+ color:0,alpha:.55}
+ ).stroke({
+ width:1.2,color:16777215,alpha:.4}
+ ),r.addChild(o);
+ const a=new Hg({
+ text:`x${
+ $D.guildWarSpeed??1}
+ `,style:{
+ fontFamily:"Arial",fontSize:14,fontWeight:"700",fill:16777215,stroke:{
+ color:0,width:2}
+ }
+ }
+ );
+ a.anchor.set(.5,.5),a.x=22,a.y=11,r.addChild(a),r.eventMode="static",r.cursor="pointer",r.hitArea=new Ri(0,0,44,22),r.on("pointerup",this.cycleBattleSpeed,this),this.btnSpeed=r,this.btnSpeedLabel=a,this.aliveCounter.addChild(r)}
+ cycleBattleSpeed(){
+ const i=$D.guildWarSpeed??1,s=t.SPEED_CYCLE,e=s.indexOf(i),n=s[e<0?0:(e+1)%s.length];
+ this.applyBattleSpeed(n),this.saveBattleSpeed(n)}
+ applyBattleSpeed(t){
+ $D.guildWarSpeed=t,$D.speedMode=t,qG.getInstance().setSpeed(t),this.btnSpeedLabel&&(this.btnSpeedLabel.text=`x${
+ t}
+ `)}
+ enterGuildWarSpeed(){
+ this.applyBattleSpeed(this.loadSavedBattleSpeed())}
+ exitGuildWarSpeed(){
+ null!=$D.guildWarSpeed&&($D.guildWarSpeed=null,Xt(async()=>{
+ const{
+ TopMenu:t}
+ =await Promise.resolve().then(()=>vhi);
+ return{
+ TopMenu:t}
+ }
+ ,void 0).then(({
+ TopMenu:t}
+ )=>{
+ t.getInstance().updateGameSpeed()}
+ ).catch(()=>{
+ $D.speedMode=1,qG.getInstance().setSpeed(1)}
+ ))}
+ updateAliveCounter(){
+ if(!this.aliveCounter)return;
+ let i=0,s=0;
+ for(let t=0;
+ t<this.friendList.length;
+ t++)this.friendList[t].isAlive&&i++;
+ for(let t=0;
+ t<this.enemyList.length;
+ t++)this.enemyList[t].isAlive&&s++;
+ const e=Math.max(0,t.TIME_LIMIT_FRAMES-this.battleTime),n=Math.ceil(e/60),h=`${
+ Math.floor(n/60)}
+ :${
+ (n%60).toString().padStart(2,"0")}
+ `;
+ if(this.hudAllyText&&(this.hudAllyText.text=`${
+ i}
+ /${
+ this.initialAllyCount}
+ `),this.hudEnemyText&&(this.hudEnemyText.text=`${
+ s}
+ /${
+ this.initialEnemyCount}
+ `),this.hudTimerText&&(this.hudTimerText.text=h,this.hudTimerText.style.fill=n<=10?16733536:n<=20?16758861:16777215),this.hudAllyFill&&this.hudEnemyFill&&this.hudBarDivider){
+ const t=i+s,e=t>0?i/t:.5,n=this.hudBarInnerX,h=this.hudBarInnerY,r=this.hudBarInnerW,o=this.hudBarInnerH,a=Math.round(r*e),c=r-a,l=n+a;
+ this.hudAllyFill.clear(),a>0&&(this.hudAllyFill.roundRect(n,h,a,o,o/2).fill({
+ color:1997567,alpha:1}
+ ),a>o/2&&this.hudAllyFill.rect(l-o/2,h,o/2,o).fill({
+ color:1997567,alpha:1}
+ )),this.hudEnemyFill.clear(),c>0&&(this.hudEnemyFill.roundRect(l,h,c,o,o/2).fill({
+ color:16719920,alpha:1}
+ ),c>o/2&&this.hudEnemyFill.rect(l,h,o/2,o).fill({
+ color:16719920,alpha:1}
+ )),this.hudBarDivider.clear(),this.hudBarDivider.rect(l-1,h,2,o).fill({
+ color:16777215,alpha:.6}
+ )}
+ }
+ cleanupAliveCounter(){
+ this.aliveCounter&&(this.aliveCounter.removeFromParent(),this.aliveCounter.destroy({
+ children:!0}
+ ),this.aliveCounter=null),this.hudAllyText=null,this.hudEnemyText=null,this.hudTimerText=null,this.hudAllyFill=null,this.hudEnemyFill=null,this.hudBarDivider=null,this.btnSpeed=null,this.btnSpeedLabel=null}
+ setupDamageMeter(){
+ this.cleanupDamageMeter();
+ const i=Vt((t,i)=>{
+ const s=new Set(i),e=new Map;
+ for(const n of t){
+ if(s.has(n))continue;
+ let t=e.get(n.kindNum);
+ t||(t=[],e.set(n.kindNum,t)),t.push(n)}
+ return e}
+ ,"groupSoldiers"),s=i(this.friendList,this.allyHeroes),e=i(this.enemyList,this.enemyHeroes);
+ this.damageMeter=new Ge;
+ const n=t.METER_COL_W,h=2*n,r=t.METER_HEADER_H,o=t.METER_ROW_H,a=[];
+ for(const t of this.allyHeroes)a.push(this.createMeterEntry([t],!0,!0,t.kindNum,1));
+ for(const[t,_]of s)a.push(this.createMeterEntry(_,!0,!1,t,_.length));
+ const c=[];
+ for(const t of this.enemyHeroes)c.push(this.createMeterEntry([t],!1,!0,t.kindNum,1));
+ for(const[t,_]of e)c.push(this.createMeterEntry(_,!1,!1,t,_.length));
+ const l=8+r+Math.max(a.length,c.length)*o+8,u=this.resolvePanelY(),d=Math.max(l,VA.stageHeight-t.DAMAGE_METER_Y_RAISED),f=new Lf;
+ f.rect(0,0,h,d).fill({
+ color:856343,alpha:.95}
+ ),f.rect(0,0,h,1).fill({
+ color:16777215,alpha:.1}
+ ),this.damageMeter.addChild(f);
+ const p=new Hg({
+ text:`${
+ SG.getText("GAME_1059","아군")}
+  DPS Top `+a.length,style:t.METER_HEADER_STYLE}
+ );
+ p.x=12,p.y=8,this.damageMeter.addChild(p);
+ const g=new Hg({
+ text:`${
+ SG.getText("GAME_1060","적군")}
+  DPS Top `+c.length,style:t.METER_HEADER_STYLE}
+ );
+ g.x=n+12,g.y=8,this.damageMeter.addChild(g);
+ const m=8+r;
+ for(let t=0;
+ t<a.length;
+ t++){
+ const i=a[t];
+ i.rowContainer.x=0,i.rowContainer.y=m+t*o,this.damageMeter.addChild(i.rowContainer),this.meterEntries.push(i)}
+ for(let t=0;
+ t<c.length;
+ t++){
+ const i=c[t];
+ i.rowContainer.x=n,i.rowContainer.y=m+t*o,this.damageMeter.addChild(i.rowContainer),this.meterEntries.push(i)}
+ const w=new Ge;
+ w.x=h-28-6,w.y=4,w.eventMode="static",w.cursor="pointer";
+ const v=new Lf;
+ v.roundRect(0,0,28,20,4).fill({
+ color:1975600,alpha:.9}
+ ).stroke({
+ width:1,color:16777215,alpha:.25}
+ ),w.addChild(v);
+ const b=new Hg({
+ text:this.damageMeterRaised?"▼":"▲",style:{
+ fontFamily:"Arial",fontSize:12,fontWeight:"700",fill:16777215}
+ }
+ );
+ b.anchor.set(.5,.5),b.x=14,b.y=10,w.addChild(b),w.on("pointertap",()=>this.toggleDamageMeterPosition()),this.damageMeter.addChild(w),this.meterToggleBtnArrow=b,this.damageMeter.x=0,this.damageMeter.y=u,e5t.getInstance().addChild(this.damageMeter),this.updateDamageMeter()}
+ createMeterEntry(i,s,e,n,h){
+ const r=t.METER_COL_W,o=t.METER_ROW_H,a=t.METER_RANK_W,c=t.METER_ICON_H,l=t.METER_COUNT_W,u=t.METER_VALUE_W,d=new Ge,f=new Hg({
+ text:"1",style:t.METER_RANK_STYLE}
+ );
+ f.anchor.set(.5,.5),f.x=6+a/2,f.y=o/2,d.addChild(f);
+ const p=6+a+4;
+ let g=0;
+ const m=wx.getInstance().getBookVO(n);
+ if(m){
+ const t=new He(QA.getTexture("UI_Ekkorr",`Hero${
+ m.base}
+ `)),i=c/(t.texture.height||1);
+ t.scale.set(i),t.x=p,t.y=(o-c)/2,g=t.width,d.addChild(t)}
+ else g=c;
+ const w=p+g+4,v=new Hg({
+ text:`×${
+ h}
+ `,style:t.METER_COUNT_STYLE}
+ );
+ v.anchor.set(0,.5),v.x=w,v.y=o/2,d.addChild(v);
+ const b=w+l,_=r-6-b-4-u-6,y=(o-8)/2,M=new Lf;
+ M.roundRect(b,y,_,8,4).fill({
+ color:16777215,alpha:.05}
+ ),d.addChild(M);
+ const E=new Lf;
+ E.x=b,E.y=y,d.addChild(E);
+ const A=new Hg({
+ text:"0",style:t.METER_VALUE_STYLE}
+ );
+ return A.anchor.set(1,.5),A.x=r-6,A.y=o/2,d.addChild(A),{
+ units:i,isAlly:s,isHero:e,kindNum:n,soldierCount:h,rowContainer:d,rankText:f,barFill:E,barTrack:M,barAvailW:_,valueText:A}
+ }
+ updateDamageMeter(){
+ if(!this.damageMeter)return;
+ const i=new Array(this.meterEntries.length);
+ let s=0,e=0;
+ for(let t=0;
+ t<this.meterEntries.length;
+ t++){
+ const n=this.meterEntries[t];
+ let h=0;
+ for(let t=0;
+ t<n.units.length;
+ t++)h+=n.units[t].totalDamageDealt;
+ i[t]=h,n.isAlly?h>s&&(s=h):h>e&&(e=h)}
+ const n=[],h=[];
+ for(let t=0;
+ t<this.meterEntries.length;
+ t++)this.meterEntries[t].isAlly?n.push(t):h.push(t);
+ n.sort((t,s)=>i[s]-i[t]),h.sort((t,s)=>i[s]-i[t]);
+ const r=t.METER_ROW_H,o=8+t.METER_HEADER_H,a=t.METER_COL_W,c=Vt((s,e,n,h,c)=>{
+ const l=this.meterEntries[e],u=i[e];
+ l.rankText.text=String(n);
+ let d=9081763;
+ 1===n?d=t.METER_RANK_TOP1:2===n?d=t.METER_RANK_TOP2:3===n&&(d=t.METER_RANK_TOP3),l.rankText.style.fill=d,l.rowContainer.x=h?0:a,l.rowContainer.y=o+s*r,l.valueText.text=u>=1e3?Math.floor(u/100)/10+"k":""+(0|u);
+ const f=c>0?u/c:0,p=l.barAvailW*f;
+ l.barFill.clear(),p>0&&l.barFill.roundRect(0,0,p,8,4).fill({
+ color:h?5219327:16733536,alpha:1}
+ )}
+ ,"applyRow");
+ for(let t=0;
+ t<n.length;
+ t++)c(t,n[t],t+1,!0,s);
+ for(let t=0;
+ t<h.length;
+ t++)c(t,h[t],t+1,!1,e)}
+ cleanupDamageMeter(){
+ this.damageMeter&&(this.damageMeter.removeFromParent(),this.damageMeter.destroy({
+ children:!0}
+ ),this.damageMeter=null),this.meterEntries.length=0,this.meterToggleBtnArrow=null}
+ resolvePanelY(){
+ const i=this.damageMeterRaised?t.DAMAGE_METER_Y_RAISED:t.DAMAGE_METER_Y_DEFAULT;
+ return Math.min(i,VA.stageHeight-40)}
+ toggleDamageMeterPosition(){
+ this.damageMeterRaised=!this.damageMeterRaised,this.damageMeter&&(this.damageMeter.y=this.resolvePanelY()),this.meterToggleBtnArrow&&(this.meterToggleBtnArrow.text=this.damageMeterRaised?"▼":"▲")}
+ cleanup(){
+ VR.getInstance().setBattleContext(xR.Normal),this.exitGuildWarSpeed(),this.cleanupAliveCounter(),this.cleanupDamageMeter(),this.teardownTerrain(),qG.getInstance().remove(this.clampHeroPosition,this),this.restoreViewState(),this.allyHeroes.length=0,this.enemyHeroes.length=0,this.initialAllyCount=0,this.initialEnemyCount=0,this.currentAllyOffsets.length=0,this.currentEnemyOffsets.length=0,this.numBlockReleased=!1;
+ for(const t of this.spawnedVOs)t.remove();
+ this.spawnedVOs.length=0;
+ for(const t of this.enemyList)t.disablePatrol();
+ for(const t of this.friendList)t.disablePatrol();
+ super.cleanup()}
+ }
+ ;
+ Vt(pJt,"GuildWarBattleController"),Kt(pJt,"instance"),Kt(pJt,"FIELD_WIDTH",640),Kt(pJt,"FIELD_HEIGHT",1160),Kt(pJt,"CORP_COUNT",5),Kt(pJt,"SOLDIER_ROWS",10),Kt(pJt,"SOLDIER_COLS",3),Kt(pJt,"HORIZONTAL_CORP_ROW",[0,2,4,1,3]),Kt(pJt,"SOLDIER_X_SPACING",35),Kt(pJt,"SOLDIER_Y_SPACING",24),Kt(pJt,"ALLY_HERO_X",40),Kt(pJt,"ALLY_SOLDIER_X_START",90),Kt(pJt,"HORIZONTAL_START_OFFSET",40),Kt(pJt,"HORIZONTAL_ENEMY_EXTRA_OFFSET",0),Kt(pJt,"CORP_X_MIN",110),Kt(pJt,"CORP_X_MAX",550),Kt(pJt,"CORP_X_START_M2",[110,270,430,130,340]),Kt(pJt,"REAR_CORP_START_INDEX_M2",3),Kt(pJt,"FRONT_CORP_PERP_COUNT_M2",6),Kt(pJt,"FRONT_CORP_ALONG_COUNT_M2",5),Kt(pJt,"FRONT_CORP_X_SPACING_M2",24),Kt(pJt,"FRONT_CORP_Y_SPACING_M2",20),Kt(pJt,"REAR_CORP_PERP_COUNT_M2",10),Kt(pJt,"REAR_CORP_ALONG_COUNT_M2",3),Kt(pJt,"REAR_CORP_X_SPACING_M2",20),Kt(pJt,"REAR_CORP_Y_SPACING_M2",20),Kt(pJt,"ALLY_FRONT_Y_M2",980),Kt(pJt,"ENEMY_FRONT_Y_M2",180),Kt(pJt,"SOLDIER_HERO_GAP_M2",35),Kt(pJt,"OFFSET_REAR",-250),Kt(pJt,"OFFSET_FRONT",0),Kt(pJt,"MARCH_ADVANCE_DISTANCE",1e3),Kt(pJt,"TIME_LIMIT_FRAMES",7200),Kt(pJt,"ZOOM_LEVELS",[1,.7,.4]),Kt(pJt,"COUNTER_UPDATE_INTERVAL",15),Kt(pJt,"DAMAGE_METER_Y_DEFAULT",1160),Kt(pJt,"DAMAGE_METER_Y_RAISED",910),Kt(pJt,"METER_ICON_H",18),Kt(pJt,"METER_ROW_H",19),Kt(pJt,"METER_RANK_W",18),Kt(pJt,"METER_COUNT_W",28),Kt(pJt,"METER_VALUE_W",50),Kt(pJt,"METER_COL_W",320),Kt(pJt,"METER_HEADER_H",20),Kt(pJt,"METER_UPDATE_INTERVAL",30),Kt(pJt,"METER_RANK_STYLE",{
+ fontFamily:"Arial",fontSize:11,fontWeight:"700",fill:9081763}
+ ),Kt(pJt,"METER_RANK_TOP1",16766282),Kt(pJt,"METER_RANK_TOP2",12896980),Kt(pJt,"METER_RANK_TOP3",14059861),Kt(pJt,"METER_VALUE_STYLE",{
+ fontFamily:"Arial",fontSize:11,fontWeight:"700",fill:16777215}
+ ),Kt(pJt,"METER_COUNT_STYLE",{
+ fontFamily:"Arial",fontSize:10,fontWeight:"600",fill:9081763}
+ ),Kt(pJt,"METER_HEADER_STYLE",{
+ fontFamily:"Arial",fontSize:10,fontWeight:"600",fill:9081763,letterSpacing:1}
+ ),Kt(pJt,"SOLDIER_RANGE_MULT_MIN",1.2),Kt(pJt,"SOLDIER_RANGE_MULT_MAX",1.5),Kt(pJt,"RANGE_SOLDIER_MOVE_SPD_MULT_MIN",1),Kt(pJt,"RANGE_SOLDIER_MOVE_SPD_MULT_MAX",1.25),Kt(pJt,"MELEE_HERO_HP_MULT",2),Kt(pJt,"MELEE_SOLDIER_HP_MULT",1.5),Kt(pJt,"MELEE_HERO_ATK_RANGE_BONUS",16),Kt(pJt,"MELEE_SOLDIER_ATK_RANGE_BONUS",12),Kt(pJt,"MELEE_ATK_RANGE",32),Kt(pJt,"RANGE_HERO_ATK_RANGE_MULT",1.5),Kt(pJt,"MELEE_MOVE_SPD_MULT_MIN",1.2),Kt(pJt,"MELEE_MOVE_SPD_MULT_MAX",1.7),Kt(pJt,"MELEE_SOLDIER_LANE_OFFSET",140),Kt(pJt,"ANTIJAM_CHECK_INTERVAL",10),Kt(pJt,"ANTIJAM_FRONT_DIST",42),Kt(pJt,"ANTIJAM_BLOCKED_RADIUS",22),Kt(pJt,"ANTIJAM_DRIFT_FRAMES",18),Kt(pJt,"ANTIJAM_DRIFT_PER_FRAME",.7),Kt(pJt,"TRANS_OVERRIDES",new Map([[88,3]])),Kt(pJt,"ALLY_LEVEL_OVERRIDES",new Map([[4,7]])),Kt(pJt,"ENEMY_LEVEL_OVERRIDES",new Map([[78,5],[20,5],[9,5],[14,5],[8,5],[21,5]])),Kt(pJt,"SEPARATION_CELL",28),Kt(pJt,"SEPARATION_BUFFER",3),Kt(pJt,"SEPARATION_STRENGTH",.5),Kt(pJt,"FREE_COMBAT_THRESHOLD",30),Kt(pJt,"RESULT_POPUP_DELAY_MS",1500),Kt(pJt,"HUD_LABEL_STYLE",{
+ fontFamily:"Arial",fontSize:11,fontWeight:"600",fill:9081763,letterSpacing:.5}
+ ),Kt(pJt,"HUD_COUNT_STYLE_ALLY",{
+ fontFamily:"Arial",fontSize:14,fontWeight:"700",fill:16777215,stroke:{
+ color:0,width:2}
+ }
+ ),Kt(pJt,"HUD_COUNT_STYLE_ENEMY",{
+ fontFamily:"Arial",fontSize:14,fontWeight:"700",fill:16777215,stroke:{
+ color:0,width:2}
+ }
+ ),Kt(pJt,"HUD_TIMER_VALUE_STYLE",{
+ fontFamily:"Arial",fontSize:15,fontWeight:"700",fill:16777215,letterSpacing:1,dropShadow:{
+ color:0,alpha:.85,blur:4,angle:Math.PI/4,distance:2}
+ }
+ ),Kt(pJt,"HUD_VS_STYLE",{
+ fontFamily:"Arial",fontSize:13,fontWeight:"900",fill:16777215,stroke:{
+ color:0,width:3}
+ ,letterSpacing:1}
+ ),Kt(pJt,"SPEED_CYCLE",[1,2]),Kt(pJt,"SPEED_LS_KEY","ef2.gw.battleSpeed");
+ let gJt=pJt;
+ const mJt=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.PVP),Kt(this,"ALLY_CASTLE_X",48),Kt(this,"ALLY_CASTLE_Y",521),Kt(this,"ENEMY_CASTLE_X",575),Kt(this,"ENEMY_CASTLE_Y",100),Kt(this,"enemyCenterX",575),Kt(this,"enemyCenterY",100),Kt(this,"allyCenterX",48),Kt(this,"allyCenterY",521),Kt(this,"ENEMY_COUNT",10),Kt(this,"PVP_HP_MULTIPLIER",5),Kt(this,"PVP_MOVE_SPD_MULTIPLIER",1.4),Kt(this,"PVP_TIME_LIMIT",90),Kt(this,"pvpStartTime",0),Kt(this,"enemyCastle",null),Kt(this,"allyCastle",null),Kt(this,"timerText",null),Kt(this,"spawnedVOs",[]),Kt(this,"pvpTeamVOs",[])}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ initCenterPositions(){
+ this.allyCenterX=this.ALLY_CASTLE_X,this.allyCenterY=this.ALLY_CASTLE_Y,this.enemyCenterX=this.ENEMY_CASTLE_X,this.enemyCenterY=this.ENEMY_CASTLE_Y}
+ async startBattleWith(t,i,s,e,n=10,h){
+ this.cleanup(),VR.getInstance().setBattleContext(xR.Pvp),HB.getInstance().setDay(),this.initCenterPositions(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
+ for(const o of this.pvpTeamVOs)o.remove();
+ this.pvpTeamVOs.length=0;
+ const r=Math.min(t.length,10);
+ for(let o=0;
+ o<r;
+ o++){
+ const s=t[o];
+ if(s>=1e4)continue;
+ const e=bx.getVO();
+ e.id=-1,e.kindNum=s,e.trans=i[o],e.level=Math.floor(ML.maxWave/100),e.enhance=0,this.pvpTeamVOs.push(e)}
+ await this.setupEnemiesWith(s,e,n),await this.setupHeroTeam(),await this.setupCastles(n),this.setupEnemyLists(),this.createTimerUI(),jni.getInstance().switchToBattle(this),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),this.pvpStartTime=Date.now(),qG.getInstance().add(this.execute,this)}
+ async startBattle(t=10,i){
+ this.cleanup(),VR.getInstance().setBattleContext(xR.Pvp),HB.getInstance().setDay(),this.initCenterPositions(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
+ for(const n of this.pvpTeamVOs)n.remove();
+ this.pvpTeamVOs.length=0;
+ const s=wx.getInstance().list,e=Math.min(s.length,10);
+ for(let n=0;
+ n<e;
+ n++){
+ const i=s[n];
+ if(i.kindNum>=1e4)continue;
+ const e=bx.getVO();
+ e.id=-1,e.kindNum=i.kindNum,e.trans=i.trans,e.level=t,e.enhance=0,this.pvpTeamVOs.push(e)}
+ await this.setupEnemies(t),await this.setupHeroTeam(),await this.setupCastles(t),this.setupEnemyLists(),this.createTimerUI(),jni.getInstance().switchToBattle(this),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),this.pvpStartTime=Date.now(),qG.getInstance().add(this.execute,this)}
+ createTimerUI(){
+ this.removeTimerUI(),this.timerText=new Hg({
+ text:this.formatTime(this.PVP_TIME_LIMIT),style:t.TIMER_STYLE}
+ ),this.timerText.anchor.set(.5,0),this.timerText.x=320,this.timerText.y=8,e5t.getInstance().addChild(this.timerText)}
+ removeTimerUI(){
+ this.timerText&&(this.timerText.parent&&this.timerText.parent.removeChild(this.timerText),this.timerText.destroy(),this.timerText=null)}
+ formatTime(t){
+ return`${
+ Math.floor(t/60)}
+ :${
+ (t%60).toString().padStart(2,"0")}
+ `}
+ getRemainingSeconds(){
+ if(0===this.pvpStartTime)return this.PVP_TIME_LIMIT;
+ const t=(Date.now()-this.pvpStartTime)/1e3;
+ return Math.max(0,Math.ceil(this.PVP_TIME_LIMIT-t))}
+ isTimeExpired(){
+ return 0!==this.pvpStartTime&&(Date.now()-this.pvpStartTime)/1e3>=this.PVP_TIME_LIMIT}
+ async setupEnemiesWith(i,s,e){
+ const n=i.length;
+ for(let h=0;
+ h<n;
+ h++){
+ const n=i[h],r=wx.getInstance().getBookVO(n);
+ if(!r)continue;
+ const o=await H2.getInstance().getUnit(r.className);
+ o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,n,e,s[h]),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange;
+ const a=t.ENEMY_POSITIONS[h%t.ENEMY_POSITIONS.length];
+ o.x=a.x,o.y=a.y,o.xDefault=this.allyCenterX,o.yDefault=this.allyCenterY,o.lookAt(-1),o.healthBar.setHealthColor(!1),rB.getInstance().addChild(o),this.enemyList.push(o)}
+ }
+ async setupEnemies(i){
+ const s=wx.getInstance().bookList.filter(t=>t.kindNum<1e4);
+ if(0===s.length)return;
+ const e=[];
+ for(let t=0;
+ t<this.ENEMY_COUNT;
+ t++){
+ const t=s[this.random.nextInt(s.length)];
+ e.push(t.kindNum)}
+ for(let n=0;
+ n<this.ENEMY_COUNT;
+ n++){
+ const s=e[n],h=wx.getInstance().getBookVO(s);
+ if(!h)continue;
+ const r=await H2.getInstance().getUnit(h.className);
+ r.battleController=this,r.totalDamageDealt=0,this.initializeUnitByKindNum(r,s,i),r.detectRange=600,r.detectRange2=r.detectRange*r.detectRange;
+ const o=t.ENEMY_POSITIONS[n%t.ENEMY_POSITIONS.length];
+ r.x=o.x,r.y=o.y,r.xDefault=this.allyCenterX,r.yDefault=this.allyCenterY,r.lookAt(-1),r.healthBar.setHealthColor(!1),rB.getInstance().addChild(r),this.enemyList.push(r)}
+ }
+ async setupHeroTeam(){
+ const i=this.pvpTeamVOs;
+ if(!i||0===i.length)return;
+ const s=i.length;
+ for(let e=0;
+ e<s;
+ e++){
+ const s=i[e],n=s.kindNum,h=wx.getInstance().getBookVO(n);
+ if(!h)continue;
+ const r=await H2.getInstance().getUnit(h.className);
+ r.battleController=this,this.initializeUnitByKindNum(r,n,s.level,s.trans),r.initDelay=0,r.showTombstone=!1,r.totalDamageDealt=0,r.detectRange=600,r.detectRange2=r.detectRange*r.detectRange,r.numBlock=0;
+ const o=t.ALLY_POSITIONS[e%t.ALLY_POSITIONS.length];
+ r.x=o.x,r.y=o.y,r.xDefault=this.enemyCenterX,r.yDefault=this.enemyCenterY,r.lookAt(1),r.healthBar.setHealthColor(!0),r.isAir&&r.onFlyEnter(!0),rB.getInstance().addChild(r),this.friendList.push(r)}
+ }
+ async setupCastles(t){
+ const i=await H2.getInstance().getUnit(rx.ElfTown5);
+ i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=600,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.enemyCenterX,i.y=i.yDefault=this.enemyCenterY,i.healthBar.setHealthColor(!1),rB.getInstance().addChildAt(i,0),this.enemyList.push(i),this.enemyCastle=i;
+ const s=await H2.getInstance().getUnit(rx.ElfTown5);
+ s.battleController=this,s.totalDamageDealt=0,this.initializeUnitByKindNum(s,10001,t),s.detectRange=600,s.detectRange2=s.detectRange*s.detectRange,s.atkRange=250,s.atkRange2=s.atkRange*s.atkRange,s.numShot=1,s.x=s.xDefault=this.allyCenterX,s.y=s.yDefault=this.allyCenterY,s.healthBar.setHealthColor(!0),rB.getInstance().addChildAt(s,0),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){
+ const n=bx.getVO();
+ n.id=-1,n.kindNum=i,n.level=s,n.enhance=0,n.trans=e,this.spawnedVOs.push(n),t.setData(n),t.isCastle||(t.baseMaxHp*=this.PVP_HP_MULTIPLIER,t.orgMaxHp*=this.PVP_HP_MULTIPLIER,t.maxHp*=this.PVP_HP_MULTIPLIER,t.hp=t.maxHp,t.baseMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.orgMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.moveSpd*=this.PVP_MOVE_SPD_MULTIPLIER),t.initDelay=0,t.showTombstone=!1}
+ checkProgress(){
+ if(this.timerText&&!this.battleEnded){
+ const t=this.getRemainingSeconds();
+ this.timerText.text=this.formatTime(t),this.timerText.style.fill=t<=10?16724787:t<=20?16755200:16777215}
+ super.checkProgress()}
+ cleanup(){
+ VR.getInstance().setBattleContext(xR.Normal),this.removeTimerUI(),this.enemyCastle=null,this.allyCastle=null,this.pvpStartTime=0;
+ for(const t of this.pvpTeamVOs)t.remove();
+ this.pvpTeamVOs.length=0;
+ for(const t of this.spawnedVOs)t.remove();
+ this.spawnedVOs.length=0;
+ for(const t of this.enemyList)t.disablePatrol();
+ for(const t of this.friendList)t.disablePatrol();
+ super.cleanup()}
+ checkVictory(){
+ return!(!this.enemyCastle||this.enemyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp>this.enemyCastle.hp/this.enemyCastle.maxHp}
+ checkDefeat(){
+ return!(!this.allyCastle||this.allyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp<=this.enemyCastle.hp/this.enemyCastle.maxHp}
+ onVictoryCallback(){
+ B5t.getInstance().endBattle(!0),setTimeout(()=>{
+ qG.getInstance().remove(this.execute,this),rJt.getInstance().showVictory()}
+ ,2e3)}
+ onDefeatCallback(){
+ B5t.getInstance().endBattle(!1),setTimeout(()=>{
+ qG.getInstance().remove(this.execute,this),rJt.getInstance().showDefeat()}
+ ,2e3)}
+ returnToMain(){
+ }
+ scheduleReturnToMain(){
+ }
+ pause(){
+ qG.getInstance().remove(this.execute,this)}
+ resume(){
+ qG.getInstance().add(this.execute,this)}
+ giveUp(){
+ this.handleDefeat()}
+ }
+ ;
+ Vt(mJt,"PVPBattleController"),Kt(mJt,"instance"),Kt(mJt,"ALLY_POSITIONS",(()=>{
+ const t=Math.sqrt(454970),i=527/t,s=-421/t,e=-s,n=i,h=[{
+ dist:130,count:3}
+ ,{
+ dist:90,count:3}
+ ,{
+ dist:40,count:4}
+ ],r=[];
+ for(const o of h){
+ const t=48+i*o.dist,h=521+s*o.dist,a=.5*(o.count-1);
+ for(let i=0;
+ i<o.count;
+ i++){
+ const s=45*(i-a);
+ r.push({
+ x:Math.round(t+e*s),y:Math.round(h+n*s)}
+ )}
+ }
+ return r}
+ )()),Kt(mJt,"ENEMY_POSITIONS",mJt.ALLY_POSITIONS.map(t=>({
+ x:623-t.x,y:621-t.y}
+ ))),Kt(mJt,"TIMER_STYLE",new Ag({
+ fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
+ color:"#000000",width:5,join:"round"}
+ }
+ ));
+ let wJt=mJt;
+ var vJt="in vec2 aPosition;
+ \nout vec2 vTextureCoord;
+ \n\nuniform vec4 uInputSize;
+ \nuniform vec4 uOutputFrame;
+ \nuniform vec4 uOutputTexture;
+ \n\nvec4 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\nvec2 filterTextureCoord( void )\n{
+ \n    return aPosition * (uOutputFrame.zw * uInputSize.zw);
+ \n}
+ \n\nvoid main(void)\n{
+ \n    gl_Position = filterVertexPosition();
+ \n    vTextureCoord = filterTextureCoord();
+ \n}
+ \n",bJt="struct 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\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
+ \n\nstruct VSOutput {
+ \n    @builtin(position) position: vec4<f32>,\n    @location(0) uv : vec2<f32>\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@vertex\nfn mainVertex(\n  @location(0) aPosition : vec2<f32>, \n) -> VSOutput {
+ \n  return VSOutput(\n   filterVertexPosition(aPosition),\n   filterTextureCoord(aPosition)\n  );
+ \n}
+ ",_Jt=Object.defineProperty,yJt=Vt((t,i,s)=>i in t?_Jt(t,i,{
+ enumerable:!0,configurable:!0,writable:!0,value:s}
+ ):t[i]=s,"__defNormalProp$1"),MJt=Vt((t,i,s)=>(yJt(t,"symbol"!=typeof i?i+"":i,s),s),"__publicField$1");
+ const EJt=(Vt(Nt=class extends rr{
+ constructor(t){
+ const i=(t={
+ ...Nt.DEFAULT_OPTIONS,...t}
+ ).distance??10,s=t.quality??.1;
+ super({
+ gpuProgram:Vh.from({
+ vertex:{
+ source:bJt,entryPoint:"mainVertex"}
+ ,fragment:{
+ source:"struct GlowUniforms {
+ \n  uDistance: f32,\n  uStrength: vec2<f32>,\n  uColor: vec3<f32>,\n  uAlpha: f32,\n  uQuality: f32,\n  uKnockout: f32,\n}
+ ;
+ \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\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
+ \n\n@group(0) @binding(1) var uTexture: texture_2d<f32>;
+  \n@group(0) @binding(2) var uSampler: sampler;
+ \n@group(1) @binding(0) var<uniform> glowUniforms : GlowUniforms;
+ \n\n@fragment\nfn mainFragment(\n  @builtin(position) position: vec4<f32>,\n  @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {
+ \n  let quality = glowUniforms.uQuality;
+ \n  let distance = glowUniforms.uDistance;
+ \n\n  let dist: f32 = glowUniforms.uDistance;
+ \n  let angleStepSize: f32 = min(1. / quality / distance, PI * 2.0);
+ \n  let angleStepNum: f32 = ceil(PI * 2.0 / angleStepSize);
+ \n\n  let px: vec2<f32> = vec2<f32>(1.0 / gfu.uInputSize.xy);
+ \n\n  var totalAlpha: f32 = 0.0;
+ \n\n  var direction: vec2<f32>;
+ \n  var displaced: vec2<f32>;
+ \n  var curColor: vec4<f32>;
+ \n\n  for (var angle = 0.0;
+  angle < PI * 2.0;
+  angle += angleStepSize) {
+ \n    direction = vec2<f32>(cos(angle), sin(angle)) * px;
+ \n    for (var curDistance = 0.0;
+  curDistance < dist;
+  curDistance+=1) {
+ \n      displaced = vec2<f32>(clamp(uv + direction * (curDistance + 1.0), gfu.uInputClamp.xy, gfu.uInputClamp.zw));
+ \n      curColor = textureSample(uTexture, uSampler, displaced);
+ \n      totalAlpha += (dist - curDistance) * curColor.a;
+ \n    }
+ \n  }
+ \n    \n  curColor = textureSample(uTexture, uSampler, uv);
+ \n\n  let glowColorRGB = glowUniforms.uColor;
+ \n  let glowAlpha = glowUniforms.uAlpha;
+ \n  let glowColor = vec4<f32>(glowColorRGB, glowAlpha);
+ \n  let knockout: bool = glowUniforms.uKnockout > 0.5;
+ \n  let innerStrength = glowUniforms.uStrength[0];
+ \n  let outerStrength = glowUniforms.uStrength[1];
+ \n\n  let alphaRatio: f32 = (totalAlpha / (angleStepNum * dist * (dist + 1.0) / 2.0));
+ \n  let innerGlowAlpha: f32 = (1.0 - alphaRatio) * innerStrength * curColor.a * glowAlpha;
+ \n  let innerGlowStrength: f32 = min(1.0, innerGlowAlpha);
+ \n  \n  let innerColor: vec4<f32> = mix(curColor, glowColor, innerGlowStrength);
+ \n  let outerGlowAlpha: f32 = alphaRatio * outerStrength * (1. - curColor.a) * glowAlpha;
+ \n  let outerGlowStrength: f32 = min(1.0 - innerColor.a, outerGlowAlpha);
+ \n  let outerGlowColor: vec4<f32> = outerGlowStrength * glowColor.rgba;
+ \n  \n  if (knockout) {
+ \n    let resultAlpha: f32 = outerGlowAlpha + innerGlowAlpha;
+ \n    return vec4<f32>(glowColor.rgb * resultAlpha, resultAlpha);
+ \n  }
+ \n  else {
+ \n    return innerColor + outerGlowColor;
+ \n  }
+ \n}
+ \n\nconst PI: f32 = 3.14159265358979323846264;
+ ",entryPoint:"mainFragment"}
+ }
+ ),glProgram:Oh.from({
+ vertex:vJt,fragment:"precision highp float;
+ \nin vec2 vTextureCoord;
+ \nout vec4 finalColor;
+ \n\nuniform sampler2D uTexture;
+ \nuniform vec2 uStrength;
+ \nuniform vec3 uColor;
+ \nuniform float uKnockout;
+ \nuniform float uAlpha;
+ \n\nuniform vec4 uInputSize;
+ \nuniform vec4 uInputClamp;
+ \n\nconst float PI = 3.14159265358979323846264;
+ \n\n// Hard-assignment of DIST and ANGLE_STEP_SIZE instead of using uDistance and uQuality to allow them to be use on GLSL loop conditions\nconst float DIST = __DIST__;
+ \nconst float ANGLE_STEP_SIZE = min(__ANGLE_STEP_SIZE__, PI * 2.);
+ \nconst float ANGLE_STEP_NUM = ceil(PI * 2. / ANGLE_STEP_SIZE);
+ \nconst float MAX_TOTAL_ALPHA = ANGLE_STEP_NUM * DIST * (DIST + 1.) / 2.;
+ \n\nvoid main(void) {
+ \n    vec2 px = vec2(1.) / uInputSize.xy;
+ \n\n    float totalAlpha = 0.;
+ \n\n    vec2 direction;
+ \n    vec2 displaced;
+ \n    vec4 curColor;
+ \n\n    for (float angle = 0.;
+  angle < PI * 2.;
+  angle += ANGLE_STEP_SIZE) {
+ \n      direction = vec2(cos(angle), sin(angle)) * px;
+ \n\n      for (float curDistance = 0.;
+  curDistance < DIST;
+  curDistance++) {
+ \n          displaced = clamp(vTextureCoord + direction * (curDistance + 1.), uInputClamp.xy, uInputClamp.zw);
+ \n          curColor = texture(uTexture, displaced);
+ \n          totalAlpha += (DIST - curDistance) * curColor.a;
+ \n      }
+ \n    }
+ \n    \n    curColor = texture(uTexture, vTextureCoord);
+ \n\n    vec4 glowColor = vec4(uColor, uAlpha);
+ \n    bool knockout = uKnockout > .5;
+ \n    float innerStrength = uStrength[0];
+ \n    float outerStrength = uStrength[1];
+ \n\n    float alphaRatio = totalAlpha / MAX_TOTAL_ALPHA;
+ \n    float innerGlowAlpha = (1. - alphaRatio) * innerStrength * curColor.a * uAlpha;
+ \n    float innerGlowStrength = min(1., innerGlowAlpha);
+ \n    \n    vec4 innerColor = mix(curColor, glowColor, innerGlowStrength);
+ \n    float outerGlowAlpha = alphaRatio * outerStrength * (1. - curColor.a) * uAlpha;
+ \n    float outerGlowStrength = min(1. - innerColor.a, outerGlowAlpha);
+ \n    vec4 outerGlowColor = outerGlowStrength * glowColor.rgba;
+ \n\n    if (knockout) {
+ \n      float resultAlpha = outerGlowAlpha + innerGlowAlpha;
+ \n      finalColor = vec4(glowColor.rgb * resultAlpha, resultAlpha);
+ \n    }
+ \n    else {
+ \n      finalColor = innerColor + outerGlowColor;
+ \n    }
+ \n}
+ \n".replace(/__ANGLE_STEP_SIZE__/gi,`${
+ (1/s/i).toFixed(7)}
+ `).replace(/__DIST__/gi,`${
+ i.toFixed(0)}
+ .0`),name:"glow-filter"}
+ ),resources:{
+ glowUniforms:{
+ uDistance:{
+ value:i,type:"f32"}
+ ,uStrength:{
+ value:[t.innerStrength,t.outerStrength],type:"vec2<f32>"}
+ ,uColor:{
+ value:new Float32Array(3),type:"vec3<f32>"}
+ ,uAlpha:{
+ value:t.alpha,type:"f32"}
+ ,uQuality:{
+ value:s,type:"f32"}
+ ,uKnockout:{
+ value:(null==t?void 0:t.knockout)?1:0,type:"f32"}
+ }
+ }
+ ,padding:i}
+ ),MJt(this,"uniforms"),MJt(this,"_color"),this.uniforms=this.resources.glowUniforms.uniforms,this._color=new Gs,this.color=t.color??16777215}
+ get distance(){
+ return this.uniforms.uDistance}
+ set distance(t){
+ this.uniforms.uDistance=this.padding=t}
+ get innerStrength(){
+ return this.uniforms.uStrength[0]}
+ set innerStrength(t){
+ this.uniforms.uStrength[0]=t}
+ get outerStrength(){
+ return this.uniforms.uStrength[1]}
+ set outerStrength(t){
+ this.uniforms.uStrength[1]=t}
+ get color(){
+ return this._color.value}
+ set color(t){
+ this._color.setValue(t);
+ const[i,s,e]=this._color.toArray();
+ this.uniforms.uColor[0]=i,this.uniforms.uColor[1]=s,this.uniforms.uColor[2]=e}
+ get alpha(){
+ return this.uniforms.uAlpha}
+ set alpha(t){
+ this.uniforms.uAlpha=t}
+ get quality(){
+ return this.uniforms.uQuality}
+ set quality(t){
+ this.uniforms.uQuality=t}
+ get knockout(){
+ return 1===this.uniforms.uKnockout}
+ set knockout(t){
+ this.uniforms.uKnockout=t?1:0}
+ }
+ ,"_GlowFilter"),Nt);
+ MJt(EJt,"DEFAULT_OPTIONS",{
+ distance:10,outerStrength:4,innerStrength:0,color:16777215,alpha:1,quality:.1,knockout:!1}
+ );
+ let AJt=EJt;
+ var SJt=Object.defineProperty,TJt=Vt((t,i,s)=>i in t?SJt(t,i,{
+ enumerable:!0,configurable:!0,writable:!0,value:s}
+ ):t[i]=s,"__defNormalProp"),CJt=Vt((t,i,s)=>(TJt(t,"symbol"!=typeof i?i+"":i,s),s),"__publicField");
+ const IJt=(Vt(Pt=class extends rr{
+ constructor(...t){
+ let i=t[0]??{
+ }
+ ;
+ "number"==typeof i&&(Ui("6.0.0","OutlineFilter constructor params are now options object. See params: {
+  thickness, color, quality, alpha, knockout }
+ "),i={
+ thickness:i}
+ ,void 0!==t[1]&&(i.color=t[1]),void 0!==t[2]&&(i.quality=t[2]),void 0!==t[3]&&(i.alpha=t[3]),void 0!==t[4]&&(i.knockout=t[4])),i={
+ ...Pt.DEFAULT_OPTIONS,...i}
+ ;
+ const s=i.quality??.1;
+ super({
+ gpuProgram:Vh.from({
+ vertex:{
+ source:bJt,entryPoint:"mainVertex"}
+ ,fragment:{
+ source:"struct OutlineUniforms {
+ \n  uThickness:vec2<f32>,\n  uColor:vec3<f32>,\n  uAlpha:f32,\n  uAngleStep:f32,\n  uKnockout:f32,\n}
+ ;
+ \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\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
+ \n\n@group(0) @binding(1) var uTexture: texture_2d<f32>;
+  \n@group(0) @binding(2) var uSampler: sampler;
+ \n@group(1) @binding(0) var<uniform> outlineUniforms : OutlineUniforms;
+ \n\n@fragment\nfn mainFragment(\n  @builtin(position) position: vec4<f32>,\n  @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {
+ \n  let sourceColor: vec4<f32> = textureSample(uTexture, uSampler, uv);
+ \n  let contentColor: vec4<f32> = sourceColor * (1. - outlineUniforms.uKnockout);
+ \n  \n  let outlineAlpha: f32 = outlineUniforms.uAlpha * outlineMaxAlphaAtPos(uv) * (1. - sourceColor.a);
+ \n  let outlineColor: vec4<f32> = vec4<f32>(vec3<f32>(outlineUniforms.uColor) * outlineAlpha, outlineAlpha);
+ \n  \n  return contentColor + outlineColor;
+ \n}
+ \n\nfn outlineMaxAlphaAtPos(uv: vec2<f32>) -> f32 {
+ \n  let thickness = outlineUniforms.uThickness;
+ \n\n  if (thickness.x == 0. || thickness.y == 0.) {
+ \n    return 0.;
+ \n  }
+ \n  \n  let angleStep = outlineUniforms.uAngleStep;
+ \n\n  var displacedColor: vec4<f32>;
+ \n  var displacedPos: vec2<f32>;
+ \n\n  var maxAlpha: f32 = 0.;
+ \n  var displaced: vec2<f32>;
+ \n  var curColor: vec4<f32>;
+ \n\n  for (var angle = 0.;
+  angle <= DOUBLE_PI;
+  angle += angleStep)\n  {
+ \n    displaced.x = uv.x + thickness.x * cos(angle);
+ \n    displaced.y = uv.y + thickness.y * sin(angle);
+ \n    curColor = textureSample(uTexture, uSampler, clamp(displaced, gfu.uInputClamp.xy, gfu.uInputClamp.zw));
+ \n    maxAlpha = max(maxAlpha, curColor.a);
+ \n  }
+ \n\n  return maxAlpha;
+ \n}
+ \n\nconst DOUBLE_PI: f32 = 3.14159265358979323846264 * 2.;
+ ",entryPoint:"mainFragment"}
+ }
+ ),glProgram:Oh.from({
+ vertex:vJt,fragment:"precision highp float;
+ \nin vec2 vTextureCoord;
+ \nout vec4 finalColor;
+ \n\nuniform sampler2D uTexture;
+ \nuniform vec2 uThickness;
+ \nuniform vec3 uColor;
+ \nuniform float uAlpha;
+ \nuniform float uKnockout;
+ \n\nuniform vec4 uInputClamp;
+ \n\nconst float DOUBLE_PI = 2. * 3.14159265358979323846264;
+ \nconst float ANGLE_STEP = ${
+ ANGLE_STEP}
+ ;
+ \n\nfloat outlineMaxAlphaAtPos(vec2 pos) {
+ \n    if (uThickness.x == 0. || uThickness.y == 0.) {
+ \n        return 0.;
+ \n    }
+ \n\n    vec4 displacedColor;
+ \n    vec2 displacedPos;
+ \n    float maxAlpha = 0.;
+ \n\n    for (float angle = 0.;
+  angle <= DOUBLE_PI;
+  angle += ANGLE_STEP) {
+ \n        displacedPos.x = vTextureCoord.x + uThickness.x * cos(angle);
+ \n        displacedPos.y = vTextureCoord.y + uThickness.y * sin(angle);
+ \n        displacedColor = texture(uTexture, clamp(displacedPos, uInputClamp.xy, uInputClamp.zw));
+ \n        maxAlpha = max(maxAlpha, displacedColor.a);
+ \n    }
+ \n\n    return maxAlpha;
+ \n}
+ \n\nvoid main(void) {
+ \n    vec4 sourceColor = texture(uTexture, vTextureCoord);
+ \n    vec4 contentColor = sourceColor * float(uKnockout < 0.5);
+ \n    float outlineAlpha = uAlpha * outlineMaxAlphaAtPos(vTextureCoord.xy) * (1.-sourceColor.a);
+ \n    vec4 outlineColor = vec4(vec3(uColor) * outlineAlpha, outlineAlpha);
+ \n    finalColor = contentColor + outlineColor;
+ \n}
+ \n".replace(/\$\{
+ ANGLE_STEP\}
+ /,Pt.getAngleStep(s).toFixed(7)),name:"outline-filter"}
+ ),resources:{
+ outlineUniforms:{
+ uThickness:{
+ value:new Float32Array(2),type:"vec2<f32>"}
+ ,uColor:{
+ value:new Float32Array(3),type:"vec3<f32>"}
+ ,uAlpha:{
+ value:i.alpha,type:"f32"}
+ ,uAngleStep:{
+ value:0,type:"f32"}
+ ,uKnockout:{
+ value:i.knockout?1:0,type:"f32"}
+ }
+ }
+ }
+ ),CJt(this,"uniforms"),CJt(this,"_thickness"),CJt(this,"_quality"),CJt(this,"_color"),this.uniforms=this.resources.outlineUniforms.uniforms,this.uniforms.uAngleStep=Pt.getAngleStep(s),this._color=new Gs,this.color=i.color??0,Object.assign(this,i)}
+ apply(t,i,s,e){
+ this.uniforms.uThickness[0]=this.thickness/i.source.width,this.uniforms.uThickness[1]=this.thickness/i.source.height,t.applyFilter(this,i,s,e)}
+ static getAngleStep(t){
+ return parseFloat((2*Math.PI/Math.max(t*Pt.MAX_SAMPLES,Pt.MIN_SAMPLES)).toFixed(7))}
+ get thickness(){
+ return this._thickness}
+ set thickness(t){
+ this._thickness=this.padding=t}
+ get color(){
+ return this._color.value}
+ set color(t){
+ this._color.setValue(t);
+ const[i,s,e]=this._color.toArray();
+ this.uniforms.uColor[0]=i,this.uniforms.uColor[1]=s,this.uniforms.uColor[2]=e}
+ get alpha(){
+ return this.uniforms.uAlpha}
+ set alpha(t){
+ this.uniforms.uAlpha=t}
+ get quality(){
+ return this._quality}
+ set quality(t){
+ this._quality=t,this.uniforms.uAngleStep=Pt.getAngleStep(t)}
+ get knockout(){
+ return 1===this.uniforms.uKnockout}
+ set knockout(t){
+ this.uniforms.uKnockout=t?1:0}
+ }
+ ,"_OutlineFilter"),Pt);
+ CJt(IJt,"DEFAULT_OPTIONS",{
+ thickness:1,color:0,alpha:1,quality:.1,knockout:!1}
+ ),CJt(IJt,"MIN_SAMPLES",1),CJt(IJt,"MAX_SAMPLES",100);
+ let kJt=IJt;
+ const OJt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"main",0),Kt(this,"difficult",0),Kt(this,"sub",0),Kt(this,"progress",0),Kt(this,"openCost",0),Kt(this,"limit",0),Kt(this,"name",""),Kt(this,"desc",""),Kt(this,"bossKindNum",0),Kt(this,"level",0),Kt(this,"hp",0),Kt(this,"guildCoin",0),Kt(this,"vulns",{
+ }
+ ),Kt(this,"maxPerWeakpoint",20),Kt(this,"plusTribe",""),Kt(this,"plusValue",0),Kt(this,"minusTribe",""),Kt(this,"minusValue",0),Kt(this,"resistType",0),Kt(this,"takenResistMin",0),Kt(this,"takenResistMax",0),Kt(this,"takenMultMax",1),Kt(this,"takenMultMin",1),Kt(this,"dealResistMin",0),Kt(this,"dealResistMax",0),Kt(this,"dealMultMin",1),Kt(this,"dealMultMax",1),Kt(this,"recommendResist",0),Kt(this,"showRecommend",!1),Kt(this,"hasCrossbow",!0),Kt(this,"backAttack",!0)}
+ }
+ ;
+ Vt(OJt,"GuildRaidBookVO");
+ let xJt=OJt;
+ function RJt(t,i=0){
+ const s=Number(String(t??"").replace(/,/g,""));
+ return Number.isFinite(s)?s:i}
+ Vt(RJt,"numOf");
+ const NJt=class t{
+ constructor(){
+ Kt(this,"list",[]),Kt(this,"byMain",new Map)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ static subByBossKindNum(i){
+ for(const[s,e]of Object.entries(t.FALLBACK_BOSS_KIND_BY_SUB))if(e===i)return Number(s);
+ return 0}
+ async ensureLoaded(){
+ if(this.list.length>0)return;
+ await MD.getInstance().loadBook(_D.GUILD_RAID);
+ const t=MD.getInstance().getBook(_D.GUILD_RAID);
+ this.setBookData(t)}
+ setBookData(i){
+ if(this.list=[],this.byMain.clear(),Array.isArray(i)){
+ for(const s of i){
+ const i=new xJt;
+ i.kindNum=Number(s.kindNum)||0,i.main=Number(s.main)||0,i.difficult=Number(s.difficult)||0,i.sub=Number(s.sub)||0,i.progress=Number(s.progress)||0,i.openCost=Number(s.openCost)||0,i.limit=Number(s.limit)||0,i.name=String(s.name??""),i.desc=String(s.desc??""),i.bossKindNum=Number(s.bossKindNum)||0,i.level=Number(s.level)||0,i.hp=RJt(s.hp),i.guildCoin=RJt(s.guildCoin),i.plusTribe=String(s.plusTribe??"").toLowerCase(),i.plusValue=RJt(s.plusValue),i.minusTribe=String(s.minusTribe??"").toLowerCase(),i.minusValue=RJt(s.minusValue),i.resistType=RJt(s.resistType),i.takenResistMin=RJt(s.takenResistMin),i.takenResistMax=RJt(s.takenResistMax),i.takenMultMax=RJt(s.takenMultMax,1),i.takenMultMin=RJt(s.takenMultMin,1),i.dealResistMin=RJt(s.dealResistMin),i.dealResistMax=RJt(s.dealResistMax),i.dealMultMin=RJt(s.dealMultMin,1),i.dealMultMax=RJt(s.dealMultMax,1),i.recommendResist=RJt(s.recommendResist),i.showRecommend="Y"===String(s.showRecommend??"N"),i.hasCrossbow="N"!==String(s.hasCrossbow??"Y").toUpperCase(),i.backAttack="N"!==String(s.backAttack??"Y").toUpperCase();
+ for(const[h,r]of t.VULN_COLUMNS){
+ const t=RJt(s[r]);
+ t>0&&(i.vulns[h]=t)}
+ const e=RJt(s.maxPerWeakpoint);
+ i.maxPerWeakpoint=e>0?e:20,this.list.push(i);
+ let n=this.byMain.get(i.main);
+ n||(n=[],this.byMain.set(i.main,n)),n.push(i)}
+ for(const t of this.byMain.values())t.sort((t,i)=>t.difficult-i.difficult||t.sub-i.sub)}
+ }
+ appendTestDragonKnight(){
+ for(const[i,s]of this.byMain.entries()){
+ const e=new Map;
+ for(const t of s){
+ let i=e.get(t.difficult);
+ i||(i=[],e.set(t.difficult,i)),i.push(t)}
+ for(const[n,h]of e.entries()){
+ if(h.some(t=>100004===t.bossKindNum))continue;
+ const e=h.reduce((t,i)=>t.sub>i.sub?t:i),r=new xJt;
+ r.kindNum=t.TEST_DK_KIND_BASE+100*i+n,r.main=i,r.difficult=n,r.sub=e.sub+1,r.progress=e.progress,r.name="고대 용기사",r.desc="공통 기믹 테스트 보스 (클라 전용)",r.bossKindNum=100004,r.level=e.level+5,r.hp=e.hp,r.guildCoin=e.guildCoin,r.plusTribe=e.plusTribe,r.plusValue=e.plusValue,r.minusTribe=e.minusTribe,r.minusValue=e.minusValue,r.resistType=e.resistType,r.takenResistMin=e.takenResistMin,r.takenResistMax=e.takenResistMax,r.takenMultMax=e.takenMultMax,r.takenMultMin=e.takenMultMin,r.dealResistMin=e.dealResistMin,r.dealResistMax=e.dealResistMax,r.dealMultMin=e.dealMultMin,r.dealMultMax=e.dealMultMax,r.recommendResist=e.recommendResist,r.showRecommend=e.showRecommend,r.hasCrossbow=!0,r.backAttack=!0,r.vulns={
+ ...t.TEST_DK_VULNS}
+ ,this.list.push(r),s.push(r)}
+ }
+ }
+ hasBook(){
+ return this.list.length>0}
+ getMains(){
+ return Array.from(this.byMain.keys()).sort((t,i)=>t-i)}
+ getDifficulties(t){
+ const i=this.byMain.get(t)??[];
+ return[...new Set(i.map(t=>t.difficult))]}
+ getSubs(t,i){
+ return(this.byMain.get(t)??[]).filter(t=>t.difficult===i)}
+ getSub(t,i,s){
+ return this.getSubs(t,i).find(t=>t.sub===s)??null}
+ getByKindNum(t){
+ return this.list.find(i=>i.kindNum===t)??null}
+ findByBossKindNum(t,i=0){
+ for(const s of this.list)if(this.getBattleBossKindNum(s)===t&&!(i>0&&s.sub!==i))return s;
+ return null}
+ getBattleBossKindNum(i){
+ return t.normalizeBossKindNum(i.bossKindNum)||t.FALLBACK_BOSS_KIND_BY_RAID_KIND[i.kindNum]||t.FALLBACK_BOSS_KIND_BY_SUB[i.sub]||0}
+ getBossName(t){
+ if(!t)return"";
+ const i=this.getBattleBossKindNum(t);
+ return i?SG.getText(`UNIT_NAME_${
+ i}
+ `,t.name):t.name}
+ static normalizeBossKindNum(t){
+ return t?this.LEGACY_BOSS_KIND_MAP[t]?this.LEGACY_BOSS_KIND_MAP[t]:t>=1e5?t:0:0}
+ getFirstSub(t,i){
+ return this.getSub(t,i,1)}
+ getMainName(i){
+ const s=t.MAIN_NAMES[i]??`RAID ${
+ i}
+ `,e=t.MAIN_NAME_KEYS[i];
+ return e?SG.getText(e,s):s}
+ isLiveMain(i){
+ return t.LIVE_MAINS.includes(i)}
+ }
+ ;
+ Vt(NJt,"GuildRaidDataManager"),Kt(NJt,"instance"),Kt(NJt,"LIVE_MAINS",[1]),Kt(NJt,"OPEN_TIME_UTC_MS",Date.UTC(2026,6,25)),Kt(NJt,"TEST_FREE_ENTRY",!1),Kt(NJt,"TEST_DK_KIND_BASE",9e4),Kt(NJt,"MAIN_NAMES",{
+ 1:"고대유적지",2:"불타는 대지",3:"죽음의 늪지",4:"지옥군주의 성채",5:"얼어붙은 고대 문명"}
+ ),Kt(NJt,"MAIN_NAME_KEYS",{
+ 1:"GAME_1261",2:"GAME_1262",3:"GAME_1263",4:"GAME_1264",5:"GAME_1265"}
+ ),Kt(NJt,"FALLBACK_BOSS_KIND_BY_SUB",{
+ 1:1e5,2:100001,3:100002,4:100003,5:100004}
+ ),Kt(NJt,"VULN_COLUMNS",[["stun","vulnStun"],["freeze","vulnFreeze"],["poison","vulnPoison"],["curse","vulnCurse"],["silence","vulnSilence"],["shock","vulnShock"],["binding","vulnBinding"],["blow","vulnBlow"],["knockback","vulnKnockback"],["charm","vulnCharm"]]),Kt(NJt,"TEST_DK_VULNS",{
+ stun:.5,freeze:1,curse:10,knockback:.5}
+ ),Kt(NJt,"LEGACY_BOSS_KIND_MAP",{
+ 2001:1e5,2002:100001,2003:100002}
+ ),Kt(NJt,"FALLBACK_BOSS_KIND_BY_RAID_KIND",{
+ 1:1e5,2:100001,3:100002}
+ );
+ let PJt=NJt;
+ const DJt=[0,1,4,3,2,5],LJt={
+ TANK:"emblem_tnk.png",DEALER:"emblem_dps.png",HEALER:"emblem_hps.png",SUPPORT:"emblem_deb.png",BREAKER:"emblem_buf.png",CROSSBOW:"emblem_bal.png"}
+ ;
+ function GJt(t,i){
+ switch(t){
+ case"ALL":return!0;
+ case"HERO":return i.isHero;
+ case"SOLDIER":return!i.isHero;
+ case"MELEE":return i.unitType===ix.MELEE;
+ case"RANGED":return i.unitType===ix.RANGE;
+ case"HUMAN":return i.tribe===nx.HUMAN;
+ case"ELF":return i.tribe===nx.ELF;
+ case"UNDEAD":return i.tribe===nx.UNDEAD;
+ case"ORC":return i.tribe===nx.ORC;
+ default:return!1}
+ }
+ Vt(GJt,"matchesRuneFilter");
+ const BJt={
+ corps:[[{
+ kindNum:101,grade:6,subId:2}
+ ,{
+ kindNum:105,grade:6,subId:3}
+ ,{
+ kindNum:118,grade:6,subId:-1}
+ ,{
+ kindNum:121,grade:6,subId:-1}
+ ,{
+ kindNum:126,grade:6,subId:-1}
+ ],[{
+ kindNum:201,grade:6,subId:1}
+ ,{
+ kindNum:208,grade:6,subId:-1}
+ ,{
+ kindNum:218,grade:6,subId:-1}
+ ,{
+ kindNum:227,grade:6,subId:-1}
+ ,{
+ kindNum:228,grade:6,subId:-1}
+ ],[{
+ kindNum:306,grade:6,subId:2}
+ ,{
+ kindNum:325,grade:6,subId:-1}
+ ,{
+ kindNum:326,grade:6,subId:-1}
+ ,{
+ kindNum:322,grade:6,subId:-1}
+ ,{
+ kindNum:304,grade:6,subId:-1}
+ ],[{
+ kindNum:407,grade:6,subId:4}
+ ,{
+ kindNum:416,grade:6,subId:-1}
+ ,{
+ kindNum:427,grade:6,subId:-1}
+ ,{
+ kindNum:428,grade:6,subId:-1}
+ ,{
+ kindNum:425,grade:6,subId:-1}
+ ],[{
+ kindNum:508,grade:6,subId:8}
+ ,{
+ kindNum:517,grade:6,subId:-1}
+ ,{
+ kindNum:527,grade:6,subId:-1}
+ ,{
+ kindNum:525,grade:6,subId:-1}
+ ,{
+ kindNum:524,grade:6,subId:-1}
+ ]],crossbow:[{
+ kindNum:602,grade:6,subId:9}
+ ,{
+ kindNum:608,grade:6,subId:-1}
+ ,{
+ kindNum:620,grade:6,subId:-1}
+ ,{
+ kindNum:623,grade:6,subId:-1}
+ ,{
+ kindNum:622,grade:6,subId:-1}
+ ]}
+ ,UJt={
+ guildCoin:["GAME_812","길드코인"],gem:["COMMON_350","보석"],raidCoin:["GAME_1508","레이드 코인"]}
+ ,FJt=class t{
+ constructor(){
+ Kt(this,"root",null),Kt(this,"rewardLabel",null),Kt(this,"rewardValue",null)}
+ static deliverRewards(i){
+ var s;
+ (null==(s=t.current)?void 0:s.rewardValue)?t.current.applyRewards(i):t.pendingRewards=i}
+ static clearPendingRewards(){
+ t.pendingRewards=null}
+ show(i,s,e,n,h=!1){
+ this.destroy();
+ const r=VA.stageWidth||640,o=VA.stageHeight||1130,a=new Ge;
+ a.label="RaidResultPopup",this.root=a,e5t.getInstance().addChild(a);
+ const c=(new Lf).rect(0,0,r,o).fill({
+ color:0,alpha:.62}
+ );
+ c.eventMode="static",a.addChild(c);
+ const l=t.PANEL_W,u=t.ROW_H,d=66+(n?24:0),f=h?t.REWARD_H:0,p=d+s.length*u+52+f+86+16,g=(r-l)/2,m=(o-p)/2-40,w=(new Lf).roundRect(g,m,l,p,14).fill({
+ color:2103828,alpha:.96}
+ ).stroke({
+ width:2,color:16765562,alpha:.9}
+ );
+ w.eventMode="static",a.addChild(w);
+ const v=new Hg({
+ text:i,style:new Ag({
+ fontSize:26,fill:16769440,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ )}
+ );
+ if(v.anchor.set(.5,0),v.position.set(g+l/2,m+18),a.addChild(v),n){
+ const t=new Hg({
+ text:n,style:new Ag({
+ fontSize:14,fill:12303291,stroke:{
+ color:0,width:2}
+ }
+ )}
+ );
+ t.anchor.set(.5,0),t.position.set(g+l/2,m+50),a.addChild(t)}
+ s=DJt.filter(t=>t<s.length).map(t=>s[t]);
+ const b=Math.max(1,...s.map(t=>t.dmg));
+ let _=0;
+ const y=new Ag({
+ fontSize:18,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ );
+ for(let t=0;
+ t<s.length;
+ t++){
+ const i=s[t];
+ _+=i.dmg;
+ const e=m+d+t*u,n=new Y2;
+ n.scale.set(.34),i.heroKindNum>0&&n.setDataWithKindNum(i.heroKindNum),n.position.set(g+18,e+(u-n.height)/2),a.addChild(n);
+ const h=new Hg({
+ text:i.label,style:new Ag({
+ fontSize:18,fill:i.color,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ h.anchor.set(0,.5),h.position.set(g+78,e+u/2-8),a.addChild(h);
+ const r=g+78,o=l-78-24,c=new Lf;
+ c.roundRect(r,e+u/2+8,o,8,4).fill({
+ color:0,alpha:.5}
+ );
+ const f=Math.max(2,i.dmg/b*o);
+ c.roundRect(r,e+u/2+8,f,8,4).fill({
+ color:i.color,alpha:.95}
+ ),a.addChild(c);
+ const p=new Hg({
+ text:VD.displayLargeNumberAsAlphabet(Math.floor(i.dmg)),style:y}
+ );
+ if(p.anchor.set(1,.5),p.position.set(g+l-24,e+u/2-8),a.addChild(p),void 0!==i.heroDmg&&void 0!==i.soldierDmg){
+ const t=new Hg({
+ text:`${
+ SG.getText("GAME_1083","영웅")}
+  ${
+ VD.displayLargeNumberAsAlphabet(Math.floor(i.heroDmg))}
+  · ${
+ SG.getText("GAME_1084","병사")}
+  ${
+ VD.displayLargeNumberAsAlphabet(Math.floor(i.soldierDmg))}
+ `,style:new Ag({
+ fontSize:12,fill:12303291,stroke:{
+ color:0,width:2}
+ }
+ )}
+ );
+ t.anchor.set(0,.5);
+ const s=h.x+h.width+10,n=p.x-p.width-10-s;
+ t.width>n&&n>0&&t.scale.set(Math.max(.7,n/t.width)),t.position.set(s,e+u/2-8),a.addChild(t)}
+ }
+ const M=m+d+s.length*u+10,E=new Hg({
+ text:SG.getText("GAME_1481","총 데미지"),style:new Ag({
+ fontSize:20,fill:16769440,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ E.anchor.set(0,.5),E.position.set(g+24,M+14),a.addChild(E);
+ const A=new Hg({
+ text:VD.displayLargeNumberAsAlphabet(Math.floor(_)),style:new Ag({
+ fontSize:22,fill:16769440,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ if(A.anchor.set(1,.5),A.position.set(g+l-24,M+14),a.addChild(A),this.rewardLabel=null,this.rewardValue=null,h){
+ const t=M+36,i=new Hg({
+ text:SG.getText("COMMON_42","획득 보상"),style:new Ag({
+ fontSize:15,fill:12303291,fontWeight:"bold",stroke:{
+ color:0,width:2}
+ }
+ )}
+ );
+ i.anchor.set(0,.5),i.position.set(g+24,t+8),i.visible=!1,a.addChild(i),this.rewardLabel=i;
+ const s=new Hg({
+ text:"",style:new Ag({
+ fontSize:15,fill:16769440,fontWeight:"bold",stroke:{
+ color:0,width:2}
+ }
+ )}
+ );
+ s.anchor.set(1,.5),s.position.set(g+l-24,t+8),s.visible=!1,a.addChild(s),this.rewardValue=s}
+ t.current=this,h&&t.pendingRewards&&(this.applyRewards(t.pendingRewards),t.pendingRewards=null);
+ const S=g+(l-200)/2,T=m+p-56-18,C=(new Lf).roundRect(S,T,200,56,12).fill({
+ color:3855962}
+ ).stroke({
+ width:2,color:0,alpha:.6}
+ );
+ C.eventMode="static",C.cursor="pointer",C.on("pointerup",()=>queueMicrotask(()=>{
+ this.root&&(this.destroy(),e())}
+ )),a.addChild(C);
+ const I=new Hg({
+ text:SG.getText("COMMON_1","확인"),style:new Ag({
+ fontSize:24,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ I.anchor.set(.5),I.position.set(S+100,T+28),a.addChild(I)}
+ applyRewards(t){
+ if(!this.root||!this.rewardLabel||!this.rewardValue)return;
+ const i=t.filter(t=>t.amount>0).map(t=>{
+ const i=UJt[t.type];
+ return`${
+ i?SG.getText(i[0],i[1]):t.type}
+  +${
+ VD.displayLargeNumberAsAlphabet(t.amount)}
+ `}
+ );
+ if(0===i.length)return;
+ this.rewardValue.text=i.join(" · ");
+ const s=this.rewardLabel.x+this.rewardLabel.width+10,e=this.rewardValue.x-s;
+ this.rewardValue.width>e&&e>0&&this.rewardValue.scale.set(Math.max(.6,e/this.rewardValue.width)),this.rewardLabel.visible=!0,this.rewardValue.visible=!0}
+ destroy(){
+ var i;
+ t.current===this&&(t.current=null),this.rewardLabel=null,this.rewardValue=null,this.root&&(null==(i=this.root.parent)||i.removeChild(this.root),this.root.destroy({
+ children:!0}
+ ),this.root=null)}
+ }
+ ;
+ Vt(FJt,"RaidResultPopup"),Kt(FJt,"PANEL_W",460),Kt(FJt,"ROW_H",52),Kt(FJt,"REWARD_H",30),Kt(FJt,"current",null),Kt(FJt,"pendingRewards",null);
+ let HJt=FJt;
+ const WJt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"base",new Lf),Kt(this,"knob",new Lf),Kt(this,"dragging",!1),Kt(this,"dir",null),Kt(this,"enabled",!0),this.drawBase(!1),this.drawKnob(),this.addChild(this.base),this.addChild(this.knob),this.eventMode="static",this.hitArea=new ea(0,0,t.HIT_R),this.on("pointerdown",this.onDown,this)}
+ setEnabled(t){
+ this.enabled!==t&&(this.enabled=t,this.visible=t,t||this.release())}
+ getDirection(){
+ return this.dir}
+ onDown(t){
+ if(!this.enabled||this.dragging)return;
+ t.stopPropagation(),this.dragging=!0,this.drawBase(!0),this.updateFromGlobal(t.global.x,t.global.y);
+ const i=VA.stage;
+ i&&(i.on("globalpointermove",this.onMove,this),i.on("pointerup",this.onUp,this),i.on("pointerupoutside",this.onUp,this))}
+ onMove(t){
+ this.dragging&&this.updateFromGlobal(t.global.x,t.global.y)}
+ onUp(){
+ this.release()}
+ release(){
+ (this.dragging||null!==this.dir)&&(this.dragging=!1,this.dir=null,this.knob.position.set(0,0),this.drawBase(!1),this.detachStageListeners())}
+ detachStageListeners(){
+ const t=VA.stage;
+ t&&(t.off("globalpointermove",this.onMove,this),t.off("pointerup",this.onUp,this),t.off("pointerupoutside",this.onUp,this))}
+ updateFromGlobal(i,s){
+ const e=this.toLocal({
+ x:i,y:s}
+ ),n=Math.sqrt(e.x*e.x+e.y*e.y);
+ if(n<=t.DEADZONE)return this.dir=null,void this.knob.position.set(0,0);
+ const h=e.x/n,r=e.y/n,o=Math.min(t.KNOB_MAX,n);
+ this.knob.position.set(h*o,r*o),this.dir={
+ x:h,y:r}
+ }
+ drawBase(i){
+ const s=t.BASE_R;
+ this.base.clear(),this.base.circle(0,0,s).fill({
+ color:1053720,alpha:i?.5:.32}
+ ),this.base.circle(0,0,s).stroke({
+ width:i?3:2,color:i?8247551:16777215,alpha:i?.9:.4}
+ );
+ for(let t=0;
+ t<4;
+ t++){
+ const i=Math.PI/2*t,e=Math.cos(i),n=Math.sin(i);
+ this.base.moveTo(e*(s-12),n*(s-12)).lineTo(e*(s-4),n*(s-4)).stroke({
+ width:2,color:16777215,alpha:.35}
+ )}
+ }
+ drawKnob(){
+ const i=t.KNOB_R;
+ this.knob.clear(),this.knob.circle(0,0,i).fill({
+ color:3823726,alpha:.85}
+ ),this.knob.circle(0,0,i).stroke({
+ width:2,color:11461887,alpha:.9}
+ )}
+ destroy(){
+ this.detachStageListeners(),this.removeAllListeners(),this.removeFromParent(),super.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Vt(WJt,"RaidTankPad"),Kt(WJt,"BASE_R",78),Kt(WJt,"KNOB_R",34),Kt(WJt,"KNOB_MAX",52),Kt(WJt,"HIT_R",105),Kt(WJt,"DEADZONE",12);
+ let $Jt=WJt;
+ const jJt=1e-5;
+ function VJt(t,i,s,e){
+ return t*e-i*s}
+ Vt(VJt,"det");
+ const KJt={
+ x:0,y:0}
+ ,zJt=[];
+ function qJt(t,i,s,e,n){
+ const h=zJt;
+ let r=0;
+ for(let a=0;
+ a<s;
+ a++){
+ const s=i[a],o=s.x-t.x,c=s.y-t.y,l=t.vx-s.vx,u=t.vy-s.vy,d=o*o+c*c,f=t.radius+s.radius,p=f*f;
+ let g,m,w,v;
+ if(d>p){
+ const t=l-e*o,i=u-e*c,s=t*t+i*i,n=t*o+i*c;
+ if(n<0&&n*n>p*s){
+ const n=Math.sqrt(s),h=n>jJt?t/n:0,r=n>jJt?i/n:0;
+ g=r,m=-h;
+ const o=f*e-n;
+ w=o*h,v=o*r}
+ else{
+ const s=Math.sqrt(d-p);
+ VJt(o,c,t,i)>0?(g=(o*s-c*f)/d,m=(o*f+c*s)/d):(g=-(o*s+c*f)/d,m=-(-o*f+c*s)/d);
+ const e=l*g+u*m;
+ w=e*g-l,v=e*m-u}
+ }
+ else{
+ const t=l-n*o,i=u-n*c,s=Math.sqrt(t*t+i*i),e=s>jJt?t/s:0,h=s>jJt?i/s:0;
+ g=h,m=-e;
+ const r=f*n-s;
+ w=r*e,v=r*h}
+ const b=YJt(h,r);
+ b.px=t.vx+.5*w,b.py=t.vy+.5*v,b.dx=g,b.dy=m,r++}
+ const o=JJt(h,r,t.maxSpeed,t.prefVx,t.prefVy,!1,KJt);
+ o<r&&QJt(h,r,o,t.maxSpeed,KJt),t.newVx=KJt.x,t.newVy=KJt.y}
+ function YJt(t,i){
+ let s=t[i];
+ return s||(s={
+ px:0,py:0,dx:0,dy:0}
+ ,t[i]=s),s}
+ function XJt(t,i,s,e,n,h,r){
+ const o=t[i],a=o.px*o.dx+o.py*o.dy,c=a*a+s*s-(o.px*o.px+o.py*o.py);
+ if(c<0)return!1;
+ const l=Math.sqrt(c);
+ let u=-a-l,d=-a+l;
+ for(let f=0;
+ f<i;
+ f++){
+ const i=t[f],s=VJt(o.dx,o.dy,i.dx,i.dy),e=VJt(i.dx,i.dy,o.px-i.px,o.py-i.py);
+ if(s<jJt&&s>-1e-5){
+ if(e<0)return!1;
+ continue}
+ const n=e/s;
+ if(s>=0?n<d&&(d=n):n>u&&(u=n),u>d)return!1}
+ if(h)e*o.dx+n*o.dy>0?(r.x=o.px+d*o.dx,r.y=o.py+d*o.dy):(r.x=o.px+u*o.dx,r.y=o.py+u*o.dy);
+ else{
+ const t=o.dx*(e-o.px)+o.dy*(n-o.py);
+ t<u?(r.x=o.px+u*o.dx,r.y=o.py+u*o.dy):t>d?(r.x=o.px+d*o.dx,r.y=o.py+d*o.dy):(r.x=o.px+t*o.dx,r.y=o.py+t*o.dy)}
+ return!0}
+ function JJt(t,i,s,e,n,h,r){
+ if(h)r.x=e*s,r.y=n*s;
+ else if(e*e+n*n>s*s){
+ const t=Math.sqrt(e*e+n*n);
+ r.x=e/t*s,r.y=n/t*s}
+ else r.x=e,r.y=n;
+ for(let o=0;
+ o<i;
+ o++){
+ const i=t[o];
+ if(VJt(i.dx,i.dy,i.px-r.x,i.py-r.y)>0){
+ const i=r.x,a=r.y;
+ if(!XJt(t,o,s,e,n,h,r))return r.x=i,r.y=a,o}
+ }
+ return i}
+ function QJt(t,i,s,e,n){
+ let h=0;
+ const r=[];
+ for(let o=s;
+ o<i;
+ o++){
+ const i=t[o];
+ if(VJt(i.dx,i.dy,i.px-n.x,i.py-n.y)>h){
+ r.length=0;
+ for(let e=0;
+ e<o;
+ e++){
+ const s=t[e],n=VJt(i.dx,i.dy,s.dx,s.dy),h={
+ px:0,py:0,dx:0,dy:0}
+ ;
+ if(n<jJt&&n>-1e-5){
+ if(i.dx*s.dx+i.dy*s.dy>0)continue;
+ h.px=.5*(i.px+s.px),h.py=.5*(i.py+s.py)}
+ else{
+ const t=VJt(s.dx,s.dy,i.px-s.px,i.py-s.py)/n;
+ h.px=i.px+t*i.dx,h.py=i.py+t*i.dy}
+ let o=s.dx-i.dx,a=s.dy-i.dy;
+ const c=Math.sqrt(o*o+a*a);
+ c>jJt&&(o/=c,a/=c),h.dx=o,h.dy=a,r.push(h)}
+ const s=n.x,a=n.y;
+ JJt(r,r.length,e,-i.dy,i.dx,!0,n)<r.length&&(n.x=s,n.y=a),h=VJt(i.dx,i.dy,i.px-n.x,i.py-n.y)}
+ }
+ }
+ Vt(qJt,"orcaComputeNewVelocity"),Vt(YJt,"getLine"),Vt(XJt,"linearProgram1"),Vt(JJt,"linearProgram2"),Vt(QJt,"linearProgram3");
+ const ZJt=class t extends Ge{
+ constructor(i,s={
+ }
+ ){
+ super(),Kt(this,"corpIndex"),Kt(this,"onDrop",null),Kt(this,"validate",null),Kt(this,"snap",null),Kt(this,"onDragStart",null),Kt(this,"onDragMove",null),Kt(this,"onDragEnd",null),Kt(this,"sprite"),Kt(this,"numText"),Kt(this,"iconBadge"),Kt(this,"iconHidden",!1),Kt(this,"dragging",!1),Kt(this,"lastValid",!0),Kt(this,"targetX",0),Kt(this,"targetY",0),this.corpIndex=i,this.sprite=new He(QA.getTexture("UI_Ekkorr","Icon_Flag_Green")),this.sprite.anchor.set(.5,1),this.sprite.scale.set(s.scale??t.SCALE),null!=s.tint&&(this.sprite.tint=s.tint),this.addChild(this.sprite),this.alpha=s.alpha??1,this.numText=new Hg({
+ text:String(i+1),style:{
+ fontSize:s.fontSize??15,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ }
+ ),this.numText.anchor.set(.5,.5),this.numText.position.set(0,.62*-this.sprite.height),this.addChild(this.numText),this.iconBadge=new He,this.iconBadge.anchor.set(.5,.5),this.iconBadge.visible=!1,this.addChild(this.iconBadge),s.iconKindNum&&this.setIconBadge(s.iconKindNum,s.iconSize??24),this.eventMode="static",this.cursor="pointer";
+ const e=this.sprite.width,n=this.sprite.height,h=s.hitPad??t.HIT_PAD;
+ this.hitArea=new Ri(-e/2-h,-n-h,e+2*h,n+2*h),this.on("pointerdown",this.onDown,this)}
+ get isDragging(){
+ return this.dragging}
+ updateFollow(t){
+ if(!t||!t.isAlive||t.removed)return this.visible=!1,void(this.eventMode="none");
+ this.visible=!0,this.eventMode=this.iconHidden?"none":"static",this.position.set(t.x,t.y)}
+ setIconHidden(t){
+ this.iconHidden=t,this.sprite.visible=!t,this.numText.visible=!t,t&&(this.iconBadge.visible=!1)}
+ updateFollowPoint(t,i,s){
+ if(!s)return this.visible=!1,void(this.eventMode="none");
+ this.visible=!0,this.eventMode="static",this.position.set(t,i)}
+ setIconBadge(t,i){
+ const s=wx.getInstance().getBookVO(t);
+ s&&(this.iconBadge.texture=QA.getTexture("UI_Ekkorr",`Hero${
+ s.base}
+ `),this.iconBadge.width=i,this.iconBadge.height=i,this.iconBadge.position.set(0,.62*-this.sprite.height),this.iconBadge.visible=!0,this.numText.visible=!1)}
+ onDown(t){
+ if(!this.visible)return;
+ this.dragging=!0,t.stopPropagation(),this.onDragStart&&this.onDragStart(this.corpIndex,this.x,this.y);
+ const i=VA.stage;
+ i&&(i.on("globalpointermove",this.onMove,this),i.on("pointerup",this.onUp,this),i.on("pointerupoutside",this.onUp,this)),this.moveTo(t)}
+ onMove(t){
+ this.dragging&&this.moveTo(t)}
+ startDragExternal(t,i){
+ if(!this.visible||this.dragging)return;
+ this.dragging=!0,this.onDragStart&&this.onDragStart(this.corpIndex,this.x,this.y);
+ const s=VA.stage;
+ s&&(s.on("globalpointermove",this.onMove,this),s.on("pointerup",this.onUp,this),s.on("pointerupoutside",this.onUp,this)),this.moveToGlobal(t,i)}
+ onUp(t){
+ if(!this.dragging)return;
+ if(this.dragging=!1,this.detachStageListeners(),this.onDragEnd&&this.onDragEnd(),!this.onDrop)return;
+ let i=this.targetX,s=this.targetY;
+ if(!this.lastValid&&this.snap){
+ const t=this.snap(i,s);
+ i=t.x,s=t.y}
+ this.onDrop(i,s)}
+ detachStageListeners(){
+ const t=VA.stage;
+ t&&(t.off("globalpointermove",this.onMove,this),t.off("pointerup",this.onUp,this),t.off("pointerupoutside",this.onUp,this))}
+ moveTo(t){
+ this.moveToGlobal(t.global.x,t.global.y)}
+ moveToGlobal(t,i){
+ if(!this.parent)return;
+ const s=this.parent.toLocal({
+ x:t,y:i}
+ );
+ this.targetX=s.x,this.targetY=s.y;
+ const e=!this.validate||this.validate(s.x,s.y);
+ this.lastValid=e,this.onDragMove&&this.onDragMove(s.x,s.y,e)}
+ dispose(){
+ this.detachStageListeners(),this.dragging=!1,this.removeAllListeners(),this.removeFromParent(),this.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Vt(ZJt,"CorpFlag"),Kt(ZJt,"SCALE",1.3),Kt(ZJt,"HIT_PAD",18);
+ let tQt=ZJt;
+ const iQt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"line",new Lf),Kt(this,"flag"),Kt(this,"numText"),Kt(this,"heroIcon",new Y2),Kt(this,"soldierIcon",new Y2),Kt(this,"originX",0),Kt(this,"originY",0),this.visible=!1,this.eventMode="none",this.addChild(this.line),this.flag=new He(QA.getTexture("UI_Ekkorr","Icon_Flag_Green")),this.flag.anchor.set(.5,1),this.flag.scale.set(t.FLAG_SCALE),this.flag.alpha=t.FLAG_ALPHA,this.addChild(this.flag),this.numText=new Hg({
+ text:"1",style:{
+ fontSize:15,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ }
+ ),this.numText.anchor.set(.5,.5),this.addChild(this.numText),this.heroIcon.scale.set(t.ICON_SCALE),this.soldierIcon.scale.set(t.ICON_SCALE),this.addChild(this.heroIcon),this.addChild(this.soldierIcon)}
+ begin(t,i,s,e,n){
+ this.numText.text=String(t+1),this.heroIcon.visible=i>0,this.soldierIcon.visible=s>0,i>0&&this.heroIcon.setDataWithKindNum(i),s>0&&this.soldierIcon.setDataWithKindNum(s),this.originX=e,this.originY=n,this.visible=!0}
+ update(t,i,s){
+ this.flag.texture=QA.getTexture("UI_Ekkorr",s?"Icon_Flag_Green":"Icon_Flag_Red"),this.flag.position.set(t,i),this.numText.position.set(t,i-.62*this.flag.height);
+ const e=this.heroIcon.visible,n=this.soldierIcon.visible,h=e?this.heroIcon.width:0,r=n?this.soldierIcon.width:0,o=e&&n?4:0,a=i-this.flag.height-6;
+ let c=t-(h+r+o)/2;
+ e&&(this.heroIcon.position.set(c,a-this.heroIcon.height),c+=h+o),n&&this.soldierIcon.position.set(c,a-this.soldierIcon.height),this.drawDashedLine(this.originX,this.originY,t,i,s)}
+ hide(){
+ this.visible=!1,this.line.clear()}
+ drawDashedLine(i,s,e,n,h){
+ this.line.clear();
+ const r=e-i,o=n-s,a=Math.sqrt(r*r+o*o);
+ if(a<1)return;
+ const c=r/a,l=o/a,u=t.DASH+t.GAP;
+ for(let d=0;
+ d<a;
+ d+=u){
+ const e=Math.min(d+t.DASH,a);
+ this.line.moveTo(i+c*d,s+l*d),this.line.lineTo(i+c*e,s+l*e)}
+ this.line.stroke({
+ width:4,color:h?4513109:14500932,alpha:.9}
+ )}
+ dispose(){
+ this.removeFromParent(),this.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Vt(iQt,"CorpFlagGhost"),Kt(iQt,"FLAG_SCALE",1.3),Kt(iQt,"FLAG_ALPHA",.6),Kt(iQt,"ICON_SCALE",.5),Kt(iQt,"DASH",12),Kt(iQt,"GAP",8);
+ let sQt=iQt;
+ const eQt=class t{
+ constructor(t){
+ Kt(this,"dashMultProvider",null),Kt(this,"corpUnits"),Kt(this,"corpHero"),Kt(this,"corpHeroKind"),Kt(this,"corpSoldierKind"),Kt(this,"commandFlow"),Kt(this,"heroFlags",[]),Kt(this,"flagLayer",null),Kt(this,"ghost",null),Kt(this,"fieldW",0),Kt(this,"fieldH",0),this.corpCount=t,this.corpUnits=Array.from({
+ length:t}
+ ,()=>[]),this.corpHero=Array.from({
+ length:t}
+ ,()=>null),this.corpHeroKind=Array.from({
+ length:t}
+ ,()=>0),this.corpSoldierKind=Array.from({
+ length:t}
+ ,()=>0),this.commandFlow=Array.from({
+ length:t}
+ ,()=>null)}
+ setDashMultProvider(t){
+ this.dashMultProvider=t}
+ reset(t,i){
+ this.destroy();
+ for(let s=0;
+ s<this.corpCount;
+ s++)this.corpUnits[s]=[],this.corpHero[s]=null,this.corpHeroKind[s]=0,this.corpSoldierKind[s]=0;
+ this.fieldW=t,this.fieldH=i}
+ register(t,i,s){
+ t<0||t>=this.corpCount||(this.corpUnits[t].push(i),s?(this.corpHero[t]=i,this.corpHeroKind[t]=i.kindNum):0===this.corpSoldierKind[t]&&(this.corpSoldierKind[t]=i.kindNum))}
+ createFlags(){
+ this.destroyFlagsOnly();
+ const t=new Ge;
+ t.label="CorpFlagLayer",HB.getInstance().addChild(t),this.flagLayer=t;
+ for(let i=0;
+ i<this.corpCount;
+ i++){
+ const s=this.corpHero[i];
+ if(!s)continue;
+ const e=new tQt(i,{
+ iconKindNum:this.corpSoldierKind[i],iconSize:28}
+ );
+ this.bindFlagCallbacks(e,i),e.setIconHidden(!0),e.position.set(s.x,s.y),t.addChild(e),this.heroFlags.push(e)}
+ this.ghost=new sQt,t.addChild(this.ghost)}
+ bringToTop(){
+ const t=this.flagLayer;
+ t&&t.parent&&t.parent.addChild(t)}
+ startCorpDragAt(t,i,s){
+ const e=this.heroFlags.find(i=>i.corpIndex===t);
+ return!!e&&(e.startDragExternal(i,s),e.isDragging)}
+ update(){
+ for(const t of this.heroFlags)t.updateFollow(this.corpHero[t.corpIndex])}
+ accumulateAliveHeroes(t){
+ let i=0;
+ for(const s of this.corpHero)s&&s.isAlive&&!s.removed&&(t(s.x,s.y),i++);
+ return i}
+ isDragging(){
+ for(const t of this.heroFlags)if(t.isDragging)return!0;
+ return!1}
+ getCorpAnchor(t){
+ if(t<0||t>=this.corpCount)return null;
+ const i=this.corpHero[t];
+ if(i&&i.isAlive&&!i.removed)return{
+ x:i.x,y:i.y}
+ ;
+ let s=0,e=0,n=0;
+ for(const h of this.corpUnits[t])h.isAlive&&!h.removed&&(s+=h.x,e+=h.y,n++);
+ return n>0?{
+ x:s/n,y:e/n}
+ :null}
+ isWaypointValid(i,s){
+ const e=t.EDGE_MARGIN;
+ return!(i<e||i>this.fieldW-e||s<e||s>this.fieldH-e||UQ.enabled&&UQ.isBlocked(i,s))}
+ snapWaypoint(i,s){
+ const e=t.EDGE_MARGIN;
+ let n=Math.max(e,Math.min(this.fieldW-e,i)),h=Math.max(e,Math.min(this.fieldH-e,s));
+ if(UQ.enabled&&UQ.isBlocked(n,h)){
+ const t=UQ.snapToNearestPassable(n,h,240);
+ n=t.x,h=t.y}
+ return{
+ x:n,y:h}
+ }
+ issueCorpWaypoint(i,s,e){
+ var n;
+ const h=this.corpUnits[i];
+ if(!h||0===h.length)return;
+ const r=[];
+ for(const t of h)t.isAlive&&!t.removed&&r.push(t);
+ if(0===r.length)return;
+ const o=this.snapWaypoint(s,e);
+ this.disposeCommandFlow(i);
+ let a=null;
+ if(UQ.enabled){
+ const s=t.COMMAND_GOAL_SIZE;
+ a=new dJt,a.build(this.fieldW,this.fieldH,{
+ x:o.x-s/2,y:o.y-s/2,w:s,h:s}
+ ),this.commandFlow[i]=a}
+ const c=t.COMMAND_SPEED_MULT*((null==(n=this.dashMultProvider)?void 0:n.call(this,i))??1);
+ for(const l of r)l.target&&(l.target.removeBlockedEnemy(l),l.target=null),l.beginCommandMove(o.x,o.y,a,c,t.COMMAND_WAIT_FRAMES)}
+ disposeCommandFlow(t){
+ const i=this.commandFlow[t];
+ i&&(i.dispose(),this.commandFlow[t]=null)}
+ bindFlagCallbacks(t,i){
+ t.validate=(t,i)=>this.isWaypointValid(t,i),t.snap=(t,i)=>this.snapWaypoint(t,i),t.onDrop=(t,s)=>this.issueCorpWaypoint(i,t,s),t.onDragStart=(t,i,s)=>{
+ var e;
+ return null==(e=this.ghost)?void 0:e.begin(t,this.corpHeroKind[t],this.corpSoldierKind[t],i,s)}
+ ,t.onDragMove=(t,i,s)=>{
+ var e;
+ return null==(e=this.ghost)?void 0:e.update(t,i,s)}
+ ,t.onDragEnd=()=>{
+ var t;
+ return null==(t=this.ghost)?void 0:t.hide()}
+ }
+ destroyFlagsOnly(){
+ for(const t of this.heroFlags)t.dispose();
+ this.heroFlags.length=0,this.ghost=null,this.flagLayer&&(this.flagLayer.removeFromParent(),this.flagLayer.destroy({
+ children:!0}
+ ),this.flagLayer=null)}
+ destroy(){
+ this.destroyFlagsOnly();
+ for(let t=0;
+ t<this.corpCount;
+ t++)this.disposeCommandFlow(t)}
+ }
+ ;
+ Vt(eQt,"CorpFlagCommander"),Kt(eQt,"COMMAND_SPEED_MULT",1.5),Kt(eQt,"COMMAND_WAIT_FRAMES",60),Kt(eQt,"COMMAND_GOAL_SIZE",64),Kt(eQt,"EDGE_MARGIN",8);
+ let nQt=eQt;
+ const hQt=class t{
+ constructor(t){
+ Kt(this,"opt"),Kt(this,"mode","follow"),Kt(this,"target","center"),Kt(this,"panCatcher",null),Kt(this,"panning",!1),Kt(this,"lastPanX",0),Kt(this,"lastPanY",0),Kt(this,"freeIdleFrames",0),this.opt=t}
+ setup(){
+ this.createPanCatcher(),this.setTarget("center"),this.snapToTarget()}
+ update(){
+ if(this.opt.isFlagDragging())return;
+ if(this.panning)return;
+ if("free"===this.mode){
+ if(++this.freeIdleFrames<t.FREE_RETURN_DELAY)return;
+ this.mode="follow"}
+ const i=this.opt.getAnchor(this.target);
+ if(!i)return;
+ const s=this.clampOffset(i.x,i.y),e=HB.getInstance();
+ e.x+=(s.x-e.x)*t.FOLLOW_LERP,e.y+=(s.y-e.y)*t.FOLLOW_LERP}
+ setTarget(t){
+ this.mode="follow",this.target=t}
+ snapToTarget(){
+ const t=this.opt.getAnchor(this.target);
+ if(!t)return;
+ const i=this.clampOffset(t.x,t.y),s=HB.getInstance();
+ s.x=i.x,s.y=i.y}
+ clampOffset(t,i){
+ var s,e;
+ const n=VA.stageWidth||640,h=VA.stageHeight||1130,r=(null==(e=(s=this.opt).getViewBottomY)?void 0:e.call(s))??h,o=n-this.opt.fieldW,a=h-this.opt.fieldH;
+ let c=n/2-t,l=this.opt.fixedBandY?this.fixedBandOffsetY(r):r/2-i;
+ return c=Math.min(0,Math.max(o,c)),l=Math.min(0,Math.max(a,l)),{
+ x:c,y:l}
+ }
+ fixedBandOffsetY(t){
+ const i=this.opt.fixedBandY;
+ return(t-i.height)/2-i.top}
+ createPanCatcher(){
+ const t=new Lf;
+ t.label="CamPanCatcher",t.hitArea=new Ri(0,0,this.opt.fieldW,this.opt.fieldH),t.eventMode="static",t.on("pointerdown",this.onPanDown,this),HB.getInstance().addChild(t),this.panCatcher=t}
+ onPanDown(t){
+ if(this.opt.isFlagDragging())return;
+ if(this.opt.onFieldDown&&this.opt.onFieldDown(t.global.x,t.global.y))return;
+ this.panning=!0,this.mode="free",this.freeIdleFrames=0,this.lastPanX=t.global.x,this.lastPanY=t.global.y;
+ const i=VA.stage;
+ i&&(i.on("globalpointermove",this.onPanMove,this),i.on("pointerup",this.onPanUp,this),i.on("pointerupoutside",this.onPanUp,this))}
+ onPanMove(t){
+ if(!this.panning)return;
+ const i=t.global.x-this.lastPanX,s=t.global.y-this.lastPanY;
+ this.lastPanX=t.global.x,this.lastPanY=t.global.y;
+ const e=VA.stageWidth||640,n=VA.stageHeight||1130,h=e-this.opt.fieldW,r=n-this.opt.fieldH,o=HB.getInstance();
+ o.x=Math.min(0,Math.max(h,o.x+i)),this.opt.fixedBandY||(o.y=Math.min(0,Math.max(r,o.y+s)))}
+ onPanUp(t){
+ this.panning&&(this.panning=!1,this.detachPanListeners())}
+ detachPanListeners(){
+ const t=VA.stage;
+ t&&(t.off("globalpointermove",this.onPanMove,this),t.off("pointerup",this.onPanUp,this),t.off("pointerupoutside",this.onPanUp,this))}
+ destroy(){
+ this.detachPanListeners(),this.panning=!1,this.panCatcher&&(this.panCatcher.off("pointerdown",this.onPanDown,this),this.panCatcher.removeFromParent(),this.panCatcher.destroy(),this.panCatcher=null)}
+ }
+ ;
+ Vt(hQt,"CorpCameraController"),Kt(hQt,"FOLLOW_LERP",.05),Kt(hQt,"FREE_RETURN_DELAY",150);
+ let rQt=hQt;
+ const oQt=class t{
+ constructor(i,s,e,n){
+ Kt(this,"root"),Kt(this,"inputZone"),Kt(this,"arrowLayer"),Kt(this,"spine",null),Kt(this,"controlBone",null),Kt(this,"arrowTexture",null),Kt(this,"aim",0),Kt(this,"baseX",0),Kt(this,"baseY",0),Kt(this,"fieldW",0),Kt(this,"fieldH",0),Kt(this,"dragging",!1),Kt(this,"down",!1),Kt(this,"phase","idle"),Kt(this,"cooldownTimer",t.GAUGE_FULL_FRAMES),Kt(this,"wasReady",!1),Kt(this,"readyFlash",0),Kt(this,"readyPop",0),Kt(this,"rippleFrame",0),Kt(this,"gaugeFullFrames",t.GAUGE_FULL_FRAMES),Kt(this,"gauge",null),Kt(this,"arrows",[]),Kt(this,"hitCheck",null),Kt(this,"onFired",null),Kt(this,"chargeRateMult",1),Kt(this,"onShotFailed",null),Kt(this,"hitZoneDebug",null),this.baseX=i,this.baseY=s,this.fieldW=e,this.fieldH=n;
+ const h=HB.getInstance();
+ this.arrowLayer=new Ge,this.arrowLayer.label="RaidCrossbowArrows",this.arrowLayer.eventMode="none",h.addChild(this.arrowLayer),this.root=new Ge,this.root.label="RaidCrossbow",this.root.position.set(this.baseX,this.baseY),this.root.eventMode="none",rB.getInstance().addChild(this.root),this.inputZone=new Ge,this.inputZone.position.set(this.baseX,this.baseY),this.inputZone.eventMode="static",this.inputZone.cursor="pointer",this.inputZone.on("pointerdown",this.onDown,this),h.addChild(this.inputZone),this.applyHitArea(),this.gauge=new Lf,this.gauge.eventMode="none",this.gauge.position.set(-60,t.GAUGE_Y),this.root.addChild(this.gauge),this.loadSpine()}
+ async loadSpine(){
+ const i=YA.getBase(),s=t.SPINE_KEY,e=`weapon_${
+ s}
+ _json`,n=`weapon_${
+ s}
+ _atlas`;
+ try{
+ rd.add({
+ alias:e,src:`${
+ i}
+ assets/spines/${
+ s}
+ .json`}
+ ),rd.add({
+ alias:n,src:`${
+ i}
+ assets/spines/${
+ s}
+ .atlas`}
+ )}
+ catch{
+ }
+ try{
+ await rd.load([e,n])}
+ catch(Xst){
+ return}
+ const h=zJ.from({
+ skeleton:e,atlas:n}
+ );
+ h.scale.set(t.SCALE),h.autoUpdate=!0,h.rotation=this.down?Math.PI:0,this.spine=h,this.controlBone=h.skeleton.findBone("control"),h.beforeUpdateWorldTransforms=()=>{
+ if(this.controlBone&&(this.controlBone.rotation=t.CONTROL_BASE_DEG+this.aim*t.RAD2DEG*t.AIM_SIGN*(this.down?-1:1)),"charging"===this.phase){
+ const i=h.state.getCurrent(0);
+ i&&i.trackTime>=t.CHARGE_MAX_TIME&&(i.timeScale=0)}
+ }
+ ,h.state.addListener({
+ event:Vt((t,i)=>{
+ "hit"===i.data.name&&"firing"===this.phase&&(this.spawnArrow(),this.phase="recoil")}
+ ,"event"),complete:Vt(t=>{
+ var i;
+ "shot"===(null==(i=t.animation)?void 0:i.name)&&this.onShotComplete()}
+ ,"complete")}
+ ),this.root.addChildAt(h,0),this.loadArrowTexture(`${
+ i}
+ assets/spines/${
+ s}
+ .png`)}
+ async loadArrowTexture(i){
+ try{
+ const s=await rd.load(i),e=t.ARROW_FRAME;
+ this.arrowTexture=new is({
+ source:s.source,frame:new Ri(e.x,e.y,e.w,e.h)}
+ )}
+ catch(Xst){
+ }
+ }
+ onDown(i){
+ if("idle"!==this.phase||!this.spine)return;
+ if(this.cooldownTimer<this.gaugeFullFrames)return;
+ i.stopPropagation(),this.dragging=!0,this.aim=this.aimToward(i.global.x,i.global.y),this.phase="charging",this.spine.state.setAnimation(0,"shot",!1).timeScale=t.CHARGE_TIME_SCALE;
+ const s=VA.stage;
+ s&&(s.on("globalpointermove",this.onMove,this),s.on("pointerup",this.onUp,this),s.on("pointerupoutside",this.onUp,this))}
+ onMove(t){
+ this.dragging&&(this.aim=this.aimToward(t.global.x,t.global.y))}
+ aimToward(i,s){
+ const e=this.root.getGlobalPosition(),n=i-e.x,h=s-e.y,r=this.down?Math.atan2(n,h):Math.atan2(n,-h);
+ return Math.max(-t.AIM_MAX_RAD,Math.min(t.AIM_MAX_RAD,r))}
+ onUp(i){
+ var s;
+ if(this.dragging&&(this.dragging=!1,this.detachStageListeners(),"charging"===this.phase)){
+ this.phase="firing";
+ const i=null==(s=this.spine)?void 0:s.state.getCurrent(0);
+ i&&(i.timeScale=t.CHARGE_TIME_SCALE)}
+ }
+ detachStageListeners(){
+ const t=VA.stage;
+ t&&(t.off("globalpointermove",this.onMove,this),t.off("pointerup",this.onUp,this),t.off("pointerupoutside",this.onUp,this))}
+ spawnArrow(){
+ var i;
+ if(!this.arrowTexture)return;
+ const s=Math.sin(this.aim),e=this.down?Math.cos(this.aim):-Math.cos(this.aim),n=new He(this.arrowTexture);
+ n.anchor.set(.5,.5),n.scale.set(t.SCALE),n.position.set(this.baseX+s*t.ARROW_SPAWN_OFFSET,this.baseY+e*t.ARROW_SPAWN_OFFSET),n.rotation=this.down?Math.PI-this.aim:this.aim,this.arrowLayer.addChild(n),this.arrows.push({
+ sp:n,vx:s*t.ARROW_SPEED,vy:e*t.ARROW_SPEED,scored:!1}
+ ),this.cooldownTimer=0,null==(i=this.onFired)||i.call(this)}
+ drawGauge(){
+ if(!this.gauge)return;
+ const i=Math.min(1,this.cooldownTimer/this.gaugeFullFrames),s=i>=1,e=t.GAUGE_W,n=t.GAUGE_H,h=n/2,r=this.gauge;
+ s&&!this.wasReady&&(this.readyFlash=t.READY_FLASH_FRAMES,this.readyPop=t.READY_POP_FRAMES),this.wasReady=s,r.clear(),r.roundRect(0,0,e,n,h).fill({
+ color:1710618,alpha:.85}
+ );
+ const o=i*e;
+ if(o>.5&&r.roundRect(0,0,o,n,h).fill({
+ color:s?3855962:16757051}
+ ),r.roundRect(0,0,e,n,h).stroke({
+ width:2,color:0,alpha:.8}
+ ),s){
+ this.rippleFrame++;
+ const i=this.rippleFrame%t.RIPPLE_PERIOD/t.RIPPLE_PERIOD,s=10*(1-(1-i)*(1-i));
+ r.roundRect(-s,-s,e+2*s,n+2*s,h+s).stroke({
+ width:3,color:16771450,alpha:.7*(1-i)}
+ )}
+ this.readyFlash>0&&(r.roundRect(0,0,e,n,h).fill({
+ color:16777215,alpha:this.readyFlash/t.READY_FLASH_FRAMES*.8}
+ ),this.readyFlash--),this.readyPop>0&&this.readyPop--,this.root.scale.set(1+this.readyPop/t.READY_POP_FRAMES*.15)}
+ onShotComplete(){
+ this.phase="idle",this.spine&&this.spine.state.clearTrack(0)}
+ setHitCheck(t){
+ this.hitCheck=t}
+ setOnFired(t){
+ this.onFired=t}
+ addChargePct(t){
+ t<=0||(this.cooldownTimer=Math.min(this.gaugeFullFrames,this.cooldownTimer+this.gaugeFullFrames*t/100))}
+ refundChargePct(t){
+ this.cooldownTimer=Math.max(this.cooldownTimer,this.gaugeFullFrames*Math.min(100,t)/100)}
+ setGaugeFullSeconds(t){
+ this.gaugeFullFrames=Math.max(60,Math.round(60*t)),this.cooldownTimer=Math.min(this.cooldownTimer,this.gaugeFullFrames)}
+ setChargeRateMult(t){
+ this.chargeRateMult=Math.max(.1,t)}
+ setOnShotFailed(t){
+ this.onShotFailed=t}
+ applyHitArea(){
+ const i=this.down?-80:-50,s=t.HIT_UP+t.HIT_DOWN,e=2*t.HIT_HALF_W;
+ this.inputZone.hitArea=new Ri(-72,i,e,s)}
+ setFacingDown(t){
+ this.down=t,this.spine&&(this.spine.rotation=t?Math.PI:0),this.applyHitArea()}
+ setChargeSeconds(t){
+ const i=Math.round(60*t);
+ this.cooldownTimer=Math.max(0,Math.min(this.gaugeFullFrames,i))}
+ update(){
+ var t;
+ if(this.cooldownTimer<this.gaugeFullFrames&&(this.cooldownTimer=Math.min(this.gaugeFullFrames,this.cooldownTimer+this.chargeRateMult)),this.drawGauge(),0===this.arrows.length)return;
+ const i=200;
+ for(let s=this.arrows.length-1;
+ s>=0;
+ s--){
+ const e=this.arrows[s],n=e.sp.x,h=e.sp.y;
+ e.sp.x+=e.vx,e.sp.y+=e.vy,this.hitCheck&&!e.scored&&this.hitCheck(n,h,e.sp.x,e.sp.y)&&(e.scored=!0),(e.sp.y<-i||e.sp.y>this.fieldH+i||e.sp.x<-i||e.sp.x>this.fieldW+i)&&(e.scored||null==(t=this.onShotFailed)||t.call(this),e.sp.removeFromParent(),e.sp.destroy(),this.arrows.splice(s,1))}
+ }
+ destroy(){
+ this.detachStageListeners(),this.dragging=!1;
+ for(const t of this.arrows)t.sp.removeFromParent(),t.sp.destroy();
+ this.arrows.length=0,this.inputZone.removeAllListeners(),this.inputZone.removeFromParent(),this.inputZone.destroy(),this.root.removeFromParent(),this.root.destroy({
+ children:!0}
+ ),this.arrowLayer.removeFromParent(),this.arrowLayer.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Vt(oQt,"RaidCrossbow"),Kt(oQt,"SPINE_KEY","raids/weapon/crossbow_tank"),Kt(oQt,"AIM_MAX_RAD",60*Math.PI/180),Kt(oQt,"CONTROL_BASE_DEG",0),Kt(oQt,"AIM_SIGN",-1),Kt(oQt,"RAD2DEG",180/Math.PI),Kt(oQt,"SCALE",1),Kt(oQt,"HIT_HALF_W",72),Kt(oQt,"HIT_UP",50),Kt(oQt,"HIT_DOWN",80),Kt(oQt,"DEBUG_SHOW_HIT_ZONE",!1),Kt(oQt,"ARROW_SPEED",26),Kt(oQt,"ARROW_SPAWN_OFFSET",60),Kt(oQt,"CHARGE_MAX_TIME",2.6),Kt(oQt,"GAUGE_FULL_SEC",40),Kt(oQt,"GAUGE_FULL_FRAMES",60*oQt.GAUGE_FULL_SEC),Kt(oQt,"CHARGE_TIME_SCALE",2),Kt(oQt,"GAUGE_W",120),Kt(oQt,"GAUGE_H",12),Kt(oQt,"GAUGE_Y",50),Kt(oQt,"ARROW_FRAME",{
+ x:48,y:168,w:28,h:111}
+ ),Kt(oQt,"READY_FLASH_FRAMES",18),Kt(oQt,"READY_POP_FRAMES",9),Kt(oQt,"RIPPLE_PERIOD",48);
+ let aQt=oQt;
+ const cQt=[[1,"Guardian","수호의 휘장","TANK","corp1","A",7,30,61,60,28,5],[2,"Assault","맹공의 휘장","DEALER","corp2","B",1,8,62,20,32,10],[3,"Mercy","치유의 휘장","HEALER","corp3","C",2,10,63,4,46,10],[4,"Hex","마력의 휘장","SUPPORT","corp4","D",15,8,64,18,38,12],[5,"Rally","돌격의 휘장","BREAKER","corp5","E",31,.01,65,20,42,8],[6,"Snipe","저격의 휘장","CROSSBOW","crossbow","F",45,10,0,0,0,0]].map(t=>({
+ kindNum:t[0],className:t[1],name:t[2],role:t[3],slot:t[4],runeType:t[5],pSkill:t[6],pValue:t[7],aSkill:t[8],aValue:t[9],aCool:t[10],aDur:t[11]}
+ )),lQt=[[1,"atkDmg","STAT","RAID","CORP","multi","2|5",1,2,"공격력 증가","Y"],[2,"maxHp","STAT","RAID","CORP","multi","1|2|3|4|5",1,1,"최대 HP 증가","Y"],[3,"defense","STAT","RAID","CORP","multi","1|3|4",1,0,"방어력 증가","Y"],[4,"atkSpd","STAT","RAID","CORP","multi","2|4|5",1,4,"공격속도 증가","Y"],[5,"moveSpd","STAT","RAID","CORP","multi","1|2|5",1,0,"이동속도 증가","Y"],[6,"atkRange","STAT","RAID","CORP","multi","2|4",1,0,"공격거리 증가","Y"],[7,"aggroGen","STAT","RAID","CORP","multi","1",1,0,"어그로 생성량 증가","Y"],[8,"aggroDown","STAT","RAID","CORP","multi","2|3|4|5",1,0,"어그로 생성량 감소","Y"],[9,"dmgTaken","STAT","RAID","CORP","multi","1|3",1,0,"받는 피해 감소","Y"],[10,"critRate","STAT","RAID","CORP","add","2|5",1,0,"치명타 확률 증가","Y"],[11,"critDmg","STAT","RAID","CORP","add","2|5",2,0,"치명타 피해 증가","Y"],[12,"lifeSteal","STAT","RAID","CORP","add","2",3,0,"가한 피해의 일부 HP 흡수","Y"],[13,"healCycle","STAT","RAID","CORP","add","1|3",1,0,"5초마다 군단 HP 회복","Y"],[14,"healPower","STAT","RAID","CORP","add","3",1,3,"회복량 증폭","Y"],[15,"manaGain","STAT","RAID","CORP","multi","3|4",1,0,"마나 회복 속도 증가","Y"],[16,"debuffTime","STAT","RAID","CORP","multi","4",1,0,"거는 디버프 지속시간 증가","Y"],[17,"thorns","STAT","RAID","CORP","add","1",1,0,"피격 시 공격력 비례 반격","Y"],[21,"resFreeze","RESIST","RAID","CORP","add","3|4",1,0,"빙결 시간 감소 (6등급 면역)","Y"],[22,"resStun","RESIST","RAID","CORP","add","1|2|3|5",1,0,"기절 시간 감소 (6등급 면역)","Y"],[23,"resKnockback","RESIST","RAID","CORP","add","1|2",1,0,"넉백 감소 (6등급 면역)","Y"],[24,"resBlow","RESIST","RAID","CORP","add","1|2|3|5",1,0,"블로우 감소 (6등급 면역)","Y"],[31,"staminaHit","GIMMICK","RAID","BOSS","add","4|5",3,5,"타격당 보스 기력 추가 소진","Y"],[32,"exhaustDmg","GIMMICK","RAID","CORP","add","2|5",3,0,"그로기 중 딜 증가","Y"],[33,"exhaustTime","GIMMICK","RAID","BOSS","add","4|5|6",4,0,"그로기 지속시간 증가","Y"],[34,"weakBonus","GIMMICK","RAID","CORP","add","2|4",3,0,"약점 노출 창 동안 딜 증가","Y"],[35,"activeCool","GIMMICK","RAID","SELF","add","1|2|3|4|5|6",1,0,"이 휘장 액티브 쿨다운 감소","Y"],[36,"activeDur","GIMMICK","RAID","SELF","add","1|3|4",1,0,"이 휘장 액티브 지속시간 증가","Y"],[37,"activePower","GIMMICK","RAID","SELF","add","2|3|4|5|6",3,0,"이 휘장 액티브 위력 증폭","Y"],[38,"dashSpeed","GIMMICK","RAID","CORP","add","1",5,0,"군단 이동 명령 대시 속도 증가 (일반 이속과 별개)","Y"],[41,"crossbowDmg","CROSSBOW","RAID","CROSSBOW","add","6",1,0,"석궁 데미지 증가","Y"],[42,"weakpointWound","CROSSBOW","RAID","BOSS","add","6",1,0,"상처 가르기 강화 — 보스 받는 피해 증가 추가","Y"],[43,"reloadSpd","CROSSBOW","RAID","CROSSBOW","add","6",1,0,"석궁 에너지 충전 속도 증가","Y"],[44,"chargeBonus","CROSSBOW","RAID","CROSSBOW","add","6",2,0,"전투 시작·발사 후 석궁 에너지 +N%p","Y"],[45,"weakWindow","CROSSBOW","RAID","CROSSBOW","add","6",3,0,"약점 노출 창 지속시간 증가","Y"],[46,"missRefund","CROSSBOW","RAID","CROSSBOW","add","6",1,0,"작살 실패 시(인터럽트 실패) 에너지 N%까지 충전","Y"],[47,"critArrow","CROSSBOW","RAID","CROSSBOW","add","6",2,0,"작살 치명타 확률","Y"],[49,"exhaustArrow","CROSSBOW","RAID","CROSSBOW","add","6",2,0,"그로기 보스에게 작살 데미지 증가","Y"],[51,"tankReload","CROSSBOW","RAID","CROSSBOW","add","6",4,0,"{
+ v}
+ 단계 — 2호 작살차 발사 주기 단축 (60초 → 45초)","N"],[52,"multiShot","CROSSBOW","RAID","CROSSBOW","add","6",5,0,"2연발 — 두 번째 작살 자동 발사(위력 %)","Y"],[53,"interruptExtra","CROSSBOW","RAID","CROSSBOW","add","6",4,0,"인터럽트 성공 시 디버프 1개 추가 부여","N"],[56,"sunderArrow","CROSSBOW","RAID","BOSS","add","6",3,0,"약점 피격 시 보스 방어력 감소(5초)","Y"],[61,"taunt","ACTIVE","RAID_ACTIVE","BOSS","add","1",0,0,"도발 — {
+ dur}
+ 초 동안 보스의 공격을 이 군단으로 강제하고, 어그로 생성량을 {
+ v}
+ % 올린다","Y"],[62,"frenzy","ACTIVE","RAID_ACTIVE","CORP","add","2",0,0,"폭딜 — {
+ dur}
+ 초 동안 군단 영웅과 병사의 공격력·공격속도를 {
+ v}
+ % 올리고, 어그로를 20% 줄인다","Y"],[63,"massHeal","ACTIVE","RAID_ACTIVE","RAID","add","3",0,0,"광역 치유 — {
+ dur}
+ 초 동안 매초 전 군단의 HP를 {
+ v}
+ % 회복한다","Y"],[64,"weakenBoss","ACTIVE","RAID_ACTIVE","BOSS","add","4",0,0,"약화 — {
+ dur}
+ 초 동안 보스의 방어력을 {
+ v}
+ %, 공격속도를 그 절반만큼 낮춘다","Y"],[65,"allOutAttack","ACTIVE","RAID_ACTIVE","RAID","add","5",0,0,"총공격 — {
+ dur}
+ 초 동안 모든 군단의 공격력을 {
+ v}
+ % 올린다","Y"],[71,"tauntArmorBreak","ACTIVE_MOD","RAID","BOSS","add","1",4,0,"도발 시 보스 방어력 감소(10초)","Y"],[72,"tauntShield","ACTIVE_MOD","RAID","RAID","add","1",4,0,"도발 시작 시 아군 전체 받는 피해 감소","Y"],[73,"tauntRecover","ACTIVE_MOD","RAID","CORP","add","1",5,0,"도발 종료 시 군단 HP 회복","Y"],[75,"frenzyCrit","ACTIVE_MOD","RAID","CORP","add","2",4,0,"폭딜 중 치명타 확률 증가","Y"],[76,"healCleanse","ACTIVE_MOD","RAID","RAID","add","3",4,0,"광역힐 시작 시 아군 디버프 정화","N"],[77,"healShield","ACTIVE_MOD","RAID","RAID","add","3",5,0,"광역힐 종료 시 아군 전체 받는 피해 감소(4초)","Y"],[78,"weakenAmplify","ACTIVE_MOD","RAID","BOSS","add","4",4,0,"약화 중 보스 받는 피해 증가 추가","Y"],[79,"weakenMana","ACTIVE_MOD","RAID","RAID","add","4",4,0,"약화 지속 중 전 군단 마나 회복 증가","Y"],[80,"allOutHaste","ACTIVE_MOD","RAID","RAID","add","5",5,0,"총공격 중 전 군단 공격속도 증가","Y"],[82,"weakpointStun","CROSSBOW","RAID","BOSS","add","6",4,0,"그로기 지속 증가(초)","N"],[83,"woundLinger","CROSSBOW","RAID","BOSS","add","6",5,0,"상처 가르기 지속시간 증가(초)","N"],[84,"allOutExpose","ACTIVE_MOD","RAID","BOSS","add","5",5,0,"총공격 중 보스 받는 피해 증가","Y"],[91,"comboBleed","PROC","RAID_PROC","BOSS","add","5",5,0,"누적 N타마다 출혈 — 스택당 보스 받는 피해 증가(10초)","Y"],[92,"comboBreak","PROC","RAID_PROC","BOSS","add","5",5,0,"누적 N타마다 방어력 감소 스택","Y"],[93,"onInterrupt","PROC","RAID_PROC","RAID","add","6",5,0,"인터럽트 성공 시 전 군단 공격력 버프","Y"],[94,"onExhaust","PROC","RAID_PROC","CORP","add","2|5",5,0,"그로기 진입 시 이 군단 공속 폭증","Y"],[95,"onHpLow","PROC","RAID_PROC","CORP","add","1|3",5,0,"군단 HP 20% 최초 붕괴 시 받는 피해 감소(8초, 1회)","Y"],[101,"pulseHealOne","PULSE","RAID_PULSE","RAID","add","3",2,0,"1초마다 아군 영웅 1명 랜덤 HP 회복","Y"],[102,"pulseHealWide","PULSE","RAID_PULSE","RAID","add","3",3,0,"3초마다 아군 영웅 4명 랜덤 HP 회복","Y"],[103,"pulseSoldierHeal","PULSE","RAID_PULSE","RAID","add","3",3,0,"2초마다 아군 병사 8명 랜덤 HP 회복","Y"],[104,"pulseCleanse","PULSE","RAID_PULSE","RAID","add","3",4,0,"5초마다 아군 디버프 정화 (값=인원)","N"],[105,"pulseAtkBuff","PULSE","RAID_PULSE","RAID","add","4",3,0,"3초마다 아군 4명 랜덤 공격력 버프(6초)","Y"],[106,"pulseSpdBuff","PULSE","RAID_PULSE","RAID","add","4",3,0,"3초마다 아군 4명 랜덤 공격속도 버프(6초)","Y"],[107,"pulseCritBuff","PULSE","RAID_PULSE","RAID","add","4",4,0,"4초마다 아군 4명 랜덤 치명타 확률 버프(7초)","Y"],[108,"pulseManaPulse","PULSE","RAID_PULSE","RAID","add","4",3,0,"4초마다 아군 4명 랜덤 마나 회복","Y"],[109,"pulseShield","PULSE","RAID_PULSE","CORP","add","1",4,0,"5초마다 군단 아군 3명 받는 피해 감소(5초)","Y"],[110,"pulseFortify","PULSE","RAID_PULSE","CORP","add","1",3,0,"4초마다 병사 8명 방어력 버프(4초)","Y"],[111,"pulseRage","PULSE","RAID_PULSE","CORP","add","2",3,0,"4초마다 자기 군단 병사 5명 공격력 버프(8초)","Y"],[113,"pulseExpose","PULSE","RAID_PULSE","BOSS","add","5",5,0,"8초마다 보스 받는 피해 증가(3초)","Y"]].map(t=>({
+ kindNum:t[0],id:t[1],category:t[2],type:t[3],target:t[4],merge:t[5],emblems:t[6],minGrade:t[7],sigFor:t[8],desc:t[9],isPercent:t[10]}
+ )),uQt=[[101,"RuneRock","체력의 룬","A",2,"ALL","3|6|12|24|35|60",0],[102,"RuneIron","방어의 룬","A",3,"ALL","3|6|12|24|35|60",0],[103,"RuneStride","이동의 룬","A",5,"ALL","3|5|10|15|20|30",0],[104,"RuneMenace","어그로 증가의 룬","A",7,"ALL","7|15|25|30|40|50",0],[105,"RuneWall","보호의 룬","A",9,"ALL","-3|-5|-7|-12|-18|-25",0],[106,"RuneMend","재생의 룬","A",13,"ALL","2|4|6|8|10|12",0],[107,"RuneThorn","반격의 룬","A",17,"ALL","2|4|6|10|15|20",0],[112,"RuneRockHuman","체력의 룬(인간)","A",2,"HUMAN","0|0|0|36|53|90",0],[113,"RuneRockElf","체력의 룬(엘프)","A",2,"ELF","0|0|0|36|53|90",0],[114,"RuneRockUndead","체력의 룬(언데드)","A",2,"UNDEAD","0|0|0|36|53|90",0],[115,"RuneRockOrc","체력의 룬(오크)","A",2,"ORC","0|0|0|36|53|90",0],[116,"RuneResolveA","쿨타임의 룬","A",35,"ALL","3|5|7|10|13|16",0],[117,"RuneEndureA","지속시간의 룬","A",36,"ALL","2|4|7|10|15|20",0],[118,"RuneClarityA","기절 저항의 룬","A",22,"ALL","10|20|30|40|60|100",0],[119,"RuneAnchorA","넉백 저항의 룬","A",23,"ALL","10|20|30|40|60|100",0],[120,"RuneGravityA","블로우 저항의 룬","A",24,"ALL","10|20|30|40|60|100",0],[121,"RuneTauntBreak","제압의 룬","A",71,"ALL","0|0|0|15|30|50",0],[122,"RuneTauntShield","수호 함성의 룬","A",72,"ALL","0|0|0|8|12|16",0],[123,"RuneTauntMend","불굴의 룬","A",73,"ALL","0|0|0|0|20|40",0],[124,"RuneLastStand","사수의 룬","A",95,"ALL","0|0|0|0|35|50",0],[126,"RuneAegisPulse","순환 방벽의 룬","A",109,"ALL","0|0|0|6|9|13",0],[127,"RuneRampart","보루의 룬","A",110,"ALL","0|0|10|14|20|27",0],[128,"RuneDash","대시의 룬","A",38,"ALL","0|0|0|0|15|30",0],[201,"RuneFury","공격의 룬","B",1,"ALL","3|6|12|24|35|60",0],[202,"RuneVigor","체력의 룬","B",2,"ALL","3|6|12|24|35|60",0],[203,"RuneSwift","공속의 룬","B",4,"ALL","3|5|10|15|20|30",0],[204,"RuneChase","이동의 룬","B",5,"ALL","3|5|10|15|20|30",0],[205,"RuneFar","사거리의 룬","B",6,"ALL","3|7|12|20|28|40",0],[206,"RuneShadow","어그로 감소의 룬","B",8,"ALL","-7|-15|-25|-30|-40|-50",0],[207,"RuneKeen","치명타 확률의 룬","B",10,"ALL","3|7|10|15|20|30",0],[208,"RuneSlayer","치명타 피해의 룬","B",11,"ALL","0|6|12|24|35|60",0],[209,"RuneLeech","흡혈의 룬","B",12,"ALL","0|0|5|7|10|14",0],[214,"RuneFuryHuman","공격의 룬(인간)","B",1,"HUMAN","0|0|0|36|53|90",0],[215,"RuneFuryElf","공격의 룬(엘프)","B",1,"ELF","0|0|0|36|53|90",0],[216,"RuneFuryUndead","공격의 룬(언데드)","B",1,"UNDEAD","0|0|0|36|53|90",0],[217,"RuneFuryOrc","공격의 룬(오크)","B",1,"ORC","0|0|0|36|53|90",0],[218,"RuneReaperB","그로기 딜의 룬","B",32,"ALL","0|0|14|20|28|38",0],[219,"RuneExploitB","약점 딜의 룬","B",34,"ALL","0|0|14|20|28|38",0],[220,"RuneResolveB","쿨타임의 룬","B",35,"ALL","3|5|7|10|13|16",0],[221,"RuneAmplifyB","액티브 강화의 룬","B",37,"ALL","0|0|11|16|22|30",0],[222,"RuneAnchorB","넉백 저항의 룬","B",23,"ALL","10|20|30|40|60|100",0],[223,"RuneGravityB","블로우 저항의 룬","B",24,"ALL","10|20|30|40|60|100",0],[224,"RuneStunResistB","기절 저항의 룬","B",22,"ALL","10|20|30|40|60|100",0],[226,"RuneDeadlyFrenzy","필살의 룬","B",75,"ALL","0|0|0|10|15|21",0],[228,"RuneBloodlustB","전의의 룬","B",94,"ALL","0|0|0|0|25|35",0],[229,"RuneWarband","군단 사기의 룬","B",111,"ALL","0|0|8|11|16|22",0],[301,"RuneLifeC","체력의 룬","C",2,"ALL","3|6|12|24|35|60",0],[302,"RuneOakC","방어의 룬","C",3,"ALL","3|6|12|24|35|60",0],[303,"RuneShadowC","어그로 감소의 룬","C",8,"ALL","-7|-15|-25|-30|-40|-50",0],[304,"RuneAegisC","보호의 룬","C",9,"ALL","-3|-5|-7|-12|-18|-25",0],[305,"RuneMendC","재생의 룬","C",13,"ALL","2|4|6|8|10|12",0],[306,"RuneGrace","회복 증폭의 룬","C",14,"ALL","5|9|14|20|28|38",0],[307,"RuneMeditateC","마나 회복의 룬","C",15,"ALL","5|8|13|19|26|35",0],[312,"RuneGraceHuman","회복 증폭의 룬(인간)","C",14,"HUMAN","0|0|0|30|42|57",0],[313,"RuneGraceElf","회복 증폭의 룬(엘프)","C",14,"ELF","0|0|0|30|42|57",0],[314,"RuneGraceUndead","회복 증폭의 룬(언데드)","C",14,"UNDEAD","0|0|0|30|42|57",0],[315,"RuneGraceOrc","회복 증폭의 룬(오크)","C",14,"ORC","0|0|0|30|42|57",0],[316,"RuneResolveC","쿨타임의 룬","C",35,"ALL","3|5|7|10|13|16",0],[317,"RuneBlessC","지속시간의 룬","C",36,"ALL","2|4|7|10|15|20",0],[318,"RuneAmplifyC","액티브 강화의 룬","C",37,"ALL","0|0|11|16|22|30",0],[319,"RuneWarmthC","빙결 저항의 룬","C",21,"ALL","10|20|30|40|60|100",0],[320,"RuneClarityC","기절 저항의 룬","C",22,"ALL","10|20|30|40|60|100",0],[321,"RuneGravityC","블로우 면역의 룬","C",24,"ALL","0|0|0|100|100|100",0],[322,"RuneCleanseLight","성광의 룬","C",76,"ALL","0|0|0|1|1|2",0],[323,"RuneSanctuary","성역의 룬","C",77,"ALL","0|0|0|0|10|15",0],[324,"RuneMiracle","기적의 룬","C",95,"ALL","0|0|0|0|35|50",0],[325,"RuneDrip","성수의 룬","C",101,"ALL","0|2|3|4.5|6.5|9",0],[326,"RuneShower","은총의 룬","C",102,"ALL","0|0|4|6|8.5|12",0],[327,"RuneFieldMedic","야전의 룬","C",103,"ALL","0|0|3|4.5|6.5|9",0],[328,"RuneAbsolve","정화의 룬","C",104,"ALL","0|0|0|1|1|2",0],[401,"RuneVigorD","체력의 룬","D",2,"ALL","3|6|12|24|35|60",0],[402,"RuneOakD","방어의 룬","D",3,"ALL","3|6|12|24|35|60",0],[403,"RuneTempo","공속의 룬","D",4,"ALL","3|5|10|15|20|30",0],[404,"RuneFarD","사거리의 룬","D",6,"ALL","3|7|12|20|28|40",0],[405,"RuneShadowD","어그로 감소의 룬","D",8,"ALL","-7|-15|-25|-30|-40|-50",0],[406,"RuneChantD","마나 회복의 룬","D",15,"ALL","5|8|13|19|26|35",0],[407,"RuneCorrode","디버프 연장의 룬","D",16,"ALL","5|8|13|19|26|35",0],[412,"RuneTempoHuman","공속의 룬(인간)","D",4,"HUMAN","0|0|0|23|30|45",0],[413,"RuneTempoElf","공속의 룬(엘프)","D",4,"ELF","0|0|0|23|30|45",0],[414,"RuneTempoUndead","공속의 룬(언데드)","D",4,"UNDEAD","0|0|0|23|30|45",0],[415,"RuneTempoOrc","공속의 룬(오크)","D",4,"ORC","0|0|0|23|30|45",0],[416,"RuneSapD","기력 타격의 룬","D",31,"ALL","0|0|0.007|0.01|0.014|0.019",0],[417,"RuneLingerD","그로기 연장의 룬","D",33,"ALL","0|0|0|10|14|19",0],[418,"RuneExploitD","약점 딜의 룬","D",34,"ALL","0|0|14|20|28|38",0],[419,"RuneResolveD","쿨타임의 룬","D",35,"ALL","3|5|7|10|13|16",0],[420,"RuneEndureD","지속시간의 룬","D",36,"ALL","2|4|7|10|15|20",0],[421,"RuneAmplifyD","액티브 강화의 룬","D",37,"ALL","0|0|11|16|22|30",0],[422,"RuneWarmthD","빙결 저항의 룬","D",21,"ALL","10|20|30|40|60|100",0],[425,"RuneUnravel","붕괴의 룬","D",78,"ALL","0|0|0|8|12|16",0],[426,"RuneSiphon","착취의 룬","D",79,"ALL","0|0|0|15|22|30",0],[427,"RuneWarSong","진군가의 룬","D",105,"ALL","0|0|10|14|20|27",0],[428,"RuneWarDrum","전고의 룬","D",106,"ALL","0|0|8|11|16|22",0],[429,"RuneOmen","징조의 룬","D",107,"ALL","0|0|0|8|12|16",0],[430,"RuneWellspring","샘솟음의 룬","D",108,"ALL","0|0|5|7|10|14",0],[501,"RuneFuryE","공격의 룬","E",1,"ALL","3|6|12|24|35|60",0],[502,"RuneVigorE","체력의 룬","E",2,"ALL","3|6|12|24|35|60",0],[503,"RuneSwiftE","공속의 룬","E",4,"ALL","3|5|10|15|20|30",0],[504,"RuneChaseE","이동의 룬","E",5,"ALL","3|5|10|15|20|30",0],[505,"RuneShadowE","어그로 감소의 룬","E",8,"ALL","-7|-15|-25|-30|-40|-50",0],[506,"RuneKeenE","치명타 확률의 룬","E",10,"ALL","3|7|10|15|20|30",0],[507,"RuneSlayerE","치명타 피해의 룬","E",11,"ALL","0|6|12|24|35|60",0],[508,"RuneCrush","기력 타격의 룬","E",31,"ALL","0|0|0.01|0.015|0.022|0.03",0],[517,"RuneReaperE","그로기 딜의 룬","E",32,"ALL","0|0|14|20|28|38",0],[518,"RuneLingerE","그로기 연장의 룬","E",33,"ALL","0|0|0|10|14|19",0],[519,"RuneResolveE","쿨타임의 룬","E",35,"ALL","3|5|7|10|13|16",0],[520,"RuneAmplifyE","액티브 강화의 룬","E",37,"ALL","0|0|11|16|22|30",0],[521,"RuneClarityE","기절 저항의 룬","E",22,"ALL","10|20|30|40|60|100",0],[522,"RuneGravityE","블로우 저항의 룬","E",24,"ALL","10|20|30|40|60|100",0],[524,"RuneOnslaught","몰아치기의 룬","E",80,"ALL","0|0|0|0|15|20",0],[525,"RunePincer","협공의 룬","E",84,"ALL","0|0|0|0|7|15",0],[526,"RuneChainE","연타의 룬","E",91,"ALL","0|0|0|0|0.5|0.75",100],[527,"RuneShatter","분쇄의 룬","E",92,"ALL","0|0|0|0|1.5|2.5",100],[528,"RuneBloodlustE","전의의 룬","E",94,"ALL","0|0|0|0|25|35",0],[530,"RuneRift","균열의 룬","E",113,"ALL","0|0|0|0|6|9",0],[601,"RuneAim","명중의 룬","F",41,"ALL","4|7|11|16|22|30",0],[602,"RuneWound","상처의 룬","F",42,"ALL","4|7|10|14|19|25",0],[603,"RuneReload","신속장전의 룬","F",43,"ALL","3|5|8|12|16|22",0],[604,"RuneMarksman","명사수의 룬","F",47,"ALL","0|3|5|8|11|15",0],[606,"RuneExecution","처형의 룬","F",49,"ALL","0|7|11|16|23|32",0],[608,"RuneInsight","약점 창의 룬","F",45,"ALL","0|0|12|17|23|30",0],[613,"RuneSunder","갑옷 파괴의 룬","F",56,"ALL","0|0|10|14|20|27",0],[614,"RuneLingerF","그로기 연장의 룬","F",33,"ALL","0|0|0|10|14|19",0],[615,"RuneResolveF","쿨타임의 룬","F",35,"ALL","3|5|7|10|13|16",0],[616,"RuneAmplifyF","액티브 강화의 룬","F",37,"ALL","0|0|11|16|22|30",0],[617,"RuneSiege","공성의 룬","F",51,"ALL","0|0|0|1|1|2",0],[618,"RuneTwinbolt","쌍발의 룬","F",52,"ALL","0|0|0|0|50|70",0],[619,"RuneDoubleCurse","이중고의 룬","F",53,"ALL","0|0|0|1|1|1",0],[620,"RuneBonecrush","깊은 그로기의 룬","F",82,"ALL","0|0|0|1|1.5|2",0],[621,"RuneMarkF","깊은 상처의 룬","F",83,"ALL","0|0|0|0|2|3",0],[622,"RuneRally","함성의 룬","F",93,"ALL","0|0|0|0|10|15",8],[623,"RuneCharge","충전의 룬","F",44,"ALL","0|5|10|15|20|30",0],[624,"RuneRecoup","만회의 룬","F",46,"ALL","10|20|30|40|50|70",0],[625,"RuneWarSongF","진군가의 룬","F",105,"ALL","0|0|8|11|16|22",0],[626,"RuneWarDrumF","전고의 룬","F",106,"ALL","0|0|6|9|13|18",0],[627,"RuneOmenF","징조의 룬","F",107,"ALL","0|0|0|6|9|13",0],[628,"RuneWellspringF","샘솟음의 룬","F",108,"ALL","0|0|4|6|8|11",0],[629,"RuneDripF","성수의 룬","F",101,"ALL","0|1.5|2.5|3.5|5|7",0]].map(t=>({
+ kindNum:t[0],className:t[1],name:t[2],type:t[3],skillRef:t[4],filter:t[5],value:t[6],param:t[7]}
+ )),dQt=[[1,"일반",5,100,0],[2,"고급",5,300,0],[3,"희귀",5,900,0],[4,"영웅",5,2500,0],[5,"전설",5,7e3,1],[6,"신화",0,0,1]].map(t=>({
+ grade:t[0],gradeName:t[1],mergeCount:t[2],mergeCoin:t[3],subOption:t[4]}
+ )),fQt=[[1,1,"2|5",4,7,"공격력 증가"],[2,2,"1|2|3|4|5",5,8,"최대 HP 증가"],[3,3,"1|3|4",4,7,"방어력 증가"],[4,4,"2|4|5",3,5,"공격속도 증가"],[5,9,"1|3",-3,-5,"받는 피해 감소"],[6,35,"1|2|3|4|5",3,5,"액티브 쿨다운 감소"],[7,13,"1|3",2,4,"5초마다 군단 HP 회복"],[8,31,"4|5",.0025,.005,"타격당 보스 기력 소진"],[9,41,"6",4,7,"석궁 데미지 증가"],[10,43,"6",3,5,"석궁 에너지 충전 속도 증가"]].map(t=>({
+ subId:t[0],skillRef:t[1],emblems:t[2],value5:t[3],value6:t[4],desc:t[5]}
+ )),pQt={
+ CORP:"장착 군단",RAID:"전 군단",BOSS:"보스",SELF:"액티브",CROSSBOW:"작살차"}
+ ,gQt={
+ CORP:8313175,RAID:6015231,BOSS:16743022,SELF:16765562,CROSSBOW:12109008}
+ ,mQt={
+ ALWAYS:"상시",PERIODIC:"주기",ACTIVE:"액티브",ON_HIT:"공격 적중 시",ON_DAMAGED:"피격 시",ON_STACK:"누적 타격",ON_INTERRUPT:"인터럽트 성공 시",ON_INTERRUPT_FAIL:"인터럽트 실패 시",ON_GROGGY_START:"그로기 진입 시",ON_HP_LOW:"HP 20% 붕괴 시",ON_WEAKPOINT_HIT:"약점 피격 시",ON_FIRE:"발사 시",ON_ACTIVE_CAST:"{
+ a}
+  시작 시",DURING_ACTIVE:"{
+ a}
+  지속 중",ON_ACTIVE_END:"{
+ a}
+  종료 시"}
+ ,wQt={
+ T_CORP:"GAME_1307",T_RAID:"GAME_1308",T_BOSS:"GAME_1309",T_SELF:"GAME_1306",T_CROSSBOW:"GAME_1310",ALWAYS:"GAME_1311",PERIODIC:"GAME_1312",ACTIVE:"GAME_1306",ON_HIT:"GAME_1313",ON_DAMAGED:"GAME_1314",ON_STACK:"GAME_1315",ON_INTERRUPT:"GAME_1316",ON_INTERRUPT_FAIL:"GAME_1317",ON_GROGGY_START:"GAME_1318",ON_HP_LOW:"GAME_1319",ON_WEAKPOINT_HIT:"GAME_1320",ON_FIRE:"GAME_1321",ON_ACTIVE_CAST:"GAME_1322",DURING_ACTIVE:"GAME_1323",ON_ACTIVE_END:"GAME_1324"}
+ ,vQt={
+ 13:"PERIODIC",17:"ON_DAMAGED",31:"ON_HIT",44:"ON_FIRE",46:"ON_INTERRUPT_FAIL",53:"ON_INTERRUPT",56:"ON_WEAKPOINT_HIT",71:"ON_ACTIVE_CAST",72:"ON_ACTIVE_CAST",73:"ON_ACTIVE_END",76:"ON_ACTIVE_CAST",77:"ON_ACTIVE_END",91:"ON_STACK",92:"ON_STACK",93:"ON_INTERRUPT",94:"ON_GROGGY_START",95:"ON_HP_LOW"}
+ ,bQt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"className",""),Kt(this,"name",""),Kt(this,"role",""),Kt(this,"slot",""),Kt(this,"runeType","A"),Kt(this,"pSkill",0),Kt(this,"pValue",0),Kt(this,"aSkill",0),Kt(this,"aValue",0),Kt(this,"aCool",0),Kt(this,"aDur",0)}
+ }
+ ;
+ Vt(bQt,"EmblemBookVO");
+ let _Qt=bQt;
+ const yQt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"id",""),Kt(this,"category",""),Kt(this,"type",""),Kt(this,"target",""),Kt(this,"merge",""),Kt(this,"emblems",[]),Kt(this,"minGrade",0),Kt(this,"sigFor",0),Kt(this,"desc",""),Kt(this,"desc6",""),Kt(this,"isPercent",!1),Kt(this,"condition","")}
+ }
+ ;
+ Vt(yQt,"EmblemSkillBookVO");
+ let MQt=yQt;
+ const EQt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"className",""),Kt(this,"name",""),Kt(this,"type","A"),Kt(this,"skillRef",0),Kt(this,"filter","ALL"),Kt(this,"value",[0,0,0,0,0,0]),Kt(this,"param",0)}
+ }
+ ;
+ Vt(EQt,"RuneBookVO");
+ let AQt=EQt;
+ const SQt=class{
+ constructor(){
+ Kt(this,"grade",0),Kt(this,"gradeName",""),Kt(this,"mergeCount",0),Kt(this,"mergeCoin",0),Kt(this,"subOption",0)}
+ }
+ ;
+ Vt(SQt,"RuneGradeBookVO");
+ let TQt=SQt;
+ const CQt=class{
+ constructor(){
+ Kt(this,"subId",0),Kt(this,"skillRef",0),Kt(this,"emblems",[]),Kt(this,"value5",0),Kt(this,"value6",0),Kt(this,"desc","")}
+ }
+ ;
+ Vt(CQt,"RuneSubBookVO");
+ let IQt=CQt;
+ const kQt=class t{
+ constructor(){
+ Kt(this,"emblems",[]),Kt(this,"emblemByKind",new Map),Kt(this,"emblemBySlot",new Map),Kt(this,"skills",new Map),Kt(this,"runes",new Map),Kt(this,"runesByType",new Map),Kt(this,"grades",new Map),Kt(this,"subs",new Map),Kt(this,"loaded",!1)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ async ensureLoaded(){
+ if(this.loaded)return;
+ const t=MD.getInstance();
+ for(const i of[_D.EMBLEM,_D.EMBLEM_SKILL,_D.RUNE,_D.RUNE_GRADE,_D.RUNE_SUB])await t.loadBook(i).catch(()=>null);
+ this.setEmblemData(this.bookOrFallback(_D.EMBLEM,cQt)),this.setSkillData(this.bookOrFallback(_D.EMBLEM_SKILL,lQt)),this.setRuneData(this.bookOrFallback(_D.RUNE,uQt)),this.setGradeData(this.bookOrFallback(_D.RUNE_GRADE,dQt)),this.setSubData(this.bookOrFallback(_D.RUNE_SUB,fQt)),this.loaded=!0}
+ bookOrFallback(t,i){
+ const s=MD.getInstance().getBook(t);
+ return Array.isArray(s)&&s.length>0?s:i}
+ parsePipe(t,i){
+ const s=new Array(i).fill(0),e=String(t??"").split("|");
+ for(let n=0;
+ n<i&&n<e.length;
+ n++){
+ const t=Number(e[n]);
+ s[n]=Number.isFinite(t)?t:0}
+ return s}
+ parsePipeList(t){
+ return String(t??"").split("|").map(t=>Number(t)).filter(t=>Number.isFinite(t)&&t>0)}
+ setEmblemData(t){
+ this.emblems=[],this.emblemByKind.clear(),this.emblemBySlot.clear();
+ for(const i of t){
+ const t=new _Qt;
+ t.kindNum=Number(i.kindNum)||0,t.className=String(i.className??""),t.name=String(i.name??""),t.role=String(i.role??""),t.slot=String(i.slot??""),t.runeType=String(i.runeType??"A"),t.pSkill=Number(i.pSkill)||0,t.pValue=Number(i.pValue)||0,t.aSkill=Number(i.aSkill)||0,t.aValue=Number(i.aValue)||0,t.aCool=Number(i.aCool)||0,t.aDur=Number(i.aDur)||0,this.emblems.push(t),this.emblemByKind.set(t.kindNum,t),this.emblemBySlot.set(t.slot,t)}
+ this.emblems.sort((t,i)=>t.kindNum-i.kindNum)}
+ setSkillData(t){
+ this.skills.clear();
+ for(const i of t){
+ const t=new MQt;
+ t.kindNum=Number(i.kindNum)||0,t.id=String(i.id??""),t.category=String(i.category??""),t.type=String(i.type??""),t.target=String(i.target??""),t.merge=String(i.merge??"add"),t.emblems=this.parsePipeList(i.emblems),t.minGrade=Number(i.minGrade)||0,t.sigFor=Number(i.sigFor)||0,t.desc=String(i.desc??""),t.desc6=String(i.desc6??""),t.isPercent="Y"===String(i.isPercent??"N"),t.condition=String(i.condition??""),this.skills.set(t.kindNum,t)}
+ }
+ setRuneData(i){
+ this.runes.clear(),this.runesByType.clear();
+ for(const s of i){
+ const i=new AQt;
+ i.kindNum=Number(s.kindNum)||0,i.className=String(s.className??""),i.name=String(s.name??""),i.type=String(s.type??"A"),i.skillRef=Number(s.skillRef)||0,i.filter=String(s.filter??"ALL"),i.value=this.parsePipe(s.value,t.GRADE_MAX),i.param=Number(s.param)||0,this.runes.set(i.kindNum,i);
+ let e=this.runesByType.get(i.type);
+ e||(e=[],this.runesByType.set(i.type,e)),e.push(i)}
+ for(const t of this.runesByType.values())t.sort((t,i)=>t.kindNum-i.kindNum)}
+ setGradeData(t){
+ this.grades.clear();
+ for(const i of t){
+ const t=new TQt;
+ t.grade=Number(i.grade)||0,t.gradeName=String(i.gradeName??""),t.mergeCount=Number(i.mergeCount)||0,t.mergeCoin=Number(i.mergeCoin)||0,t.subOption=Number(i.subOption)||0,this.grades.set(t.grade,t)}
+ }
+ setSubData(t){
+ this.subs.clear();
+ for(const i of t){
+ const t=new IQt;
+ t.subId=Number(i.subId)||0,t.skillRef=Number(i.skillRef)||0,t.emblems=this.parsePipeList(i.emblems),t.value5=Number(i.value5)||0,t.value6=Number(i.value6)||0,t.desc=String(i.desc??""),this.subs.set(t.subId,t)}
+ }
+ getEmblems(){
+ return this.emblems}
+ getEmblem(t){
+ return this.emblemByKind.get(t)??null}
+ getEmblemBySlot(t){
+ return this.emblemBySlot.get(t)??null}
+ getEmblemByCorpIndex(t){
+ return this.getEmblemBySlot(`corp${
+ t+1}
+ `)}
+ getSkill(t){
+ return this.skills.get(t)??null}
+ getRune(t){
+ return this.runes.get(t)??null}
+ getRunesByType(t){
+ return this.runesByType.get(t)??[]}
+ getRuneValue(i,s){
+ return s<1||s>t.GRADE_MAX?0:i.value[s-1]??0}
+ resolveSkillCondition(t){
+ if(t.condition)return t.condition;
+ const i=vQt[t.kindNum];
+ if(i)return i;
+ switch(t.category){
+ case"PULSE":return"PERIODIC";
+ case"ACTIVE":return"ACTIVE";
+ case"ACTIVE_MOD":return"DURING_ACTIVE";
+ default:return"ALWAYS"}
+ }
+ activeNameFor(t){
+ var i;
+ const s=this.getEmblem(t.emblems[0]??0),e=s?this.getSkill(s.aSkill):null,n=e?null==(i=this.skillDescTemplate(e).split(" — ")[0])?void 0:i.trim():"";
+ return n&&n.length<=16?n:SG.getText("GAME_1306","액티브")}
+ getEmblemName(t){
+ return t?SG.getText(`EmblemName${
+ t.kindNum}
+ `,t.name):""}
+ getEmblemShortName(t){
+ return t?SG.getText(`EmblemShortName${
+ t.kindNum}
+ `,t.name.slice(0,2)):""}
+ skillDescTemplate(t,i=0){
+ return i>=6&&t.desc6?SG.getText(`EmblemSkillDesc6_${
+ t.kindNum}
+ `,t.desc6):SG.getText(`EmblemDesc${
+ t.kindNum}
+ `,t.desc)}
+ getSubDesc(t){
+ return SG.getText(`EmblemSubDesc${
+ t.subId}
+ `,t.desc)}
+ getGradeName(t){
+ const i=this.getGrade(t);
+ return(null==i?void 0:i.gradeName)?SG.getText(`EmblemGradeName${
+ t}
+ `,i.gradeName):null}
+ prefixLabel(t,i){
+ const s=wQt[t];
+ return s?SG.getText(s,i):i}
+ getSkillPrefix(t){
+ if(!t)return{
+ text:"",color:16777215,condLabel:"",targetLabel:""}
+ ;
+ const i=this.resolveSkillCondition(t);
+ let s=this.prefixLabel(i,mQt[i]??i);
+ if(s.includes("{
+ a}
+ ")||s.includes("{
+ 0}
+ ")){
+ const i=this.activeNameFor(t);
+ s=s.split("{
+ a}
+ ").join(i).split("{
+ 0}
+ ").join(i)}
+ const e=this.prefixLabel(`T_${
+ t.target}
+ `,pQt[t.target]??t.target);
+ return{
+ text:`[${
+ s}
+ ] [${
+ e}
+ ]`,color:gQt[t.target]??16777215,condLabel:s,targetLabel:e}
+ }
+ formatSkillDesc(t,i,s=0,e=!0){
+ if(!t)return"?";
+ const n=this.skillDescTemplate(t,s);
+ let h;
+ if(h=n.includes("{
+ v}
+ ")?n.split("{
+ v}
+ ").join(String(i)):`${
+ n}
+  ${
+ i>0?"+":""}
+ ${
+ i}
+ ${
+ t.isPercent?"%":""}
+ `,!e)return h;
+ const r=this.getSkillPrefix(t).text;
+ return r?`${
+ r}
+  ${
+ h}
+ `:h}
+ formatRuneDesc(t,i,s=!0){
+ const e=this.getSkill(t.skillRef),n=this.getRuneValue(t,i),h="ALL"!==t.filter?` [${
+ t.filter}
+ ]`:"";
+ return`${
+ this.formatSkillDesc(e,n,i,s)}
+ ${
+ h}
+ `}
+ isRuneAvailableAtGrade(t,i){
+ return 0!==this.getRuneValue(t,i)}
+ getRunePoolForGrade(t,i){
+ return this.getRunesByType(t).filter(t=>this.isRuneAvailableAtGrade(t,i))}
+ getGrade(t){
+ return this.grades.get(t)??null}
+ getSub(i){
+ return i===t.SUB_NONE?null:this.subs.get(i)??null}
+ getSubValue(t,i){
+ return 5===i?t.value5:6===i?t.value6:0}
+ getSubPoolForEmblem(t){
+ return Array.from(this.subs.values()).filter(i=>i.emblems.includes(t))}
+ }
+ ;
+ Vt(kQt,"EmblemDataManager"),Kt(kQt,"instance"),Kt(kQt,"GRADE_MAX",6),Kt(kQt,"SUB_NONE",-1);
+ let OQt=kQt;
+ const xQt=class t{
+ static resolveCorp(t,i){
+ const s=OQt.getInstance().getEmblemByCorpIndex(t);
+ return s?this.resolve(s.kindNum,i??[]):null}
+ static resolveCrossbow(t){
+ const i=OQt.getInstance().getEmblemBySlot("crossbow");
+ return i?this.resolve(i.kindNum,t??[]):null}
+ static resolve(i,s){
+ const e=OQt.getInstance(),n=e.getEmblem(i);
+ if(!n)return null;
+ const h={
+ emblem:n,passives:[],pulses:[],procs:[],activeMods:[],active:null}
+ ;
+ let r=0,o=0,a=0;
+ const c=e.getSkill(n.pSkill);
+ c&&h.passives.push(this.toEffect(c,"ALL",n.pValue,0,0));
+ const l=new Set;
+ for(const t of s){
+ if(l.has(t.kindNum))continue;
+ l.add(t.kindNum);
+ const i=e.getRune(t.kindNum);
+ if(!i)continue;
+ if(i.type!==n.runeType)continue;
+ const s=e.getRuneValue(i,t.grade),c=e.getSkill(i.skillRef);
+ if(c&&0!==s){
+ if("SELF"===c.target)"activeCool"===c.id?r+=s:"activeDur"===c.id?o+=s:"activePower"===c.id&&(a+=s);
+ else{
+ const t=this.toEffect(c,i.filter,s,i.param,i.kindNum);
+ this.route(h,t,c)}
+ if(t.subId>=0){
+ const s=e.getSub(t.subId),n=s?e.getSkill(s.skillRef):null,c=s?e.getSubValue(s,t.grade):0;
+ s&&n&&0!==c&&("SELF"===n.target?"activeCool"===n.id?r+=c:"activeDur"===n.id?o+=c:"activePower"===n.id&&(a+=c):this.route(h,this.toEffect(n,"ALL",c,0,i.kindNum),n))}
+ }
+ }
+ const u=e.getSkill(n.aSkill);
+ if(u){
+ const i=Math.max(1-t.COOL_CUT_MAX,1-r/100),s={
+ skillKindNum:u.kindNum,skillId:u.id,value:n.aValue*(1+a/100),coolFrames:Math.round(n.aCool*t.FPS*i),durFrames:Math.round(n.aDur*t.FPS*(1+o/100))}
+ ;
+ h.active=s}
+ return h}
+ static route(t,i,s){
+ "ACTIVE_MOD"===s.category?t.activeMods.push(i):"RAID_PULSE"===s.type?t.pulses.push(i):"RAID_PROC"===s.type?t.procs.push(i):t.passives.push(i)}
+ static toEffect(t,i,s,e,n){
+ return{
+ skillKindNum:t.kindNum,skillId:t.id,category:t.category,routeType:t.type,target:t.target,merge:t.merge,isPercent:t.isPercent,filter:i,value:s,param:e,sourceRune:n}
+ }
+ }
+ ;
+ Vt(xQt,"RuneLoadout"),Kt(xQt,"FPS",60),Kt(xQt,"COOL_CUT_MAX",.8);
+ let RQt=xQt;
+ const NQt=class{
+ static applyToUnit(t,i,s){
+ for(const e of i.passives)"CORP"===e.target&&GJt(e.filter,s)&&this.applyOne(t,e)}
+ static applyOne(t,i){
+ const s=1+i.value/100;
+ switch(i.skillId){
+ case"atkDmg":t.orgAtkDmg*=s,t.atkDmg*=s;
+ break;
+ case"maxHp":t.baseMaxHp*=s,t.orgMaxHp*=s,t.maxHp*=s,t.hp=t.maxHp,t.health=t.maxHp;
+ break;
+ case"defense":t.phyDef*=s,t.magDef*=s;
+ break;
+ case"atkSpd":t.orgAtkSpd*=s,t.atkSpd*=s,t.atkDuration=1e4/t.atkSpd;
+ break;
+ case"moveSpd":t.orgMoveSpd*=s,t.moveSpd*=s;
+ break;
+ case"atkRange":t.atkRange*=s,t.atkRange2=t.atkRange*t.atkRange;
+ break;
+ case"dmgTaken":t.raidIncomingDamageMult*=Math.max(0,s),t.raidPassiveIncomingMult*=Math.max(0,s);
+ break;
+ case"critRate":t.critChance+=i.value/100;
+ break;
+ case"critDmg":t.critDmg+=i.value/100;
+ break;
+ case"resFreeze":i.value>=100?t.freezeImmune=!0:t.freezeResistPct=Math.min(99,t.freezeResistPct+i.value);
+ break;
+ case"resStun":i.value>=100?t.stunImmune=!0:t.stunResistPct=Math.min(99,t.stunResistPct+i.value);
+ break;
+ case"resKnockback":i.value>=100?t.knockImmune=!0:t.knockResistPct=Math.min(99,t.knockResistPct+i.value);
+ break;
+ case"resBlow":i.value>=100?t.blowImmune=!0:t.blowResistPct=Math.min(99,t.blowResistPct+i.value);
+ break;
+ case"resPoison":case"resSlow":i.value>=100&&(t.poisonImmune=!0)}
+ }
+ static getAggroMult(t){
+ if(!t)return 1;
+ let i=1;
+ for(const s of t.passives)"aggroGen"!==s.skillId&&"aggroDown"!==s.skillId||(i*=1+s.value/100);
+ return i}
+ static getDebuffTimeMult(t){
+ if(!t)return 1;
+ let i=1;
+ for(const s of t.passives)"debuffTime"===s.skillId&&(i*=1+s.value/100);
+ return i}
+ }
+ ;
+ Vt(NQt,"RuneStatApplier");
+ let PQt=NQt;
+ const DQt=class t{
+ constructor(){
+ Kt(this,"contexts",[]),Kt(this,"states",[]),Kt(this,"timedEffects",[]),Kt(this,"scheduled",[]),Kt(this,"bossExposures",[]),Kt(this,"host",null),Kt(this,"exposureSeq",0)}
+ setup(t,i){
+ this.contexts=t,this.host=i,this.states=t.map(t=>{
+ var i,s,e;
+ return{
+ cooldown:(null==(i=null==t?void 0:t.active)?void 0:i.coolFrames)??0,coolTotal:(null==(s=null==t?void 0:t.active)?void 0:s.coolFrames)??0,activeRemaining:0,activeTotal:(null==(e=null==t?void 0:t.active)?void 0:e.durFrames)??0,tick:0}
+ }
+ ),this.timedEffects=[],this.scheduled=[],this.bossExposures=[]}
+ getSlotState(t){
+ return this.states[t]??null}
+ isActiveRunning(t){
+ var i;
+ return((null==(i=this.states[t])?void 0:i.activeRemaining)??0)>0}
+ getActiveAggroMult(i){
+ const s=this.contexts[i];
+ return(null==s?void 0:s.active)&&this.isActiveRunning(i)?"frenzy"===s.active.skillId?t.FRENZY_AGGRO_MULT:"taunt"===s.active.skillId?1+s.active.value/100:1:1}
+ addBossExposure(t,i,s=!1){
+ 0===t||i<=0||(this.bossExposures.push({
+ id:++this.exposureSeq,pct:t,frames:i,total:i,bleed:s}
+ ),this.syncBossExposure())}
+ getBossExposureEntries(){
+ return this.bossExposures}
+ getBossExposureRemain(){
+ let t=0;
+ for(const i of this.bossExposures)!i.bleed&&i.frames>t&&(t=i.frames);
+ return t}
+ getBossExposureTotal(){
+ let t=0,i=0;
+ for(const s of this.bossExposures)t+=s.pct,s.frames>i&&(i=s.frames);
+ return{
+ pct:t,frames:i}
+ }
+ activate(i){
+ const s=this.contexts[i],e=this.states[i],n=this.host;
+ if(!(null==s?void 0:s.active)||!e||!n)return!1;
+ if(e.cooldown>0||e.activeRemaining>0)return!1;
+ if(i===t.CROSSBOW_SLOT)return!1;
+ const h=s.active;
+ switch(e.cooldown=h.coolFrames,e.coolTotal=h.coolFrames,e.activeRemaining=Math.max(1,h.durFrames),e.activeTotal=e.activeRemaining,e.tick=0,h.skillId){
+ case"taunt":this.runTaunt(i,h.value,h.durFrames,s);
+ break;
+ case"frenzy":this.runFrenzy(i,h.value,h.durFrames,s);
+ break;
+ case"massHeal":this.runMassHealStart(i,s);
+ break;
+ case"weakenBoss":this.runWeakenBoss(i,h.value,h.durFrames,s);
+ break;
+ case"allOutAttack":this.runAllOutAttack(i,h.value,h.durFrames,s);
+ break;
+ default:return!1}
+ return!0}
+ runTaunt(i,s,e,n){
+ const h=this.host;
+ h.forceAggro(i,e),h.announceBossDebuff(SG.getText("GAME_1474","도발")+"!");
+ const r=PQt.getDebuffTimeMult(n);
+ for(const o of n.activeMods)if("tauntArmorBreak"===o.skillId)this.bossDefenseDebuff(o.value,Math.round(t.TAUNT_ARMORBREAK_SEC*t.FPS*r)),h.announceBossDebuff(SG.getText("GAME_1495","제압")+"!");
+ else if("tauntShield"===o.skillId)for(const t of h.getAllAllies())this.pushTimedIncoming(t,1-o.value/100,e);
+ else if("tauntRecover"===o.skillId){
+ const t=o.value;
+ this.scheduled.push({
+ frames:e,run:Vt(()=>{
+ for(const s of h.getAliveCorpUnits(i))s.heal(t,null,!0)}
+ ,"run")}
+ )}
+ }
+ runFrenzy(t,i,s,e){
+ const n=this.host;
+ for(const h of n.getAliveCorpUnits(t))h.addAttackDamageBuff(yK.RaidRune_ACTIVE_ATKDMG,i/100,s),h.addAttackSpeedBuff(yK.RaidRune_ACTIVE_ATKSPD,i/100,s,!0);
+ for(const h of e.activeMods)if("frenzyCrit"===h.skillId)for(const i of n.getAliveCorpUnits(t))this.pushTimedCrit(i,h.value/100,s)}
+ runMassHealStart(t,i){
+ const s=this.host;
+ if(i.activeMods.some(t=>"healCleanse"===t.skillId))for(const e of s.getAllAllies())this.cleanseUnit(e)}
+ runWeakenBoss(t,i,s,e){
+ const n=PQt.getDebuffTimeMult(e),h=Math.round(s*n);
+ this.bossDefenseDebuff(i,h),this.bossAttackSpeedDebuff(i/2,h),this.host.announceBossDebuff(SG.getText("GAME_1496","약화")+"!");
+ for(const r of e.activeMods)"weakenAmplify"===r.skillId&&(this.addBossExposure(r.value,h),this.host.announceBossDebuff(SG.getText("GAME_1497","붕괴")+"!"))}
+ runAllOutAttack(t,i,s,e){
+ const n=this.host;
+ for(const r of n.getAllAllies())r.isAlive&&!r.removed&&r.addAttackDamageBuff(yK.RaidRune_ALLOUT_ATKDMG,i/100,s);
+ n.announceBossDebuff(SG.getText("GAME_1492","총공격")+"!");
+ const h=PQt.getDebuffTimeMult(e);
+ for(const r of e.activeMods)if("allOutHaste"===r.skillId)for(const t of n.getAllAllies())t.isAlive&&!t.removed&&t.addAttackSpeedBuff(yK.RaidRune_ALLOUT_ATKSPD,r.value/100,s,!0);
+ else"allOutExpose"===r.skillId&&(this.addBossExposure(r.value,Math.round(s*h)),n.announceBossDebuff(SG.getText("GAME_1498","협공")+"!"))}
+ update(){
+ if(this.host){
+ for(let t=0;
+ t<this.states.length;
+ t++){
+ const i=this.states[t],s=this.contexts[t];
+ i.cooldown>0&&i.cooldown--,i.activeRemaining>0&&(i.activeRemaining--,this.updateActiveTick(t,i,s))}
+ for(let t=this.scheduled.length-1;
+ t>=0;
+ t--){
+ const i=this.scheduled[t];
+ --i.frames<=0&&(this.scheduled.splice(t,1),i.run())}
+ for(let t=this.timedEffects.length-1;
+ t>=0;
+ t--){
+ const i=this.timedEffects[t];
+ --i.frames>0||(this.timedEffects.splice(t,1),"incoming"===i.kind?0!==i.amount&&(i.unit.raidIncomingDamageMult/=i.amount):i.unit.critChance-=i.amount)}
+ if(this.bossExposures.length>0){
+ let t=!1;
+ for(let i=this.bossExposures.length-1;
+ i>=0;
+ i--)--this.bossExposures[i].frames<=0&&(this.bossExposures.splice(i,1),t=!0);
+ t&&this.syncBossExposure()}
+ }
+ }
+ updateActiveTick(i,s,e){
+ const n=this.host;
+ if(null==e?void 0:e.active)if("massHeal"===e.active.skillId){
+ if(s.tick++,s.tick>=t.FPS){
+ s.tick=0;
+ const i=this.getHealGiveMult(e);
+ for(const t of n.getAllAllies()){
+ if(!t.isAlive||t.removed)continue;
+ const s=this.getHealReceiveMult(e,t);
+ t.heal(e.active.value*i*s,null,!0)}
+ if(s.activeRemaining<t.FPS&&e.activeMods.some(t=>"healShield"===t.skillId)){
+ const i=e.activeMods.find(t=>"healShield"===t.skillId);
+ for(const s of n.getAllAllies())this.pushTimedIncoming(s,1-i.value/100,t.AFTER_EFFECT_SEC*t.FPS)}
+ }
+ }
+ else if("weakenBoss"===e.active.skillId){
+ const t=e.activeMods.find(t=>"weakenMana"===t.skillId);
+ if(t)for(const i of n.getAllAllies())i.isAlive&&!i.removed&&(i.mana+=t.value/100)}
+ }
+ getHealGiveMult(t){
+ let i=0;
+ for(const s of t.passives)"healPower"===s.skillId&&"ALL"===s.filter&&(i+=s.value);
+ return 1+i/100}
+ getHealReceiveMult(t,i){
+ const s=this.host;
+ let e=0;
+ for(const n of t.passives){
+ if("healPower"!==n.skillId||"ALL"===n.filter)continue;
+ const t={
+ isHero:s.isHeroUnit(i),unitType:i.unitType,tribe:i.tribe}
+ ;
+ GJt(n.filter,t)&&(e+=n.value)}
+ return 1+e/100}
+ pushTimedIncoming(t,i,s){
+ const e=Math.max(.05,i);
+ t.raidIncomingDamageMult*=e,this.timedEffects.push({
+ unit:t,kind:"incoming",amount:e,frames:Math.max(1,s)}
+ )}
+ pushTimedCrit(t,i,s){
+ t.critChance+=i,this.timedEffects.push({
+ unit:t,kind:"crit",amount:i,frames:Math.max(1,s)}
+ )}
+ cleanseUnit(t){
+ const i=t;
+ i.numStun=0,i.numFreeze=0,i.numSlow=0,i.numPoison=0,i.numBleed=0,i.numBurn=0,i.numCurse=0}
+ bossDefenseDebuff(t,i){
+ var s;
+ const e=null==(s=this.host)?void 0:s.getBoss();
+ e&&e.isAlive&&!e.removed&&(e.removeDefenseBuff(yK.RaidRune_BOSS_DEFENSE),e.addDefenseBuff(yK.RaidRune_BOSS_DEFENSE,-t/100,i))}
+ bossAttackSpeedDebuff(t,i){
+ var s;
+ const e=null==(s=this.host)?void 0:s.getBoss();
+ e&&e.isAlive&&!e.removed&&e.addAttackSpeedBuff(yK.RaidRune_BOSS_ATKSPD,-t/100,i,!0)}
+ syncBossExposure(){
+ var t;
+ const i=null==(t=this.host)?void 0:t.getBoss();
+ if(!(null==i?void 0:i.setRuneIncomingDamageMult))return;
+ let s=0;
+ for(const e of this.bossExposures)s+=e.pct;
+ i.setRuneIncomingDamageMult(1+s/100)}
+ }
+ ;
+ Vt(DQt,"RuneActiveRunner"),Kt(DQt,"CROSSBOW_SLOT",5),Kt(DQt,"FPS",60),Kt(DQt,"FRENZY_AGGRO_MULT",.8),Kt(DQt,"AFTER_EFFECT_SEC",4),Kt(DQt,"TAUNT_ARMORBREAK_SEC",10);
+ let LQt=DQt;
+ const GQt={
+ pulseHealOne:{
+ interval:60,duration:0,count:1}
+ ,pulseHealWide:{
+ interval:180,duration:0,count:4}
+ ,pulseSoldierHeal:{
+ interval:120,duration:0,count:8}
+ ,pulseCleanse:{
+ interval:300,duration:0,count:1}
+ ,pulseAtkBuff:{
+ interval:180,duration:360,count:4}
+ ,pulseSpdBuff:{
+ interval:180,duration:360,count:4}
+ ,pulseCritBuff:{
+ interval:240,duration:420,count:4}
+ ,pulseManaPulse:{
+ interval:240,duration:0,count:4}
+ ,pulseShield:{
+ interval:300,duration:300,count:3}
+ ,pulseFortify:{
+ interval:240,duration:240,count:8}
+ ,pulseRage:{
+ interval:240,duration:480,count:5}
+ ,pulseExpose:{
+ interval:480,duration:180,count:0}
+ ,healCycle:{
+ interval:300,duration:0,count:1}
+ }
+ ,BQt=class{
+ constructor(){
+ Kt(this,"pulses",[]),Kt(this,"timedEffects",[]),Kt(this,"manaGainBonus",[]),Kt(this,"healGiveMult",[]),Kt(this,"host",null)}
+ setup(t,i,s=null){
+ if(this.host=i,this.pulses=[],this.timedEffects=[],this.manaGainBonus=[],this.healGiveMult=[],s)for(const e of s.pulses){
+ if("CORP"===e.target)continue;
+ const t=GQt[e.skillId];
+ t&&this.pulses.push({
+ corpIndex:-1,effect:e,spec:t,timer:0}
+ )}
+ for(let e=0;
+ e<t.length;
+ e++){
+ const i=t[e];
+ let s=0,n=0;
+ if(i){
+ for(const t of i.pulses){
+ const i=GQt[t.skillId];
+ i&&this.pulses.push({
+ corpIndex:e,effect:t,spec:i,timer:0}
+ )}
+ for(const t of i.passives)"healCycle"===t.skillId?this.pulses.push({
+ corpIndex:e,effect:t,spec:GQt.healCycle,timer:0}
+ ):"manaGain"===t.skillId?s+=t.value/100:"healPower"===t.skillId&&"ALL"===t.filter&&(n+=t.value)}
+ this.manaGainBonus.push(s),this.healGiveMult.push(1+n/100)}
+ }
+ update(){
+ const t=this.host;
+ if(t){
+ for(let i=0;
+ i<this.manaGainBonus.length;
+ i++){
+ const s=this.manaGainBonus[i];
+ if(!(s<=0))for(const e of t.getAliveCorpUnits(i))e.mana+=s}
+ for(const t of this.pulses)t.timer++,t.timer<t.spec.interval||(t.timer=0,this.fire(t));
+ for(let t=this.timedEffects.length-1;
+ t>=0;
+ t--){
+ const i=this.timedEffects[t];
+ --i.frames>0||(this.timedEffects.splice(t,1),"crit"===i.kind?i.unit.critChance-=i.amount:0!==i.amount&&(i.unit.raidIncomingDamageMult/=i.amount))}
+ }
+ }
+ fire(t){
+ const i=this.host,s=t.effect.value,e=t.spec.duration;
+ switch(t.effect.skillId){
+ case"pulseHealOne":case"pulseHealWide":{
+ const i=this.pickRandom(this.aliveHeroes(),t.spec.count),e=this.healGiveMult[t.corpIndex]??1;
+ for(const t of i)t.heal(s*e,null,!0);
+ break}
+ case"pulseSoldierHeal":{
+ const e=i.getAllAllies().filter(t=>t.isAlive&&!t.removed&&!i.isHeroUnit(t)),n=this.healGiveMult[t.corpIndex]??1;
+ for(const i of this.pickRandom(e,t.spec.count))i.heal(s*n,null,!0);
+ break}
+ case"healCycle":{
+ const e=this.lowestHpUnit(i.getAliveCorpUnits(t.corpIndex));
+ null==e||e.heal(s*(this.healGiveMult[t.corpIndex]??1),null,!0);
+ break}
+ case"pulseCleanse":{
+ const t=i.getAllAllies().filter(t=>t.isAlive&&!t.removed&&this.hasDebuff(t));
+ for(const i of this.pickRandom(t,Math.max(1,Math.round(s))))this.cleanseUnit(i);
+ break}
+ case"pulseAtkBuff":case"pulseRage":{
+ const n="pulseRage"===t.effect.skillId?this.pickRandom(i.getAliveCorpUnits(t.corpIndex).filter(t=>!i.isHeroUnit(t)),t.spec.count):this.pickRandom(this.aliveAllies(),t.spec.count);
+ for(const t of n)t.addAttackDamageBuff(yK.RaidRune_PULSE_ATKDMG,s/100,e);
+ break}
+ case"pulseSpdBuff":for(const i of this.pickRandom(this.aliveAllies(),t.spec.count))i.addAttackSpeedBuff(yK.RaidRune_PULSE_ATKSPD,s/100,e,!0);
+ break;
+ case"pulseCritBuff":for(const i of this.pickRandom(this.aliveAllies(),t.spec.count))i.critChance+=s/100,this.timedEffects.push({
+ unit:i,kind:"crit",amount:s/100,frames:e}
+ );
+ break;
+ case"pulseManaPulse":for(const i of this.pickRandom(this.aliveAllies(),t.spec.count))i.mana+=s;
+ break;
+ case"pulseShield":for(const n of this.pickRandom(i.getAliveCorpUnits(t.corpIndex),t.spec.count)){
+ const t=Math.max(.05,1-s/100);
+ n.raidIncomingDamageMult*=t,this.timedEffects.push({
+ unit:n,kind:"incoming",amount:t,frames:e}
+ )}
+ break;
+ case"pulseFortify":{
+ const n=i.getAliveCorpUnits(t.corpIndex).filter(t=>!i.isHeroUnit(t));
+ for(const i of this.pickRandom(n,t.spec.count))i.addDefenseBuff(yK.RaidRune_PULSE_DEFENSE,s/100,e);
+ break}
+ case"pulseExpose":i.addBossExposure(s,e)}
+ }
+ aliveHeroes(){
+ const t=this.host;
+ return t.getAllAllies().filter(i=>i.isAlive&&!i.removed&&t.isHeroUnit(i))}
+ aliveAllies(){
+ return this.host.getAllAllies().filter(t=>t.isAlive&&!t.removed)}
+ lowestHpUnit(t){
+ let i=null,s=1;
+ for(const e of t){
+ const t=Math.max(1,e.maxHp||e.orgMaxHp||1),n=Math.max(0,Math.min(1,e.hp/t));
+ n<s&&(s=n,i=e)}
+ return i}
+ pickRandom(t,i){
+ if(t.length<=i)return t.slice();
+ const s=this.host,e=t.slice(),n=[];
+ for(let h=0;
+ h<i;
+ h++){
+ const t=Math.floor(s.random01()*e.length);
+ n.push(e[t]),e[t]=e[e.length-1],e.pop()}
+ return n}
+ hasDebuff(t){
+ const i=t;
+ return i.numStun>0||i.numFreeze>0||i.numSlow>0||i.numPoison>0||i.numBleed>0||i.numBurn>0||i.numCurse>0}
+ cleanseUnit(t){
+ const i=t;
+ i.numStun=0,i.numFreeze=0,i.numSlow=0,i.numPoison=0,i.numBleed=0,i.numBurn=0,i.numCurse=0}
+ }
+ ;
+ Vt(BQt,"RunePulseRunner");
+ let UQt=BQt;
+ const FQt=class{
+ constructor(){
+ Kt(this,"host",null),Kt(this,"corpContexts",[]),Kt(this,"crossbowContext",null),Kt(this,"counterProcs",[]),Kt(this,"staminaEffects",[]),Kt(this,"lifeStealPct",[]),Kt(this,"thornsEffects",[]),Kt(this,"exhaustDmgPct",[]),Kt(this,"onExhaustPct",[]),Kt(this,"weakBonusPct",[]),Kt(this,"hpLowEffects",[]),Kt(this,"hpLowFired",[]),Kt(this,"timedIncomings",[]),Kt(this,"hpCheckTimer",0)}
+ setup(t,i,s){
+ this.host=s,this.corpContexts=t,this.crossbowContext=i,this.counterProcs=[],this.staminaEffects=[],this.lifeStealPct=[],this.thornsEffects=[],this.exhaustDmgPct=[],this.onExhaustPct=[],this.weakBonusPct=[],this.hpLowEffects=[],this.hpLowFired=[],this.timedIncomings=[],this.hpCheckTimer=0;
+ for(let e=0;
+ e<t.length;
+ e++){
+ const i=t[e];
+ let s=0,n=0,h=0,r=0,o=null;
+ if(i){
+ for(const t of i.passives)"staminaHit"===t.skillId?this.staminaEffects.push({
+ corpIndex:e,effect:t}
+ ):"lifeSteal"===t.skillId?s+=t.value:"thorns"===t.skillId?this.thornsEffects.push({
+ corpIndex:e,effect:t}
+ ):"exhaustDmg"===t.skillId?n+=t.value:"weakBonus"===t.skillId&&(h+=t.value);
+ for(const t of i.procs)"comboBleed"===t.skillId||"comboBreak"===t.skillId?this.counterProcs.push({
+ corpIndex:e,effect:t,count:0,stackTimers:[]}
+ ):"onExhaust"===t.skillId?r+=t.value:"onHpLow"===t.skillId&&(o=t)}
+ this.lifeStealPct.push(s),this.exhaustDmgPct.push(n),this.onExhaustPct.push(r),this.weakBonusPct.push(h),this.hpLowEffects.push(o),this.hpLowFired.push(!1)}
+ }
+ onDamage(t,i,s){
+ const e=this.host;
+ if(!e)return;
+ const n=e.getBoss();
+ n&&(i===n?this.onAllyHitBoss(t,s):t===n&&this.onBossHitAlly(i,s))}
+ onAllyHitBoss(t,i){
+ const s=this.host,e=s.getCorpIndexOf(t);
+ if(e<0)return;
+ const n=s.getBoss();
+ if(this.staminaEffects.length>0&&n.addExhaustion){
+ const i=this.traitsOf(t);
+ let s=0;
+ for(const t of this.staminaEffects)t.corpIndex===e&&GJt(t.effect.filter,i)&&(s+=t.effect.value);
+ s>0&&n.addExhaustion(s)}
+ const h=this.lifeStealPct[e]??0;
+ h>0&&t.isAlive&&t.heal(i*h/100,null,!1);
+ for(const r of this.counterProcs){
+ if(r.corpIndex!==e)continue;
+ r.count++;
+ const t=Math.max(1,r.effect.param);
+ r.count<t||(r.count=0,this.fireCounterProc(r,n))}
+ }
+ fireCounterProc(t,i){
+ if("comboBleed"===t.effect.skillId){
+ if(t.stackTimers.length>=8)return;
+ this.host.addBossExposure(t.effect.value,600,!0),t.stackTimers.push(600),this.host.announceBossDebuff(`${
+ SG.getText("GAME_1462","출혈")}
+  ×${
+ t.stackTimers.length}
+ `)}
+ else"comboBreak"===t.effect.skillId&&(t.stackTimers.push(600),t.stackTimers.length>9&&t.stackTimers.shift(),this.applyComboBreakDebuff(t,i),this.host.announceBossDebuff(`${
+ SG.getText("GAME_1499","분쇄")}
+  ×${
+ t.stackTimers.length}
+ `))}
+ applyComboBreakDebuff(t,i){
+ i.removeDefenseBuff(yK.RaidRune_COMBO_DEFENSE);
+ const s=t.stackTimers.length;
+ if(s<=0)return;
+ let e=0;
+ for(const n of t.stackTimers)n>e&&(e=n);
+ i.addDefenseBuff(yK.RaidRune_COMBO_DEFENSE,-t.effect.value*s/100,e)}
+ onBossHitAlly(t,i){
+ const s=this.host,e=s.getCorpIndexOf(t);
+ if(e<0)return;
+ const n=s.getBoss();
+ if(n&&this.thornsEffects.length>0&&n.isAlive){
+ const i=this.traitsOf(t);
+ let s=0;
+ for(const t of this.thornsEffects)t.corpIndex===e&&GJt(t.effect.filter,i)&&(s+=t.effect.value);
+ s>0&&(n.health-=t.atkDmg*s/100)}
+ }
+ onRaidStunStart(t){
+ const i=this.host;
+ if(i)for(let s=0;
+ s<this.corpContexts.length;
+ s++){
+ const e=this.exhaustDmgPct[s]??0,n=this.onExhaustPct[s]??0;
+ if(!(e<=0&&n<=0))for(const h of i.getAliveCorpUnits(s))e>0&&h.addAttackDamageBuff(yK.RaidRune_PULSE_ATKDMG,e/100,t),n>0&&h.addAttackSpeedBuff(yK.RaidRune_PULSE_ATKSPD,n/100,t,!0)}
+ }
+ onRaidStunEnd(){
+ }
+ onWeakWindowOpen(){
+ const t=this.host;
+ if(t)for(let i=0;
+ i<this.corpContexts.length;
+ i++){
+ const s=this.weakBonusPct[i]??0;
+ if(!(s<=0))for(const e of t.getAliveCorpUnits(i))e.addAttackDamageBuff(yK.RaidRune_PULSE_ATKDMG,s/100,180)}
+ }
+ onWeakWindowClose(){
+ }
+ onInterruptSuccess(){
+ var t;
+ const i=this.host;
+ if(!i)return;
+ const s=this.crossbowContext;
+ if(!s)return;
+ const e=s.procs.find(t=>"onInterrupt"===t.skillId);
+ if(e){
+ const t=60*Math.max(1,e.param);
+ for(const s of i.getAllAllies())s.isAlive&&!s.removed&&s.addAttackDamageBuff(yK.RaidRune_PULSE_ATKDMG,e.value/100,t)}
+ const n=s.passives.find(t=>"interruptExtra"===t.skillId);
+ if(n&&n.value>0){
+ const s=i.getBoss();
+ for(let i=0;
+ i<n.value;
+ i++)null==(t=null==s?void 0:s.applyExtraInterruptDebuff)||t.call(s)}
+ }
+ update(){
+ const t=this.host;
+ if(t){
+ for(const i of this.counterProcs){
+ const s=i.stackTimers.length;
+ if(0!==s){
+ for(let t=i.stackTimers.length-1;
+ t>=0;
+ t--)--i.stackTimers[t]<=0&&i.stackTimers.splice(t,1);
+ if("comboBreak"===i.effect.skillId&&i.stackTimers.length!==s){
+ const s=t.getBoss();
+ s&&s.isAlive&&!s.removed&&this.applyComboBreakDebuff(i,s)}
+ }
+ }
+ if(this.hpCheckTimer++,this.hpCheckTimer>=30){
+ this.hpCheckTimer=0;
+ for(let i=0;
+ i<this.hpLowEffects.length;
+ i++){
+ const s=this.hpLowEffects[i];
+ if(!s||this.hpLowFired[i])continue;
+ const e=t.getAliveCorpUnits(i);
+ if(0===e.length)continue;
+ let n=0,h=0;
+ for(const t of e)n+=Math.max(0,t.hp),h+=Math.max(1,t.maxHp||t.orgMaxHp||1);
+ if(n/h>=.2)continue;
+ this.hpLowFired[i]=!0;
+ const r=Math.max(.05,1-s.value/100);
+ for(const t of e)t.raidIncomingDamageMult*=r,this.timedIncomings.push({
+ unit:t,mult:r,frames:480}
+ )}
+ }
+ for(let t=this.timedIncomings.length-1;
+ t>=0;
+ t--){
+ const i=this.timedIncomings[t];
+ --i.frames>0||(this.timedIncomings.splice(t,1),0!==i.mult&&(i.unit.raidIncomingDamageMult/=i.mult))}
+ }
+ }
+ traitsOf(t){
+ return{
+ isHero:this.host.isHeroUnit(t),unitType:t.unitType,tribe:t.tribe}
+ }
+ getComboStatus(){
+ let t=0,i=0,s=0,e=0;
+ for(const n of this.counterProcs)if("comboBreak"===n.effect.skillId){
+ n.stackTimers.length>t&&(t=n.stackTimers.length);
+ for(const t of n.stackTimers)t>i&&(i=t)}
+ else if("comboBleed"===n.effect.skillId){
+ s+=n.stackTimers.length;
+ for(const t of n.stackTimers)t>e&&(e=t)}
+ return{
+ breakStacks:t,breakRemainFrames:i,bleedStacks:s,bleedRemainFrames:e}
+ }
+ }
+ ;
+ Vt(FQt,"RuneProcRunner");
+ let HQt=FQt;
+ const WQt={
+ TANK:14175295,DEALER:3063663,HEALER:16763212,SUPPORT:5994751,BREAKER:11754495,CROSSBOW:10135480}
+ ,$Qt=class t{
+ constructor(){
+ Kt(this,"corpContexts",[]),Kt(this,"crossbowContext",null),Kt(this,"initialized",!1),Kt(this,"activeRunner",new LQt),Kt(this,"pulseRunner",new UQt),Kt(this,"procRunner",new HQt)}
+ async init(i){
+ var s;
+ await OQt.getInstance().ensureLoaded(),this.corpContexts=[];
+ for(let e=0;
+ e<t.CORP_COUNT;
+ e++)this.corpContexts.push(RQt.resolveCorp(e,null==(s=null==i?void 0:i.corps)?void 0:s[e]));
+ this.crossbowContext=RQt.resolveCrossbow(null==i?void 0:i.crossbow),this.initialized=!0,this.logSummary()}
+ setupRunners(t){
+ const i=[...this.corpContexts,this.crossbowContext],s={
+ getAliveCorpUnits:Vt(i=>t.getAliveCorpUnits(i),"getAliveCorpUnits"),getAllAllies:Vt(()=>t.getAllAllies(),"getAllAllies"),getBoss:Vt(()=>t.getBoss(),"getBoss"),forceAggro:Vt((i,s)=>t.forceAggro(i,s),"forceAggro"),isHeroUnit:Vt(i=>t.isHeroUnit(i),"isHeroUnit"),announceBossDebuff:Vt(i=>t.announceBossDebuff(i),"announceBossDebuff")}
+ ;
+ this.activeRunner.setup(i,s);
+ const e={
+ getAliveCorpUnits:Vt(i=>t.getAliveCorpUnits(i),"getAliveCorpUnits"),getAllAllies:Vt(()=>t.getAllAllies(),"getAllAllies"),getBoss:Vt(()=>t.getBoss(),"getBoss"),isHeroUnit:Vt(i=>t.isHeroUnit(i),"isHeroUnit"),random01:Vt(()=>t.random01(),"random01"),addBossExposure:Vt((t,i)=>this.activeRunner.addBossExposure(t,i),"addBossExposure")}
+ ;
+ this.pulseRunner.setup(this.corpContexts,e,this.crossbowContext);
+ const n={
+ getAliveCorpUnits:Vt(i=>t.getAliveCorpUnits(i),"getAliveCorpUnits"),getAllAllies:Vt(()=>t.getAllAllies(),"getAllAllies"),getBoss:Vt(()=>t.getBoss(),"getBoss"),isHeroUnit:Vt(i=>t.isHeroUnit(i),"isHeroUnit"),getCorpIndexOf:Vt(i=>t.getCorpIndexOf(i),"getCorpIndexOf"),addBossExposure:Vt((t,i,s)=>this.activeRunner.addBossExposure(t,i,s),"addBossExposure"),announceBossDebuff:Vt(i=>t.announceBossDebuff(i),"announceBossDebuff")}
+ ;
+ this.procRunner.setup(this.corpContexts,this.crossbowContext,n);
+ const h=t.getBoss();
+ h&&"exhaustStunExtendMult"in h&&(h.exhaustStunExtendMult=1+this.sumAllSlots("exhaustTime")/100,h.exhaustStunExtendSec=this.getCrossbowStat("weakpointStun"),h.weakWindowExtendMult=1+this.getCrossbowStat("weakWindow")/100)}
+ isReady(){
+ return this.initialized}
+ update(){
+ this.activeRunner.update(),this.pulseRunner.update(),this.procRunner.update()}
+ activate(t){
+ return this.activeRunner.activate(t)}
+ getHudDefs(){
+ const t=[];
+ for(const i of this.corpContexts)(null==i?void 0:i.active)?t.push({
+ label:OQt.getInstance().getEmblemName(i.emblem),shortLabel:OQt.getInstance().getEmblemShortName(i.emblem),role:i.emblem.role,color:WQt[i.emblem.role]??16777215,cooldownFrames:i.active.coolFrames,activeDurationFrames:i.active.durFrames}
+ ):t.push(null);
+ return t}
+ getHudState(t){
+ const i=this.activeRunner.getSlotState(t);
+ return{
+ cooldownRemainingFrames:(null==i?void 0:i.cooldown)??0,cooldownFrames:(null==i?void 0:i.coolTotal)??0,activeRemainingFrames:(null==i?void 0:i.activeRemaining)??0,activeDurationFrames:(null==i?void 0:i.activeTotal)??0}
+ }
+ getCorpContext(t){
+ return this.corpContexts[t]??null}
+ getCrossbowContext(){
+ return this.crossbowContext}
+ getAggroMult(t){
+ let i=1;
+ const s=this.corpContexts[t];
+ if(s)for(const e of s.passives)"aggroGen"!==e.skillId&&"aggroDown"!==e.skillId||(i*=1+e.value/100);
+ return i*this.activeRunner.getActiveAggroMult(t)}
+ getCrossbowStat(t){
+ const i=this.crossbowContext;
+ if(!i)return 0;
+ let s=0;
+ for(const e of i.passives)e.skillId===t&&(s+=e.value);
+ return s}
+ getHarpoonWound(){
+ var t;
+ const i=null==(t=this.crossbowContext)?void 0:t.active;
+ return i?{
+ pct:i.value+this.getCrossbowStat("weakpointWound"),frames:i.durFrames+60*this.getCrossbowStat("woundLinger")}
+ :{
+ pct:0,frames:0}
+ }
+ addBossExposure(t,i){
+ this.activeRunner.addBossExposure(t,i)}
+ getBossExposureRemain(){
+ return this.activeRunner.getBossExposureRemain()}
+ getBossExposureTotal(){
+ return this.activeRunner.getBossExposureTotal()}
+ getBossExposureEntries(){
+ return this.activeRunner.getBossExposureEntries()}
+ getCorpStat(t,i){
+ const s=this.corpContexts[t];
+ if(!s)return 0;
+ let e=0;
+ for(const n of s.passives)n.skillId===i&&(e+=n.value);
+ return e}
+ isActiveRunningById(t){
+ var i,s;
+ for(let e=0;
+ e<this.corpContexts.length;
+ e++)if((null==(s=null==(i=this.corpContexts[e])?void 0:i.active)?void 0:s.skillId)===t&&this.activeRunner.isActiveRunning(e))return!0;
+ return!1}
+ getComboStatus(){
+ return this.procRunner.getComboStatus()}
+ onDamage(t,i,s){
+ this.procRunner.onDamage(t,i,s)}
+ buildBossEventSink(){
+ return{
+ onRaidStunStart:Vt(t=>this.procRunner.onRaidStunStart(t),"onRaidStunStart"),onRaidStunEnd:Vt(()=>this.procRunner.onRaidStunEnd(),"onRaidStunEnd"),onWeakWindowOpen:Vt(()=>this.procRunner.onWeakWindowOpen(),"onWeakWindowOpen"),onWeakWindowClose:Vt(()=>this.procRunner.onWeakWindowClose(),"onWeakWindowClose"),onInterruptSuccess:Vt(()=>this.procRunner.onInterruptSuccess(),"onInterruptSuccess")}
+ }
+ sumAllSlots(t){
+ let i=0;
+ for(const s of[...this.corpContexts,this.crossbowContext])if(s)for(const e of s.passives)e.skillId===t&&(i+=e.value);
+ return i}
+ logSummary(){
+ const t=[];
+ for(let s=0;
+ s<this.corpContexts.length;
+ s++){
+ const i=this.corpContexts[s];
+ i?t.push(`corp${
+ s+1}
+  ${
+ i.emblem.name}
+ (p${
+ i.passives.length}
+ /펄스${
+ i.pulses.length}
+ /프록${
+ i.procs.length}
+ /개조${
+ i.activeMods.length}
+ )`):t.push(`corp${
+ s+1}
+ :없음`)}
+ const i=this.crossbowContext;
+ t.push(i?`석궁 ${
+ i.emblem.name}
+ (p${
+ i.passives.length}
+ /프록${
+ i.procs.length}
+ /개조${
+ i.activeMods.length}
+ )`:"석궁:없음")}
+ }
+ ;
+ Vt($Qt,"RaidEmblemSystem"),Kt($Qt,"CORP_COUNT",5),Kt($Qt,"CROSSBOW_SLOT",LQt.CROSSBOW_SLOT);
+ let jQt=$Qt;
+ const VQt=class t{
+ constructor(){
+ Kt(this,"runes",new Map),Kt(this,"slots",t.emptySlots()),Kt(this,"presets",new Map),Kt(this,"raidCoinBalance",0),Kt(this,"drawState",{
+ adRemain:0,gemRemain:0,ticket:0}
+ ),Kt(this,"loaded",!1),Kt(this,"loading",null)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ isLoaded(){
+ return this.loaded}
+ async ensureLoaded(t=!1){
+ return!(!this.loaded||t)||(this.loading||(this.loading=(async()=>{
+ try{
+ const t=await rD.getInstance().rune.getAll();
+ return!(!(null==t?void 0:t.success)||!t.body||(this.applyGetAll(t.body),this.loaded=!0,0))}
+ catch(Xst){
+ return!1}
+ finally{
+ this.loading=null}
+ }
+ )()),this.loading)}
+ applyGetAll(i){
+ this.runes.clear();
+ for(const s of i.runes??[]){
+ const i=t.toVO(s);
+ this.runes.set(i.id,i)}
+ this.applyLoadoutStr(i.loadout??""),this.presets.clear();
+ for(const t of i.presets??[])this.presets.set(Number(t.preset),String(t.slots??""));
+ void 0!==i.raidCoin&&(this.raidCoinBalance=Number(i.raidCoin)||0,AD.myRaidCoins=this.raidCoinBalance,AD.myMembershipVO&&(AD.myMembershipVO.raidCoin=this.raidCoinBalance)),this.applyDrawState(i.drawState)}
+ applyDrawState(t){
+ t&&(this.drawState={
+ adRemain:Number(t.adRemain)||0,gemRemain:Number(t.gemRemain)||0,ticket:Number(t.ticket)||0}
+ )}
+ getDrawState(){
+ return{
+ ...this.drawState}
+ }
+ getRaidCoin(){
+ return this.raidCoinBalance}
+ applyLoadoutStr(i){
+ this.slots=t.parseSlots(i)}
+ static parseSlots(i){
+ const s=String(i).split("|"),e=[];
+ for(let n=0;
+ n<t.SLOT_COUNT;
+ n++)e.push((s[n]??"").split(",").map(Number).filter(t=>Number.isFinite(t)&&t>0));
+ return e}
+ static emptySlots(){
+ return Array.from({
+ length:t.SLOT_COUNT}
+ ,()=>[])}
+ static toVO(t){
+ return{
+ id:Number(t.id),kindNum:Number(t.kindNum),grade:Number(t.grade),subId:Number(t.subId??-1),level:Number(t.level??0),locked:!!t.locked}
+ }
+ getRuneById(t){
+ return this.runes.get(t)??null}
+ getSlotRuneIds(t){
+ return[...this.slots[t]??[]]}
+ getSlotRuneVOs(t){
+ const i=[];
+ for(const s of this.slots[t]??[]){
+ const t=this.runes.get(s);
+ t&&i.push(t)}
+ return i}
+ getSlotRunes(t){
+ return this.getSlotRuneVOs(t).map(t=>({
+ kindNum:t.kindNum,grade:t.grade,subId:t.subId}
+ ))}
+ getRunesByBand(t){
+ const i=[];
+ for(const s of this.runes.values())Math.floor(s.kindNum/100)===t&&i.push(s);
+ return i.sort((t,i)=>i.grade-t.grade||t.kindNum-i.kindNum||t.id-i.id)}
+ getEquippedIdSet(){
+ const t=new Set;
+ for(const i of this.slots)for(const s of i)t.add(s);
+ for(const i of this.presets.values())for(const s of i.split("|"))for(const i of s.split(",")){
+ const s=Number(i);
+ s>0&&t.add(s)}
+ return t}
+ getLoadoutData(){
+ return{
+ corps:[0,1,2,3,4].map(t=>this.getSlotRunes(t)),crossbow:this.getSlotRunes(t.CROSSBOW_SLOT)}
+ }
+ async equipSlot(t,i){
+ var s;
+ const e=await rD.getInstance().rune.equipSlot(t,i);
+ return(null==e?void 0:e.success)?(this.applyLoadoutStr((null==(s=e.body)?void 0:s.loadout)??""),{
+ ok:!0}
+ ):{
+ ok:!1,error:null==e?void 0:e.error}
+ }
+ async merge(i){
+ var s,e;
+ const n=await rD.getInstance().rune.merge(i);
+ if(!(null==n?void 0:n.success))return{
+ ok:!1,error:null==n?void 0:n.error}
+ ;
+ for(const t of(null==(s=n.body)?void 0:s.consumedIds)??i)this.runes.delete(Number(t));
+ const h=(null==(e=n.body)?void 0:e.rune)?t.toVO(n.body.rune):void 0;
+ return h&&this.runes.set(h.id,h),{
+ ok:!0,rune:h}
+ }
+ async lock(t,i){
+ const s=await rD.getInstance().rune.lock(t,i);
+ if(!(null==s?void 0:s.success))return{
+ ok:!1,error:null==s?void 0:s.error}
+ ;
+ const e=this.runes.get(t);
+ return e&&(e.locked=i),{
+ ok:!0}
+ }
+ async savePreset(t){
+ var i;
+ const s=await rD.getInstance().rune.savePreset(t);
+ return(null==s?void 0:s.success)?(this.presets.set(t,String((null==(i=s.body)?void 0:i.slots)??"")),{
+ ok:!0}
+ ):{
+ ok:!1,error:null==s?void 0:s.error}
+ }
+ async applyPreset(t){
+ var i;
+ const s=await rD.getInstance().rune.applyPreset(t);
+ return(null==s?void 0:s.success)?(this.applyLoadoutStr((null==(i=s.body)?void 0:i.loadout)??""),{
+ ok:!0}
+ ):{
+ ok:!1,error:null==s?void 0:s.error}
+ }
+ async draw(i){
+ var s,e,n,h,r,o;
+ const a=await rD.getInstance().rune.draw(i);
+ if(!(null==a?void 0:a.success))return{
+ ok:!1,error:null==a?void 0:a.error}
+ ;
+ const c=[];
+ for(const l of(null==(s=a.body)?void 0:s.runes)??[]){
+ const i=t.toVO(l);
+ this.runes.set(i.id,i),c.push(i)}
+ return this.applyDrawState(null==(e=a.body)?void 0:e.drawState),void 0!==(null==(n=a.body)?void 0:n.raidCoin)&&(this.raidCoinBalance=Number(a.body.raidCoin)||0,AD.myRaidCoins=this.raidCoinBalance,AD.myMembershipVO&&(AD.myMembershipVO.raidCoin=this.raidCoinBalance)),{
+ ok:!0,runes:c,gem:null==(h=a.body)?void 0:h.gem,raidCoin:null==(r=a.body)?void 0:r.raidCoin,ticket:null==(o=a.body)?void 0:o.ticket}
+ }
+ async seedBandIfNeeded(i){
+ if(!this.loaded)return;
+ if(this.getRunesByBand(i).length>0)return;
+ const s=OQt.getInstance(),e="ABCDEF"[i-1],n=[];
+ for(const c of s.getRunesByType(e)){
+ for(let i=1;
+ i<=5;
+ i++)s.isRuneAvailableAtGrade(c,i)&&n.push({
+ kindNum:c.kindNum,grade:i,count:t.SEED_COUNT}
+ );
+ s.isRuneAvailableAtGrade(c,6)&&n.push({
+ kindNum:c.kindNum,grade:6,count:1}
+ )}
+ if(0===n.length)return;
+ const h=[];
+ let r=[],o=0;
+ for(const c of n)o+c.count>t.GRANT_CHUNK_ROWS&&(h.push(r),r=[],o=0),r.push(c),o+=c.count;
+ r.length>0&&h.push(r);
+ let a=null;
+ for(const t of h){
+ const i=await rD.getInstance().rune.devGrant(t);
+ if(!(null==i?void 0:i.success))break;
+ a=i.body}
+ a&&this.applyGetAll(a)}
+ static errorText(t){
+ switch(t){
+ case"RUNE_NOT_FOUND":return SG.getText("GAME_1353","크리스탈을 찾을 수 없습니다");
+ case"RUNE_INVALID_SLOT":return SG.getText("GAME_1354","이 슬롯에 장착할 수 없는 크리스탈입니다");
+ case"RUNE_MERGE_INVALID":return SG.getText("GAME_1355","합성 조건이 맞지 않습니다");
+ case"RUNE_EQUIPPED":return SG.getText("GAME_1356","장착 중인 크리스탈은 재료로 사용할 수 없습니다");
+ case"RUNE_LOCKED":return SG.getText("GAME_1357","잠긴 크리스탈은 재료로 사용할 수 없습니다");
+ case"INSUFFICIENT_RAID_COIN":return SG.getText("GAME_1347","레이드 코인이 부족합니다");
+ case"INSUFFICIENT_GEM":return SG.getText("GAME_1358","보석이 부족합니다");
+ case"RUNE_DRAW_EXHAUSTED":return SG.getText("GAME_1352","오늘은 더 뽑을 수 없습니다 (매일 00시 초기화)");
+ case"INSUFFICIENT_TICKET":return SG.getText("GAME_1348","뽑기권이 부족합니다");
+ default:return null}
+ }
+ }
+ ;
+ Vt(VQt,"RuneDataManager"),Kt(VQt,"_instance"),Kt(VQt,"CROSSBOW_SLOT",5),Kt(VQt,"MAX_RUNES",5),Kt(VQt,"SLOT_COUNT",6),Kt(VQt,"MERGE_COUNT",5),Kt(VQt,"GRADE_MAX",6),Kt(VQt,"TEST_SEED_INVENTORY",!0),Kt(VQt,"SEED_COUNT",5),Kt(VQt,"GRANT_CHUNK_ROWS",450);
+ let KQt=VQt;
+ const zQt=class t{
+ constructor(){
+ Kt(this,"pool",[]),Kt(this,"active",[])}
+ announce(i,s,e,n=t.DEFAULT_COLOR,h=t.DEFAULT_SIZE){
+ const r=this.obtain();
+ r&&(r.text=i,r.style.fill=n,r.style.fontSize=h,r.position.set(s,e-this.active.length*t.STACK_OFFSET),r.alpha=0,r.visible=!0,this.active.push({
+ text:r,frames:0}
+ ))}
+ update(){
+ for(let i=this.active.length-1;
+ i>=0;
+ i--){
+ const s=this.active[i];
+ s.frames++,s.text.y-=t.RISE_PER_FRAME;
+ const e=s.frames/t.LIFE_FRAMES;
+ s.text.alpha=e<.12?e/.12:e>.65?(1-e)/.35:1,s.frames>=t.LIFE_FRAMES&&(s.text.visible=!1,this.active.splice(i,1))}
+ }
+ dispose(){
+ for(const t of this.pool)t.removeFromParent(),t.destroy();
+ this.pool=[],this.active=[]}
+ obtain(){
+ for(const t of this.pool)if(!t.visible)return t;
+ if(this.pool.length>=t.POOL_SIZE)return null;
+ const i=new Hg({
+ text:"",style:new Ag({
+ fontSize:t.DEFAULT_SIZE,fill:t.DEFAULT_COLOR,fontWeight:"bold",stroke:{
+ color:16777215,width:4}
+ ,dropShadow:{
+ color:16777215,alpha:.7,blur:6,distance:0,angle:0}
+ }
+ )}
+ );
+ return i.anchor.set(.5,1),i.visible=!1,i.eventMode="none",sB.getInstance().addChild(i),this.pool.push(i),i}
+ }
+ ;
+ Vt(zQt,"RaidBossAnnouncer"),Kt(zQt,"POOL_SIZE",8),Kt(zQt,"LIFE_FRAMES",84),Kt(zQt,"RISE_PER_FRAME",.5),Kt(zQt,"STACK_OFFSET",30),Kt(zQt,"DEFAULT_COLOR",16726832),Kt(zQt,"DEFAULT_SIZE",24);
+ let qQt=zQt;
+ async function YQt(){
+ QA.hasSheet("UI_RAID")||await QA.generateTexture("UI_RAID","ktx2",!1)}
+ function XQt(t,i,s){
+ return QQt("Raid",t,i,s)}
+ function JQt(t,i,s){
+ return QQt("MRaid",t,i,s)}
+ function QQt(t,i,s,e){
+ if(!QA.hasSheet("UI_RAID"))return null;
+ const n=QA.getSheet("UI_RAID").textures,h=`${
+ t}
+ ${
+ i}
+ _${
+ s}
+ _${
+ e?"on":"off"}
+ `;
+ for(const r of[`${
+ h}
+ .png`,h,`${
+ h.toLowerCase()}
+ .png`,h.toLowerCase()])if(n[r])return n[r];
+ return null}
+ Vt(YQt,"ensureRaidUiSheet"),Vt(XQt,"getRaidBossTexture"),Vt(JQt,"getRaidBossHeaderTexture"),Vt(QQt,"lookupRaidTexture");
+ const ZQt={
+ "Buff_AtkUp.png":["GAME_1453","공격력 증가","GAME_1454","일정 시간 공격력이 증가합니다."],"Buff_AtkSpeedUp.png":["GAME_1455","공격속도 증가","GAME_1456","일정 시간 공격하는 속도가 증가합니다."],"Buff_DamageReduction.png":["GAME_1457","피해 감소","GAME_1458","일정 시간 받는 피해가 감소합니다."],"Buff_Heal.png":["GAME_1459","지속 회복","GAME_1460","치유의 기운이 지속적으로 체력을 회복시킵니다."]}
+ ;
+ function tZt(t){
+ return{
+ name:SG.getText(t[0],t[1]),desc:t[3]?SG.getText(t[2],t[3]):""}
+ }
+ function iZt(){
+ return{
+ name:SG.getText("GAME_1461","효과"),desc:""}
+ }
+ function sZt(t){
+ const i=ZQt[t];
+ return i?tZt(i):iZt()}
+ function eZt(t,i){
+ if(t.startsWith("wound"))return tZt("Buff_Injury2.png"===i?["GAME_1462","출혈","GAME_1463","상처가 벌어져 일정 시간 받는 피해가 증가합니다."]:["GAME_1464","약점 노출","GAME_1465","약점이 노출되어 일정 시간 받는 피해가 증가합니다."]);
+ if(t.startsWith("def"))return tZt(["GAME_1466","방어력 감소","GAME_1467","일정 시간 물리/마법 방어력이 감소합니다."]);
+ if(t.startsWith("atk"))return tZt(["GAME_1468","공격력 감소","GAME_1469","일정 시간 공격력이 감소합니다."]);
+ if(t.startsWith("spd"))return tZt(["GAME_1470","공격속도 감소","GAME_1471","일정 시간 공격하는 속도가 감소합니다."]);
+ if(t.startsWith("move"))return tZt(["GAME_1472","이동속도 감소","GAME_1473","일정 시간 이동 속도가 감소합니다."]);
+ if("taunt"===t)return tZt(["GAME_1474","도발","GAME_1475","도발당해 도발한 부대만 바라보고 공격합니다."]);
+ if("groggy"===t)return tZt(["GAME_1408","무방비","GAME_1476","탈진해 무방비 상태입니다. 받는 피해가 크게 증가합니다."]);
+ if(t.startsWith("vuln-")){
+ const i=t.slice(5),s=Szt(i)||i;
+ return{
+ name:Tzt(i),desc:SG.getValueReplace("GAME_1477","\\{
+ 0\\}
+ ",s,`${
+ s}
+ 에 취약해져 일정 시간 받는 피해가 증가합니다.`)}
+ }
+ return iZt()}
+ Vt(tZt,"resolve"),Vt(iZt,"unknownInfo"),Vt(sZt,"getCorpBuffInfo"),Vt(eZt,"getBossDebuffInfo");
+ const nZt=class t{
+ constructor(){
+ Kt(this,"root",null),Kt(this,"provider",null),Kt(this,"title",""),Kt(this,"signature",""),Kt(this,"metaTexts",[]),Kt(this,"lastMetaStrs",[]),Kt(this,"remainTexts",[]),Kt(this,"lastRemainStrs",[])}
+ get isOpen(){
+ return null!==this.root}
+ show(t,i){
+ this.destroy(),this.title=t,this.provider=i,this.rebuild(i())}
+ refresh(){
+ if(!this.root||!this.provider)return;
+ const i=this.provider();
+ if(0!==i.length)if(i.map(t=>t.key).join("|")===this.signature)for(let s=0;
+ s<i.length;
+ s++){
+ const e=t.metaStr(i[s]);
+ e!==this.lastMetaStrs[s]&&(this.metaTexts[s].text=e,this.lastMetaStrs[s]=e);
+ const n=t.remainStr(i[s]),h=this.remainTexts[s];
+ h&&n!==this.lastRemainStrs[s]&&(h.text=n,this.lastRemainStrs[s]=n)}
+ else this.rebuild(i);
+ else this.destroy()}
+ static metaStr(t){
+ return t.valueText?`(${
+ t.valueText}
+ )`:""}
+ static remainStr(t){
+ return void 0===t.remainSec?"":`${
+ Math.max(0,Math.ceil(t.remainSec))}
+ s`}
+ rebuild(i){
+ const s=this.provider;
+ if(this.destroy(),this.provider=s,0===i.length)return;
+ this.signature=i.map(t=>t.key).join("|");
+ const e=VA.stageWidth||640,n=VA.stageHeight||1130,h=new Ge;
+ h.label="RaidBuffInfoPopup",this.root=h,e5t.getInstance().addChild(h);
+ const r=(new Lf).rect(0,0,e,n).fill({
+ color:0,alpha:.55}
+ );
+ r.eventMode="static",r.on("pointerup",()=>queueMicrotask(()=>this.destroy())),h.addChild(r);
+ const o=t.PANEL_W,a=t.ROW_H,c=58+i.length*a+20,l=(e-o)/2,u=(n-c)/2-60,d=(new Lf).roundRect(l,u,o,c,14).fill({
+ color:2103828,alpha:.96}
+ ).stroke({
+ width:2,color:16765562,alpha:.9}
+ );
+ d.eventMode="static",h.addChild(d);
+ const f=new Hg({
+ text:this.title,style:new Ag({
+ fontSize:24,fill:16769440,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ )}
+ );
+ f.anchor.set(.5,0),f.position.set(l+o/2,u+14),h.addChild(f);
+ const p=t.ICON_SIZE,g=new Ag({
+ fontSize:19,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ ),m=new Ag({
+ fontSize:16,fill:9232524,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ ),w=new Ag({
+ fontSize:14,fill:12303291,stroke:{
+ color:0,width:2}
+ ,wordWrap:!0,wordWrapWidth:o-24-(18+p+12),breakWords:!0}
+ ),v=new Ag({
+ fontSize:13,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ );
+ this.metaTexts=[],this.lastMetaStrs=[],this.remainTexts=[],this.lastRemainStrs=[];
+ const b=QA.hasSheet("UI_RAID");
+ for(let _=0;
+ _<i.length;
+ _++){
+ const s=i[_],e=u+58+_*a,n=l+18+p+12;
+ if(b){
+ const t=new He(QA.getTexture("UI_RAID",s.frame));
+ t.width=p,t.height=p,t.position.set(l+18,e+4),h.addChild(t)}
+ const r=t.remainStr(s);
+ if(r){
+ const t=new Hg({
+ text:r,style:v}
+ );
+ t.anchor.set(.5,0),t.position.set(l+18+p/2,e+4+p+1),h.addChild(t),this.remainTexts.push(t)}
+ else this.remainTexts.push(null);
+ this.lastRemainStrs.push(r);
+ const c=new Hg({
+ text:s.name,style:g}
+ );
+ c.anchor.set(0,0),c.position.set(n,e),h.addChild(c);
+ const d=t.metaStr(s),f=new Hg({
+ text:d,style:m}
+ );
+ f.anchor.set(0,0),f.position.set(n+c.width+10,e+2),h.addChild(f),this.metaTexts.push(f),this.lastMetaStrs.push(d);
+ const y=new Hg({
+ text:s.desc,style:w}
+ );
+ if(y.anchor.set(0,0),y.position.set(n,e+28),h.addChild(y),_<i.length-1){
+ const t=(new Lf).moveTo(l+16,e+a-6).lineTo(l+o-16,e+a-6).stroke({
+ width:1,color:16777215,alpha:.1}
+ );
+ h.addChild(t)}
+ }
+ }
+ destroy(){
+ var t;
+ this.provider=null,this.signature="",this.metaTexts=[],this.lastMetaStrs=[],this.remainTexts=[],this.lastRemainStrs=[],this.root&&(null==(t=this.root.parent)||t.removeChild(this.root),this.root.destroy({
+ children:!0}
+ ),this.root=null)}
+ }
+ ;
+ Vt(nZt,"RaidBuffInfoPopup"),Kt(nZt,"PANEL_W",460),Kt(nZt,"ROW_H",66),Kt(nZt,"ICON_SIZE",34);
+ let hZt=nZt;
+ const rZt=class t{
+ constructor(i,s,e,n,h,r=[],o,a,c=0,l=0,u=!1,d=!1){
+ Kt(this,"root"),Kt(this,"bossFace",new Y2),Kt(this,"bossFaceTapTarget",null),Kt(this,"bossTargetHero",null),Kt(this,"bossTargetHeroX",0),Kt(this,"bossTargetHeroBottomY",0),Kt(this,"bossTargetCorp",-1),Kt(this,"corpHeroKindNums",[]),Kt(this,"bossName"),Kt(this,"bossMult"),Kt(this,"bossHpText"),Kt(this,"bossBar",new Lf),Kt(this,"bossBarW",280),Kt(this,"bossSeparator",new Lf),Kt(this,"bossBuffIcons",[]),Kt(this,"bossBuffLabels",[]),Kt(this,"bossBuffRings",[]),Kt(this,"bossBuffValueTexts",[]),Kt(this,"bossBuffFrames",[]),Kt(this,"bossBuffPrevRemainByKey",{
+ }
+ ),Kt(this,"bossBuffPopByKey",{
+ }
+ ),Kt(this,"bossBuffCallout",null),Kt(this,"bossBuffCalloutFrames",0),Kt(this,"bossBuffCalloutShown",new Set),Kt(this,"corpBuffIcons",[]),Kt(this,"corpBuffFrames",[]),Kt(this,"corpBuffPopByKey",{
+ }
+ ),Kt(this,"bossBuffTick",0),Kt(this,"bossBuffRightX",0),Kt(this,"bossBuffY",0),Kt(this,"buffInfoPopup",new hZt),Kt(this,"lastBossDebuffs",[]),Kt(this,"lastCorpBuffs",[]),Kt(this,"timerText"),Kt(this,"lastTimerStr",""),Kt(this,"closeButton"),Kt(this,"aggroGauges",[]),Kt(this,"hpGauges",[]),Kt(this,"aggroIcons",[]),Kt(this,"aggroTexts",[]),Kt(this,"lastAggroStr",[]),Kt(this,"soldierCountTexts",[]),Kt(this,"corpHeroIcons",[]),Kt(this,"corpSoldierIcons",[]),Kt(this,"corpHeroDeadMarks",[]),Kt(this,"corpSoldierDeadMarks",[]),Kt(this,"corpDimTargets",[]),Kt(this,"corpWiped",[]),Kt(this,"lastSoldierAlive",[]),Kt(this,"lossPopups",[]),Kt(this,"lossTexts",[]),Kt(this,"lossTimers",[]),Kt(this,"lossCounts",[]),Kt(this,"lossBaseX",[]),Kt(this,"lossBaseY",[]),Kt(this,"lastSoldierCountStr",[]),Kt(this,"emblemDefs",[]),Kt(this,"emblemButtonBgs",[]),Kt(this,"emblemCooldownTexts",[]),Kt(this,"emblemButtons",[]),Kt(this,"emblemIcons",[]),Kt(this,"emblemGaugeBars",[]),Kt(this,"emblemReadyPop",[]),Kt(this,"emblemReadyFlash",[]),Kt(this,"emblemRippleRings",[]),Kt(this,"emblemFlashOverlays",[]),Kt(this,"emblemWasCooling",[]),Kt(this,"emblemPulseFrame",0),Kt(this,"emblemCallout",null),Kt(this,"emblemCalloutTimer",0),Kt(this,"emblemCalloutBaseY",0),Kt(this,"onCorpClick"),Kt(this,"whiteFill",1),Kt(this,"lastN",-1),Kt(this,"lastMultStr",""),Kt(this,"lastHpFracStr",""),this.onCorpClick=a,this.root=new Ge,this.root.label="RaidHud",this.root.eventMode="passive",e5t.getInstance().addChild(this.root),this.closeButton=u?this.createCloseButton(h):new Ge,d&&this.createPracticeBadge();
+ const f=new Ag({
+ fontSize:20,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ ),p=new Ag({
+ fontSize:16,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ ),g=new Ag({
+ fontSize:13,fill:16771496,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ ),m=new Ag({
+ fontSize:11,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ ),w=Math.min(VA.stageHeight||1130,t.MAX_ANCHOR_HEIGHT),v=VA.stageWidth||640,b=w-t.CORP_TOP_FROM_BOTTOM,_=Math.max(e.length,n.length),y=_*t.CORP_PANEL_W+Math.max(0,_-1)*t.CORP_COL_GAP,M=Math.max(8,(v-y)/2),E=M,A=b-t.BOSS_HEADER_GAP,S=E+t.BOSS_LEFT_COL_W;
+ this.bossBarW=Math.max(120,y-t.BOSS_LEFT_COL_W),this.setupBossBuffIcons(S+this.bossBarW-15,A+t.BUFF_ICON_TOP_GAP);
+ const T=new Lf;
+ T.hitArea=new Ri(S,A+t.BUFF_ICON_TOP_GAP-4,this.bossBarW-15,t.BUFF_ICON_SIZE+22),T.eventMode="static",T.cursor="pointer",T.on("pointerup",()=>this.openBossBuffInfo()),this.root.addChild(T);
+ const C=A+t.HEADER_BAR_Y;
+ this.bossBar.position.set(S,C),this.root.addChild(this.bossBar),this.bossName=new Hg({
+ text:i||"BOSS",style:f}
+ ),this.bossName.anchor.set(0,1),this.bossName.position.set(S,C-4),this.root.addChild(this.bossName),this.corpHeroKindNums=[...e];
+ const I=new Y2;
+ I.scale.set(t.TARGET_HERO_SCALE),I.eventMode="none",I.visible=!1,this.root.addChild(I),this.bossTargetHero=I,this.bossTargetHeroX=S,this.bossTargetHeroBottomY=C-4-this.bossName.height-2;
+ const k=(c>0&&l>0?XQt(c,l,!0):null)??XQt(1,4,!0);
+ if(k){
+ const i=new He(k),s=E,e=C+t.BAR_H-i.height,n=new Lf;
+ n.roundRect(s-3,e-3,i.width+6,i.height+6,6).fill({
+ color:1710618,alpha:.55}
+ ).stroke({
+ width:2,color:16765562,alpha:.9}
+ ),this.root.addChild(n),i.position.set(s,e),this.root.addChild(i),this.bossFaceTapTarget=i}
+ else{
+ this.bossFace.scale.set(t.FACE_SCALE),s>0&&this.bossFace.setDataWithKindNum(s);
+ const i=this.bossFace.height;
+ this.bossFace.position.set(E,i>0?C+t.BAR_H-i:A),this.root.addChild(this.bossFace),this.bossFaceTapTarget=this.bossFace}
+ this.bossHpText=new Hg({
+ text:"",style:p}
+ ),this.bossHpText.anchor.set(.5,.5),this.bossHpText.position.set(S+this.bossBarW/2,C+t.BAR_H/2),this.root.addChild(this.bossHpText),this.bossMult=new Hg({
+ text:"×100",style:g}
+ ),this.bossMult.anchor.set(0,.5),this.bossMult.position.set(S+8,C+t.BAR_H/2),this.root.addChild(this.bossMult);
+ const O=b-t.SEPARATOR_FROM_CORP;
+ this.bossSeparator.moveTo(E,O).lineTo(E+y,O).stroke({
+ width:2,color:16777215,alpha:.18}
+ ),this.root.addChild(this.bossSeparator),this.timerText=new Hg({
+ text:"3:00",style:new Ag({
+ fontSize:24,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ )}
+ ),this.timerText.anchor.set(0,0),this.timerText.position.set(16,18),this.root.addChild(this.timerText);
+ for(let x=0;
+ x<_;
+ x++){
+ const i=M+DJt.indexOf(x)*(t.CORP_PANEL_W+t.CORP_COL_GAP),s=i+t.CORP_PANEL_W/2,h=i+(t.CORP_PANEL_W-t.CORP_GAUGE_W)/2,a=r[x]??null,c=new Lf;
+ c.eventMode="none",this.root.addChild(c);
+ const l=new Y2;
+ l.scale.set(t.HERO_ICON_SCALE);
+ const u=e[x]??0;
+ u>0&&l.setDataWithKindNum(u);
+ const d=l.width,f=l.height,p=new Y2;
+ p.scale.set(t.HERO_ICON_SCALE*t.SOLDIER_ICON_RATIO);
+ const g=n[x]??0;
+ g>0&&p.setDataWithKindNum(g);
+ const w=p.width,v=p.height,_=s-(d+t.ICON_GAP+w)/2,y=b+t.CORP_ICONS_Y+Math.max(f,v);
+ l.position.set(_,y-f),p.position.set(_+d+t.ICON_GAP,y-v),this.root.addChild(p),this.root.addChild(l),this.corpHeroIcons.push(l),this.corpSoldierIcons.push(p);
+ const E=this.makeDeadMark(p.x,p.y,w,v,.32),A=this.makeDeadMark(l.x,l.y,d,f);
+ this.root.addChild(E),this.root.addChild(A),this.corpSoldierDeadMarks.push(E),this.corpHeroDeadMarks.push(A),this.corpWiped.push(!1),this.lossBaseX.push(p.x+w*t.DEAD_MARK_CX),this.lossBaseY.push(p.y-12),this.lastSoldierAlive.push(-1),this.lossPopups.push(null),this.lossTexts.push(null),this.lossTimers.push(0),this.lossCounts.push(0);
+ const S=[],T=[],C=t.CORP_BUFF_ICON_SIZE,I=C+t.CORP_BUFF_GAP;
+ for(let e=0;
+ e<t.CORP_BUFF_MAX;
+ e++){
+ const i=e%t.CORP_BUFF_PER_ROW,s=Math.floor(e/t.CORP_BUFF_PER_ROW),n=new He;
+ n.anchor.set(.5),n.width=C,n.height=C,n.position.set(_+i*I+C/2,b-3-C/2-s*I),n.visible=!1,this.root.addChild(n),S.push(n),T.push("")}
+ this.corpBuffIcons.push(S),this.corpBuffFrames.push(T);
+ const k=Math.ceil(t.CORP_BUFF_MAX/t.CORP_BUFF_PER_ROW),O=new Lf;
+ O.hitArea=new Ri(_,b-3-k*I,t.CORP_BUFF_PER_ROW*I,k*I+3),O.eventMode="static",O.cursor="pointer";
+ const R=x;
+ O.on("pointerup",()=>this.openCorpBuffInfo(R)),this.root.addChild(O);
+ const N=x;
+ for(const t of[l,p])t.eventMode="static",t.cursor="pointer",t.on("pointerup",()=>{
+ var t;
+ return null==(t=this.onCorpClick)?void 0:t.call(this,N)}
+ );
+ const P=new Hg({
+ text:"",style:m}
+ );
+ P.anchor.set(.5,1),P.position.set(p.x+w/2,y-t.SOLDIER_COUNT_INSET),this.root.addChild(P),this.soldierCountTexts.push(P),this.lastSoldierCountStr.push("");
+ const D=y+6,L=new Lf;
+ L.position.set(h,D),this.root.addChild(L),this.aggroGauges.push(L);
+ const G=new Hg({
+ text:"",style:m}
+ );
+ G.anchor.set(.5,.5),G.position.set(i+t.CORP_PANEL_W/2,D+t.AGGRO_GAUGE_H/2),this.root.addChild(G),this.aggroTexts.push(G),this.lastAggroStr.push("");
+ const B=D+t.AGGRO_GAUGE_H+4,U=new Lf;
+ U.position.set(h,B),this.root.addChild(U),this.hpGauges.push(U);
+ const F=B+t.HP_GAUGE_H+10,H=this.createEmblemButton(x,h,F,a,o);
+ this.root.addChild(H),this.corpDimTargets.push([c,l,p,P,L,G,U,H]);
+ const W=new Wf((QA.hasSheet("UI_RAID")?QA.getTextures("UI_RAID","AgroAni"):QA.getTextures("Game","AggroEffect")).slice(0,8));
+ W.anchor.set(.5,.5),W.loop=!0,W.animationSpeed=.08,W.position.set(_+4,y-f+4),W.visible=!1,this.root.addChild(W),this.aggroIcons.push(W);
+ const $=b-6,j=F+t.EMBLEM_BUTTON_H+6,V=(null==a?void 0:a.color)??16777215;
+ c.roundRect(i,$,t.CORP_PANEL_W,j-$,10).fill({
+ color:V,alpha:a?.14:.06}
+ )}
+ }
+ static hudTopY(){
+ return Math.min(VA.stageHeight||1130,t.MAX_ANCHOR_HEIGHT)-t.CORP_TOP_FROM_BOTTOM-t.BOSS_HEADER_GAP}
+ setAggroIconVisible(t,i){
+ const s=this.aggroIcons[t];
+ s&&s.visible!==i&&(s.visible=i,i?s.gotoAndPlay(0):s.stop())}
+ updateBossTargetHero(t){
+ const i=this.bossTargetHero;
+ if(!i)return;
+ if(t===this.bossTargetCorp)return;
+ this.bossTargetCorp=t;
+ const s=t>=0?this.corpHeroKindNums[t]??0:0;
+ s<=0?i.visible=!1:(i.setDataWithKindNum(s),i.position.set(this.bossTargetHeroX,this.bossTargetHeroBottomY-i.height),i.visible=!0)}
+ setBossFaceTap(t){
+ const i=this.bossFaceTapTarget;
+ i&&(i.eventMode="static",i.cursor="pointer",i.on("pointerup",t))}
+ setupBossBuffIcons(i,s){
+ if(this.bossBuffRightX=i,this.bossBuffY=s,!QA.hasSheet("UI_RAID"))return;
+ const e=t.BUFF_ICON_SIZE;
+ for(let h=0;
+ h<t.BUFF_ICON_POOL;
+ h++){
+ const t=new He;
+ t.anchor.set(.5),t.width=e,t.height=e,t.visible=!1,this.root.addChild(t),this.bossBuffIcons.push(t),this.bossBuffFrames.push("");
+ const i=new Lf;
+ i.visible=!1,this.root.addChild(i),this.bossBuffRings.push(i);
+ const s=new Hg({
+ text:"",style:new Ag({
+ fontSize:13,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ s.anchor.set(.5,0),s.visible=!1,this.root.addChild(s),this.bossBuffValueTexts.push(s);
+ const n=new Hg({
+ text:"",style:new Ag({
+ fontSize:12,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ n.anchor.set(.5),n.visible=!1,this.root.addChild(n),this.bossBuffLabels.push(n)}
+ const n=new Hg({
+ text:"",style:new Ag({
+ fontSize:15,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ n.anchor.set(.5,1),n.eventMode="none",n.visible=!1,this.root.addChild(n),this.bossBuffCallout=n}
+ updateBossDebuffIcons(i){
+ if(0===this.bossBuffIcons.length)return;
+ this.bossBuffTick++;
+ const s=t.BUFF_ICON_SIZE,e=s+t.BUFF_ICON_GAP,n=Math.min(i.length,this.bossBuffIcons.length),h=this.bossBuffRightX-(n*s+Math.max(0,n-1)*t.BUFF_ICON_GAP);
+ for(const t of Object.keys(this.bossBuffPrevRemainByKey))i.some(i=>i.key===t)||(delete this.bossBuffPrevRemainByKey[t],delete this.bossBuffPopByKey[t]);
+ for(let r=0;
+ r<this.bossBuffIcons.length;
+ r++){
+ const o=this.bossBuffIcons[r],a=this.bossBuffRings[r],c=this.bossBuffValueTexts[r],l=this.bossBuffLabels[r],u=r<n?i[r]:null;
+ if(!u||u.remainSec<=0){
+ o.visible=!1,a.visible=!1,c.visible=!1,l.visible=!1;
+ continue}
+ const d=this.bossBuffPrevRemainByKey[u.key]??0;
+ u.remainSec>d+.05&&(this.bossBuffPopByKey[u.key]=t.BUFF_POP_FRAMES),this.bossBuffPrevRemainByKey[u.key]=u.remainSec,u.calloutText&&!this.bossBuffCalloutShown.has(u.key)&&(this.bossBuffCalloutShown.add(u.key),this.bossBuffCallout&&(this.bossBuffCallout.text=u.calloutText,this.bossBuffCalloutFrames=t.CALLOUT_HOLD_FRAMES+t.CALLOUT_FADE_FRAMES)),this.bossBuffFrames[r]!==u.frame&&(o.texture=QA.getTexture("UI_RAID",u.frame),this.bossBuffFrames[r]=u.frame),o.tint="taunt"===u.key?16769356:16777215;
+ const f=h+r*e+s/2,p=this.bossBuffY+s/2;
+ o.position.set(f,p);
+ let g=1;
+ const m=this.bossBuffPopByKey[u.key]??0;
+ m>0&&(this.bossBuffPopByKey[u.key]=m-1,g=1+m/t.BUFF_POP_FRAMES*.4),o.width=s*g,o.height=s*g,o.alpha=u.remainSec<1&&this.bossBuffTick%16<8?.35:1,o.visible=!0;
+ const w=Math.max(0,Math.min(1,u.remainSec/Math.max(.001,u.totalSec)));
+ a.clear();
+ const v=s/2+3;
+ if(w>.01&&(this.traceSquareGauge(a,f,p,v,w),a.stroke({
+ width:3,color:16777215,alpha:.9}
+ )),u.highlight){
+ const t=.45+.35*Math.sin(.25*this.bossBuffTick),i=v+4;
+ a.roundRect(f-i,p-i,2*i,2*i,4).stroke({
+ width:3,color:16726832,alpha:t}
+ )}
+ a.visible=!0,u.valueText?(c.text!==u.valueText&&(c.text=u.valueText),c.position.set(f,p+s/2+5),c.visible=!0):c.visible=!1,l.visible=!1}
+ if(this.bossBuffCallout)if(this.bossBuffCalloutFrames>0){
+ this.bossBuffCalloutFrames--;
+ const i=VA.stageWidth||640,e=this.bossBuffCallout.width/2;
+ this.bossBuffCallout.position.set(Math.max(e+8,Math.min(i-e-8,h+s/2)),this.bossBuffY-6),this.bossBuffCallout.alpha=this.bossBuffCalloutFrames<t.CALLOUT_FADE_FRAMES?this.bossBuffCalloutFrames/t.CALLOUT_FADE_FRAMES:1,this.bossBuffCallout.visible=!0}
+ else this.bossBuffCallout.visible=!1}
+ traceSquareGauge(t,i,s,e,n){
+ const h=[[i,s-e],[i+e,s-e],[i+e,s+e],[i-e,s+e],[i-e,s-e],[i,s-e]];
+ let r=8*n*e;
+ t.moveTo(h[0][0],h[0][1]);
+ for(let o=0;
+ o<h.length-1&&r>0;
+ o++){
+ const[i,s]=h[o],[e,n]=h[o+1],a=Math.abs(e-i)+Math.abs(n-s);
+ if(a<=r)t.lineTo(e,n),r-=a;
+ else{
+ const h=r/a;
+ t.lineTo(i+(e-i)*h,s+(n-s)*h),r=0}
+ }
+ }
+ updateCorpBuffStrips(i){
+ var s;
+ if(0===this.corpBuffIcons.length)return;
+ if(!QA.hasSheet("UI_RAID"))return;
+ const e=t.CORP_BUFF_ICON_SIZE;
+ for(let n=0;
+ n<this.corpBuffIcons.length;
+ n++){
+ const h=this.corpBuffIcons[n],r=this.corpBuffFrames[n],o=(null==(s=i[n])?void 0:s.buffs)??[];
+ for(let i=0;
+ i<h.length;
+ i++){
+ const s=h[i],a=i<o.length?o[i]:"";
+ if(!a){
+ s.visible&&r[i]&&delete this.corpBuffPopByKey[`${
+ n}
+ :${
+ r[i]}
+ `],s.visible=!1,r[i]="";
+ continue}
+ const c=`${
+ n}
+ :${
+ a}
+ `;
+ r[i]!==a&&(s.texture=QA.getTexture("UI_RAID",a),r[i]=a,this.corpBuffPopByKey[c]=t.BUFF_POP_FRAMES);
+ let l=1;
+ const u=this.corpBuffPopByKey[c]??0;
+ u>0&&(this.corpBuffPopByKey[c]=u-1,l=1+u/t.BUFF_POP_FRAMES*.3),s.width=e*l,s.height=e*l,s.visible=!0}
+ }
+ }
+ update(i){
+ var s,e;
+ this.updateBossDebuffIcons(i.bossDebuffs??[]),this.updateCorpBuffStrips(i.corps);
+ const n=i.bossMaxHp>0?i.bossMaxHp:1,h=Math.max(0,Math.min(100,i.bossHp/n*100));
+ let r=Math.ceil(h);
+ r>100&&(r=100),r<0&&(r=0);
+ let o=h-(r-1);
+ o<0&&(o=0),o>1&&(o=1),r!==this.lastN?(this.whiteFill=o,this.lastN=r):(this.whiteFill<o&&(this.whiteFill=o),this.whiteFill+=(o-this.whiteFill)*t.WHITE_EASE,this.whiteFill<o&&(this.whiteFill=o)),this.drawBossBar(o,this.whiteFill);
+ const a="×"+r;
+ a!==this.lastMultStr&&(this.bossMult.text=a,this.lastMultStr=a);
+ const c=VD.displayLargeNumberAsAlphabet(Math.max(0,Math.floor(i.bossHp)))+" / "+VD.displayLargeNumberAsAlphabet(Math.max(0,Math.floor(n)));
+ c!==this.lastHpFracStr&&(this.bossHpText.text=c,this.lastHpFracStr=c);
+ const l=Math.max(0,Math.floor(i.remainSec)),u=l%60,d=`${
+ Math.floor(l/60)}
+ :${
+ u<10?"0"+u:u}
+ `;
+ d!==this.lastTimerStr&&(this.timerText.text=d,this.lastTimerStr=d);
+ let f=0,p=-1;
+ for(let t=0;
+ t<i.corps.length;
+ t++){
+ const s=i.corps[t];
+ s&&s.alive>0&&s.aggro>f&&(f=s.aggro,p=t)}
+ this.updateBossTargetHero(p),this.emblemPulseFrame++,this.tickEmblemCallout(),this.tickCorpLossPopups(),this.lastBossDebuffs=i.bossDebuffs??[],this.lastCorpBuffs=i.corps.map(t=>(null==t?void 0:t.buffs)??[]),this.buffInfoPopup.refresh();
+ for(let t=0;
+ t<this.aggroGauges.length;
+ t++){
+ const n=i.corps[t];
+ if(!n){
+ this.drawAggroGauge(this.aggroGauges[t],0,!1),this.drawHpGauge(this.hpGauges[t],0),this.setAggroIconVisible(t,!1),this.aggroTexts[t].text="",this.lastAggroStr[t]="",this.soldierCountTexts[t].text="",this.lastSoldierCountStr[t]="",this.lastSoldierAlive[t]=-1,this.updateEmblemButton(t,(null==(s=i.emblems)?void 0:s[t])??null);
+ continue}
+ const h="x"+Math.max(0,n.soldierAlive);
+ h!==this.lastSoldierCountStr[t]&&(this.soldierCountTexts[t].text=h,this.lastSoldierCountStr[t]=h);
+ const r=Math.max(0,n.soldierAlive),o=this.lastSoldierAlive[t];
+ o>=0&&r<o&&this.showCorpLoss(t,o-r),this.lastSoldierAlive[t]=r,this.updateCorpDeathMarks(t,!!n.heroDead,n.soldierAlive<=0);
+ const a=f>0?Math.min(1,n.aggro/f):0,c=t===p;
+ this.drawAggroGauge(this.aggroGauges[t],a,c),this.drawHpGauge(this.hpGauges[t],n.maxHp>0?Math.min(1,n.hp/n.maxHp):0),this.setAggroIconVisible(t,c);
+ const l=VD.displayLargeNumberAsAlphabet(Math.max(0,Math.round(n.aggro)));
+ l!==this.lastAggroStr[t]&&(this.aggroTexts[t].text=l,this.lastAggroStr[t]=l),this.updateEmblemButton(t,(null==(e=i.emblems)?void 0:e[t])??null)}
+ }
+ showEmblemActivationCallout(i,s){
+ const e=this.emblemDefs[i];
+ if(!e)return;
+ this.emblemCallout&&(this.emblemCallout.removeFromParent(),this.emblemCallout.destroy({
+ children:!0}
+ ),this.emblemCallout=null);
+ const n=new Ge;
+ n.label="RaidEmblemCallout";
+ const h=new Ge,r=new Hg({
+ text:s||e.label,style:new Ag({
+ fontSize:48,fill:e.color,fontWeight:"bold",stroke:{
+ color:16777215,width:8}
+ }
+ )}
+ );
+ r.anchor.set(0,.5);
+ const o=LJt[e.role];
+ let a=null;
+ o&&QA.hasSheet("UI_RAID")&&(a=new He(QA.getTexture("UI_RAID",o)),a.anchor.set(.5),a.scale.set(76/Math.max(1,a.texture.height)));
+ const c=a?88:0,l=c+r.width;
+ a&&(a.position.set(-l/2+38,0),h.addChild(a)),r.position.set(-l/2+c,0),h.addChild(r);
+ const u=VA.stageWidth||640;
+ h.scale.set(Math.min(1,(u-40)/Math.max(1,l))),n.addChild(h),this.emblemCalloutBaseY=Math.round(.62*t.hudTopY()),n.position.set(u/2,this.emblemCalloutBaseY+t.EMBLEM_CALLOUT_SLIDE),n.eventMode="none",n.alpha=0,e5t.getInstance().addChild(n),this.emblemCallout=n,this.emblemCalloutTimer=t.EMBLEM_CALLOUT_IN+t.EMBLEM_CALLOUT_HOLD+t.EMBLEM_CALLOUT_OUT}
+ tickEmblemCallout(){
+ const i=this.emblemCallout;
+ if(!i)return;
+ if(this.emblemCalloutTimer<=0)return i.removeFromParent(),i.destroy({
+ children:!0}
+ ),void(this.emblemCallout=null);
+ const s=--this.emblemCalloutTimer,e=t.EMBLEM_CALLOUT_IN+t.EMBLEM_CALLOUT_HOLD+t.EMBLEM_CALLOUT_OUT-s,n=this.emblemCalloutBaseY,h=t.EMBLEM_CALLOUT_SLIDE;
+ if(e<=t.EMBLEM_CALLOUT_IN){
+ const s=e/t.EMBLEM_CALLOUT_IN,r=1-(1-s)*(1-s);
+ i.y=n+h*(1-r),i.alpha=Math.min(1,1.6*s)}
+ else if(s<t.EMBLEM_CALLOUT_OUT){
+ const e=1-s/t.EMBLEM_CALLOUT_OUT;
+ i.y=n-h*e*e,i.alpha=1-e}
+ else i.y=n,i.alpha=1}
+ createEmblemButton(i,s,e,n,h){
+ const r=t.EMBLEM_BUTTON_W,o=t.EMBLEM_BUTTON_H,a=new Ge;
+ a.pivot.set(r/2,o/2),a.position.set(s+r/2,e+o/2),a.label=`RaidEmblemButton${
+ i}
+ `,this.emblemButtons.push(a);
+ const c=new Lf;
+ a.addChild(c),this.emblemButtonBgs.push(c),this.emblemDefs.push(n);
+ const l=new Lf;
+ l.eventMode="none",a.addChild(l),this.emblemRippleRings.push(l);
+ const u=n?LJt[n.role]:void 0,d=!!u&&QA.hasSheet("UI_RAID");
+ let f=null;
+ d&&(f=new He(QA.getTexture("UI_RAID",u)),f.anchor.set(.5),f.scale.set(34/Math.max(1,f.texture.height)),f.position.set(24,o/2),f.eventMode="none",a.addChild(f)),this.emblemIcons.push(f);
+ const p=new Hg({
+ text:"",style:new Ag({
+ fontSize:17,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ )}
+ );
+ p.anchor.set(.5,.5),p.position.set(d?(r+44)/2:r/2,o/2),a.addChild(p),this.emblemCooldownTexts.push(p);
+ const g=new Lf;
+ g.eventMode="none",a.addChild(g),this.emblemGaugeBars.push(g);
+ const m=new Lf;
+ return m.eventMode="none",a.addChild(m),this.emblemFlashOverlays.push(m),n&&h?(a.eventMode="static",a.cursor="pointer",a.hitArea=new Ri(0,0,r,o),a.on("pointerup",()=>h(i))):(a.eventMode="none",a.alpha=.4),this.drawEmblemButtonBg(c,n,!1,!1),a}
+ updateEmblemButton(i,s){
+ var e;
+ const n=this.emblemButtonBgs[i],h=this.emblemDefs[i],r=this.emblemCooldownTexts[i];
+ if(!n||!r)return;
+ const o=Math.max(0,(null==s?void 0:s.cooldownRemainingFrames)??0),a=Math.max(0,(null==s?void 0:s.activeRemainingFrames)??0),c=o>0,l=a>0,u=!!h&&!c&&!l&&!0!==this.corpWiped[i];
+ this.emblemWasCooling[i]&&u&&(this.emblemReadyPop[i]=t.BUFF_POP_FRAMES,this.emblemReadyFlash[i]=t.READY_FLASH_FRAMES),this.emblemWasCooling[i]=c;
+ const d=Math.max(0,this.emblemReadyPop[i]??0);
+ d>0&&(this.emblemReadyPop[i]=d-1),null==(e=this.emblemButtons[i])||e.scale.set(1+d/t.BUFF_POP_FRAMES*.4);
+ const f=u?.5+.5*Math.sin(.12*this.emblemPulseFrame):0,p=1-o/Math.max(1,(null==s?void 0:s.cooldownFrames)??1);
+ this.drawEmblemButtonBg(n,h,c,l,f,!0===this.corpWiped[i]);
+ const g=t.EMBLEM_BUTTON_W,m=t.EMBLEM_BUTTON_H,w=this.emblemGaugeBars[i];
+ if(w&&(w.clear(),c)){
+ const t=Math.max(0,Math.min(1,p));
+ w.roundRect(6,m-8,g-12,4,2).fill({
+ color:0,alpha:.6}
+ ),t>.02&&w.roundRect(6,m-8,(g-12)*t,4,2).fill({
+ color:16777215,alpha:.85}
+ )}
+ const v=this.emblemRippleRings[i];
+ if(v&&(v.clear(),u)){
+ const i=this.emblemPulseFrame%t.EMBLEM_RIPPLE_PERIOD/t.EMBLEM_RIPPLE_PERIOD,s=14*(1-(1-i)*(1-i));
+ v.roundRect(-s,-s,g+2*s,m+2*s,8+s).stroke({
+ width:3,color:16771450,alpha:.75*(1-i)}
+ )}
+ const b=this.emblemFlashOverlays[i];
+ if(b){
+ b.clear();
+ const s=Math.max(0,this.emblemReadyFlash[i]??0);
+ s>0&&(this.emblemReadyFlash[i]=s-1,b.roundRect(0,0,g,m,8).fill({
+ color:16777215,alpha:s/t.READY_FLASH_FRAMES*.75}
+ ))}
+ c?(r.style.fill=16777215,r.text=String(Math.ceil(o/60))):l?(r.style.fill=8257418,r.text=String(Math.ceil(a/60))):r.text="";
+ const _=this.emblemIcons[i];
+ if(_){
+ _.tint=!0===this.corpWiped[i]?5592405:c?9079434:16777215;
+ const t=u?g/2:24,s=t-_.position.x;
+ _.position.x=Math.abs(s)<.5?t:_.position.x+.15*s}
+ }
+ drawEmblemButtonBg(i,s,e,n,h=0,r=!1){
+ const o=t.EMBLEM_BUTTON_W,a=t.EMBLEM_BUTTON_H;
+ i.clear(),i.roundRect(0,0,o,a,8).fill({
+ color:r?5921370:(null==s?void 0:s.color)??3814181,alpha:s?e?.4:.9:.45}
+ ),e&&i.roundRect(0,0,o,a,8).fill({
+ color:0,alpha:.5}
+ ),h>0&&i.roundRect(-2,-2,o+4,a+4,10).stroke({
+ width:3,color:16771450,alpha:.25+.55*h}
+ ),i.roundRect(0,0,o,a,8).stroke({
+ width:n?3:2,color:n?8257418:16777215,alpha:n?.95:e?.3:.6+.4*h}
+ )}
+ makeDeadMark(i,s,e,n,h=.5){
+ const r=new He(QA.getTexture("UI_Ekkorr","Icon_Monster"));
+ r.anchor.set(.5);
+ const o=.6*Math.min(e,n);
+ return r.width=o,r.height=o,r.position.set(i+e*t.DEAD_MARK_CX,s+n*h),r.eventMode="none",r.visible=!1,r}
+ updateCorpDeathMarks(t,i,s){
+ const e=this.corpHeroIcons[t],n=this.corpSoldierIcons[t];
+ if(!e||!n)return;
+ e.tint=i?5592405:16777215,this.corpHeroDeadMarks[t].visible=i,n.tint=s?5592405:16777215,this.corpSoldierDeadMarks[t].visible=s,this.soldierCountTexts[t].tint=s?16737894:16777215;
+ const h=i&&s;
+ if(this.corpWiped[t]!==h){
+ this.corpWiped[t]=h;
+ const i=h?.45:1;
+ for(const s of this.corpDimTargets[t]??[])s.alpha=i}
+ }
+ showCorpLoss(i,s){
+ let e=this.lossPopups[i],n=this.lossTexts[i];
+ if(!e||!n){
+ e=new Ge,e.label="RaidCorpLoss"+i,e.eventMode="none";
+ const t=new He(QA.getTexture("UI_Ekkorr","Icon_Monster"));
+ t.anchor.set(1,.5),t.width=22,t.height=22,n=new Hg({
+ text:"",style:new Ag({
+ fontSize:20,fill:16737877,fontWeight:"bold",stroke:{
+ color:0,width:4}
+ }
+ )}
+ ),n.anchor.set(0,.5),n.position.set(1,0),e.addChild(t),e.addChild(n),this.root.addChild(e),this.lossPopups[i]=e,this.lossTexts[i]=n}
+ this.lossCounts[i]=this.lossTimers[i]>0?this.lossCounts[i]+s:s,this.lossTimers[i]=t.LOSS_POP_FRAMES+t.LOSS_HOLD_FRAMES+t.LOSS_FADE_FRAMES,n.text="-"+this.lossCounts[i],e.visible=!0,e.alpha=1,e.scale.set(1.35),e.position.set(this.lossBaseX[i],this.lossBaseY[i])}
+ tickCorpLossPopups(){
+ for(let i=0;
+ i<this.lossTimers.length;
+ i++){
+ if(this.lossTimers[i]<=0)continue;
+ const s=this.lossPopups[i];
+ if(!s)continue;
+ this.lossTimers[i]--;
+ const e=this.lossTimers[i];
+ if(e<=0){
+ s.visible=!1,this.lossCounts[i]=0;
+ continue}
+ const n=t.LOSS_FADE_FRAMES+t.LOSS_HOLD_FRAMES;
+ if(e>n)s.scale.set(1+(e-n)/t.LOSS_POP_FRAMES*.35);
+ else if(e<=t.LOSS_FADE_FRAMES){
+ const n=1-e/t.LOSS_FADE_FRAMES;
+ s.scale.set(1),s.alpha=1-n,s.position.y=this.lossBaseY[i]-t.LOSS_RISE_PX*n}
+ else s.scale.set(1)}
+ }
+ openBossBuffInfo(){
+ 0!==this.lastBossDebuffs.length&&this.buffInfoPopup.show(SG.getText("GAME_1478","보스 상태"),()=>this.lastBossDebuffs.map(t=>{
+ const i=eZt(t.key,t.frame);
+ return{
+ key:t.key,frame:t.frame,name:i.name,desc:i.desc,remainSec:t.remainSec,valueText:t.valueText}
+ }
+ ))}
+ openCorpBuffInfo(t){
+ var i;
+ if(0===(this.lastCorpBuffs[t]??[]).length)return;
+ const s=null==(i=this.emblemDefs[t])?void 0:i.shortLabel;
+ this.buffInfoPopup.show(s?SG.getValueReplace("GAME_1480","\\{
+ 0\\}
+ ",s,`${
+ s}
+  부대 버프`):SG.getText("GAME_1479","부대 버프"),()=>(this.lastCorpBuffs[t]??[]).map(t=>{
+ const i=sZt(t);
+ return{
+ key:t,frame:t,name:i.name,desc:i.desc}
+ }
+ ))}
+ drawAggroGauge(i,s,e){
+ const n=t.CORP_GAUGE_W,h=t.AGGRO_GAUGE_H,r=h/2;
+ i.clear(),i.roundRect(0,0,n,h,r).fill({
+ color:1710618,alpha:.85}
+ );
+ const o=s*n;
+ o>.5&&i.roundRect(0,0,o,h,r).fill({
+ color:e?t.AGGRO_TOP_COLOR:t.AGGRO_COLOR}
+ ),i.roundRect(0,0,n,h,r).stroke({
+ width:e?2:1,color:e?16777215:0,alpha:e?.95:.7}
+ )}
+ drawHpGauge(i,s){
+ const e=t.CORP_GAUGE_W,n=t.HP_GAUGE_H,h=n/2;
+ i.clear(),i.roundRect(0,0,e,n,h).fill({
+ color:1710618,alpha:.85}
+ );
+ const r=s*e;
+ r>.5&&i.roundRect(0,0,r,n,h).fill({
+ color:t.HP_COLOR}
+ ),i.roundRect(0,0,e,n,h).stroke({
+ width:1,color:0,alpha:.7}
+ )}
+ drawBossBar(i,s){
+ const e=this.bossBarW,n=t.BAR_H,h=.4*n,r=this.bossBar;
+ r.clear(),r.roundRect(0,0,e,n,h).fill({
+ color:1710618,alpha:.92}
+ );
+ const o=i*e,a=s*e;
+ a>.5&&r.roundRect(0,0,a,n,h).fill({
+ color:16777215,alpha:.95}
+ ),o>.5&&r.roundRect(0,0,o,n,h).fill({
+ color:t.BOSS_COLOR}
+ ),r.roundRect(0,0,e,n,h).stroke({
+ width:2,color:0,alpha:.85}
+ )}
+ createCloseButton(i){
+ const s=VA.stageWidth||640,e=t.CLOSE_SIZE,n=t.CLOSE_MARGIN,h=new Ge;
+ h.position.set(s-n-e,n);
+ const r=new Lf;
+ r.roundRect(0,0,e,e,10).fill({
+ color:0,alpha:.55}
+ ).stroke({
+ width:2,color:16777215,alpha:.6}
+ ),h.addChild(r);
+ const o=new Hg({
+ text:"X",style:new Ag({
+ fontSize:28,fill:16777215,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ return o.anchor.set(.5,.5),o.position.set(e/2,e/2),h.addChild(o),h.eventMode="static",h.cursor="pointer",h.hitArea=new Ri(0,0,e,e),h.on("pointerup",()=>queueMicrotask(i)),e5t.getInstance().addChild(h),h}
+ createPracticeBadge(){
+ const i=VA.stageWidth||640,s=t.CLOSE_MARGIN,e=t.CLOSE_SIZE,n=new Hg({
+ text:SG.getText("GAME_1486","연습"),style:new Ag({
+ fontSize:18,fill:16769440,fontWeight:"bold",stroke:{
+ color:0,width:3}
+ }
+ )}
+ ),h=Math.ceil(n.width)+20,r=new Ge;
+ r.eventMode="none",r.position.set(i-s-e-10-h,s+.5*(e-30));
+ const o=new Lf;
+ o.roundRect(0,0,h,30,15).fill({
+ color:16765562,alpha:.22}
+ ),r.addChild(o),n.position.set(10,.5*(30-n.height)),r.addChild(n),this.root.addChild(r)}
+ destroy(){
+ this.buffInfoPopup.destroy(),this.closeButton.removeAllListeners(),this.closeButton.removeFromParent(),this.closeButton.destroy({
+ children:!0}
+ ),this.emblemCallout&&(this.emblemCallout.removeFromParent(),this.emblemCallout.destroy({
+ children:!0}
+ ),this.emblemCallout=null),this.root.removeFromParent(),this.root.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Vt(rZt,"RaidHud"),Kt(rZt,"BOSS_HEADER_GAP",116),Kt(rZt,"HEADER_BAR_Y",62),Kt(rZt,"BOSS_LEFT_COL_W",77),Kt(rZt,"SEPARATOR_FROM_CORP",28),Kt(rZt,"FACE_SCALE",.5),Kt(rZt,"BAR_H",20),Kt(rZt,"BUFF_ICON_SIZE",30),Kt(rZt,"BUFF_ICON_GAP",10),Kt(rZt,"CALLOUT_HOLD_FRAMES",120),Kt(rZt,"CALLOUT_FADE_FRAMES",30),Kt(rZt,"BUFF_POP_FRAMES",9),Kt(rZt,"READY_FLASH_FRAMES",18),Kt(rZt,"EMBLEM_RIPPLE_PERIOD",48),Kt(rZt,"BUFF_ICON_TOP_GAP",8),Kt(rZt,"CORP_TOP_FROM_BOTTOM",150),Kt(rZt,"MAX_ANCHOR_HEIGHT",1440),Kt(rZt,"CORP_PANEL_W",118),Kt(rZt,"CORP_COL_GAP",6),Kt(rZt,"HERO_ICON_SCALE",.504),Kt(rZt,"SOLDIER_ICON_RATIO",.72),Kt(rZt,"ICON_GAP",-3),Kt(rZt,"CORP_GAUGE_W",100),Kt(rZt,"SOLDIER_COUNT_INSET",2),Kt(rZt,"CORP_ICONS_Y",0),Kt(rZt,"EMBLEM_BUTTON_W",100),Kt(rZt,"EMBLEM_BUTTON_H",42),Kt(rZt,"AGGRO_GAUGE_H",9),Kt(rZt,"AGGRO_COLOR",11549230),Kt(rZt,"AGGRO_TOP_COLOR",16726832),Kt(rZt,"HP_GAUGE_H",7),Kt(rZt,"HP_COLOR",4177759),Kt(rZt,"WHITE_EASE",.1),Kt(rZt,"BOSS_COLOR",15087916),Kt(rZt,"CLOSE_SIZE",48),Kt(rZt,"CLOSE_MARGIN",16),Kt(rZt,"TARGET_HERO_SCALE",.32),Kt(rZt,"BUFF_ICON_POOL",16),Kt(rZt,"CORP_BUFF_ICON_SIZE",18),Kt(rZt,"CORP_BUFF_PER_ROW",6),Kt(rZt,"CORP_BUFF_MAX",12),Kt(rZt,"CORP_BUFF_GAP",2),Kt(rZt,"LOSS_POP_FRAMES",8),Kt(rZt,"LOSS_HOLD_FRAMES",42),Kt(rZt,"LOSS_FADE_FRAMES",22),Kt(rZt,"LOSS_RISE_PX",22),Kt(rZt,"EMBLEM_CALLOUT_IN",8),Kt(rZt,"EMBLEM_CALLOUT_HOLD",60),Kt(rZt,"EMBLEM_CALLOUT_OUT",13),Kt(rZt,"EMBLEM_CALLOUT_SLIDE",100),Kt(rZt,"DEAD_MARK_CX",.42);
+ let oZt=rZt;
+ const aZt=class t{
+ constructor(){
+ Kt(this,"root"),Kt(this,"veil"),Kt(this,"far"),Kt(this,"near"),Kt(this,"farP",[]),Kt(this,"nearP",[]),Kt(this,"w"),Kt(this,"h"),Kt(this,"phase",0),Kt(this,"wdx"),Kt(this,"wdy"),this.w=VA.stageWidth||640,this.h=VA.stageHeight||1136;
+ const i=Math.hypot(t.WIND_DX,t.WIND_DY)||1;
+ this.wdx=t.WIND_DX/i,this.wdy=t.WIND_DY/i,this.root=new Ge,this.root.eventMode="none",this.root.zIndex=-1,this.veil=(new Lf).rect(0,0,this.w,this.h).fill(t.VEIL_COLOR),this.veil.alpha=t.VEIL_ALPHA,this.veil.eventMode="none",this.root.addChild(this.veil),this.far=new Lf,this.far.eventMode="none",this.root.addChild(this.far),this.near=new Lf,this.near.eventMode="none",this.root.addChild(this.near),this.farP=this.spawnParticles(t.FAR_COUNT,t.FAR_SPEED_MIN,t.FAR_SPEED_MAX,t.FAR_LEN_MIN,t.FAR_LEN_MAX),this.nearP=this.spawnParticles(t.NEAR_COUNT,t.NEAR_SPEED_MIN,t.NEAR_SPEED_MAX,t.NEAR_LEN_MIN,t.NEAR_LEN_MAX);
+ const s=new He(this.buildVignetteTexture());
+ s.width=this.w,s.height=this.h,s.eventMode="none",this.root.addChild(s),e5t.getInstance().addChildAt(this.root,0),LM.getInstance().add(this.update,this)}
+ spawnParticles(t,i,s,e,n){
+ const h=[];
+ for(let r=0;
+ r<t;
+ r++)h.push({
+ x:Math.random()*this.w,y:Math.random()*this.h,speed:i+Math.random()*(s-i),len:e+Math.random()*(n-e)}
+ );
+ return h}
+ respawn(t){
+ const i=this.wdx>=0,s=this.wdy>=0;
+ Math.random()<.5?(t.x=i?-5-30*Math.random():this.w+5+30*Math.random(),t.y=Math.random()*this.h):(t.x=Math.random()*this.w,t.y=s?-5-30*Math.random():this.h+5+30*Math.random())}
+ buildVignetteTexture(){
+ const i=256,s=document.createElement("canvas");
+ s.width=i,s.height=i;
+ const e=s.getContext("2d"),n=e.createRadialGradient(128,117.76,46.08,128,128,158.72);
+ return n.addColorStop(0,"rgba(255,200,120,0)"),n.addColorStop(.7,"rgba(150,80,25,0.10)"),n.addColorStop(1,`rgba(110,55,18,${
+ t.VIGNETTE_EDGE_ALPHA}
+ )`),e.fillStyle=n,e.fillRect(0,0,i,i),is.from(s)}
+ updateLayer(t,i,s,e,n){
+ t.clear();
+ const h=this.wdx,r=this.wdy;
+ for(const o of i)o.x+=h*o.speed,o.y+=r*o.speed,(o.x<-50||o.x>this.w+50||o.y<-50||o.y>this.h+50)&&this.respawn(o),t.moveTo(o.x,o.y),t.lineTo(o.x-h*o.len,o.y-r*o.len);
+ t.stroke({
+ width:n,color:s,alpha:e}
+ )}
+ update(){
+ this.phase+=.04,this.veil.alpha=t.VEIL_ALPHA+Math.sin(this.phase)*t.VEIL_PULSE,this.updateLayer(this.far,this.farP,t.FAR_COLOR,t.FAR_ALPHA,t.FAR_WIDTH),this.updateLayer(this.near,this.nearP,t.NEAR_COLOR,t.NEAR_ALPHA,t.NEAR_WIDTH)}
+ destroy(){
+ LM.getInstance().remove(this.update,this),this.root.removeFromParent(),this.root.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Vt(aZt,"RaidMapEffect"),Kt(aZt,"WIND_DX",-1),Kt(aZt,"WIND_DY",.15),Kt(aZt,"VIGNETTE_EDGE_ALPHA",.55),Kt(aZt,"VEIL_COLOR",13479795),Kt(aZt,"VEIL_ALPHA",.18),Kt(aZt,"VEIL_PULSE",.07),Kt(aZt,"FAR_COUNT",420),Kt(aZt,"FAR_SPEED_MIN",6),Kt(aZt,"FAR_SPEED_MAX",10),Kt(aZt,"FAR_LEN_MIN",6),Kt(aZt,"FAR_LEN_MAX",14),Kt(aZt,"FAR_COLOR",16115912),Kt(aZt,"FAR_ALPHA",.22),Kt(aZt,"FAR_WIDTH",1.5),Kt(aZt,"NEAR_COUNT",320),Kt(aZt,"NEAR_SPEED_MIN",11),Kt(aZt,"NEAR_SPEED_MAX",16),Kt(aZt,"NEAR_LEN_MIN",10),Kt(aZt,"NEAR_LEN_MAX",22),Kt(aZt,"NEAR_COLOR",16773330),Kt(aZt,"NEAR_ALPHA",.52),Kt(aZt,"NEAR_WIDTH",2.5);
+ let cZt=aZt;
+ const lZt=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.RAID),Kt(this,"boss",null),Kt(this,"terrainOverlay",null),Kt(this,"allyFlowField",null),Kt(this,"enemyFlowField",null),Kt(this,"separationGrid",new Map),Kt(this,"separationFlatList",[]),Kt(this,"rvoPool",[]),Kt(this,"rvoNbAgents",[]),Kt(this,"rvoNbDist",[]),Kt(this,"rvoNbIdx",[]),Kt(this,"tankPad",null),Kt(this,"tankPadHolding",!1),Kt(this,"backAttackEnabled",!0),Kt(this,"knightLevel",1),Kt(this,"heroTransList",[0,0,0,0,0]),Kt(this,"corpSoldierTiers",[null,null,null,null,null]),Kt(this,"heroKindNums",[...t.DEFAULT_HERO_KINDS]),Kt(this,"soldierKindNums",[...t.DEFAULT_SOLDIER_KINDS]),Kt(this,"raidOptions",null),Kt(this,"resultPopup",null),Kt(this,"resultPopupDelay",-1),Kt(this,"pendingResultTitle",""),Kt(this,"bossKindNum",t.BOSS_KIND_NUM),Kt(this,"bossStartHp",0),Kt(this,"resultReported",!1),Kt(this,"spawnedVOs",[]),Kt(this,"speedHelper",new sJt("ef2.raid.battleSpeed")),Kt(this,"corpCommander",new nQt(t.CORP_COUNT)),Kt(this,"camera",null),Kt(this,"mapEffect",null),Kt(this,"hud",null),Kt(this,"corpUnits",[]),Kt(this,"selectedCorpIndex",-1),Kt(this,"dragSelectedCorp",!1),Kt(this,"corpAggro",[]),Kt(this,"corpWipedFlags",[]),Kt(this,"prevCorpDmg",[]),Kt(this,"corpHero",[]),Kt(this,"aggroLeader",-1),Kt(this,"aggroChallenger",-1),Kt(this,"aggroChallengerFrames",0),Kt(this,"aggroTargetCorp",-1),Kt(this,"forcedAggroCorp",-1),Kt(this,"forcedAggroFrames",0),Kt(this,"raidEmblemSystem",new jQt),Kt(this,"bossAnnouncer",new qQt),Kt(this,"crossbows",[]),Kt(this,"crossbowDebug",null),Kt(this,"targetIndicator",null),Kt(this,"rangedByCorp",[]),Kt(this,"rangedFanFrames",[]),Kt(this,"rangedFanSlots",[]),Kt(this,"rangedCmdActivePrev",[]),Kt(this,"meleeSoldiers",[]),Kt(this,"isRaidBattle",!0),Kt(this,"testBuffIconIdx",0),Kt(this,"sepBurstFrames",0),Kt(this,"sepBurstX",0),Kt(this,"sepBurstY",0),Kt(this,"sepBurstR",0),Kt(this,"bossDebuffRingTotals",{
+ }
+ ),Kt(this,"bossDebuffSeq",{
+ }
+ ),Kt(this,"bossDebuffSeqCounter",0),Kt(this,"backstabFxCooldown",0),Kt(this,"vulnEpoch",0),Kt(this,"vulnDbg",{
+ }
+ ),Kt(this,"vulnValues",{
+ }
+ ),Kt(this,"vulnCapEach",20),Kt(this,"vulnQueues",{
+ }
+ ),Kt(this,"vulnNextProcFrame",{
+ }
+ ),Kt(this,"vulnFrame",0),Kt(this,"bossFacingDir",-1),Kt(this,"resistDealMult",1),Kt(this,"resistTakenMult",1)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ getRaidBossDamageMultiplier(){
+ for(const i of t.BOSS_DAMAGE_SCALE_STEPS)if(this.battleTime>=i.frame)return i.multiplier;
+ return t.BOSS_DAMAGE_SCALE_BASE}
+ async startBattle(i){
+ var s,e,n,h,r,o;
+ this.cleanup(),VR.getInstance().setBattleContext(xR.Raid),this.raidOptions=i??null,this.resultReported=!1,this.bossKindNum=(null==i?void 0:i.bossKindNum)&&i.bossKindNum>0?i.bossKindNum:t.BOSS_KIND_NUM,this.knightLevel=Math.max(1,Math.floor(ML.maxWave/100)),(null==i?void 0:i.squads)?this.applySquads(i.squads):(this.heroKindNums=[...t.DEFAULT_HERO_KINDS],this.soldierKindNums=[...t.DEFAULT_SOLDIER_KINDS],this.heroTransList=[0,0,0,0,0],this.corpSoldierTiers=[null,null,null,null,null]),HB.getInstance().setDay(),HB.getInstance().scale.set(1,1),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.resultPopupDelay=-1,this.pendingResultTitle="",HJt.clearPendingRewards(),this.rangedByCorp=Array.from({
+ length:t.CORP_COUNT}
+ ,()=>[]),this.rangedFanFrames=new Array(t.CORP_COUNT).fill(0),this.rangedFanSlots=Array.from({
+ length:t.CORP_COUNT}
+ ,()=>new Map),this.rangedCmdActivePrev=new Array(t.CORP_COUNT).fill(!1),this.meleeSoldiers=[],this.corpUnits=Array.from({
+ length:t.CORP_COUNT}
+ ,()=>[]),this.corpAggro=new Array(t.CORP_COUNT).fill(0),this.corpWipedFlags=new Array(t.CORP_COUNT).fill(!1),this.prevCorpDmg=new Array(t.CORP_COUNT).fill(0),this.corpHero=new Array(t.CORP_COUNT).fill(null),this.aggroLeader=-1,this.aggroChallenger=-1,this.aggroChallengerFrames=0,this.aggroTargetCorp=-1,this.forcedAggroCorp=-1,this.forcedAggroFrames=0;
+ const a=KQt.getInstance(),c=await a.ensureLoaded();
+ await this.raidEmblemSystem.init(c?a.getLoadoutData():BJt);
+ const l=this.raidEmblemSystem.getHudDefs();
+ for(let M=0;
+ M<t.CORP_COUNT;
+ M++)if("TANK"===(null==(s=l[M])?void 0:s.role)){
+ this.corpAggro[M]=t.TANK_INITIAL_AGGRO;
+ break}
+ this.unitScale=.7,this.applyBackground(),await this.loadRaidBattleAssets(),QG.getInstance().visible=!0,await this.setupTerrain(),this.corpCommander.reset(t.FIELD_WIDTH,t.FIELD_HEIGHT);
+ for(let M=0;
+ M<t.CORP_COUNT;
+ M++)await this.setupCorp(M);
+ await this.setupBoss(),this.raidEmblemSystem.setupRunners(this.buildRaidEmblemHost()),$Q.raidDamageHook=(t,i,s)=>this.raidEmblemSystem.onDamage(t,i,s),$Q.raidDamageMultHook=(t,i)=>this.getBackstabMult(t,i)*this.getVulnMult(i)*this.getResistMult(i);
+ try{
+ await PJt.getInstance().ensureLoaded()}
+ catch(Xst){
+ }
+ this.setupVulnProfile();
+ const u=PJt.getInstance().findByBossKindNum(this.bossKindNum,(null==(e=this.raidOptions)?void 0:e.bossSub)??0);
+ if(this.setupResistMults(u??null),this.backAttackEnabled=(null==u?void 0:u.backAttack)??!0,this.boss instanceof S2&&(this.boss.backstabZoneEnabled=this.backAttackEnabled),this.boss instanceof S2){
+ const t=this.raidEmblemSystem.buildBossEventSink();
+ this.boss.raidEventSink={
+ ...t,onWeakWindowOpen:Vt(()=>{
+ var i;
+ null==(i=t.onWeakWindowOpen)||i.call(t),this.announceBossDebuff(SG.getText("GAME_1464","약점 노출")+"!",15209484,34)}
+ ,"onWeakWindowOpen"),onBossDebuffApplied:Vt(t=>this.announceBossDebuff(t),"onBossDebuffApplied")}
+ }
+ this.setupEnemyLists(),this.snapUnitsToTerrain(),jni.getInstance().switchToBattle(this),HB.getInstance().setDay(),this.mapEffect=new cZt,this.speedHelper.enterFixed(1),this.applyBackground(),QG.getInstance().visible=!0,this.updateZIndexSorting(),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),qG.getInstance().add(this.execute,this),this.camera=new rQt({
+ corpCount:t.CORP_COUNT,fieldW:t.FIELD_WIDTH,fieldH:t.FIELD_HEIGHT,getAnchor:Vt(t=>this.getCameraAnchor(t),"getAnchor"),isFlagDragging:Vt(()=>this.corpCommander.isDragging(),"isFlagDragging"),onFieldDown:Vt((t,i)=>this.tryStartCorpDragAt(t,i),"onFieldDown"),getViewBottomY:Vt(()=>oZt.hudTopY(),"getViewBottomY"),fixedBandY:{
+ top:t.BAND_TOP,height:t.BAND_HEIGHT}
+ }
+ ),this.camera.setup(),this.corpCommander.createFlags(),this.corpCommander.setDashMultProvider(t=>1+this.raidEmblemSystem.getCorpStat(t,"dashSpeed")/100);
+ const d=(null==(n=this.raidOptions)?void 0:n.bossName)??(null==(h=wx.getInstance().getBookVO(this.bossKindNum))?void 0:h.name)??"BOSS",f=PJt.getInstance().findByBossKindNum(this.bossKindNum,(null==(r=this.raidOptions)?void 0:r.bossSub)??0),p=PJt.subByBossKindNum(this.bossKindNum),g=!0===(null==(o=this.raidOptions)?void 0:o.practice),m=g||!this.raidOptions;
+ this.hud=new oZt(d,this.bossKindNum,this.heroKindNums,this.soldierKindNums,()=>this.returnToMain(),this.raidEmblemSystem.getHudDefs(),t=>this.activateRaidEmblem(t),t=>this.onCorpSelect(t),(null==f?void 0:f.main)??(p>0?1:0),(null==f?void 0:f.sub)??p,m,g);
+ const w=(null==f?void 0:f.hasCrossbow)??!0;
+ !w&&this.boss instanceof S2&&this.boss.setInterruptSystemEnabled(!1);
+ const v=[];
+ if(w){
+ const t=Math.min(2,Math.max(0,Math.round(this.raidEmblemSystem.getCrossbowStat("tankReload"))));
+ v.push({
+ x:520,y:1005,fullSec:35,chargeSec:10}
+ ),v.push({
+ x:320,y:345,fullSec:t>=1?45:60,chargeSec:10}
+ ),t>=2&&v.push({
+ x:820,y:330,fullSec:60,chargeSec:10}
+ )}
+ const b=this.raidEmblemSystem.getCrossbowStat("chargeBonus"),_=this.raidEmblemSystem.getCrossbowStat("missRefund"),y=1+this.raidEmblemSystem.getCrossbowStat("reloadSpd")/100;
+ this.crossbows=v.map(i=>{
+ const s=new aQt(i.x,i.y,t.FIELD_WIDTH,t.FIELD_HEIGHT);
+ return s.setHitCheck((t,i,s,e)=>this.testArrowHit(t,i,s,e)),s.setGaugeFullSeconds(i.fullSec),s.setChargeSeconds(i.chargeSec),s.addChargePct(b),s.setChargeRateMult(y),_>0&&s.setOnShotFailed(()=>s.refundChargePct(_)),s.setOnFired(()=>{
+ s.addChargePct(b)}
+ ),s.setFacingDown(i.y<t.BOSS_Y),s}
+ ),this.backAttackEnabled&&(this.tankPad=new $Jt,this.tankPad.position.set(t.TANK_PAD_X,Math.min(VA.stageHeight||1130,oZt.MAX_ANCHOR_HEIGHT)-t.TANK_PAD_FROM_BOTTOM),e5t.getInstance().addChild(this.tankPad)),this.tankPadHolding=!1,this.corpCommander.bringToTop()}
+ applyBackground(){
+ QG.getInstance().setMapBackground("BgRaid2","raid1",t.FIELD_WIDTH,t.FIELD_HEIGHT)}
+ async loadRaidBattleAssets(){
+ const t="ktx2";
+ QA.hasSheet("RaidBattle")||await QA.generateTexture("RaidBattle",t,!1),QA.hasSheet("UI_RAID")||await QA.generateTexture("UI_RAID",t,!1),QA.hasSheet("ActiveSkill")||await QA.generateTexture("ActiveSkill",t,!1)}
+ async castBossActiveSkill(i=LU.DarkLightning,s=0){
+ const e=this.boss;
+ if(!e||!e.isAlive||e.removed)return;
+ if(!QA.hasSheet("ActiveSkill")){
+ const t="ktx2";
+ if(await QA.generateTexture("ActiveSkill",t,!1),!QA.hasSheet("ActiveSkill"))return;
+ if(!e.isAlive||e.removed)return}
+ const n=AF.getInstance().getSkill(i),h=t.BOSS_SKILL_SCALE;
+ n.scale.set(h),n.x=-170*h/2,n.y=-320*h+20,e.addChild(n),n instanceof BU&&(n.loop=!0),n.onComplete=()=>{
+ n.onComplete=()=>{
+ }
+ ,AF.getInstance().addToRecycleList(n),e.isAlive&&!e.removed&&(s>0&&(e.health=e.hp-s),e instanceof S2&&e.flashHit(!1))}
+ ,n.start(30)}
+ showBuffSkillIcons(t,i,s=-1){
+ const e=ij[t-1];
+ if(!e)return;
+ const n=s>=0?this.corpUnits[s]??[]:this.friendList;
+ for(const h of n){
+ if(!h.isAlive||h.removed)continue;
+ const t=ej.getEffect(e);
+ t.holdFrames=i,t.owner=h,h.effectList.push(t),h.addChild(t);
+ const s=h.scale.x||1;
+ t.showAt(0,h.healthBar.y+14/s,0)}
+ }
+ async setupTerrain(){
+ UQ.enabled=!1}
+ teardownTerrain(){
+ this.terrainOverlay&&(this.terrainOverlay.removeFromParent(),this.terrainOverlay.destroy({
+ children:!0}
+ ),this.terrainOverlay=null),this.allyFlowField&&(this.allyFlowField.dispose(),this.allyFlowField=null),this.enemyFlowField&&(this.enemyFlowField.dispose(),this.enemyFlowField=null),UQ.unload()}
+ snapUnitsToTerrain(){
+ const t=Vt(t=>{
+ if(!t.isAir&&!t.isCastle&&UQ.enabled){
+ if(UQ.isBlocked(t.x,t.y)){
+ const i=UQ.snapToNearestPassable(t.x,t.y,160);
+ t.x=i.x,t.y=i.y}
+ if(UQ.isBlocked(t.xDefault,t.yDefault)){
+ const i=UQ.snapToNearestPassable(t.xDefault,t.yDefault,160);
+ t.xDefault=i.x,t.yDefault=i.y}
+ }
+ }
+ ,"snap");
+ for(const i of this.friendList)t(i),i.flowField=this.allyFlowField;
+ for(const i of this.enemyList)t(i),i.flowField=this.enemyFlowField}
+ async setupBoss(){
+ var i,s;
+ const e=wx.getInstance().getBookVO(this.bossKindNum),n=t.BOSS_CLASS_BY_KIND[this.bossKindNum]??(null==e?void 0:e.className)??rx.HarpyKing,h=H2.getInstance().getUnitSync(n);
+ h.battleController=this,h instanceof S2&&await h.ensureSpineReady();
+ const r=e?this.bossKindNum:t.GOLEM_KIND_NUM;
+ if(e??wx.getInstance().getBookVO(r)){
+ const t=bx.getVO();
+ t.id=-1,t.kindNum=r,t.level=Math.max(1,(null==(i=this.raidOptions)?void 0:i.bossLevel)??1),t.enhance=0,t.isEnemy=!0,this.spawnedVOs.push(t),h.setData(t),h.kindNum=this.bossKindNum}
+ if((null==(s=this.raidOptions)?void 0:s.bossHp)&&this.raidOptions.bossHp>0?h.baseMaxHp=this.raidOptions.bossHp:h.baseMaxHp*=t.BOSS_HP_MULT,h.orgMaxHp=h.maxHp=h.baseMaxHp,h.hp=h.maxHp,h.health=h.maxHp,this.bossStartHp=h.maxHp,h.orgMoveSpd=h.moveSpd=1.8*h.moveSpd*1.6*2*.7,h instanceof S2&&h.immobile?(h.orgMoveSpd=h.moveSpd=0,h.atkRange=t.IMMOBILE_BOSS_ATK_RANGE,h.atkRange2=h.atkRange*h.atkRange):h.moveSpd<=0&&(h.orgMoveSpd=h.moveSpd=3),this.bossKindNum===t.HARPY_KIND_NUM&&(h.orgMoveSpd=h.moveSpd=2),this.bossKindNum===t.DRAGON_KNIGHT_KIND_NUM&&(h.orgMoveSpd=h.moveSpd=2,h.atkRange=300,h.atkRange2=h.atkRange*h.atkRange),h.blowImmune=!0,h.stunImmune=!0,h.freezeImmune=!0,h.knockImmune=!0,h.isAir=!1,h.scale.set(1,1),h instanceof S2&&(h.wanderMinX=250,h.wanderMaxX=790,h.wanderMinY=550,h.wanderMaxY=895,this.bossKindNum===t.HARPY_KIND_NUM&&(h.wanderMinX=300,h.wanderMaxX=1100,h.wanderMinY=650),this.bossKindNum===t.BERIAL_KIND_NUM&&(h.wanderMinY=650),this.bossKindNum===t.DRAGON_KNIGHT_KIND_NUM&&(h.wanderMaxX=1120,h.wanderMaxY=940),this.bossKindNum===t.SCORPION_KIND_NUM&&(h.wanderMinY=580),$Q.knockbackBounds=null),this.bossKindNum===t.HARPY_KIND_NUM?(h.x=t.HARPY_START_X,h.y=t.HARPY_START_Y):this.bossKindNum===t.SCORPION_KIND_NUM?(h.x=t.SCORPION_START_X,h.y=t.BOSS_Y):(h.x=t.BOSS_X,h.y=t.BOSS_Y),h.tx=h.x,h.ty=h.y,h.xDefault=h.x,h.yDefault=h.y,h.ground=h.y,h.lookAt(-1),this.bossFacingDir=-1,h instanceof S2&&h.x>h.wanderMaxX){
+ const t=Math.max(h.wanderMinY,Math.min(h.wanderMaxY,h.y));
+ h.startEntrance((h.wanderMinX+h.wanderMaxX)/2,t)}
+ h.initDelay=0,h.showTombstone=!1,h.maxRevive=0,h.reviveInterval=0,h.totalDamageDealt=0,h.numBlock=0,h.radius=h instanceof S2&&h.raidSpaceRadius>0?h.raidSpaceRadius:t.BOSS_RADIUS,h.aggressiveRetarget=!1,h instanceof S2&&(h.targetSwapChance=0),h.detectRange=t.BOSS_DETECT_RANGE,h.detectRange2=h.detectRange*h.detectRange,rB.getInstance().addChild(h),this.enemyList.push(h),this.boss=h}
+ async setupCorp(i){
+ const s=this.bossKindNum===t.HARPY_KIND_NUM?t.HARPY_CORP_START_LAYOUT:t.CORP_START_LAYOUT,e=s[i]??s[0],n=e.y,h=this.heroKindNums[i],r=this.soldierKindNums[i];
+ h>0&&await this.spawnAlly(h,t.ALLY_HERO_X+e.xOffset,n,!1,i,this.knightLevel,this.heroTransList[i]??0);
+ const o=[];
+ for(let c=0;
+ c<t.SOLDIER_COLS;
+ c++)for(let i=0;
+ i<t.SOLDIER_ROWS;
+ i++){
+ const s=t.ALLY_SOLDIER_X_START+e.xOffset+c*t.SOLDIER_X_SPACING,h=n+-126+i*t.SOLDIER_Y_SPACING;
+ o.push({
+ x:s,y:h}
+ )}
+ const a=this.corpSoldierTiers[i];
+ if(Array.isArray(a)){
+ let t=0;
+ const s=o.length;
+ for(const e of a){
+ if(!e||e.kindNum<=0||e.count<=0)continue;
+ const n=this.knightLevel+(e.plusLevel||0),h=Math.min(e.count,s-t);
+ for(let s=0;
+ s<h;
+ s++){
+ const s=o[t++];
+ await this.spawnAlly(e.kindNum,s.x,s.y,!0,i,n)}
+ if(t>=s)break}
+ }
+ else if(r>0)for(const t of o)await this.spawnAlly(r,t.x,t.y,!0,i,this.knightLevel)}
+ async spawnAlly(i,s,e,n,h=-1,r=1,o=0){
+ const a=wx.getInstance().getBookVO(i);
+ if(!a)return null;
+ const c=await H2.getInstance().getUnit(a.className);
+ c.battleController=this;
+ const l=bx.getVO();
+ if(l.id=-1,l.kindNum=i,l.level=Math.max(1,r),l.trans=Math.max(0,o),l.enhance=0,l.isEnemy=!1,this.spawnedVOs.push(l),c.setData(l),this.applyRawAllyStats(c,i,l.trans,l.level),this.applyTribeBonus(c),c.numBlock=0,c.initDelay=0,c.showTombstone=!1,c.maxRevive=0,c.reviveInterval=0,c.totalDamageDealt=0,c.aggressiveRetarget=!0,c.detectRange=n?1333:1500,c.detectRange2=c.detectRange*c.detectRange,n&&c.unitType===ix.RANGE){
+ const i=t.SOLDIER_RANGE_MULT_MIN,s=t.SOLDIER_RANGE_MULT_MAX,e=i+this.random.next()*(s-i);
+ c.atkRange=c.atkRange*e,c.atkRange2=c.atkRange*c.atkRange;
+ const n=t.RANGE_SOLDIER_MOVE_SPD_MULT_MIN,h=t.RANGE_SOLDIER_MOVE_SPD_MULT_MAX,r=n+this.random.next()*(h-n);
+ c.orgMoveSpd=c.moveSpd=c.moveSpd*r}
+ if(!n&&c.unitType===ix.MELEE){
+ const i=t.MELEE_HERO_HP_MULT;
+ c.baseMaxHp*=i,c.orgMaxHp*=i,c.maxHp*=i,c.hp=c.maxHp,c.health=c.maxHp}
+ if(n&&c.unitType===ix.MELEE){
+ const i=t.MELEE_SOLDIER_HP_MULT;
+ c.baseMaxHp*=i,c.orgMaxHp*=i,c.maxHp*=i,c.hp=c.maxHp,c.health=c.maxHp}
+ if(c.unitType===ix.MELEE&&(c.atkRange=c.atkRange+t.MELEE_ATK_RANGE_BONUS,n&&(c.atkRange*=t.MELEE_SOLDIER_ATK_RANGE_MULT),c.atkRange2=c.atkRange*c.atkRange),c.unitType===ix.MELEE){
+ const i=t.MELEE_MOVE_SPD_MULT_MIN,s=t.MELEE_MOVE_SPD_MULT_MAX,e=i+this.random.next()*(s-i);
+ c.orgMoveSpd=c.moveSpd=c.moveSpd*e}
+ if(!n&&c.unitType===ix.RANGE){
+ const i=t.RANGE_HERO_ATK_RANGE_MULT;
+ c.atkRange=c.atkRange*i,c.atkRange2=c.atkRange*c.atkRange}
+ c.attackCoolDown=0,c.skillCallIndex=0,c.attackCallIndex=0,c.attackIndex=0,c.__formSettled=!1;
+ let u=0;
+ if(n&&c.unitType===ix.MELEE){
+ const i=t.MELEE_SOLDIER_LANE_OFFSET;
+ u=(2*this.random.next()-1)*i,c.__antiJamDir=this.random.next()<.5?-1:1,c.__antiJamDriftFrames=0}
+ c.x=s,c.y=e;
+ const d=t.FIELD_WIDTH,f=t.FIELD_HEIGHT;
+ c.xDefault=Math.max(10,Math.min(d-10,s+t.MARCH_DISTANCE)),c.yDefault=Math.max(10,Math.min(f-10,e+u)),c.lookAt(1),c.healthBar.setHealthColor(!0),c.isAir&&c.onFlyEnter(!0);
+ const p=c,g=p.__raidBaseRadius??c.radius;
+ p.__raidBaseRadius=g,c.radius=g*t.ALLY_RADIUS_SCALE,n||c.scale.set(t.HERO_UNIT_SCALE,t.HERO_UNIT_SCALE),rB.getInstance().addChild(c),this.friendList.push(c),h>=0&&h<this.corpUnits.length&&(this.corpUnits[h].push(c),c.__raidCorpIndex=h,n||(this.corpHero[h]=c));
+ const m=this.raidEmblemSystem.getCorpContext(h);
+ return m&&PQt.applyToUnit(c,m,{
+ isHero:!n,unitType:c.unitType,tribe:c.tribe}
+ ),n&&c.unitType===ix.RANGE?h>=0&&h<this.rangedByCorp.length&&this.rangedByCorp[h].push(c):n&&c.unitType===ix.MELEE&&this.meleeSoldiers.push(c),this.corpCommander.register(h,c,!n),c}
+ applyRawAllyStats(t,i,s,e){
+ const n=wx.getInstance().getBookVO(i);
+ if(!n)return;
+ const h=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1));
+ t.baseMaxHp=n.hp*h,t.baseAtkDmg=n.atkDmg*h,t.baseDef=n.def*h,t.orgMaxHp=t.maxHp=n.hp*h,t.orgAtkDmg=t.atkDmg=n.atkDmg*h,t.orgDef=t.def=n.def*h,t.phyDef=n.phyDef*h,t.magDef=n.magDef*h,t.hp=t.maxHp,t.health=t.maxHp}
+ applyTribeBonus(t){
+ const i=this.raidOptions;
+ if(!i)return;
+ let s=1;
+ i.plusTribe&&t.tribe===this.tribeTypeOf(i.plusTribe)?s=1+(i.plusValue??0)/100:i.minusTribe&&t.tribe===this.tribeTypeOf(i.minusTribe)&&(s=1-(i.minusValue??0)/100),1!==s&&(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.phyDef*=s,t.magDef*=s)}
+ tribeTypeOf(t){
+ switch(t.toLowerCase()){
+ case"human":return nx.HUMAN;
+ case"elf":return nx.ELF;
+ case"undead":return nx.UNDEAD;
+ case"orc":return nx.ORC;
+ default:return nx.NONE}
+ }
+ buildRaidEmblemHost(){
+ return{
+ getAliveCorpUnits:Vt(t=>this.getAliveCorpUnits(t),"getAliveCorpUnits"),getAllAllies:Vt(()=>this.friendList.filter(t=>t.isAlive&&!t.removed),"getAllAllies"),getBoss:Vt(()=>this.boss,"getBoss"),isHeroUnit:Vt(t=>this.corpHero.includes(t),"isHeroUnit"),getCorpIndexOf:Vt(t=>t.__raidCorpIndex??-1,"getCorpIndexOf"),forceAggro:Vt((i,s)=>{
+ this.forcedAggroCorp=i,this.forcedAggroFrames=s;
+ const e=this.corpAggro.reduce((t,i)=>Math.max(t,i),0);
+ this.corpAggro[i]=Math.max(this.corpAggro[i]??0,e*t.AGGRO_SWITCH_MARGIN+t.AGGRO_MIN)}
+ ,"forceAggro"),random01:Vt(()=>this.random.next(),"random01"),announceBossDebuff:Vt(t=>this.announceBossDebuff(t),"announceBossDebuff")}
+ }
+ announceBossDebuff(t,i,s){
+ const e=this.boss;
+ e&&e.isAlive&&!e.removed&&this.bossAnnouncer.announce(t,e.x,e.y-e.hitHeight-36,i,s)}
+ updateRaidEmblems(){
+ this.forcedAggroFrames>0&&(this.forcedAggroFrames--,this.forcedAggroFrames<=0&&(this.forcedAggroCorp=-1)),this.raidEmblemSystem.update(),this.bossAnnouncer.update()}
+ tryStartCorpDragAt(t,i){
+ const s=rB.getInstance().toLocal({
+ x:t,y:i}
+ ),e=this.pickCorpAt(s.x,s.y);
+ return!(e<0||(this.setSelectedCorp(e),this.dragSelectedCorp=!0,this.corpCommander.startCorpDragAt(e,t,i),0))}
+ setSelectedCorp(t){
+ this.selectedCorpIndex!==t&&(this.selectedCorpIndex>=0&&this.setCorpOutline(this.selectedCorpIndex,!1),this.selectedCorpIndex=t,this.setCorpOutline(t,!0))}
+ pickCorpAt(i,s){
+ let e=-1,n=t.UNIT_SELECT_RADIUS*t.UNIT_SELECT_RADIUS;
+ for(let t=0;
+ t<this.corpUnits.length;
+ t++)for(const h of this.corpUnits[t]){
+ if(!h.isAlive||h.removed)continue;
+ const r=h.getHitCenter(),o=r.x-i,a=r.y-s,c=o*o+a*a;
+ c<n&&(n=c,e=t)}
+ return e}
+ onCorpSelect(t){
+ this.dragSelectedCorp=!1,this.selectedCorpIndex>=0&&this.setCorpOutline(this.selectedCorpIndex,!1),this.selectedCorpIndex!==t?(this.selectedCorpIndex=t,this.setCorpOutline(t,!0)):this.selectedCorpIndex=-1}
+ setCorpOutline(i,s){
+ const e=this.corpUnits[i];
+ if(e)for(const n of e)n.filters=s?[new kJt({
+ thickness:3,color:t.CORP_OUTLINE_COLOR,quality:.5}
+ )]:[]}
+ activateRaidEmblem(i){
+ var s,e;
+ if(this.corpWipedFlags[i])return;
+ if(!this.raidEmblemSystem.activate(i))return;
+ const n=this.raidEmblemSystem.getCorpContext(i),h=(null==n?void 0:n.active)?t.EMBLEM_ACTIVE_NAMES[n.active.skillId]:void 0,r=h?SG.getText(h.key,h.fallback):"";
+ null==(s=this.hud)||s.showEmblemActivationCallout(i,r);
+ const o=(null==(e=this.raidEmblemSystem.getHudDefs()[i])?void 0:e.role)??"",a=t.EMBLEM_AURA_BY_ROLE[o]??PF.HeroAura2Effect;
+ for(const c of this.corpUnits[i]??[])c.isAlive&&!c.removed&&c.showEffect(a,t.EMBLEM_FLASH_FRAMES,t.ORIGIN_POINT,!0,!0)}
+ getCorpAggroMultiplier(i){
+ return(t.CORP_AGGRO_MULT[i]??1)*this.raidEmblemSystem.getAggroMult(i)}
+ getAliveCorpUnits(t){
+ return(this.corpUnits[t]??[]).filter(t=>t.isAlive&&!t.removed)}
+ 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}
+ checkProgress(){
+ var t;
+ this.backstabFxCooldown>0&&this.backstabFxCooldown--,this.tickVulnStacks(),this.snapshotCrowdPositions(),null==(t=this.camera)||t.update(),this.corpCommander.update(),this.dragSelectedCorp&&this.selectedCorpIndex>=0&&!this.corpCommander.isDragging()&&(this.setCorpOutline(this.selectedCorpIndex,!1),this.selectedCorpIndex=-1,this.dragSelectedCorp=!1),this.updateTankPad(),super.checkProgress(),this.applyRangedFormation(),this.applyMeleeSurround(),this.updateSeparationBurst(),this.applyOrca(),this.applyBossPostFormationEffects();
+ for(const s of this.friendList)s.isAir&&s.isAlive&&!s.removed&&s.onFlyEnter(!1,!1);
+ this.faceMeleeSurroundToBoss(),this.updateRaidEmblems();
+ const i=this.updateAggro();
+ this.updateHud(i),this.updateTargetIndicator();
+ for(const s of this.crossbows)s.update();
+ this.drawCrossbowDebug(),this.resultPopupDelay>0?this.resultPopupDelay--:0===this.resultPopupDelay&&(this.resultPopupDelay=-1,this.showRaidResultPopup(this.pendingResultTitle))}
+ applyBossPostFormationEffects(){
+ var t;
+ const i=this.boss;
+ null==(t=null==i?void 0:i.applyRaidPostFormationEffects)||t.call(i)}
+ updateAggro(){
+ var i;
+ const s=t.AGGRO_DECAY,e=[];
+ let n=-1,h=0;
+ for(let t=0;
+ t<this.corpUnits.length;
+ t++){
+ const i=this.corpUnits[t],r=this.corpHero[t];
+ let o=0,a=0,c=0,l=0,u=0;
+ for(const t of i){
+ const i=Math.max(0,t.maxHp||t.orgMaxHp||0);
+ l+=i,t.isAlive&&!t.removed&&(o++,t!==r&&a++,c+=Math.max(0,Math.min(t.hp,i))),u+=t.totalDamageDealt}
+ const d=Math.max(0,u-this.prevCorpDmg[t]);
+ this.prevCorpDmg[t]=u,this.corpAggro[t]=this.corpAggro[t]*s+d*this.getCorpAggroMultiplier(t);
+ const f=!r||!r.isAlive||r.removed;
+ f&&a<=0&&!this.corpWipedFlags[t]&&(this.corpWipedFlags[t]=!0,this.corpAggro[t]=0,this.forcedAggroCorp===t&&(this.forcedAggroCorp=-1,this.forcedAggroFrames=0)),this.corpWipedFlags[t]&&(this.corpAggro[t]=0);
+ const p=this.corpAggro[t];
+ e.push({
+ alive:o,total:i.length,hp:c,maxHp:l,dmg:u,aggro:p,soldierAlive:a,heroDead:f,buffs:this.buildCorpBuffs(t)}
+ ),o>0&&p>h&&(h=p,n=t)}
+ if(this.aggroLeader>=0&&e[this.aggroLeader].alive>0?n>=0&&n!==this.aggroLeader&&this.corpAggro[n]>this.corpAggro[this.aggroLeader]*t.AGGRO_SWITCH_MARGIN?(n===this.aggroChallenger?this.aggroChallengerFrames++:(this.aggroChallenger=n,this.aggroChallengerFrames=1),this.aggroChallengerFrames>=t.AGGRO_SWITCH_DWELL&&(this.aggroLeader=n,this.aggroChallenger=-1,this.aggroChallengerFrames=0)):(this.aggroChallenger=-1,this.aggroChallengerFrames=0):(this.aggroLeader=n,this.aggroChallenger=-1,this.aggroChallengerFrames=0),this.forcedAggroCorp>=0&&this.forcedAggroFrames>0&&(null==(i=e[this.forcedAggroCorp])?void 0:i.alive)>0){
+ const i=this.forcedAggroCorp,s=Math.max(this.corpAggro[i]??0,h+t.AGGRO_MIN);
+ this.corpAggro[i]=s,e[i].aggro=s,this.aggroLeader=i,this.aggroChallenger=-1,this.aggroChallengerFrames=0}
+ const r=this.boss,o=this.aggroLeader;
+ if(r instanceof S2)if(r.isAlive&&!r.removed&&!r.isUntagetable&&o>=0&&e[o].alive>0&&(this.corpAggro[o]>=t.AGGRO_MIN||this.forcedAggroCorp===o&&this.forcedAggroFrames>0)){
+ const i=r.target;
+ if(this.aggroTargetCorp!==o||!i||!i.isAlive||i.removed){
+ const t=this.nearestCorpUnit(o,r);
+ t&&(r.setAggroTarget(t),this.aggroTargetCorp=o)}
+ const s=this.corpHero[o],e=s&&s.isAlive&&!s.removed?s:null,n=e?e.x:r.target?r.target.x:null;
+ r.aggroFaceX=n;
+ const h=(r.immobile||r.state!==sx.ATTACK&&r.state!==sx.SKILL)&&!(r instanceof S2&&r.isEntranceFlying);
+ null!==n&&h&&Math.abs(n-r.x)>t.AGGRO_FACE_DEADZONE&&r.lookAt(n<r.x?-1:1)}
+ else r.aggroFaceX=null,this.aggroTargetCorp=-1;
+ return r&&r.isAlive&&(this.bossFacingDir=r.direction>0?1:-1),r instanceof S2&&r.updateBackstabZone(),e}
+ nearestCorpUnit(t,i){
+ let s=null,e=1/0;
+ for(const n of this.corpUnits[t]){
+ if(!n.isAlive||n.removed)continue;
+ const t=n.x-i.x,h=n.y-i.y,r=t*t+h*h;
+ r<e&&(e=r,s=n)}
+ return s}
+ requestSeparationBurst(t,i,s,e){
+ this.sepBurstX=t,this.sepBurstY=i,this.sepBurstR=s,this.sepBurstFrames=Math.max(this.sepBurstFrames,e)}
+ updateSeparationBurst(){
+ if(this.sepBurstFrames<=0)return;
+ this.sepBurstFrames--;
+ const i=this.sepBurstX,s=this.sepBurstY,e=Math.max(1,this.sepBurstR),n=e*e,h=t.GOLDEN_ANGLE;
+ for(let t=0;
+ t<this.friendList.length;
+ t++){
+ const r=this.friendList[t];
+ if(!r.isAlive||r.removed||r.isImmovable)continue;
+ if("none"!==r.commandPhase)continue;
+ const o=r.x-i,a=r.y-s,c=o*o+a*a;
+ if(c>n)continue;
+ const l=Math.sqrt(c);
+ let u,d;
+ if(l<4){
+ const i=t*h;
+ u=Math.cos(i),d=Math.sin(i)}
+ else u=o/l,d=a/l;
+ const f=1-l/e,p=Math.min(r.moveSpd||1.5,2)*(.4+.8*f);
+ r.x+=u*p,r.y+=d*p}
+ }
+ updateTargetIndicator(){
+ this.targetIndicator||(this.targetIndicator=new Lf,this.targetIndicator.eventMode="none",HB.getInstance().addChild(this.targetIndicator));
+ const t=this.targetIndicator,i=this.boss,s=this.aggroLeader,e=s>=0?this.corpHero[s]:null;
+ if(!(e&&e.isAlive&&!e.removed&&i&&i.isAlive)||i.removed||i.isUntagetable||!e)return void(t.visible=!1);
+ t.visible=!0;
+ const n=this.battleTime,h=4*Math.sin(.15*n),r=e.y-(e.isAir?e.airHeight:0)-(e.hitHeight>0?e.hitHeight:60)-10+h,o=r-22;
+ t.clear();
+ const a=[e.x-12,o,e.x+12,o,e.x,r];
+ t.poly(a).fill({
+ color:16726832,alpha:.95}
+ ),t.poly(a).stroke({
+ width:2,color:16777215,alpha:.9}
+ )}
+ getHighestAggroCorpUnits(){
+ let t=-1,i=-1;
+ for(let s=0;
+ s<this.corpUnits.length;
+ s++){
+ if(!this.corpUnits[s].some(t=>t.isAlive&&!t.removed&&!t.isUntagetable))continue;
+ const e=this.corpAggro[s]??0;
+ e>i&&(i=e,t=s)}
+ return t<0?[]:this.corpUnits[t].filter(t=>t.isAlive&&!t.removed&&!t.isUntagetable)}
+ getBattleTimeFrames(){
+ return this.battleTime}
+ getCorpCount(){
+ return this.corpUnits.length}
+ getHighestAggroCorpIndex(){
+ let t=-1,i=-1;
+ for(let s=0;
+ s<this.corpUnits.length;
+ s++){
+ if(!this.corpUnits[s].some(t=>t.isAlive&&!t.removed&&!t.isUntagetable))continue;
+ const e=this.corpAggro[s]??0;
+ e>i&&(i=e,t=s)}
+ return t}
+ getTopDamageCorpIndex(){
+ let t=-1,i=-1;
+ for(let s=0;
+ s<this.corpUnits.length;
+ s++){
+ const e=this.corpUnits[s];
+ if(!e.some(t=>t.isAlive&&!t.removed&&!t.isUntagetable))continue;
+ let n=0;
+ for(const t of e)n+=t.totalDamageDealt;
+ n>i&&(i=n,t=s)}
+ return t}
+ getRandomRangedCorpCenter(){
+ var t;
+ const i=Vt(t=>(this.corpUnits[t]??[]).some(t=>t.isAlive&&!t.removed&&!t.isUntagetable),"isAliveCorp"),s=[];
+ for(let n=0;
+ n<this.corpUnits.length;
+ n++)(null==(t=this.corpHero[n])?void 0:t.unitType)===ix.RANGE&&i(n)&&s.push(n);
+ const e=s.length>0?s:Array.from({
+ length:this.corpUnits.length}
+ ,(t,i)=>i).filter(i);
+ return 0===e.length?null:this.getCorpCenter(e[this.random.nextInt(e.length)])}
+ getCorpIndicesByAggro(t){
+ const i=Vt(t=>(this.corpUnits[t]??[]).some(t=>t.isAlive&&!t.removed&&!t.isUntagetable),"isAliveCorp"),s=[];
+ for(let e=0;
+ e<this.corpUnits.length;
+ e++)if(i(e)){
+ if(t){
+ const t=this.corpHero[e];
+ if(!(this.corpUnits[e]??[]).some(i=>i!==t&&i.isAlive&&!i.removed&&!i.isUntagetable&&i.unitType===ix.RANGE))continue}
+ s.push(e)}
+ return s.sort((t,i)=>(this.corpAggro[i]??0)-(this.corpAggro[t]??0)),s}
+ getCorpRangedSoldierCenter(t){
+ const i=this.corpHero[t];
+ let s=0,e=0,n=0;
+ for(const h of this.corpUnits[t]??[])h!==i&&(!h.isAlive||h.removed||h.isUntagetable||h.unitType===ix.RANGE&&(s+=h.x,e+=h.y,n++));
+ return n>0?{
+ x:s/n,y:e/n}
+ :null}
+ getCorpCenter(t){
+ const i=this.corpUnits[t];
+ if(!i)return null;
+ let s=0,e=0,n=0;
+ for(const h of i)!h.isAlive||h.removed||h.isUntagetable||(s+=h.x,e+=h.y,n++);
+ return 0===n?null:{
+ x:s/n,y:e/n}
+ }
+ getRaidCorpUnitsAroundTarget(t){
+ const i=this.resolveCorpIndexForTarget(t);
+ if(i<0)return[];
+ const s=[];
+ for(let e=i-1;
+ e<=i+1;
+ e++)if(!(e<0||e>=this.corpUnits.length))for(const t of this.corpUnits[e])!t.isAlive||t.removed||t.isUntagetable||s.push(t);
+ return s}
+ resolveCorpIndexForTarget(t){
+ if(t)for(let e=0;
+ e<this.corpUnits.length;
+ e++)if(this.corpUnits[e].includes(t))return e;
+ if(this.aggroTargetCorp>=0)return this.aggroTargetCorp;
+ if(this.aggroLeader>=0)return this.aggroLeader;
+ if(!t)return-1;
+ let i=-1,s=1/0;
+ for(let e=0;
+ e<this.corpUnits.length;
+ e++)for(const n of this.corpUnits[e]){
+ if(!n.isAlive||n.removed||n.isUntagetable)continue;
+ const h=n.x-t.x,r=n.y-t.y,o=h*h+r*r;
+ o<s&&(s=o,i=e)}
+ return i}
+ updateHud(i){
+ if(!this.hud)return;
+ const s=this.boss,e=s?s.maxHp:1,n=s?Math.max(0,s.hp):0;
+ this.hud.update({
+ bossHp:n,bossMaxHp:e,corps:i,remainSec:this.getRemainingTimeSeconds(),emblems:Array.from({
+ length:t.CORP_COUNT}
+ ,(t,i)=>this.raidEmblemSystem.getHudState(i)),bossDebuffs:this.buildBossDebuffList()}
+ )}
+ trackDebuffRingTotal(t,i){
+ let s=this.bossDebuffRingTotals[t];
+ return s||(s={
+ lastRemain:0,total:0}
+ ,this.bossDebuffRingTotals[t]=s),i>s.lastRemain+1&&(s.total=i),s.lastRemain=i,Math.max(s.total,i,1)}
+ buildCorpBuffs(t){
+ const i=[],s=this.corpUnits[t];
+ if(!s)return i;
+ let e=null;
+ for(const n of s)if(n.isAlive&&!n.removed){
+ e=n;
+ break}
+ return e?((e.getAttackDamageBuffRemain(yK.RaidRune_ACTIVE_ATKDMG)>0||e.getAttackDamageBuffRemain(yK.RaidRune_ALLOUT_ATKDMG)>0)&&i.push("Buff_AtkUp.png"),(e.getAttackSpeedBuffRemain(yK.RaidRune_ACTIVE_ATKSPD)>0||e.getAttackSpeedBuffRemain(yK.RaidRune_ALLOUT_ATKSPD)>0)&&i.push("Buff_AtkSpeedUp.png"),e.raidIncomingDamageMult<e.raidPassiveIncomingMult-.001&&i.push("Buff_DamageReduction.png"),this.raidEmblemSystem.isActiveRunningById("massHeal")&&i.push("Buff_Heal.png"),i):i}
+ static formatDebuffPct(t,i){
+ if(null===t)return;
+ const s=Math.round(t);
+ return s<1?void 0:`${
+ i}
+ ${
+ s}
+ %`}
+ buildBossDebuffList(){
+ const t=this.buildBossDebuffInstances(),i=new Set(t.map(t=>t.key));
+ for(const s of Object.keys(this.bossDebuffSeq))i.has(s)||delete this.bossDebuffSeq[s];
+ for(const s of Object.keys(this.bossDebuffRingTotals))i.has(s)||delete this.bossDebuffRingTotals[s];
+ return t}
+ buildBossDebuffInstances(){
+ const i=this.boss;
+ if(!i||!i.isAlive||i.removed)return[];
+ const s=[],e=Vt((i,e,n,h,r,o,a=!1,c,l)=>{
+ n<=0||(void 0===this.bossDebuffSeq[i]&&(this.bossDebuffSeq[i]=++this.bossDebuffSeqCounter),s.push({
+ key:i,frame:e,remainSec:n/60,totalSec:(h??this.trackDebuffRingTotal(i,n))/60,valueText:t.formatDebuffPct(r,o),highlight:a,label:c,calloutText:l}
+ ))}
+ ,"push"),n=this.raidEmblemSystem.getBossExposureEntries();
+ let h=0;
+ for(const t of n)h+=t.pct;
+ let r=0;
+ if(i instanceof S2){
+ const t=i.getInterruptDebuffRemains();
+ r=Math.max(t[2]??0,t[3]??0),r>0&&(h+=i.getInterruptExposurePct())}
+ const o=h>=t.WOUND_HIGHLIGHT_PCT;
+ for(const t of n)e(`wound-${
+ t.id}
+ `,t.bleed?"Buff_Injury2.png":"Buff_Injury.png",t.frames,t.total,t.pct,"+",o&&!t.bleed);
+ r>0&&i instanceof S2&&e("wound-int","Buff_Injury.png",r,null,i.getInterruptExposurePct(),"+",o);
+ const a=[["def-weak",yK.RaidWeakpoint_BOSS_DEFENSE],["def-hex",yK.RaidRune_BOSS_DEFENSE],["def-arrow",yK.RaidRune_ARROW_DEFENSE],["def-combo",yK.RaidRune_COMBO_DEFENSE]];
+ for(const[t,l]of a)e(t,"Buff_DefenseDown.png",i.getDefenseBuffRemain(l),null,100*-i.getDefenseBuffValue(l),"-");
+ e("atk-disarm","Buff_AtkDown.png",i.getAttackDamageBuffRemain(yK.RaidRune_BOSS_ATKDMG),null,100*-i.getAttackDamageBuffValue(yK.RaidRune_BOSS_ATKDMG),"-");
+ const c=[["spd-weak",yK.RaidWeakpoint_BOSS_ATKSPD],["spd-rune",yK.RaidRune_BOSS_ATKSPD]];
+ for(const[t,l]of c)e(t,"Buff_AtkSpeedDown.png",i.getAttackSpeedBuffRemain(l),null,100*-i.getAttackSpeedBuffValue(l),"-");
+ e("move-weak","Buff_MoveSpeedDown.png",i.getMoveSpeedBuffRemain(yK.RaidWeakpoint_BOSS_MOVESPD),null,100*-i.getMoveSpeedBuffValue(yK.RaidWeakpoint_BOSS_MOVESPD),"-"),e("taunt","Buff_Wound.png",this.forcedAggroFrames,null,null,"");
+ for(const l in this.vulnQueues){
+ const i=this.vulnQueues[l];
+ 0!==i.length&&e(`vuln-${
+ l}
+ `,_zt[l]??"Buff_Wound.png",i[i.length-1]-this.vulnFrame,t.VULN_STACK_FRAMES,Math.min(i.length*this.vulnValues[l],this.vulnCapEach),"+",!1,Szt(l),Tzt(l))}
+ return i instanceof S2&&i.raidStunFrames>0&&i.getExhaustIncMult()>1&&e("groggy","Buff_Wound.png",i.raidStunFrames,null,100*(i.getExhaustIncMult()-1),"+",!0,SG.getText("GAME_1408","무방비"),Tzt("groggy")),s.sort((t,i)=>(this.bossDebuffSeq[i.key]??0)-(this.bossDebuffSeq[t.key]??0)),s}
+ buildBossDebuffMerged(){
+ const i=this.boss;
+ if(!i||!i.isAlive||i.removed)return[];
+ const s=[],e=Vt((i,e,n,h,r,o=!1)=>{
+ if(n<=0){
+ delete this.bossDebuffSeq[i];
+ const t=this.bossDebuffRingTotals[i];
+ return void(t&&(t.lastRemain=0,t.total=0))}
+ void 0===this.bossDebuffSeq[i]&&(this.bossDebuffSeq[i]=++this.bossDebuffSeqCounter),s.push({
+ key:i,frame:e,remainSec:n/60,totalSec:this.trackDebuffRingTotal(i,n)/60,valueText:t.formatDebuffPct(h,r),highlight:o}
+ )}
+ ,"push"),n=this.raidEmblemSystem.getBossExposureTotal();
+ let h=n.pct,r=n.frames;
+ if(i instanceof S2){
+ const t=i.getInterruptDebuffRemains(),s=Math.max(t[2]??0,t[3]??0);
+ s>0&&(h+=i.getInterruptExposurePct(),r=Math.max(r,s))}
+ return e("wound","Buff_Injury.png",r,h,"+",h>=t.WOUND_HIGHLIGHT_PCT),e("def","Buff_DefenseDown.png",Math.max(i.getDefenseBuffRemain(yK.RaidWeakpoint_BOSS_DEFENSE),i.getDefenseBuffRemain(yK.RaidRune_BOSS_DEFENSE),i.getDefenseBuffRemain(yK.RaidRune_ARROW_DEFENSE),i.getDefenseBuffRemain(yK.RaidRune_COMBO_DEFENSE)),Math.max(0,100*-i.getDefenseBuffTotal()),"-"),e("atk","Buff_AtkDown.png",i.getAttackDamageBuffRemain(yK.RaidRune_BOSS_ATKDMG),Math.max(0,100*-i.getAttackDamageBuffTotal()),"-"),e("atkSpd","Buff_AtkSpeedDown.png",Math.max(i.getAttackSpeedBuffRemain(yK.RaidWeakpoint_BOSS_ATKSPD),i.getAttackSpeedBuffRemain(yK.RaidRune_BOSS_ATKSPD)),Math.max(0,100*-i.getAttackSpeedBuffTotal()),"-"),e("move","Buff_MoveSpeedDown.png",i.getMoveSpeedBuffRemain(yK.RaidWeakpoint_BOSS_MOVESPD),Math.max(0,100*-i.getMoveSpeedBuffTotal()),"-"),e("taunt","Buff_Wound.png",this.forcedAggroFrames,null,""),s.sort((t,i)=>(this.bossDebuffSeq[i.key]??0)-(this.bossDebuffSeq[t.key]??0)),s}
+ getSurroundScale(){
+ return this.bossKindNum===t.SCORPION_KIND_NUM?{
+ x:t.SCORPION_SURROUND_X_SCALE,y:t.SCORPION_SURROUND_Y_SCALE}
+ :this.bossKindNum===t.GOLEM_KIND_NUM?{
+ x:t.GOLEM_SURROUND_X_SCALE,y:t.GOLEM_SURROUND_Y_SCALE}
+ :this.bossKindNum===t.BERIAL_KIND_NUM?{
+ x:t.BERIAL_SURROUND_X_SCALE,y:t.BERIAL_SURROUND_Y_SCALE}
+ :this.bossKindNum===t.DRAGON_KNIGHT_KIND_NUM?{
+ x:t.DRAGON_KNIGHT_SURROUND_X_SCALE,y:t.DRAGON_KNIGHT_SURROUND_Y_SCALE}
+ :{
+ x:1,y:1}
+ }
+ applyMeleeSurround(){
+ const i=this.boss;
+ if(!i||!i.isAlive||i.removed||i.isUntagetable)return;
+ const s=i.radius>0?i.radius:t.BOSS_RADIUS,e=t.GOLDEN_ANGLE,n=this.getSurroundScale(),h=n.x,r=n.y,o=i.airTargetOnly||i.isAir;
+ for(let a=0;
+ a<this.meleeSoldiers.length;
+ a++){
+ const n=this.meleeSoldiers[a];
+ if(!n.isAlive||n.removed)continue;
+ if("none"!==n.commandPhase)continue;
+ const c=a*e,l=s+n.radius+t.MELEE_HUG_MARGIN,u=i.x+Math.cos(c)*l*h,d=i.y+Math.sin(c)*l*r;
+ o&&(n.xDefault=u,n.yDefault=d),this.pullToSlot(n,u,d)}
+ if(o)for(let a=0;
+ a<this.corpHero.length;
+ a++){
+ const e=this.corpHero[a];
+ if(!e||!e.isAlive||e.removed)continue;
+ if(e.unitType!==ix.MELEE)continue;
+ if("none"!==e.commandPhase)continue;
+ const n=e.x-i.x,o=e.y-i.y,c=Math.sqrt(n*n+o*o),l=c>.01?n/c:1,u=c>.01?o/c:0,d=s+e.radius+t.MELEE_HUG_MARGIN;
+ e.xDefault=i.x+l*d*h,e.yDefault=i.y+u*d*r}
+ }
+ pullToSlot(i,s,e){
+ const n=s-i.x,h=e-i.y,r=n*n+h*h,o=t.FORM_SETTLE_DIST,a=t.FORM_RELEASE_DIST;
+ if(i.__formSettled){
+ if(r<=a*a)return;
+ i.__formSettled=!1}
+ else if(r<=o*o)return void(i.__formSettled=!0);
+ const c=Math.sqrt(r),l=Math.min(c,i.moveSpd);
+ i.x+=n/c*l,i.y+=h/c*l}
+ faceMeleeSurroundToBoss(){
+ const t=this.boss;
+ if(t&&t.isAlive&&!t.removed&&!t.isUntagetable)for(let i=0;
+ i<this.meleeSoldiers.length;
+ i++){
+ const s=this.meleeSoldiers[i];
+ if(!s.isAlive||s.removed)continue;
+ if("none"!==s.commandPhase)continue;
+ const e=t.x-s.x;
+ Math.abs(e)>1&&s.lookAt(e)}
+ }
+ applyRangedFormation(){
+ const t=this.boss;
+ if(t&&t.isAlive&&!t.removed&&!t.isUntagetable)for(let i=0;
+ i<this.rangedByCorp.length;
+ i++){
+ const t=this.rangedByCorp[i];
+ if(!t||0===t.length)continue;
+ const s=[];
+ let e=!1;
+ for(let i=0;
+ i<t.length;
+ i++){
+ const n=t[i];
+ n.isAlive&&!n.removed&&("none"!==n.commandPhase&&(e=!0),s.push(n))}
+ if(0===s.length)continue;
+ if(!e&&this.rangedCmdActivePrev[i]&&this.startRangedFanBurst(i,s),this.rangedCmdActivePrev[i]=e,e)continue;
+ const n=this.rangedFanFrames[i]??0;
+ if(n<=0)continue;
+ this.rangedFanFrames[i]=n-1;
+ const h=this.rangedFanSlots[i];
+ for(let i=0;
+ i<s.length;
+ i++){
+ const t=null==h?void 0:h.get(s[i]);
+ t&&this.pullToSlot(s[i],t.x,t.y)}
+ }
+ }
+ startRangedFanBurst(i,s){
+ const e=this.boss;
+ if(!e)return;
+ const n=t.FAN_HALF_WIDTH,h=t.FAN_WING_CURVE,r=1/3;
+ let o=0,a=0;
+ for(let t=0;
+ t<s.length;
+ t++)o+=s[t].x,a+=s[t].y;
+ o/=s.length,a/=s.length;
+ let c=e.x-o,l=e.y-a;
+ const u=Math.sqrt(c*c+l*l);
+ if(u<.001)return;
+ c/=u,l/=u;
+ const d=-l,f=c,p=new Map,g=s.length;
+ for(let t=0;
+ t<g;
+ t++){
+ const i=g>1?t/(g-1)*2-1:0,e=i*n,u=(i*i-r)*h;
+ p.set(s[t],{
+ x:o+d*e+c*u,y:a+f*e+l*u}
+ ),s[t].__formSettled=!1}
+ this.rangedFanSlots[i]=p,this.rangedFanFrames[i]=t.RANGED_FAN_BURST_FRAMES}
+ testArrowHit(i,s,e,n){
+ const h=this.boss;
+ if(!h||!h.isAlive||h.removed||h.isUntagetable)return!1;
+ if(!(h instanceof S2))return!1;
+ const r=h.getWeakPointWorld();
+ if(!((s-r.y)*(n-r.y)<=0||Math.abs(n-r.y)>Math.abs(s-r.y)&&!(Math.abs(s-r.y)>t.CROSSBOW_Y_JITTER_BAND)))return!1;
+ const o=this.segPointDist(i,s,e,n,r.x,r.y),a=t.CROSSBOW_RING_RADII;
+ let c=0;
+ if(o<=a[0]?c=4:o<=a[1]?c=3:o<=a[2]?c=2:o<=a[3]&&(c=1),0===c)return!1;
+ const l=c>=t.CROSSBOW_HEAD_TIER,u=h;
+ let d=l;
+ "function"==typeof u.getInterruptHitRadius&&(d=o<=u.getInterruptHitRadius());
+ let f=!1;
+ d&&"function"==typeof u.tryCrossbowInterrupt&&(f=!0===u.tryCrossbowInterrupt());
+ const p=this.raidEmblemSystem;
+ if(f&&h instanceof S2&&h.isAlive){
+ const t=300,i=p.getHarpoonWound();
+ i.pct>0&&(p.addBossExposure(i.pct,i.frames),this.announceBossDebuff(SG.getText("GAME_1493","상처 가르기")+"!"));
+ const s=p.getCrossbowStat("sunderArrow");
+ s>0&&(h.removeDefenseBuff(yK.RaidRune_ARROW_DEFENSE),h.addDefenseBuff(yK.RaidRune_ARROW_DEFENSE,-s/100,t),this.announceBossDebuff(SG.getText("GAME_1494","갑옷 파괴")+"!"));
+ const e=p.getCrossbowStat("interruptExtra");
+ for(let n=0;
+ n<e;
+ n++)h.applyExtraInterruptDebuff()}
+ let g=t.CROSSBOW_DAMAGE_BASE*Math.pow(1.03,this.knightLevel);
+ g*=1+p.getCrossbowStat("crossbowDmg")/100;
+ const m=p.getCrossbowStat("critArrow");
+ m>0&&this.random.next()<m/100&&(g*=2),h instanceof S2&&h.raidStunFrames>0&&(g*=1+p.getCrossbowStat("exhaustArrow")/100),g>0&&h.isAlive&&(h.health=h.hp-g),h.flashHit(l);
+ let w=e-i,v=n-s;
+ const b=Math.sqrt(w*w+v*v);
+ return b>.001&&h.applyHitKnockback(w/b,v/b,t.CROSSBOW_KNOCKBACK),f}
+ drawCrossbowDebug(){
+ const i=this.crossbowDebug;
+ if(!i)return;
+ i.clear();
+ const s=this.boss;
+ if(!s||!s.isAlive||s.removed||s.isUntagetable)return;
+ if(!(s instanceof S2))return;
+ const e=s.getWeakPointWorld(),n=t.CROSSBOW_RING_RADII;
+ i.rect(e.x-n[3],e.y-n[3],2*n[3],2*n[3]).stroke({
+ width:2,color:65535,alpha:.5}
+ ),i.circle(e.x,e.y,n[3]).stroke({
+ width:2,color:16777215,alpha:.5}
+ ),i.circle(e.x,e.y,n[2]).stroke({
+ width:2,color:16776960,alpha:.6}
+ ),i.circle(e.x,e.y,n[1]).stroke({
+ width:2,color:16746496,alpha:.8}
+ ),i.circle(e.x,e.y,n[0]).stroke({
+ width:2,color:16711680,alpha:.95}
+ ),i.moveTo(e.x-12,e.y).lineTo(e.x+12,e.y),i.moveTo(e.x,e.y-12).lineTo(e.x,e.y+12),i.stroke({
+ width:2,color:65280}
+ )}
+ segPointDist(t,i,s,e,n,h){
+ const r=s-t,o=e-i,a=r*r+o*o;
+ let c=a>0?((n-t)*r+(h-i)*o)/a:0;
+ c<0?c=0:c>1&&(c=1);
+ const l=n-(t+c*r),u=h-(i+c*o);
+ return Math.sqrt(l*l+u*u)}
+ getCameraAnchor(t){
+ const i=this.boss,s=!!i&&i.isAlive&&!i.removed&&!i.isUntagetable;
+ if("boss"===t)return s?{
+ x:i.x,y:i.y}
+ :null;
+ if("center"===t){
+ let t=0,e=0;
+ const n=this.corpCommander.accumulateAliveHeroes((i,s)=>{
+ t+=i,e+=s}
+ ),h=n>0,r=h?t/n:0,o=h?e/n:0;
+ return s&&h?{
+ x:(i.x+r)/2,y:(i.y+o)/2}
+ :s?{
+ x:i.x,y:i.y}
+ :h?{
+ x:r,y:o}
+ :null}
+ return this.corpCommander.getCorpAnchor(t)}
+ snapshotCrowdPositions(){
+ const t=this.boss,i=Vt(i=>{
+ i!==t&&(i.__rvoPrevX=i.x,i.__rvoPrevY=i.y,i.__rvoPrevDir=i.direction)}
+ ,"snap");
+ for(let s=0;
+ s<this.friendList.length;
+ s++)i(this.friendList[s]);
+ for(let s=0;
+ s<this.enemyList.length;
+ s++)i(this.enemyList[s])}
+ applyOrca(){
+ const i=t.SEPARATION_CELL,s=this.separationGrid,e=this.separationFlatList;
+ s.clear(),e.length=0;
+ const n=this.boss,h=t.RVO_TELEPORT_FACTOR;
+ let r=0;
+ const o=Vt(o=>{
+ if(!o.isAlive||o.removed||o.isImmovable||o.isCastle)return;
+ if(o===n)return;
+ const a=o.__rvoPrevX,c=o.__rvoPrevY;
+ if(void 0===a)return;
+ const l=r++;
+ o.__sepIdx=l,e.push(o);
+ const u=o.x-a,d=o.y-c,f=u*u+d*d,p=o.moveSpd>.001?o.moveSpd:.001,g=p*h,m=f>g*g;
+ o.__rvoSkip=m;
+ let w=this.rvoPool[l];
+ w||(w={
+ x:0,y:0,vx:0,vy:0,prefVx:0,prefVy:0,radius:0,maxSpeed:0,newVx:0,newVy:0}
+ ,this.rvoPool[l]=w),m?(w.x=o.x,w.y=o.y,w.vx=0,w.vy=0,w.prefVx=0,w.prefVy=0,w.radius=o.radius,w.maxSpeed=0,w.newVx=0,w.newVy=0):(o.x=a,o.y=c,w.x=a,w.y=c,w.vx=u,w.vy=d,w.prefVx=u,w.prefVy=d,w.radius="moving"===o.commandPhase?o.radius*t.COMMAND_MOVE_RADIUS_SCALE:o.radius,w.maxSpeed=Math.max(p,Math.sqrt(f)),w.newVx=u,w.newVy=d),o.__rvoAgent=w;
+ const v=1e5*Math.floor(w.x/i)+Math.floor(w.y/i);
+ let b=s.get(v);
+ b||(b=[],s.set(v,b)),b.push(o)}
+ ,"addUnit");
+ for(let t=0;
+ t<this.friendList.length;
+ t++)o(this.friendList[t]);
+ for(let t=0;
+ t<this.enemyList.length;
+ t++)o(this.enemyList[t]);
+ const a=1/t.RVO_TIME_HORIZON,c=t.RVO_NEIGHBOR_DIST*t.RVO_NEIGHBOR_DIST,l=t.RVO_MAX_NEIGHBORS,u=this.rvoNbAgents,d=this.rvoNbDist,f=this.rvoNbIdx;
+ for(let t=0;
+ t<e.length;
+ t++){
+ const n=e[t];
+ if(n.__rvoSkip)continue;
+ const h=n.__rvoAgent;
+ let r=0;
+ const o=Math.floor(h.x/i),p=Math.floor(h.y/i);
+ for(let t=-1;
+ t<=1;
+ t++)for(let i=-1;
+ i<=1;
+ i++){
+ const e=s.get(1e5*(o+i)+(p+t));
+ if(e)for(let t=0;
+ t<e.length;
+ t++){
+ const i=e[t];
+ if(i===n)continue;
+ if(UQ.enabled&&n.isAir!==i.isAir)continue;
+ const s=i.__rvoAgent,o=s.x-h.x,a=s.y-h.y,p=o*o+a*a;
+ p>c||(r=this.insertRvoNeighbor(u,d,f,r,l,s,p,i.__sepIdx))}
+ }
+ this.applyBoids(h,u,r),qJt(h,u,r,a,1)}
+ for(let p=0;
+ p<e.length;
+ p++){
+ const i=e[p];
+ if(i.__rvoSkip)continue;
+ const s=i.__rvoAgent;
+ let n=s.newVx,h=s.newVy,r=s.x+n,o=s.y+h;
+ UQ.enabled&&!i.isAir&&UQ.isBlocked(r,o)&&(UQ.isBlocked(s.x+n,s.y)?UQ.isBlocked(s.x,s.y+h)?(r=s.x,o=s.y):r=s.x:o=s.y),i.x=r,i.y=o;
+ const a=r-s.x,c=o-s.y,l=i.moveSpd*t.RVO_FACING_DZ_FACTOR;
+ if(a*a+c*c>l*l)if(a>l)i.lookAt(1);
+ else if(a<-l)i.lookAt(-1);
+ else{
+ const t=i.__rvoPrevDir;
+ 1!==t&&-1!==t||i.lookAt(t)}
+ }
+ if(n&&n.isAlive&&!n.removed&&n.radius>0&&!n.isUntagetable&&!n.isAir&&!n.airTargetOnly){
+ const i=n.x,s=n.y,h=n.radius,r=this.getSurroundScale(),o=r.x,a=r.y;
+ for(let c=0;
+ c<e.length;
+ c++){
+ const r=e[c];
+ if(UQ.enabled&&r.isAir!==n.isAir)continue;
+ const l=r.x-i,u=r.y-s,d=h+r.radius+t.SEPARATION_BUFFER,f=d*o,p=l/f,g=u/(d*a),m=p*p+g*g;
+ if(m>=1)continue;
+ let w,v;
+ if(m<1e-4)w=i+f,v=s;
+ else{
+ const t=1/Math.sqrt(m);
+ w=i+l*t,v=s+u*t}
+ UQ.enabled&&!r.isAir&&UQ.isBlocked(w,v)||(r.x=w,r.y=v)}
+ }
+ }
+ applyBoids(i,s,e){
+ if(0===e)return;
+ const n=i.prefVx,h=i.prefVy,r=i.maxSpeed*t.RVO_BOIDS_MIN_SPEED_FACTOR,o=r*r;
+ if(n*n+h*h<o)return;
+ let a=0,c=0,l=0,u=0,d=0;
+ for(let t=0;
+ t<e;
+ t++){
+ const i=s[t];
+ u+=i.x,d+=i.y,i.vx*i.vx+i.vy*i.vy>=o&&(a+=i.vx,c+=i.vy,l++)}
+ let f=n,p=h;
+ if(l>0){
+ const i=t.RVO_ALIGN_WEIGHT;
+ f+=i*(a/l-n),p+=i*(c/l-h)}
+ const g=t.RVO_COHESION_WEIGHT;
+ f+=g*(u/e-i.x),p+=g*(d/e-i.y);
+ const m=f*f+p*p,w=i.maxSpeed;
+ if(m>w*w&&m>1e-6){
+ const t=w/Math.sqrt(m);
+ f*=t,p*=t}
+ i.prefVx=f,i.prefVy=p}
+ insertRvoNeighbor(t,i,s,e,n,h,r,o){
+ if(e>=n){
+ const t=i[n-1];
+ if(r>t||r===t&&o>=s[n-1])return e}
+ let a=e<n?e:n-1;
+ for(;
+ a>0&&(r<i[a-1]||r===i[a-1]&&o<s[a-1]);
+ )t[a]=t[a-1],i[a]=i[a-1],s[a]=s[a-1],a--;
+ return t[a]=h,i[a]=r,s[a]=o,e<n?e+1:e}
+ checkVictory(){
+ return!!this.boss&&!this.boss.isAlive}
+ checkDefeat(){
+ if(this.battleTime>=t.TIME_LIMIT_FRAMES)return!0;
+ for(const t of this.friendList)if(t.isAlive&&!t.isSummoned)return!1;
+ return!0}
+ onVictoryCallback(){
+ this.reportRaidResult(!0),this.queueResultPopup(SG.getText("GAME_1482","보스 격파!"))}
+ onDefeatCallback(){
+ const i=this.battleTime>=t.TIME_LIMIT_FRAMES?"TIME_OUT":"ALL_ALLIES_DEAD";
+ this.reportRaidResult(!1),"TIME_OUT"===i?this.showRaidResultPopup(SG.getText("GAME_1483","시간 종료")):this.queueResultPopup(SG.getText("GAME_1484","군단 전멸"))}
+ queueResultPopup(i){
+ this.resultPopup||this.resultPopupDelay>=0||(this.pendingResultTitle=i,this.resultPopupDelay=t.RESULT_POPUP_DELAY_FRAMES)}
+ showRaidResultPopup(t){
+ var i,s;
+ if(this.resultPopup)return;
+ qG.getInstance().remove(this.execute,this);
+ const e=this.raidEmblemSystem.getHudDefs(),n=this.corpUnits.map((t,i)=>{
+ var s,n;
+ let h=0,r=0;
+ const o=this.corpHero[i];
+ for(const e of t)h+=e.totalDamageDealt,e===o&&(r=e.totalDamageDealt);
+ return{
+ heroKindNum:this.heroKindNums[i]??0,label:(null==(s=e[i])?void 0:s.shortLabel)??SG.getValueReplace("GAME_1485","\\{
+ 0\\}
+ ",i+1,`군단${
+ i+1}
+ `),color:(null==(n=e[i])?void 0:n.color)??16777215,dmg:h,heroDmg:r,soldierDmg:h-r}
+ }
+ );
+ this.resultPopup=new HJt,this.resultPopup.show(t,n,()=>this.returnToMain(),(null==(i=this.raidOptions)?void 0:i.practice)?SG.getText("GAME_1488","연습 전투 — 기록되지 않습니다"):void 0,!!(null==(s=this.raidOptions)?void 0:s.onBattleEnd))}
+ reportRaidResult(t){
+ var i;
+ if(!(null==(i=this.raidOptions)?void 0:i.onBattleEnd)||this.resultReported)return;
+ this.resultReported=!0;
+ const s=this.boss?Math.max(0,this.boss.hp):this.bossStartHp,e=Math.max(0,Math.min(this.bossStartHp,Math.round(this.bossStartHp-s))),n=Math.max(3,Math.min(300,Math.round(this.battleTime/60)));
+ this.raidOptions.onBattleEnd(e,n,t)}
+ applySquads(i){
+ const s=[],e=[],n=[],h=[],r=i.split("|"),o=kG.getInstance(),a=IR.getAwakenedBarrackTribes();
+ for(let c=0;
+ c<t.CORP_COUNT;
+ c++){
+ const t=(r[c]??"").split("-"),i=Number(t[0])||0,l=Number(t[1])||0,u=Number(t[2])||0;
+ s.push(i>0?i:0),n.push(Math.max(0,l));
+ const d=o.getBook(u);
+ if(d){
+ const t=a.has(d.tribe),{
+ kindNum:i}
+ =IR.getShiftedSoldierTier(d.unitKindNums,d.plusLevel,0,t);
+ e.push(i);
+ const s=o.getState(d.tribe),n=o.computeInstructorsForBarrack(d),r=s?o.computeSoldiers(d,s,n):null;
+ if(r){
+ const i=[];
+ for(let s=d.unitKindNums.length-1;
+ s>=0;
+ s--){
+ const e=Math.floor(Math.max(0,r[s]??0));
+ if(e<=0)continue;
+ const n=IR.getShiftedSoldierTier(d.unitKindNums,d.plusLevel,s,t);
+ n.kindNum>0&&i.push({
+ kindNum:n.kindNum,count:e,plusLevel:n.plusLevel}
+ )}
+ h.push(i)}
+ else h.push(null)}
+ else e.push(0),h.push(null)}
+ this.heroKindNums=s,this.soldierKindNums=e,this.heroTransList=n,this.corpSoldierTiers=h}
+ returnToMain(){
+ var t;
+ this.reportRaidResult(!1);
+ const i=null==(t=this.raidOptions)?void 0:t.onExit;
+ jni.getInstance().returnToIdleBattle(),null==i||i()}
+ scheduleReturnToMain(){
+ }
+ getRemainingTimeSeconds(){
+ const i=t.TIME_LIMIT_FRAMES-this.battleTime;
+ return Math.max(0,Math.ceil(i/60))}
+ cleanup(){
+ var t,i,s,e,n;
+ qG.getInstance().remove(this.execute,this),VR.getInstance().setBattleContext(xR.Normal),this.corpCommander.destroy(),null==(t=this.camera)||t.destroy(),this.camera=null,null==(i=this.hud)||i.destroy(),this.hud=null,null==(s=this.resultPopup)||s.destroy(),this.resultPopup=null,this.resultPopupDelay=-1,this.pendingResultTitle="",this.bossDebuffSeq={
+ }
+ ,this.bossDebuffSeqCounter=0,this.bossDebuffRingTotals={
+ }
+ ,this.selectedCorpIndex=-1;
+ for(const r of this.crossbows)r.destroy();
+ this.crossbows.length=0,null==(e=this.tankPad)||e.destroy(),this.tankPad=null,this.tankPadHolding=!1,this.crossbowDebug&&(this.crossbowDebug.removeFromParent(),this.crossbowDebug.destroy(),this.crossbowDebug=null),this.targetIndicator&&(this.targetIndicator.removeFromParent(),this.targetIndicator.destroy(),this.targetIndicator=null),null==(n=this.mapEffect)||n.destroy(),this.mapEffect=null,this.speedHelper.exit();
+ for(const r of this.spawnedVOs)r.remove();
+ this.spawnedVOs.length=0,this.teardownTerrain(),$Q.knockbackBounds=null,this.boss instanceof S2&&this.boss.endBulletTime();
+ for(const r of this.friendList){
+ const t=r;
+ void 0!==t.__raidBaseRadius&&(r.radius=t.__raidBaseRadius,t.__raidBaseRadius=void 0)}
+ this.boss instanceof S2&&(this.boss.vulnProcSink=null),this.vulnValues={
+ }
+ ,this.vulnQueues={
+ }
+ ,this.vulnNextProcFrame={
+ }
+ ;
+ const h=HB.getInstance();
+ h.x=0,h.y=0,h.scale.set(1,1),super.cleanup(),this.boss=null;
+ for(let r=0;
+ r<this.rangedByCorp.length;
+ r++)this.rangedByCorp[r]=[];
+ this.rangedFanFrames=[],this.rangedFanSlots=[],this.rangedCmdActivePrev=[],this.sepBurstFrames=0,this.meleeSoldiers=[];
+ for(let r=0;
+ r<this.corpUnits.length;
+ r++)this.corpUnits[r]=[];
+ this.corpAggro=[],this.prevCorpDmg=[],this.corpHero=[],this.aggroLeader=-1,this.aggroChallenger=-1,this.aggroChallengerFrames=0,this.aggroTargetCorp=-1,this.forcedAggroCorp=-1,this.forcedAggroFrames=0,$Q.raidDamageHook=null,$Q.raidDamageMultHook=null,this.bossAnnouncer.dispose()}
+ updateTankPad(){
+ const i=this.tankPad;
+ if(!i)return;
+ const s=this.corpHero[0],e=!!s&&s.isAlive&&!s.removed&&!this.battleEnded;
+ if(i.setEnabled(e),!e)return void(this.tankPadHolding=!1);
+ const n=i.getDirection();
+ if(n){
+ !this.tankPadHolding&&s.target&&(s.target.removeBlockedEnemy(s),s.target=null);
+ const i=t.TANK_PAD_SPEED_MULT*(1+this.raidEmblemSystem.getCorpStat(0,"dashSpeed")/100),e=t.TANK_PAD_LOOKAHEAD,h=20,r=Math.max(h,Math.min(t.FIELD_WIDTH-h,s.x+n.x*e)),o=Math.max(h,Math.min(t.FIELD_HEIGHT-h,s.y+n.y*e));
+ s.beginCommandMove(r,o,null,i,0),this.tankPadHolding=!0}
+ else this.tankPadHolding&&(this.tankPadHolding=!1,s.beginCommandMove(s.x,s.y,null,1,0))}
+ getBackstabMult(i,s){
+ if(!this.backAttackEnabled)return 1;
+ const e=this.boss;
+ if(!e||s!==e||i===e)return 1;
+ const n=i.x-e.x,h=i.y-e.y,r=Math.sqrt(n*n+h*h);
+ return r<1||n*(this.bossFacingDir>0?-1:1)/r<t.BACKSTAB_COS?1:(i.showEffect(PF.HeroAura1Effect,t.BACKSTAB_AURA_FRAMES,t.ORIGIN_POINT,!0,!0),this.backstabFxCooldown<=0&&(this.backstabFxCooldown=t.BACKSTAB_FX_INTERVAL,i.showTextEffect("BackAttackEffect",i.x,i.y-i.hitHeight-10)),t.BACKSTAB_MULT)}
+ setupVulnProfile(){
+ var t;
+ this.vulnValues={
+ }
+ ,this.vulnQueues={
+ }
+ ,this.vulnNextProcFrame={
+ }
+ ,this.vulnFrame=0,this.vulnEpoch++;
+ const i=PJt.getInstance().findByBossKindNum(this.bossKindNum,(null==(t=this.raidOptions)?void 0:t.bossSub)??0);
+ this.vulnCapEach=(null==i?void 0:i.maxPerWeakpoint)??20;
+ let s=null==i?void 0:i.vulns,e="북(GUILD_RAID)";
+ if(s&&0!==Object.keys(s).length||100004!==this.bossKindNum||(s=PJt.TEST_DK_VULNS,"폴백(용기사 테스트 기본값)"),!s)return;
+ for(const[h,r]of Object.entries(s))r<=0||(this.vulnValues[h]=r,this.vulnQueues[h]=[]);
+ const n=this.boss;
+ n instanceof S2&&Object.keys(this.vulnValues).length>0&&(n.vulnProcSink=(t,i)=>this.onVulnProc(t,i))}
+ onVulnProc(i,s){
+ var e;
+ const n=this.vulnValues[i];
+ if(!n)return;
+ const h=this.boss;
+ if(!h||!h.isAlive||h.removed)return;
+ const r=(e=this.vulnDbg)[i]??(e[i]={
+ add:0,icd:0,thr:0}
+ );
+ if(s){
+ const e=s;
+ if(e.__vulnIcdEpoch===this.vulnEpoch&&e.__vulnIcd||(e.__vulnIcd={
+ }
+ ,e.__vulnIcdEpoch=this.vulnEpoch),this.vulnFrame<(e.__vulnIcd[i]??0))return void r.icd++;
+ e.__vulnIcd[i]=this.vulnFrame+t.VULN_UNIT_ICD_FRAMES}
+ else{
+ if(this.vulnFrame<(this.vulnNextProcFrame[i]??0))return void r.thr++;
+ this.vulnNextProcFrame[i]=this.vulnFrame+t.VULN_PROC_THROTTLE_FRAMES}
+ r.add++;
+ const o=this.vulnQueues[i],a=Math.ceil(this.vulnCapEach/n);
+ o.length>=a&&o.shift(),o.push(this.vulnFrame+t.VULN_STACK_FRAMES)}
+ tickVulnStacks(){
+ this.vulnFrame++;
+ for(const t in this.vulnQueues){
+ const i=this.vulnQueues[t];
+ for(;
+ i.length>0&&i[0]<=this.vulnFrame;
+ )i.shift()}
+ if(this.vulnFrame%300==0)for(const t in this.vulnDbg){
+ const i=this.vulnDbg[t];
+ i.add+i.icd+i.thr!==0&&(this.vulnQueues[t],i.add=i.icd=i.thr=0)}
+ }
+ getVulnMult(t){
+ if(t!==this.boss)return 1;
+ let i=0;
+ for(const s in this.vulnQueues){
+ const t=this.vulnQueues[s];
+ 0!==t.length&&(i+=Math.min(t.length*this.vulnValues[s],this.vulnCapEach))}
+ return i>0?1+i/100:1}
+ setupResistMults(i){
+ if(this.resistDealMult=1,this.resistTakenMult=1,!i||i.resistType<=0)return;
+ const s=cx.getInstance().getRaidResist(i.resistType);
+ this.resistDealMult=t.lerpResistAxis(s,i.dealResistMin,i.dealResistMax,t.normResistMult(i.dealMultMin),t.normResistMult(i.dealMultMax)),this.resistTakenMult=t.lerpResistAxis(s,i.takenResistMin,i.takenResistMax,t.normResistMult(i.takenMultMax),t.normResistMult(i.takenMultMin))}
+ static lerpResistAxis(t,i,s,e,n){
+ return s<=i?1:e+(n-e)*Math.max(0,Math.min(1,(t-i)/(s-i)))}
+ static normResistMult(t){
+ return!Number.isFinite(t)||t<=0?1:t>10?t/100:t}
+ getResistMult(t){
+ return t===this.boss?this.resistDealMult:void 0!==t.__raidCorpIndex?this.resistTakenMult:1}
+ getBoss(){
+ return this.boss}
+ getTopRangedSoldierZone(){
+ let t=-1,i=null;
+ for(let n=0;
+ n<this.corpUnits.length;
+ n++){
+ const s=this.corpHero[n];
+ let e=0;
+ const h=[];
+ for(const t of this.corpUnits[n])t!==s&&t.unitType===ix.RANGE&&t.isAlive&&!t.removed&&(e+=t.totalDamageDealt,h.push(t));
+ h.length>0&&e>t&&(t=e,i=h)}
+ if(!i)return null;
+ let s=0,e=0;
+ for(const n of i)s+=n.x,e+=n.y;
+ return{
+ x:s/i.length,y:e/i.length}
+ }
+ }
+ ;
+ Vt(lZt,"RaidBattleController"),Kt(lZt,"instance"),Kt(lZt,"FIELD_WIDTH",1560),Kt(lZt,"FIELD_HEIGHT",1560),Kt(lZt,"BAND_TOP",210),Kt(lZt,"BAND_HEIGHT",871),Kt(lZt,"TIME_LIMIT_FRAMES",9e3),Kt(lZt,"RESULT_POPUP_DELAY_FRAMES",90),Kt(lZt,"BOSS_DAMAGE_SCALE_BASE",1),Kt(lZt,"BOSS_DAMAGE_SCALE_STEPS",[{
+ frame:8400,multiplier:4.5}
+ ,{
+ frame:7200,multiplier:4}
+ ,{
+ frame:6e3,multiplier:3.5}
+ ,{
+ frame:4800,multiplier:3}
+ ,{
+ frame:3600,multiplier:2.5}
+ ,{
+ frame:2400,multiplier:2}
+ ,{
+ frame:1200,multiplier:1.5}
+ ]),Kt(lZt,"SCORPION_KIND_NUM",1e5),Kt(lZt,"HARPY_KIND_NUM",100001),Kt(lZt,"GOLEM_KIND_NUM",100002),Kt(lZt,"BERIAL_KIND_NUM",100003),Kt(lZt,"DRAGON_KNIGHT_KIND_NUM",100004),Kt(lZt,"BOSS_KIND_NUM",lZt.DRAGON_KNIGHT_KIND_NUM),Kt(lZt,"BOSS_CLASS_BY_KIND",{
+ [lZt.SCORPION_KIND_NUM]:rx.ScorpionKing,100001:rx.HarpyKing,100002:rx.GolemKing,100003:rx.BerialKing,[lZt.DRAGON_KNIGHT_KIND_NUM]:rx.DragonKnight}
+ ),Kt(lZt,"BOSS_X",1050),Kt(lZt,"BOSS_Y",722),Kt(lZt,"HARPY_START_X",1750),Kt(lZt,"HARPY_START_Y",1022),Kt(lZt,"SCORPION_START_X",1550),Kt(lZt,"BOSS_HP_MULT",1e4),Kt(lZt,"CROSSBOW_RING_RADII",[25,55,100,200]),Kt(lZt,"CROSSBOW_Y_JITTER_BAND",32),Kt(lZt,"CROSSBOW_DAMAGE_BASE",1e3),Kt(lZt,"CROSSBOW_HEAD_TIER",2),Kt(lZt,"CROSSBOW_KNOCKBACK",7),Kt(lZt,"WOUND_HIGHLIGHT_PCT",30),Kt(lZt,"CROSSBOW_DEBUG",!1),Kt(lZt,"BOSS_RADIUS",70),Kt(lZt,"IMMOBILE_BOSS_ATK_RANGE",400),Kt(lZt,"FAN_HALF_WIDTH",100),Kt(lZt,"FAN_WING_CURVE",80),Kt(lZt,"RANGED_FAN_BURST_FRAMES",60),Kt(lZt,"FORM_SETTLE_DIST",30),Kt(lZt,"FORM_RELEASE_DIST",64),Kt(lZt,"MELEE_HUG_MARGIN",4),Kt(lZt,"SCORPION_SURROUND_X_SCALE",1.2),Kt(lZt,"SCORPION_SURROUND_Y_SCALE",.4),Kt(lZt,"GOLEM_SURROUND_X_SCALE",1),Kt(lZt,"GOLEM_SURROUND_Y_SCALE",.5),Kt(lZt,"BERIAL_SURROUND_X_SCALE",1.2),Kt(lZt,"BERIAL_SURROUND_Y_SCALE",.6),Kt(lZt,"DRAGON_KNIGHT_SURROUND_X_SCALE",.765),Kt(lZt,"DRAGON_KNIGHT_SURROUND_Y_SCALE",.34),Kt(lZt,"GOLDEN_ANGLE",2.399963),Kt(lZt,"CORP_COUNT",5),Kt(lZt,"CORP_AGGRO_MULT",[1,1,1,1,1]),Kt(lZt,"AGGRO_HALFLIFE_SEC",4),Kt(lZt,"AGGRO_DECAY",Math.pow(.5,1/(60*lZt.AGGRO_HALFLIFE_SEC))),Kt(lZt,"AGGRO_MIN",1),Kt(lZt,"TANK_INITIAL_AGGRO",1e3),Kt(lZt,"AGGRO_SWITCH_MARGIN",1.2),Kt(lZt,"AGGRO_SWITCH_DWELL",36),Kt(lZt,"AGGRO_FACE_DEADZONE",50),Kt(lZt,"BOSS_DETECT_RANGE",4e3),Kt(lZt,"SOLDIER_ROWS",10),Kt(lZt,"SOLDIER_COLS",3),Kt(lZt,"SOLDIER_X_SPACING",52),Kt(lZt,"SOLDIER_Y_SPACING",28),Kt(lZt,"ALLY_HERO_X",60),Kt(lZt,"ALLY_SOLDIER_X_START",135),Kt(lZt,"MARCH_DISTANCE",1500),Kt(lZt,"SOLDIER_RANGE_MULT_MIN",1.3),Kt(lZt,"SOLDIER_RANGE_MULT_MAX",1.7),Kt(lZt,"RANGE_SOLDIER_MOVE_SPD_MULT_MIN",1),Kt(lZt,"RANGE_SOLDIER_MOVE_SPD_MULT_MAX",1.25),Kt(lZt,"MELEE_HERO_HP_MULT",2),Kt(lZt,"MELEE_SOLDIER_HP_MULT",1.5),Kt(lZt,"MELEE_ATK_RANGE_BONUS",20),Kt(lZt,"MELEE_SOLDIER_ATK_RANGE_MULT",1.3),Kt(lZt,"RANGE_HERO_ATK_RANGE_MULT",1.7),Kt(lZt,"MELEE_MOVE_SPD_MULT_MIN",1.2),Kt(lZt,"MELEE_MOVE_SPD_MULT_MAX",1.7),Kt(lZt,"MELEE_SOLDIER_LANE_OFFSET",210),Kt(lZt,"TERRAIN_MASK_ENABLED",!1),Kt(lZt,"SEPARATION_CELL",28),Kt(lZt,"SEPARATION_BUFFER",3),Kt(lZt,"RVO_TIME_HORIZON",8),Kt(lZt,"RVO_NEIGHBOR_DIST",48),Kt(lZt,"RVO_MAX_NEIGHBORS",10),Kt(lZt,"COMMAND_MOVE_RADIUS_SCALE",.6),Kt(lZt,"ALLY_RADIUS_SCALE",1),Kt(lZt,"HERO_UNIT_SCALE",.9),Kt(lZt,"RVO_TELEPORT_FACTOR",3),Kt(lZt,"RVO_FACING_DZ_FACTOR",.3),Kt(lZt,"RVO_ALIGN_WEIGHT",.4),Kt(lZt,"RVO_COHESION_WEIGHT",.02),Kt(lZt,"RVO_BOIDS_MIN_SPEED_FACTOR",.5),Kt(lZt,"DEFAULT_HERO_KINDS",[60,58,78,54,56]),Kt(lZt,"DEFAULT_SOLDIER_KINDS",[20,4,7,1,13]),Kt(lZt,"TANK_PAD_SPEED_MULT",1.2),Kt(lZt,"TANK_PAD_LOOKAHEAD",160),Kt(lZt,"TANK_PAD_X",140),Kt(lZt,"TANK_PAD_FROM_BOTTOM",350),Kt(lZt,"TEST_ALLY_LEVEL_MATCH_BOSS",!1),Kt(lZt,"CORP_OUTLINE_COLOR",16724787),Kt(lZt,"UNIT_SELECT_RADIUS",50),Kt(lZt,"BOSS_SKILL_SCALE",1.5),Kt(lZt,"BOSS_SKILL_CANVAS_W",170),Kt(lZt,"BOSS_SKILL_CANVAS_H",320),Kt(lZt,"BOSS_SKILL_TEST_DAMAGE_FRAC",.005),Kt(lZt,"CORP_START_LAYOUT",[{
+ xOffset:100,y:722}
+ ,{
+ xOffset:-100,y:400}
+ ,{
+ xOffset:-250,y:850}
+ ,{
+ xOffset:-250,y:560}
+ ,{
+ xOffset:-100,y:940}
+ ]),Kt(lZt,"HARPY_CORP_START_LAYOUT",[{
+ xOffset:100,y:830}
+ ,{
+ xOffset:-100,y:620}
+ ,{
+ xOffset:-250,y:940}
+ ,{
+ xOffset:-250,y:688}
+ ,{
+ xOffset:-100,y:940}
+ ]),Kt(lZt,"EMBLEM_AURA_BY_ROLE",{
+ TANK:PF.HeroAura2Effect,DEALER:PF.HeroAura3Effect,HEALER:PF.HeroAura4Effect,SUPPORT:PF.HeroAura5Effect,BREAKER:PF.HeroAura6Effect}
+ ),Kt(lZt,"EMBLEM_FLASH_FRAMES",66),Kt(lZt,"EMBLEM_ACTIVE_NAMES",{
+ taunt:{
+ key:"GAME_1474",fallback:"도발"}
+ ,frenzy:{
+ key:"GAME_1489",fallback:"폭딜"}
+ ,massHeal:{
+ key:"GAME_1490",fallback:"전체 치유"}
+ ,weakenBoss:{
+ key:"GAME_1491",fallback:"보스 약화"}
+ ,allOutAttack:{
+ key:"GAME_1492",fallback:"총공격"}
+ }
+ ),Kt(lZt,"BOSS_DEBUFF_INSTANCE_MODE",!0),Kt(lZt,"BACKSTAB_MULT",1.3),Kt(lZt,"BACKSTAB_COS",.5),Kt(lZt,"BACKSTAB_FX_INTERVAL",30),Kt(lZt,"BACKSTAB_AURA_FRAMES",90),Kt(lZt,"VULN_STACK_FRAMES",600),Kt(lZt,"VULN_UNIT_ICD_FRAMES",120),Kt(lZt,"VULN_PROC_THROTTLE_FRAMES",10),Kt(lZt,"vulnCcAudit",new Set),Kt(lZt,"ORIGIN_POINT",new gi(0,0));
+ let uZt=lZt;
+ const dZt=class t{
+ constructor(){
+ Kt(this,"overlay"),Kt(this,"bg",new Lf),Kt(this,"contentRoot"),Kt(this,"txtWaveLabel"),Kt(this,"txtWaveNumber"),Kt(this,"txtGold"),Kt(this,"txtElapsed"),Kt(this,"txtTouch"),Kt(this,"txtDestroyed"),Kt(this,"_active",!1),Kt(this,"_castleDestroyed",!1),Kt(this,"updateIntervalId",null),Kt(this,"activateTime",0),Kt(this,"normalGroup"),Kt(this,"destroyedGroup"),Kt(this,"glow"),Kt(this,"gameContainer",null),Kt(this,"wakeLock",null),Kt(this,"visibilityHandler",null),Kt(this,"sliderTrack",new Lf),Kt(this,"sliderFill",new Lf),Kt(this,"sliderHandle",new Ge),Kt(this,"sliderDragging",!1),Kt(this,"sliderGrabOffset",0),this.overlay=new Ge,this.overlay.visible=!1,this.bg=new Lf,this.overlay.addChild(this.bg),this.contentRoot=new Ge,this.overlay.addChild(this.contentRoot),this.glow=new Lf,this.glow.circle(0,0,180),this.glow.fill({
+ color:1714762}
+ ),this.glow.x=320,this.glow.y=320,this.glow.alpha=.35,this.contentRoot.addChild(this.glow),this.normalGroup=new Ge,this.contentRoot.addChild(this.normalGroup);
+ const i=[{
+ x:120,y:190,r:2,a:.5}
+ ,{
+ x:480,y:210,r:1.5,a:.35}
+ ,{
+ x:220,y:170,r:1.5,a:.4}
+ ,{
+ x:420,y:240,r:2,a:.25}
+ ,{
+ x:160,y:270,r:1,a:.3}
+ ,{
+ x:510,y:270,r:1.5,a:.3}
+ ,{
+ x:350,y:180,r:1,a:.2}
+ ,{
+ x:90,y:240,r:1.5,a:.25}
+ ],s=new Lf;
+ for(const t of i)s.circle(t.x,t.y,t.r),s.fill({
+ color:16777215,alpha:t.a}
+ );
+ this.normalGroup.addChild(s);
+ const e=new Lf;
+ e.circle(0,0,16),e.fill({
+ color:16772795}
+ ),e.x=320,e.y=220,e.alpha=.6,this.normalGroup.addChild(e);
+ const n=new Lf;
+ n.circle(5,-3,13),n.fill({
+ color:658970}
+ ),n.x=e.x,n.y=e.y,n.alpha=.8,this.normalGroup.addChild(n),this.destroyedGroup=new Ge,this.destroyedGroup.visible=!1,this.contentRoot.addChild(this.destroyedGroup);
+ const h=new Hg({
+ text:"⚠",style:new Ag({
+ fontSize:44,fill:16763904,stroke:{
+ color:"#000000",width:3,join:"round"}
+ }
+ )}
+ );
+ h.anchor.set(.5),h.x=320,h.y=215,this.destroyedGroup.addChild(h),this.txtWaveLabel=new Hg({
+ text:"W A V E",style:new Ag({
+ fontFamily:"Arial",fontSize:16,fontWeight:"bold",fill:5601194,letterSpacing:6}
+ )}
+ ),this.txtWaveLabel.anchor.set(.5),this.txtWaveLabel.x=320,this.txtWaveLabel.y=270,this.contentRoot.addChild(this.txtWaveLabel),this.txtWaveNumber=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:56,fontWeight:"bold",fill:16777215,stroke:{
+ color:"#0a1428",width:4,join:"round"}
+ ,dropShadow:{
+ color:3368618,blur:20,angle:0,distance:0}
+ }
+ )}
+ ),this.txtWaveNumber.anchor.set(.5),this.txtWaveNumber.x=320,this.txtWaveNumber.y=325,this.contentRoot.addChild(this.txtWaveNumber);
+ const r=new Lf;
+ r.rect(270,370,100,1),r.fill({
+ color:3359846,alpha:.4}
+ ),this.contentRoot.addChild(r),this.txtGold=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:18,fill:11176004}
+ )}
+ ),this.txtGold.anchor.set(.5),this.txtGold.x=320,this.txtGold.y=395,this.contentRoot.addChild(this.txtGold),this.txtElapsed=new Hg({
+ text:"00:00:00",style:new Ag({
+ fontFamily:"Arial",fontSize:22,fontWeight:"bold",fill:4478310}
+ )}
+ ),this.txtElapsed.anchor.set(.5),this.txtElapsed.x=320,this.txtElapsed.y=440,this.contentRoot.addChild(this.txtElapsed),this.txtDestroyed=new Hg({
+ text:SG.getText("GAME_40","성이 파괴되었습니다."),style:new Ag({
+ fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:16737894,stroke:{
+ color:"#2a0000",width:3,join:"round"}
+ ,wordWrap:!0,wordWrapWidth:500,align:"center"}
+ )}
+ ),this.txtDestroyed.anchor.set(.5),this.txtDestroyed.x=320,this.txtDestroyed.y=560,this.txtDestroyed.visible=!1,this.contentRoot.addChild(this.txtDestroyed),this.txtTouch=new Hg({
+ text:SG.getText("GAME_531","화면을 스와이프하면 복귀합니다."),style:new Ag({
+ fontFamily:"Arial",fontSize:17,fill:2765636,wordWrap:!0,wordWrapWidth:500,align:"center"}
+ )}
+ ),this.txtTouch.anchor.set(.5),this.txtTouch.x=320,this.txtTouch.y=595,this.contentRoot.addChild(this.txtTouch);
+ const o=t.SLIDER_X,a=t.SLIDER_Y,c=t.SLIDER_W,l=t.SLIDER_H,u=t.HANDLE_W,d=l-8;
+ this.sliderTrack.roundRect(o,a,c,l,l/2),this.sliderTrack.fill({
+ color:1318970,alpha:.95}
+ ),this.sliderTrack.stroke({
+ color:3362938,width:2,alpha:.85}
+ ),this.contentRoot.addChild(this.sliderTrack),this.contentRoot.addChild(this.sliderFill);
+ const f=new Lf;
+ f.roundRect(0,0,u,d,d/2),f.fill({
+ color:3825558}
+ ),f.stroke({
+ color:7315414,width:2}
+ ),this.sliderHandle.addChild(f);
+ const p=new Hg({
+ text:"›››",style:new Ag({
+ fontFamily:"Arial",fontSize:24,fontWeight:"bold",fill:13624063}
+ )}
+ );
+ p.anchor.set(.5),p.x=u/2,p.y=d/2,this.sliderHandle.addChild(p),this.sliderHandle.x=this.sliderMinX,this.sliderHandle.y=a+4,this.sliderHandle.eventMode="static",this.sliderHandle.cursor="pointer",this.contentRoot.addChild(this.sliderHandle),this.updateSliderFill(),this.overlay.eventMode="static",this.sliderHandle.on("pointerdown",this.onSliderDown,this),this.overlay.on("pointermove",this.onSliderMove,this),this.overlay.on("pointerup",this.onSliderUp,this),this.overlay.on("pointerupoutside",this.onSliderUp,this)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ get sliderMinX(){
+ return t.SLIDER_X+t.HANDLE_PAD}
+ get sliderMaxX(){
+ return t.SLIDER_X+t.SLIDER_W-t.HANDLE_W-t.HANDLE_PAD}
+ onSliderDown(t){
+ if(!this._active)return;
+ FO.killTweensOf(this.sliderHandle),this.sliderDragging=!0;
+ const i=this.contentRoot.toLocal(t.global).x;
+ this.sliderGrabOffset=i-this.sliderHandle.x,nS.app.ticker.maxFPS=30}
+ onSliderMove(t){
+ if(!this.sliderDragging)return;
+ let i=this.contentRoot.toLocal(t.global).x-this.sliderGrabOffset;
+ const s=this.sliderMinX,e=this.sliderMaxX;
+ i<s&&(i=s),i>e&&(i=e),this.sliderHandle.x=i,this.updateSliderFill(),i>=e-1&&(this.sliderDragging=!1,this.resetSlider(),this.deactivate())}
+ onSliderUp(){
+ this.sliderDragging&&(this.sliderDragging=!1,FO.killTweensOf(this.sliderHandle),FO.to(this.sliderHandle,{
+ x:this.sliderMinX,duration:.18,ease:"power2.out",onUpdate:Vt(()=>this.updateSliderFill(),"onUpdate"),onComplete:Vt(()=>{
+ this.updateSliderFill(),this._active&&!this.sliderDragging&&(nS.app.ticker.maxFPS=1)}
+ ,"onComplete")}
+ ))}
+ resetSlider(){
+ FO.killTweensOf(this.sliderHandle),this.sliderHandle.x=this.sliderMinX,this.updateSliderFill()}
+ updateSliderFill(){
+ const i=t.SLIDER_X,s=t.SLIDER_Y,e=t.SLIDER_H,n=t.HANDLE_W,h=this.sliderHandle.x-i+n;
+ this.sliderFill.clear(),h>e&&(this.sliderFill.roundRect(i,s,Math.min(h,t.SLIDER_W),e,e/2),this.sliderFill.fill({
+ color:2771578,alpha:.55}
+ ))}
+ get isActive(){
+ return this._active}
+ activate(){
+ if(this._active)return;
+ this._active=!0,this._castleDestroyed=!1,this.activateTime=Date.now(),this.setNormalMode(),this.resetSlider();
+ const t=VA.stageHeight||1400;
+ this.bg.clear(),this.bg.rect(0,-100,640,t+200),this.bg.fill({
+ color:658970}
+ );
+ const i=t/3;
+ this.contentRoot.y=i-320,this.gameContainer=VA.stage.children[0]||null,this.gameContainer&&(this.gameContainer.visible=!1),this.txtTouch.text=SG.getText("GAME_531","화면을 스와이프하면 복귀합니다."),this.txtDestroyed.text=SG.getText("GAME_40","성이 파괴되었습니다."),this.overlay.visible=!0,VA.stage.addChild(this.overlay),nS.app.ticker.maxFPS=1,this.requestWakeLock(),this.updateInfo(),this.updateIntervalId=setInterval(()=>this.updateInfo(),1e3)}
+ async requestWakeLock(){
+ var t,i;
+ try{
+ const s=navigator;
+ s.wakeLock&&"function"==typeof s.wakeLock.request&&(this.wakeLock=await s.wakeLock.request("screen"),this.visibilityHandler=()=>{
+ this._active&&"visible"===document.visibilityState&&null===this.wakeLock&&this.requestWakeLock()}
+ ,document.addEventListener("visibilitychange",this.visibilityHandler),null==(i=(t=this.wakeLock).addEventListener)||i.call(t,"release",()=>{
+ this.wakeLock=null}
+ ))}
+ catch(Xst){
+ }
+ }
+ async releaseWakeLock(){
+ if(this.visibilityHandler&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.wakeLock){
+ try{
+ await this.wakeLock.release()}
+ catch(Xst){
+ }
+ this.wakeLock=null}
+ }
+ deactivate(){
+ this._active&&(this._active=!1,this._castleDestroyed=!1,this.updateIntervalId&&(clearInterval(this.updateIntervalId),this.updateIntervalId=null),this.overlay.visible=!1,this.overlay.parent&&this.overlay.parent.removeChild(this.overlay),this.gameContainer&&(this.gameContainer.visible=!0,this.gameContainer=null),nS.app.ticker.maxFPS=45,this.releaseWakeLock())}
+ onCastleDestroyed(){
+ if(!this._active)return;
+ if(this._castleDestroyed)return;
+ this._castleDestroyed=!0;
+ const t=VA.stageHeight||1400;
+ this.bg.clear(),this.bg.rect(0,-100,640,t+200),this.bg.fill({
+ color:1706506}
+ ),this.glow.clear(),this.glow.circle(0,0,180),this.glow.fill({
+ color:4856346}
+ ),this.normalGroup.visible=!1,this.destroyedGroup.visible=!0,this.txtDestroyed.visible=!0,this.txtWaveLabel.style.fill=8934741,this.txtWaveNumber.style.fill=16746632,this.txtWaveNumber.style.dropShadow.color=11154227,this.txtElapsed.style.fill=6702148,this.txtTouch.style.fill=5583667,nS.app.ticker.maxFPS=2,setTimeout(()=>{
+ this._active&&(nS.app.ticker.maxFPS=1)}
+ ,1e3)}
+ setNormalMode(){
+ this.normalGroup.visible=!0,this.destroyedGroup.visible=!1,this.txtDestroyed.visible=!1,this.glow.clear(),this.glow.circle(0,0,180),this.glow.fill({
+ color:1714762}
+ ),this.txtWaveLabel.style.fill=5601194,this.txtWaveNumber.style.fill=16777215,this.txtWaveNumber.style.dropShadow.color=3368618,this.txtElapsed.style.fill=4478310,this.txtTouch.style.fill=2765636}
+ formatElapsed(){
+ const t=Math.floor((Date.now()-this.activateTime)/1e3),i=Math.floor(t/3600),s=Math.floor(t%3600/60),e=t%60;
+ return`${
+ String(i).padStart(2,"0")}
+ :${
+ String(s).padStart(2,"0")}
+ :${
+ String(e).padStart(2,"0")}
+ `}
+ updateInfo(){
+ this.txtWaveNumber.text=`${
+ ML.wave.toLocaleString()}
+ `,this.txtGold.text=`Gold  ${
+ VD.displayLargeNumberAsAlphabet(ML.gold)}
+ `,this.txtElapsed.text=this.formatElapsed()}
+ }
+ ;
+ Vt(dZt,"PowerSaveManager"),Kt(dZt,"instance"),Kt(dZt,"SLIDER_X",140),Kt(dZt,"SLIDER_Y",632),Kt(dZt,"SLIDER_W",360),Kt(dZt,"SLIDER_H",56),Kt(dZt,"HANDLE_W",66),Kt(dZt,"HANDLE_PAD",4);
+ let fZt=dZt;
+ const pZt=Object.freeze(Object.defineProperty({
+ __proto__:null,PowerSaveManager:fZt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),gZt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"orbBg"),Kt(this,"orbFill"),Kt(this,"orbHighlight"),Kt(this,"orbFrame"),Kt(this,"fillMask",new Lf),Kt(this,"lblHp"),Kt(this,"lblPercent"),Kt(this,"currentHp",0),Kt(this,"currentMaxHp",1),Kt(this,"displayRatio",1),Kt(this,"lastHp",-1),Kt(this,"lastMaxHp",-1),Kt(this,"animating",!1);
+ const i=t.SHEET;
+ this.orbBg=new He(QA.getTexture(i,"HealthBG")),this.orbBg.anchor.set(.5),this.orbBg.x=-5,this.addChild(this.orbBg),this.orbFill=new He(QA.getTexture(i,"HealthRed")),this.orbFill.anchor.set(.5),this.orbFill.x=-5,this.addChild(this.orbFill),this.fillMask.x=-5,this.addChild(this.fillMask),this.orbFill.mask=this.fillMask,this.orbHighlight=new He(QA.getTexture(i,"HealthRight")),this.orbHighlight.anchor.set(.5),this.orbHighlight.x=-6,this.orbHighlight.y=-21,this.addChild(this.orbHighlight),this.orbFrame=new He(QA.getTexture(i,"HealthFrame")),this.orbFrame.anchor.set(.5),this.addChild(this.orbFrame);
+ const s=cD.WHITE_OUTLINE_FONT_OPTION_16;
+ s.fontSize=16,this.lblPercent=new JD("100%",16768426,s),this.lblPercent.y=-11,this.addChild(this.lblPercent);
+ const e=cD.WHITE_OUTLINE_FONT_OPTION_16;
+ e.fontSize=13,this.lblHp=new JD("",16777215,e),this.lblHp.y=4,this.addChild(this.lblHp),this.drawFillMask(1),this.lblPercent.x=-this.lblPercent.width/2-5,this.lblHp.x=-this.lblHp.width/2-5,this.scale.set(.7)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ drawFillMask(t){
+ const i=this.fillMask;
+ if(i.clear(),t<=0)return;
+ const s=this.orbFill.texture.width,e=this.orbFill.texture.height,n=s/2,h=e*t,r=e/2-h;
+ i.rect(-n,r,s,h),i.fill({
+ color:16777215}
+ )}
+ updateInfo(t,i){
+ if(i<=0)return;
+ const s=Math.max(0,t);
+ if(s===this.lastHp&&i===this.lastMaxHp&&!this.animating)return;
+ this.lastHp=s,this.lastMaxHp=i,this.currentHp=s,this.currentMaxHp=i;
+ const e=this.currentHp/this.currentMaxHp;
+ this.displayRatio+=.3*(e-this.displayRatio),Math.abs(this.displayRatio-e)<.005?(this.displayRatio=e,this.animating=!1):this.animating=!0,this.drawFillMask(this.displayRatio);
+ const n=Math.floor(100*e);
+ this.lblPercent.text=`${
+ n}
+ %`,this.lblHp.text=`${
+ VD.displayLargeNumberAsAlphabet(this.currentHp)}
+ `,this.lblHp.x=-this.lblHp.width/2-5,this.lblPercent.x=-this.lblPercent.width/2-5,this.lblPercent.textColor=n<=20?16729156:n<=50?16755268:16768426}
+ }
+ ;
+ Vt(gZt,"CastleHealthOrb"),Kt(gZt,"instance"),Kt(gZt,"SHEET","UI_Ekkorr");
+ let mZt=gZt;
+ const wZt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"background",new He),Kt(this,"lblBuffName",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblValue",new JD("",16768324,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"iconContainer",new Ge),this.background=new He(QA.getTexture("UI_Ekkorr","whiteRect")),this.background.width=560,this.background.height=28,this.background.x=0,this.background.y=0,this.addChild(this.background),this.lblBuffName.x=10,this.lblBuffName.y=6,this.addChild(this.lblBuffName),this.lblValue.x=t.COL_VALUE,this.lblValue.y=6,this.addChild(this.lblValue),this.iconContainer.x=t.COL_ICON,this.iconContainer.y=2,this.addChild(this.iconContainer)}
+ setData(t){
+ if(this.data=t,this.iconContainer.removeChildren(),t.isSection)return this.background.tint=3359795,this.background.alpha=.5,this.lblBuffName.text=t.buffName,void(this.lblValue.text="");
+ const i=t.rowIndex%2==0?2763306:1710618;
+ this.background.tint=i,this.background.alpha=.3,this.lblBuffName.text=t.buffName;
+ const s=t.value;
+ if(this.lblValue.text=`${
+ s>0?"+":""}
+ ${
+ s}
+ %`,t.contributors&&t.contributors.length>0){
+ let i=0;
+ for(const s of t.contributors){
+ const t=wx.getInstance().getBookVO(s);
+ if(t&&t.base)try{
+ const s=new He;
+ s.texture=QA.getTexture("UI_Ekkorr",`Hero${
+ t.base}
+ `);
+ const e=24/s.texture.height;
+ s.scale.set(e),s.x=i,s.y=0,this.iconContainer.addChild(s),i+=s.width+4}
+ catch(Xst){
+ }
+ }
+ }
+ }
+ get height(){
+ return 30}
+ }
+ ;
+ Vt(wZt,"BuffItemRenderer"),Kt(wZt,"COL_VALUE",260),Kt(wZt,"COL_ICON",360);
+ let vZt=wZt;
+ const bZt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"background",new He),Kt(this,"lblName",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMelee",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblRange",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),this.background=new He(QA.getTexture("UI_Ekkorr","whiteRect")),this.background.width=560,this.background.height=28,this.addChild(this.background),this.lblName.x=t.COL_NAME,this.lblName.y=6,this.addChild(this.lblName),this.lblMelee.x=t.COL_MELEE,this.lblMelee.y=6,this.addChild(this.lblMelee),this.lblRange.x=t.COL_RANGE,this.lblRange.y=6,this.addChild(this.lblRange)}
+ setData(t){
+ if(this.data=t,t.isHeader)return this.background.tint=3359795,this.background.alpha=.5,this.lblName.text=t.buffName,this.lblMelee.text=t.meleeLabel,void(this.lblRange.text=t.rangeLabel);
+ const i=t.rowIndex%2==0?2763306:1710618;
+ this.background.tint=i,this.background.alpha=.3,this.lblName.text=t.buffName,this.lblMelee.text=this.formatValue(t.meleeValue),this.lblRange.text=this.formatValue(t.rangeValue),this.lblMelee.tint=0!==t.meleeValue?16768324:cD.DEFAULT_COLOR,this.lblRange.tint=0!==t.rangeValue?16768324:cD.DEFAULT_COLOR}
+ formatValue(t){
+ return t>0?`+${
+ t}
+ %`:t<0?`${
+ t}
+ %`:"0%"}
+ get height(){
+ return 30}
+ }
+ ;
+ Vt(bZt,"CombatBuffItemRenderer"),Kt(bZt,"COL_NAME",10),Kt(bZt,"COL_MELEE",230),Kt(bZt,"COL_RANGE",400);
+ let _Zt=bZt;
+ const yZt=[{
+ label:"인간",tribe:1}
+ ,{
+ label:"엘프",tribe:2}
+ ,{
+ label:"언데드",tribe:3}
+ ,{
+ label:"오크",tribe:4}
+ ],MZt=[{
+ label:"공격력",code:kR.Damage}
+ ,{
+ label:"체력",code:kR.Hp}
+ ,{
+ label:"방어력",code:kR.Defense}
+ ,{
+ label:"공격속도",code:kR.AttackSpeed}
+ ,{
+ label:"이동속도",code:kR.MoveSpeed}
+ ,{
+ label:"치명타 확률",code:kR.CriticalPercent}
+ ,{
+ label:"치명타 대미지",code:kR.CriticalDamage}
+ ,{
+ label:"부활시간",code:kR.ReviveTime}
+ ,{
+ label:"공격범위",code:kR.AttackRange}
+ ,{
+ label:"전투시간",code:kR.UnitBattleTime}
+ ,{
+ label:"아군 타워 체력",code:kR.OurTowerHp}
+ ,{
+ label:"던전 일반병사 체력",code:kR.DungeonNormalHp}
+ ],EZt={
+ monstergold:"몬스터 골드 증가",wavecleargold:"웨이브 클리어 골드 증가",startwave:"환생 시작 층 증가",elfsecret:"엘프의 비술 확률",godbless:"신의 축복 확률",medal:"환생 훈장 증가",offlinespeed:"오프라인 속도 증가",offlinemax:"오프라인 최고층 상한 증가",gamespeed:"게임 속도 증가",retreat:"퇴각 기능",humansecret:"인간의 비술",undeadsecret:"언데드의 비술",orcsecret:"오크의 비술",questgoldgain:"퀘스트 골드 획득 증가",questopengold:"퀘스트 오픈 골드 감소",questupgradegold:"퀘스트 업그레이드 골드 감소",questcompletetime:"퀘스트 완료 시간 단축",unitupgradegold:"병사 업그레이드 골드 감소"}
+ ,AZt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"catCombat",new gzt("전투 버프",200)),Kt(this,"catGameplay",new gzt("게임플레이",200)),Kt(this,"selectedCategory",-1),Kt(this,"combatArea",new Ge),Kt(this,"combatSubTabs",[]),Kt(this,"combatList"),Kt(this,"lblNoCombat",new JD("활성화된 전투 버프가 없습니다.",cD.COLOR_GRAY,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"selectedCombatSub",-1),Kt(this,"gameplayArea",new Ge),Kt(this,"gpSubTabs",[]),Kt(this,"gpContainers",[]),Kt(this,"gpLists",[]),Kt(this,"gpNoLabels",[]),Kt(this,"selectedGpSub",-1),Kt(this,"mainContainer",new Ge),this.title=SG.getText("GAME_164","버프 상태"),this.catCombat.text=SG.getText("GAME_165","전투 버프"),this.catCombat.width=280,this.catCombat.x=20,this.catCombat.y=65,this.contentContainer.addChild(this.catCombat),this.catGameplay.text=SG.getText("GAME_166","게임플레이"),this.catGameplay.width=280,this.catGameplay.x=300,this.catGameplay.y=65,this.contentContainer.addChild(this.catGameplay),this.catCombat.onClick=()=>this.selectCategory(0),this.catGameplay.onClick=()=>this.selectCategory(1),this.mainContainer.x=10,this.mainContainer.y=65+this.catCombat.height+10,this.contentContainer.addChild(this.mainContainer),this.initCombatArea(),this.initGameplayArea(),this.width=600,this.height=650,this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ initCombatArea(){
+ let t=10;
+ for(let s=0;
+ s<yZt.length;
+ s++){
+ const i=new gzt(SG.getText(`TRIBE_${
+ yZt[s].tribe}
+ `,yZt[s].label),120);
+ i.width=140,i.x=t,i.y=0,this.combatArea.addChild(i),this.combatSubTabs.push(i);
+ const e=s;
+ i.onClick=()=>this.selectCombatSub(e),t+=140}
+ const i=this.combatSubTabs[0].height+10;
+ this.combatList=new KO(_Zt,560,430),this.combatList.x=10,this.combatList.y=i,this.combatArea.addChild(this.combatList),this.lblNoCombat.text=SG.getText("GAME_170","활성화된 전투 버프가 없습니다."),this.lblNoCombat.x=10,this.lblNoCombat.y=i+5,this.lblNoCombat.visible=!1,this.combatArea.addChild(this.lblNoCombat)}
+ initGameplayArea(){
+ const t=[SG.getText("GAME_4","유물"),SG.getText("GAME_175","병사"),SG.getText("GAME_176","캐슬"),SG.getText("GAME_177","합산")],i=[SG.getText("GAME_171","활성화된 유물 버프가 없습니다."),SG.getText("GAME_172","활성화된 병사 버프가 없습니다."),SG.getText("GAME_173","활성화된 캐슬 버프가 없습니다."),SG.getText("GAME_174","활성화된 버프가 없습니다.")];
+ let s=10;
+ for(let e=0;
+ e<4;
+ e++){
+ const n=new gzt(t[e],120);
+ n.width=140,n.x=s,n.y=0,this.gameplayArea.addChild(n),this.gpSubTabs.push(n);
+ const h=e;
+ n.onClick=()=>this.selectGpSub(h),s+=140;
+ const r=new Ge;
+ this.gpContainers.push(r);
+ const o=new KO(vZt,560,430);
+ o.x=0,o.y=0,r.addChild(o),this.gpLists.push(o);
+ const a=new JD(i[e],cD.COLOR_GRAY,cD.DEFAULT_FONT_OPTION_16);
+ a.x=10,a.y=10,a.visible=!1,r.addChild(a),this.gpNoLabels.push(a)}
+ }
+ selectCategory(t){
+ t!==this.selectedCategory&&(this.selectedCategory=t,this.catCombat.selected=0===t,this.catGameplay.selected=1===t,this.mainContainer.removeChildren(),0===t?(this.mainContainer.addChild(this.combatArea),this.selectedCombatSub=-1,this.selectCombatSub(0)):(this.mainContainer.addChild(this.gameplayArea),this.selectedGpSub=-1,this.selectGpSub(0)))}
+ selectCombatSub(t){
+ if(t!==this.selectedCombatSub){
+ this.selectedCombatSub=t;
+ for(let i=0;
+ i<this.combatSubTabs.length;
+ i++)this.combatSubTabs[i].selected=i===t;
+ this.updateCombatList()}
+ }
+ updateCombatList(){
+ const t=yZt[this.selectedCombatSub],i=VR.getInstance(),s=[];
+ s.push({
+ buffName:SG.getText("GAME_167","버프"),meleeLabel:SG.getText("GAME_168","근거리"),rangeLabel:SG.getText("GAME_169","원거리"),isHeader:!0,rowIndex:0}
+ );
+ let e=!1;
+ for(let n=0;
+ n<MZt.length;
+ n++){
+ const h=MZt[n],r=i.getMultiplier(ix.MELEE,t.tribe,h.code),o=i.getMultiplier(ix.RANGE,t.tribe,h.code),a=Math.round(100*(r-1)),c=Math.round(100*(o-1));
+ 0===a&&0===c||(e=!0),s.push({
+ buffName:SG.getText(`CombatBuffType_${
+ h.code.toUpperCase()}
+ `,h.label),meleeValue:a,rangeValue:c,rowIndex:n}
+ )}
+ this.combatList.visible=e,this.lblNoCombat.visible=!e,e&&(this.combatList.dataProvider=s)}
+ selectGpSub(t){
+ if(t===this.selectedGpSub)return;
+ this.selectedGpSub=t;
+ for(let s=0;
+ s<this.gpSubTabs.length;
+ s++)this.gpSubTabs[s].selected=s===t;
+ const i=this.gpSubTabs[0].height+10;
+ for(let s=0;
+ s<this.gpContainers.length;
+ s++)s===t?(this.gpContainers[s].y=i,this.gpContainers[s].parent||this.gameplayArea.addChild(this.gpContainers[s])):this.gpContainers[s].parent&&this.gameplayArea.removeChild(this.gpContainers[s])}
+ updateGameplayData(){
+ const t=VR.getInstance();
+ this.updateGpTab(0,t.getSourceGameplayBuffs("treasure"));
+ const i=new Map(t.getSourceGameplayBuffs("HeroUniqueSkill"));
+ this.applyPetAwakeningContributions(i),this.updateGpTab(1,i),this.updateGpTab(2,t.getSourceGameplayBuffs("castle"));
+ const s=new Map(t.getAllGameplayBuffs());
+ this.applyPetAwakeningContributions(s),this.updateGpTab(3,s)}
+ applyPetAwakeningContributions(t){
+ const i=t.get(Cx.QuestGold)??0,s=IR.applyQuestGoldAwakeningBonus(i);
+ s!==i&&t.set(Cx.QuestGold,s);
+ const e=IR.getColdOwnedGodBlessContribution();
+ e>0&&t.set(Cx.GodBless,(t.get(Cx.GodBless)??0)+e);
+ const n=t.get(Cx.StartWave)??0,h=IR.applyMoonStartWaveCap(n);
+ h>0&&h!==n&&t.set(Cx.StartWave,h);
+ const r=IR.getWaterDragonTeamMedalBonus(wx.getInstance().getTeamIds());
+ r>0&&t.set(Cx.MedalBuff,(t.get(Cx.MedalBuff)??0)+r);
+ const o=IR.getTingkeyOwnedElfSecretContribution();
+ o>0&&t.set(Cx.ElfSecret,(t.get(Cx.ElfSecret)??0)+o);
+ for(const a of[Cx.OfflineMax,Cx.OfflineSpeed,Cx.CastleLevelUp]){
+ const i=IR.getCitadelOwnershipTotalWithAwakening(a);
+ i>0&&t.set(a,i)}
+ }
+ updateGpTab(t,i){
+ const s=[];
+ let e=0;
+ const n=1===t;
+ for(const[o,a]of i){
+ let t=[];
+ if(n)if(t=[...kx.getInstance().getContributors(o)],o===Cx.GodBless){
+ const i=IR.getColdOwnedGodBlessContributors();
+ for(const s of i)t.includes(s)||t.push(s)}
+ else if(o===Cx.StartWave){
+ const i=IR.getMoonOwnedStartWaveContributors();
+ for(const s of i)t.includes(s)||t.push(s)}
+ else if(o===Cx.ElfSecret){
+ const i=IR.getTingkeyOwnedElfSecretContributors();
+ for(const s of i)t.includes(s)||t.push(s)}
+ else if(o===Cx.QuestGold){
+ const i=IR.getQuestGoldOwnedContributors();
+ for(const s of i)t.includes(s)||t.push(s)}
+ s.push({
+ buffName:SG.getText(`GameplayBuffType_${
+ o.toLowerCase()}
+ `,EZt[o.toLowerCase()])||o,value:a,contributors:t,rowIndex:e++}
+ )}
+ const h=this.gpLists[t],r=this.gpNoLabels[t];
+ 0===s.length?(h.visible=!1,r.visible=!0):(h.visible=!0,r.visible=!1,h.dataProvider=s)}
+ show(){
+ this.updateLanguage(),this.updateGameplayData(),this.selectedCategory=-1,this.selectedCombatSub=-1,this.selectedGpSub=-1,this.selectCategory(0),super.show()}
+ getDefaultPositionY(){
+ return.65*VA.stageHeight}
+ updateLanguage(){
+ this.title=SG.getText("GAME_164","버프 상태");
+ const t=this.catCombat.width;
+ this.catCombat.text=SG.getText("GAME_165","전투 버프"),this.catGameplay.text=SG.getText("GAME_166","게임플레이"),this.catCombat.width=t,this.catGameplay.width=t;
+ for(let e=0;
+ e<yZt.length;
+ e++){
+ const t=this.combatSubTabs[e],i=t.width;
+ t.text=SG.getText(`TRIBE_${
+ yZt[e].tribe}
+ `,yZt[e].label),t.width=i}
+ this.lblNoCombat.text=SG.getText("GAME_170","활성화된 전투 버프가 없습니다.");
+ const i=[SG.getText("GAME_4","유물"),SG.getText("GAME_175","병사"),SG.getText("GAME_176","캐슬"),SG.getText("GAME_177","합산")],s=[SG.getText("GAME_171","활성화된 유물 버프가 없습니다."),SG.getText("GAME_172","활성화된 병사 버프가 없습니다."),SG.getText("GAME_173","활성화된 캐슬 버프가 없습니다."),SG.getText("GAME_174","활성화된 버프가 없습니다.")];
+ for(let e=0;
+ e<this.gpSubTabs.length;
+ e++){
+ const t=this.gpSubTabs[e],n=t.width;
+ t.text=i[e],t.width=n,this.gpNoLabels[e].text=s[e]}
+ }
+ }
+ ;
+ Vt(AZt,"BuffStatusPopup"),Kt(AZt,"_instance");
+ let SZt=AZt;
+ var TZt=(t=>(t.GEM="gem",t.HONOR="honor",t))(TZt||{
+ }
+ );
+ const CZt=class t{
+ constructor(){
+ Kt(this,"slots",[]),Kt(this,"canRefresh",!1),Kt(this,"isLoaded",!1),Kt(this,"lastFetchUtcDate","")}
+ static getInstance(){
+ return t._instance||(t._instance=new t),t._instance}
+ setData(i){
+ if(i){
+ if(this.isLoaded=!0,this.lastFetchUtcDate=t.getCurrentUtcDateKey(),this.slots=[],Array.isArray(i.slots))for(const t of i.slots)this.slots.push({
+ slotIndex:Number(t.slotIndex)||0,kindNum:Number(t.kindNum)||0,currency:"gem"===t.currency?"gem":"honor",price:Number(t.price)||0,piece:Number(t.piece)||0}
+ );
+ this.canRefresh=!!i.canRefresh}
+ }
+ isStale(){
+ return!this.isLoaded||this.lastFetchUtcDate!==t.getCurrentUtcDateKey()}
+ invalidate(){
+ this.isLoaded=!1,this.lastFetchUtcDate=""}
+ static getCurrentUtcDateKey(){
+ const t=new Date(tx.time);
+ return`${
+ t.getUTCFullYear()}
+ -${
+ (t.getUTCMonth()+1).toString().padStart(2,"0")}
+ -${
+ t.getUTCDate().toString().padStart(2,"0")}
+ `}
+ getMsUntilNextResetUTC(){
+ const t=new Date,i=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+1,0,0,0,0);
+ return Math.max(0,i-t.getTime())}
+ getRemainingTimeText(){
+ const t=this.getMsUntilNextResetUTC(),i=Math.floor(t/6e4),s=i%60;
+ return`${
+ Math.floor(i/60).toString().padStart(2,"0")}
+ :${
+ s.toString().padStart(2,"0")}
+ `}
+ }
+ ;
+ Vt(CZt,"PetShopDataManager"),Kt(CZt,"_instance");
+ let IZt=CZt;
+ const kZt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage"),Kt(this,"gemLabel"),Kt(this,"btnConfirm"),Kt(this,"btnCancel"),Kt(this,"onConfirm",null),Kt(this,"onCancel",null),this.title="",this.lblMessage=new JD("",cD.DEFAULT_COLOR,cD.ERROR_POPUP_LABEL_OPTION),this.lblMessage.y=90,this.gemLabel=new $B("UI_GEM_ICON","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.gemLabel.iconScale=.8,this.btnConfirm=new eG("확인"),this.btnCancel=new CWt("취소"),this.addChild(this.lblMessage,this.gemLabel,this.btnConfirm,this.btnCancel),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.btnClose.onClick=this.onCancelClick.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()}
+ onCancelClick(){
+ this.hide();
+ let t=this.onCancel;
+ this.onCancel=null,null!==t&&t()}
+ setData(t,i,s="UI_GEM_ICON"){
+ this.lblMessage.text=i,this.gemLabel.texture=QA.getTexture("UI_Ekkorr",s),this.gemLabel.text=String(t),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout()}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.gemLabel.x=.5*(this.width-this.gemLabel.width),this.gemLabel.y=this.lblMessage.y+this.lblMessage.height+20,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnConfirm.y=this.gemLabel.y+this.gemLabel.height+30,this.btnCancel.y=this.btnConfirm.y,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ getDefaultPositionY(){
+ return.3*VA.stageHeight}
+ onBackButton(){
+ return this.onCancelClick(),!0}
+ }
+ ;
+ Vt(kZt,"PetTicketPopup"),Kt(kZt,"_instance");
+ let OZt=kZt;
+ const xZt=class t extends ozt{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.updateLanguage()}
+ updateCount(t){
+ this.setTitle(`${
+ SG.getText("GAME_568","펫 목록")}
+  ( ${
+ SG.getValueReplace("GAME_598","##",t,t+"마리")}
+  )`)}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_568","펫 목록"))}
+ }
+ ;
+ Vt(xZt,"PetListSubMenu"),Kt(xZt,"instance");
+ let RZt=xZt;
+ const NZt=class extends qO{
+ constructor(){
+ super(),Kt(this,"icons",[]),Kt(this,"labels",[]),Kt(this,"redDots",[]),Kt(this,"posList",[]),Kt(this,"mainContainer",new Ge),Kt(this,"kindNumArray",[]);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_17;
+ for(let i=0;
+ i<7;
+ i++){
+ const s=new J2;
+ s.x=90*i+.5*(90-s.width),s.y=7,this.mainContainer.addChild(s),this.icons.push(s),this.posList.push(s.x);
+ const e=new JD("0",16763904,t);
+ this.mainContainer.addChild(e),this.labels.push(e);
+ const n=new JL;
+ n.x=s.x+s.width-8,n.y=s.y-8,n.visible=!1,this.mainContainer.addChild(n),this.redDots.push(n)}
+ this.posList.push(630),this.addChild(this.mainContainer)}
+ get width(){
+ return 630}
+ get height(){
+ return 110}
+ setData(t){
+ const i=t;
+ if(!i)return;
+ this.kindNumArray=i;
+ const s=cx.getInstance();
+ for(let e=0;
+ e<7;
+ e++){
+ const t=this.icons[e],n=this.labels[e],h=this.redDots[e];
+ if(e<i.length){
+ const r=i[e],o=s.getBookVO(r),a=s.getPetVO(r);
+ o&&a&&a.grade>0?t.setPet(o.kindNum,a.grade):o&&a&&a.piece>0?t.setInactive(o.kindNum):t.setEmpty(),t.visible=!0,n.visible=!0,n.text=`${
+ a?a.piece:0}
+ `,n.x=t.x+.5*(t.width-n.width),n.y=t.y+t.height+8,s.canEvolve(r)?(h.visible=!0,h.show()):(h.hide(),h.visible=!1)}
+ else t.visible=!1,n.visible=!1,h.hide(),h.visible=!1}
+ }
+ onClick(t,i){
+ for(let s=0;
+ s<this.icons.length;
+ s++)if(t>this.posList[s]&&t<this.posList[s+1]){
+ s<this.kindNumArray.length&&this.icons[s].visible&&YZt.getInstance().showPet(this.kindNumArray[s]);
+ break}
+ }
+ }
+ ;
+ Vt(NZt,"PetListItemRenderer");
+ let PZt=NZt;
+ const DZt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list");
+ const t=V1t.getInstance().contentHeight-60-20;
+ this.list=new d5(PZt,630,t),this.list.x=4,this.list.y=0,this.addChild(this.list)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ setData(){
+ const t=[...cx.getInstance().list].sort((t,i)=>i.grade!==t.grade?i.grade-t.grade:i.piece-t.piece),i=t.map(t=>t.kindNum);
+ this.list.dataProvider=QO.chunkArray(i,7),RZt.getInstance().updateCount(t.filter(t=>t.grade>0).length)}
+ get className(){
+ return"PetListSubView"}
+ updateLanguage(){
+ this.setData()}
+ }
+ ;
+ Vt(DZt,"PetListSubView"),Kt(DZt,"instance");
+ let LZt=DZt;
+ const GZt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"icons",[]),Kt(this,"selectionFrames",[]),Kt(this,"labels",[]),Kt(this,"posList",[]),Kt(this,"mainContainer",new Ge),Kt(this,"kindNumArray",[]);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_17;
+ for(let i=0;
+ i<6;
+ i++){
+ const s=new J2;
+ s.x=90*i+.5*(90-s.width),s.y=7,this.mainContainer.addChild(s),this.icons.push(s),this.posList.push(s.x);
+ const e=new He(QA.getTexture("UI_Ekkorr","Base_Tooltip"));
+ e.width=s.width+8,e.height=s.height+8,e.x=s.x-4,e.y=s.y-4,e.tint=6741503,e.alpha=.6,e.visible=!1,this.mainContainer.addChildAt(e,0),this.selectionFrames.push(e);
+ const n=new JD("0",16763904,t);
+ this.mainContainer.addChild(n),this.labels.push(n)}
+ this.posList.push(540),this.addChild(this.mainContainer)}
+ get width(){
+ return 540}
+ get height(){
+ return 90}
+ setData(i){
+ const s=i;
+ if(!s)return;
+ this.kindNumArray=s;
+ const e=cx.getInstance();
+ for(let n=0;
+ n<6;
+ n++){
+ const i=this.icons[n],h=this.labels[n],r=this.selectionFrames[n];
+ if(n<s.length){
+ const o=s[n],a=e.getBookVO(o),c=e.getPetVO(o);
+ a&&c&&c.grade>0?i.setPet(a.kindNum,c.grade):a&&c&&c.piece>0?i.setInactive(a.kindNum):i.setEmpty(),i.visible=!0,h.visible=!1,r.visible=o===t.selectedKindNum&&!!c&&c.grade>0}
+ else i.visible=!1,h.visible=!1,r.visible=!1}
+ }
+ onClick(i,s){
+ for(let e=0;
+ e<this.icons.length;
+ e++)if(i>this.posList[e]&&i<this.posList[e+1]){
+ if(e<this.kindNumArray.length&&this.icons[e].visible){
+ const i=this.kindNumArray[e],s=cx.getInstance().getPetVO(i);
+ s&&s.grade>0&&t.onPick&&t.onPick(i)}
+ break}
+ }
+ }
+ ;
+ Vt(GZt,"PetSelectItemRenderer"),Kt(GZt,"onPick",null),Kt(GZt,"selectedKindNum",0);
+ let BZt=GZt;
+ const UZt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"mode","represent"),Kt(this,"selectedKindNum",0),Kt(this,"previewIcon",new J2),Kt(this,"lblName",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblSkill1",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblSkill2",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"petList"),Kt(this,"currentChunkedData",[]),Kt(this,"btnConfirm",new kU("","","",.8,160,60)),Kt(this,"btnCancel",new kU("","","",.8,160,60)),Kt(this,"requestPending",!1),this.width=580,this.previewIcon.x=25,this.previewIcon.y=70,this.contentContainer.addChild(this.previewIcon),this.lblName.x=120,this.lblName.y=70,this.contentContainer.addChild(this.lblName),this.lblSkill1.x=120,this.lblSkill1.y=94,this.lblSkill1.wordWrap=!0,this.lblSkill1.wordWrapWidth=this.width-160,this.lblSkill1.lineHeight=18,this.contentContainer.addChild(this.lblSkill1),this.lblSkill2.x=120,this.lblSkill2.y=118,this.lblSkill2.wordWrap=!0,this.lblSkill2.wordWrapWidth=this.width-160,this.lblSkill2.lineHeight=18,this.contentContainer.addChild(this.lblSkill2),this.petList=new d5(BZt,540,420),this.petList.x=.5*(this.width-540)-2,this.petList.y=178,this.contentContainer.addChild(this.petList),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.allowMultiline=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirm.bind(this),this.contentContainer.addChild(this.btnConfirm),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.allowMultiline=!0,this.btnCancel.color=kU.BROWN,this.btnCancel.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnCancel),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showForRepresent(){
+ this.mode="represent",this.title=SG.getText("GAME_573","대표 펫"),this.selectedKindNum=cx.getInstance().representPet,this.refresh(),super.show()}
+ showForRevive(){
+ this.mode="revive",this.title=SG.getText("GAME_574","환생 펫"),this.selectedKindNum=cx.getInstance().revivePet,this.refresh(),super.show()}
+ refresh(){
+ const t=[...cx.getInstance().list].sort((t,i)=>i.grade!==t.grade?i.grade-t.grade:i.piece-t.piece).map(t=>t.kindNum);
+ BZt.selectedKindNum=this.selectedKindNum,BZt.onPick=t=>this.onPickPet(t),this.currentChunkedData=QO.chunkArray(t,6),this.petList.dataProvider=this.currentChunkedData,this.updatePreview(),this.updateButtons(),this.updateLayout()}
+ updatePreview(){
+ const t=cx.getInstance(),i=t.getBookVO(this.selectedKindNum),s=t.getPetVO(this.selectedKindNum);
+ if(i&&s&&s.grade>0){
+ this.previewIcon.setPet(i.kindNum,s.grade),this.lblName.text=SG.getText(`PET_NAME_${
+ i.kindNum}
+ `,i.name);
+ const e=t.getSkillBookVO(i.skill1),n=t.getSkill1Value(i.kindNum),h=e?SG.getText(`PET_${
+ i.skill1}
+ `,e.desc):`스킬 #${
+ i.skill1}
+ `,r=e&&!e.isPercent?"":"%";
+ this.lblSkill1.text=`- ${
+ SG.getText("GAME_706","스킬 1")}
+  : ${
+ h}
+  : ${
+ n}
+ ${
+ r}
+ `,this.lblSkill1.visible=!0;
+ const o=t.getSkillBookVO(i.skill2),a=t.getSkill2Value(i.kindNum),c=o?SG.getText(`PET_${
+ i.skill2}
+ `,o.desc):`스킬 #${
+ i.skill2}
+ `,l=o&&!o.isPercent?"":"%";
+ this.lblSkill2.text=`- ${
+ SG.getText("GAME_707","스킬 2")}
+  : ${
+ c}
+  : ${
+ a}
+ ${
+ l}
+ `,this.lblSkill2.visible=!0;
+ const u=2;
+ this.lblSkill2.y=this.lblSkill1.y+this.lblSkill1.height+u}
+ else this.previewIcon.setEmpty(),this.lblName.text=SG.getText("COMMON_466","미설정"),this.lblSkill1.visible=!1,this.lblSkill2.visible=!1}
+ updateButtons(){
+ this.btnConfirm.text=SG.getText("COMMON_1","선택"),this.btnCancel.text=SG.getText("COMMON_2","취소")}
+ updateLayout(){
+ const t=.5*this.width,i=this.petList.y+this.petList.height+20,s=this.btnConfirm.width+20+this.btnCancel.width;
+ this.btnConfirm.x=t-.5*s,this.btnConfirm.y=i,this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnCancel.y=i,this.height=i+this.btnConfirm.height+40}
+ onPickPet(t){
+ t!==this.selectedKindNum&&(this.selectedKindNum=t,BZt.selectedKindNum=t,this.updatePreview(),this.petList.dataProvider=this.currentChunkedData)}
+ async onConfirm(){
+ if(this.requestPending)return;
+ if(this.selectedKindNum<=0)return void this.hide();
+ this.requestPending=!0;
+ const t="represent"===this.mode?await rD.getInstance().pet.setRepresentPet(this.selectedKindNum,!0):await rD.getInstance().pet.setRevivePet(this.selectedKindNum,!0);
+ this.requestPending=!1,!1!==t.success?(ML.setUserInfo(t.body),KZt.getInstance().setData(),$qt.getInstance().setData(),this.hide()):wG.getInstance().showError(t)}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(UZt,"PetSelectPopup"),Kt(UZt,"_instance");
+ let FZt=UZt;
+ const HZt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_572","펫 포인트");
+ const t=[`1. ${
+ SG.getText("GAME_713","펫 포인트만큼, 병사의 골드레벨 최대값이 증가합니다.")}
+ `,`2. ${
+ SG.getText("GAME_714","펫을 획득하거나, 진화시킬 때마다 펫 포인트가 증가합니다.")}
+ `,`3. ${
+ SG.getText("GAME_715","일반적으로 등급당 펫 포인트는 2점씩 증가합니다")}
+ `,`4. ${
+ SG.getText("GAME_716","등급이 높을수록, 좋은 펫일수록 더 많이 증가합니다.")}
+ `];
+ this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(HZt,"PetPointGuidePopup"),Kt(HZt,"_instance");
+ let WZt=HZt;
+ const $Zt=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblPetPoint",new JD(`${
+ SG.getText("GAME_572","펫 포인트")}
+  : 0`,cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnGuide",new MB("UI_Ekkorr","UI_Alarm")),this.lblPetPoint.x=640-this.lblPetPoint.width-10,this.lblPetPoint.y=.5*(this.bg.height-this.lblTitle.height),this.addChild(this.lblPetPoint),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ WZt.getInstance().showGuide()}
+ ),this.positionGuideButton(),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ positionGuideButton(){
+ this.btnGuide.x=this.lblPetPoint.x-this.btnGuide.width-5,this.btnGuide.y=this.lblPetPoint.y+.5*(this.lblPetPoint.height-this.btnGuide.height)+2}
+ updatePetPoint(){
+ const t=cx.getInstance().getPetPoint();
+ this.lblPetPoint.text=`${
+ SG.getText("GAME_572","펫 포인트")}
+  : ${
+ t}
+ `,this.lblPetPoint.x=640-this.lblPetPoint.width-10,this.positionGuideButton()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_566","펫 메인")),this.updatePetPoint()}
+ }
+ ;
+ Vt($Zt,"PetMainSubMenu"),Kt($Zt,"instance");
+ let jZt=$Zt;
+ const VZt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"representBox"),Kt(this,"representIcon"),Kt(this,"lblRepresentTitle"),Kt(this,"lblRepresentName"),Kt(this,"representDesc"),Kt(this,"reviveBox"),Kt(this,"reviveIcon"),Kt(this,"lblReviveTitle"),Kt(this,"lblReviveName"),Kt(this,"reviveDesc"),Kt(this,"pageNav");
+ let t=8;
+ this.representBox=this.createPetSection(),this.representBox.x=10,this.representBox.y=t,this.representBox.eventMode="static",this.representBox.cursor="pointer",this.representBox.on("pointertap",()=>{
+ FZt.getInstance().showForRepresent()}
+ ),this.addChild(this.representBox),this.representIcon=this.representBox._icon,this.lblRepresentTitle=this.representBox._lblTitle,this.lblRepresentName=this.representBox._lblName,this.representDesc=this.representBox._desc,t+=132,this.reviveBox=this.createPetSection(),this.reviveBox.x=10,this.reviveBox.y=t,this.reviveBox.eventMode="static",this.reviveBox.cursor="pointer",this.reviveBox.on("pointertap",()=>{
+ FZt.getInstance().showForRevive()}
+ ),this.addChild(this.reviveBox),this.reviveIcon=this.reviveBox._icon,this.lblReviveTitle=this.reviveBox._lblTitle,this.lblReviveName=this.reviveBox._lblName,this.reviveDesc=this.reviveBox._desc,t+=150,this.pageNav=new IB(620,17,cD.DEFAULT_COLOR),this.pageNav.x=10,this.pageNav.y=t,this.addChild(this.pageNav),this.refreshTexts()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ refreshTexts(){
+ this.lblRepresentTitle.text=SG.getText("GAME_573","대표 펫"),this.representDesc.text=`- ${
+ SG.getText("GAME_575","대표 펫의 스킬은 2배로 적용됩니다.")}
+ \n- ${
+ SG.getText("GAME_576","펫 포인트도 2배 적용")}
+ `,this.lblReviveTitle.text=SG.getText("GAME_574","환생 펫"),this.reviveDesc.text=`- ${
+ SG.getText("GAME_577","환생 펫은 환생시 스킬이 2배로 적용됩니다.")}
+ `,this.pageNav.setPages([{
+ title:SG.getText("GAME_578","기본설명"),content:`# ${
+ SG.getText("GAME_579","소유한 모든 펫의 스킬은 합산되어 적용되므로, 펫은 많을수록 좋습니다.")}
+ \n# ${
+ SG.getText("GAME_575","대표 펫의 스킬은 2배로 적용됩니다.")}
+  ( ${
+ SG.getText("GAME_580","펫 포인트도 2배")}
+  )\n# ${
+ SG.getText("GAME_581","환생할 경우, 대표 펫 대신 환생 펫의 스킬이 2배로 적용됩니다.")}
+  ( ${
+ SG.getText("GAME_582","현재팀, 환생팀 관계없이 모두 환생 펫으로 적용됩니다.")}
+  )`}
+ ,{
+ title:SG.getText("GAME_583","펫 성장"),content:`# ${
+ SG.getText("GAME_584","펫은 1성부터 5성까지 펫 조각을 통해 성장할 수 있습니다.")}
+ \n# ${
+ SG.getText("GAME_585","1성에서 자신만의 스킬을 하나 가집니다.")}
+ \n# ${
+ SG.getText("GAME_586","3성이 되면, 추가로 스킬 하나를 더 가집니다.")}
+ \n# ${
+ SG.getText("GAME_587","5성이 되면, 자신과 쌍을 이루는 영웅에게 특수능력을 부여해줍니다.")}
+ `}
+ ,{
+ title:`${
+ SG.getText("GAME_573","대표 펫")}
+  / ${
+ SG.getText("GAME_574","환생 펫")}
+ `,content:`# ${
+ SG.getText("GAME_575","대표 펫의 스킬은 2배로 적용됩니다.")}
+  ( ${
+ SG.getText("GAME_576","펫 포인트도 2배 적용")}
+  )\n# ${
+ SG.getText("GAME_588","대표 펫은 [ 펫 상세보기 ]에서 설정할 수 있습니다.")}
+ \n# ${
+ SG.getText("GAME_577","환생 펫은 환생시 스킬이 2배로 적용됩니다.")}
+ \n# ${
+ SG.getText("GAME_589","환생 펫은 [ 펫 상세보기 ]에서 설정할 수 있습니다.")}
+ `}
+ ,{
+ title:SG.getText("GAME_590","펫 골드버프"),content:`# ${
+ SG.getText("GAME_591","펫 골드버프는 모든 골드버프의 총 합에 곱으로 계산됩니다.")}
+ \n# ${
+ SG.getText("GAME_592","획득골드")}
+  = ${
+ SG.getText("GAME_593","기본골드")}
+  * ( R + T + U ) * P\n# P: ${
+ SG.getText("GAME_594","펫버프")}
+ \n# R: ${
+ SG.getText("GAME_595","환생버프")}
+ , T: ${
+ SG.getText("GAME_596","유물버프")}
+ , U: ${
+ SG.getText("GAME_597","유닛버프")}
+ `}
+ ])}
+ createPetSection(){
+ const t=new Ge,i=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17);
+ i.x=22,i.y=8,t.addChild(i);
+ const s=new J2;
+ s.x=22,s.y=36,t.addChild(s);
+ const e=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17);
+ e.x=112,e.y=36,t.addChild(e);
+ const n=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17);
+ return n.wordWrap=!0,n.wordWrapWidth=500,n.x=112,n.y=62,t.addChild(n),t._icon=s,t._lblTitle=i,t._lblName=e,t._desc=n,t}
+ setData(){
+ this.refreshTexts();
+ const t=cx.getInstance();
+ if(t.representPet>0){
+ const i=t.getBookVO(t.representPet),s=t.getPetVO(t.representPet);
+ i&&s&&s.grade>0?(this.representIcon.setPet(i.kindNum,s.grade),this.lblRepresentName.text=SG.getText(`PET_NAME_${
+ i.kindNum}
+ `,i.name)):(this.representIcon.setEmpty(),this.lblRepresentName.text=SG.getText("COMMON_466","미설정"))}
+ else this.representIcon.setEmpty(),this.lblRepresentName.text=SG.getText("COMMON_466","미설정");
+ if(t.revivePet>0){
+ const i=t.getBookVO(t.revivePet),s=t.getPetVO(t.revivePet);
+ i&&s&&s.grade>0?(this.reviveIcon.setPet(i.kindNum,s.grade),this.lblReviveName.text=SG.getText(`PET_NAME_${
+ i.kindNum}
+ `,i.name)):(this.reviveIcon.setEmpty(),this.lblReviveName.text=SG.getText("COMMON_466","미설정"))}
+ else this.reviveIcon.setEmpty(),this.lblReviveName.text=SG.getText("COMMON_466","미설정");
+ jZt.getInstance().updatePetPoint()}
+ get className(){
+ return"PetMainSubView"}
+ updateLanguage(){
+ this.setData()}
+ }
+ ;
+ Vt(VZt,"PetMainSubView"),Kt(VZt,"instance");
+ let KZt=VZt;
+ const zZt=[10,20,50,100,150],qZt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"petIcon"),Kt(this,"lblName"),Kt(this,"lblPiece"),Kt(this,"lblPetPoint"),Kt(this,"lblNextEvolve"),Kt(this,"lblCoupleTitle"),Kt(this,"coupleHeroIcon"),Kt(this,"lblCoupleName"),Kt(this,"skillBg"),Kt(this,"lblSkillTitle"),Kt(this,"lblSkill1"),Kt(this,"lblSkill2"),Kt(this,"lblSkill3"),Kt(this,"lblSkillNote"),Kt(this,"btnTabSkill"),Kt(this,"btnTabAwaken"),Kt(this,"lblAwakenLock"),Kt(this,"awakenMarker"),Kt(this,"currentTab","skill"),Kt(this,"btnEvolve"),Kt(this,"btnRepresent"),Kt(this,"btnRevive"),Kt(this,"currentKindNum",0),Kt(this,"requestPending",!1),this.width=580,this.title=SG.getText("GAME_565","펫");
+ this.petIcon=new J2,this.petIcon.x=25,this.petIcon.y=70,this.contentContainer.addChild(this.petIcon),this.lblName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=115,this.lblName.y=75,this.contentContainer.addChild(this.lblName),this.lblPiece=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblPiece.x=115,this.lblPiece.y=102,this.contentContainer.addChild(this.lblPiece),this.lblPetPoint=new JD("",8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblPetPoint.x=25,this.lblPetPoint.y=160,this.contentContainer.addChild(this.lblPetPoint),this.lblNextEvolve=new JD("",8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblNextEvolve.x=25,this.lblNextEvolve.y=185,this.contentContainer.addChild(this.lblNextEvolve),this.lblCoupleTitle=new JD("",8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblCoupleTitle.x=25,this.contentContainer.addChild(this.lblCoupleTitle),this.coupleHeroIcon=new Y2,this.coupleHeroIcon.x=40,this.contentContainer.addChild(this.coupleHeroIcon),this.lblCoupleName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.contentContainer.addChild(this.lblCoupleName),this.skillBg=new TB,this.skillBg.setIndex(2),this.skillBg.width=this.width-50,this.skillBg.x=25,this.contentContainer.addChild(this.skillBg),this.lblSkillTitle=new JD(`+ ${
+ SG.getText("GAME_702","펫 스킬")}
+ `,8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSkillTitle.x=35,this.contentContainer.addChild(this.lblSkillTitle);
+ const t=cD.DEFAULT_FONT_OPTION_16,i=this.width-50-30;
+ this.lblSkill1=new JD("",cD.DEFAULT_COLOR,t),this.lblSkill1.x=40,this.lblSkill1.wordWrap=!0,this.lblSkill1.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkill1),this.lblSkill2=new JD("",cD.DEFAULT_COLOR,t),this.lblSkill2.x=40,this.lblSkill2.wordWrap=!0,this.lblSkill2.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkill2),this.lblSkill3=new JD("",cD.DEFAULT_COLOR,t),this.lblSkill3.x=40,this.lblSkill3.wordWrap=!0,this.lblSkill3.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkill3),this.lblSkillNote=new JD("",6732595,t),this.lblSkillNote.x=40,this.lblSkillNote.wordWrap=!0,this.lblSkillNote.wordWrapWidth=i,this.contentContainer.addChild(this.lblSkillNote),this.btnTabSkill=new gzt(SG.getText("GAME_84","스킬"),110,30),this.btnTabSkill.height=40,this.btnTabSkill.visible=!1,this.btnTabSkill.on("pointertap",this.onTabSkill,this),this.contentContainer.addChild(this.btnTabSkill),this.btnTabAwaken=new gzt(SG.getText("GAME_1181","각성"),110,30),this.btnTabAwaken.height=40,this.btnTabAwaken.visible=!1,this.btnTabAwaken.on("pointertap",this.onTabAwaken,this),this.contentContainer.addChild(this.btnTabAwaken),this.lblAwakenLock=new JD("",cD.DEFAULT_COLOR,t),this.lblAwakenLock.visible=!1,this.contentContainer.addChild(this.lblAwakenLock),this.awakenMarker=new AB("+",i,t.fontSize,cD.DEFAULT_COLOR,7,4),this.awakenMarker.visible=!1,this.contentContainer.addChild(this.awakenMarker),this.btnEvolve=new kU("","",SG.getText("GAME_67","진 화"),.8,150,60),this.btnEvolve.showIconLabel=!1,this.btnEvolve.showTextLabel=!0,this.btnEvolve.allowMultiline=!0,this.btnEvolve.color=kU.GREEN,this.btnEvolve.onClick=this.onEvolve.bind(this),this.contentContainer.addChild(this.btnEvolve),this.btnRepresent=new kU("","",SG.getText("GAME_709","대표로 설정"),.8,170,60),this.btnRepresent.showIconLabel=!1,this.btnRepresent.showTextLabel=!0,this.btnRepresent.allowMultiline=!0,this.btnRepresent.color=kU.BROWN,this.btnRepresent.onClick=this.onSetRepresent.bind(this),this.contentContainer.addChild(this.btnRepresent),this.btnRevive=new kU("","",SG.getText("GAME_710","환생펫으로 설정"),.8,180,60),this.btnRevive.showIconLabel=!1,this.btnRevive.showTextLabel=!0,this.btnRevive.allowMultiline=!0,this.btnRevive.color=kU.BROWN,this.btnRevive.onClick=this.onSetRevive.bind(this),this.contentContainer.addChild(this.btnRevive)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showPet(t){
+ this.title=SG.getText("GAME_565","펫"),this.lblSkillTitle.text=`+ ${
+ SG.getText("GAME_702","펫 스킬")}
+ `,this.btnTabSkill.text=SG.getText("GAME_84","스킬"),this.btnTabAwaken.text=SG.getText("GAME_1181","각성"),this.btnRepresent.text=SG.getText("GAME_709","대표로 설정"),this.btnRevive.text=SG.getText("GAME_710","환생펫으로 설정"),this.currentKindNum=t,this.currentTab="skill",this.setData(),super.show()}
+ setData(){
+ const t=cx.getInstance(),i=t.getBookVO(this.currentKindNum),s=t.getPetVO(this.currentKindNum);
+ if(!i)return;
+ const e=s?s.grade:0,n=s?s.piece:0;
+ e>0?this.petIcon.setPet(i.kindNum,e):this.petIcon.setInactive(i.kindNum),this.lblName.text=SG.getText(`PET_NAME_${
+ i.kindNum}
+ `,i.name),this.lblPiece.text=`${
+ SG.getText("GAME_711","펫 조각")}
+  : ${
+ n}
+ `;
+ let h=165;
+ const r=SG.getText("GAME_572","펫 포인트");
+ e>0&&i.incGoldLevel.length>=e?this.lblPetPoint.text=`+ ${
+ r}
+  : ${
+ i.incGoldLevel[e-1]}
+ `:this.lblPetPoint.text=`+ ${
+ r}
+  : 0`,this.lblPetPoint.y=h,h+=28,this.lblNextEvolve.text=e>=5?`+ ${
+ SG.getText("GAME_703","최대 진화")}
+ `:`+ ${
+ SG.getText("GAME_712","다음 진화에 필요한 펫조각")}
+  : ${
+ zZt[e]}
+ `,this.lblNextEvolve.y=h,h+=28,i.couple>0?(this.lblCoupleTitle.text=`+ ${
+ SG.getText("GAME_704","커플 영웅")}
+ `,this.lblCoupleTitle.y=h,this.lblCoupleTitle.visible=!0,this.coupleHeroIcon.setDataWithKindNum(i.couple),this.coupleHeroIcon.scale.set(.8),this.coupleHeroIcon.x=this.lblCoupleTitle.x+15,this.coupleHeroIcon.y=h+28,this.coupleHeroIcon.visible=!0,this.lblCoupleName.visible=!1,h=this.coupleHeroIcon.y+.8*this.coupleHeroIcon.height+10):i.treasureKindNum>0?(this.lblCoupleTitle.text=`+ ${
+ SG.getText("GAME_1501","5★이 되면 7★ 유물을 획득합니다.")}
+ `,this.lblCoupleTitle.y=h,this.lblCoupleTitle.visible=!0,this.coupleHeroIcon.visible=!1,this.lblCoupleName.visible=!1,h+=28):(this.lblCoupleTitle.visible=!1,this.coupleHeroIcon.visible=!1,this.lblCoupleName.visible=!1);
+ const o=i.masterSkill>=1e3;
+ let a=1;
+ if(o){
+ const t=6,i=h+9;
+ let s=this.petIcon.x;
+ this.btnTabSkill.x=s,this.btnTabSkill.y=i,this.btnTabSkill.visible=!0,this.btnTabSkill.selected="skill"===this.currentTab,s+=this.btnTabSkill.width+t,this.btnTabAwaken.x=s,this.btnTabAwaken.y=i,this.btnTabAwaken.visible=!0,this.btnTabAwaken.selected="awaken"===this.currentTab,h=i+this.btnTabSkill.height+5,a=1.5}
+ else this.btnTabSkill.visible=!1,this.btnTabAwaken.visible=!1,this.currentTab="skill";
+ const c=cD.DEFAULT_COLOR,l=10066329,u=o?this.btnTabSkill.y+this.btnTabSkill.height+10:h+30;
+ this.skillBg.y=u,this.lblSkillTitle.y=u+10;
+ let d=this.lblSkillTitle.y+30;
+ const f=SG.getText("GAME_706","스킬 1"),p=SG.getText("GAME_707","스킬 2"),g=SG.getText("GAME_708","스킬 3"),m=Vt(t=>t>=1e5?VD.displayLargeNumberAsAlphabet(t):`${
+ t}
+ `,"fmtSkillVal"),w=t.getSkillBookVO(i.skill1),v=e>=1?t.getSkill1Value(i.kindNum):0,b=w?SG.getText(`PET_${
+ i.skill1}
+ `,w.desc):`스킬 #${
+ i.skill1}
+ `,_=w&&!w.isPercent?"":"%";
+ this.lblSkill1.text=`- ${
+ f}
+  : ${
+ b}
+  : ${
+ m(v)}
+ ${
+ _}
+ `,this.lblSkill1.textColor=e>=1?c:l,this.lblSkill1.y=d,d+=this.lblSkill1.height+5;
+ const y=t.getSkillBookVO(i.skill2),M=e>=3?t.getSkill2Value(i.kindNum):0,E=y?SG.getText(`PET_${
+ i.skill2}
+ `,y.desc):`스킬 #${
+ i.skill2}
+ `,A=y&&!y.isPercent?"":"%";
+ if(this.lblSkill2.text=`- ${
+ p}
+  : ${
+ E}
+  : ${
+ m(M)}
+ ${
+ A}
+ `,this.lblSkill2.textColor=e>=3?c:l,this.lblSkill2.y=d,d+=this.lblSkill2.height+5,i.couple>0){
+ const t=wx.getInstance().getBookVO(i.couple),s=t?SG.getText(`UNIT_NAME_${
+ i.couple}
+ `,t.name):`영웅 #${
+ i.couple}
+ `,e=SG.getText("GAME_722","[ ## ]의 숨겨진 특수 능력을 각성시켜 줍니다.");
+ this.lblSkill3.text=`- ${
+ g}
+  : ${
+ e.replace("##",s)}
+ `}
+ else if(i.treasureKindNum>0)this.lblSkill3.text=`- ${
+ g}
+  : ${
+ SG.getText("GAME_725","전설의 유물을 획득할 수 있습니다.")}
+ `;
+ else{
+ const s=t.getSkillBookVO(i.masterSkill);
+ if(s){
+ const n=e>=5?t.getSkill3Value(i.kindNum):0,h=s?SG.getText(`PET_${
+ i.masterSkill}
+ `,s.desc):`스킬 #${
+ i.masterSkill}
+ `,r=s&&!s.isPercent?"":"%";
+ this.lblSkill3.text=`- ${
+ g}
+  : ${
+ h}
+  : ${
+ n}
+ ${
+ r}
+ `}
+ else this.lblSkill3.text=""}
+ this.lblSkill3.textColor=e>=5?c:l,this.lblSkill3.y=d,this.lblSkill3.visible=""!==this.lblSkill3.text,this.lblSkill3.visible&&(d+=this.lblSkill3.height+5),d+=10,this.lblSkillNote.text=`# ${
+ SG.getText("GAME_705","스킬1은 1성에서, 스킬2는 3성에서, 스킬3은 5성에서 획득합니다.")}
+ `,this.lblSkillNote.y=d,d+=this.lblSkillNote.height;
+ const S=d+15-u;
+ if(this.skillBg.height=S*a,o&&"awaken"===this.currentTab)if(this.lblSkillTitle.visible=!1,this.lblSkill1.visible=!1,this.lblSkill2.visible=!1,this.lblSkill3.visible=!1,this.lblSkillNote.visible=!1,e<5)this.lblAwakenLock.text=SG.getText("GAME_1182","5성이 되면, 개방됩니다."),this.lblAwakenLock.wordWrap=!1,this.lblAwakenLock.x=this.skillBg.x+.5*(this.skillBg.width-this.lblAwakenLock.width),this.lblAwakenLock.y=this.skillBg.y+.5*(this.skillBg.height-this.lblAwakenLock.height),this.lblAwakenLock.visible=!0,this.awakenMarker.visible=!1;
+ else{
+ const s=t.getSkillBookVO(i.masterSkill);
+ let e=(i.masterSkill>0?SG.getText(`PET_${
+ i.masterSkill}
+ `,(null==s?void 0:s.desc)??`스킬 #${
+ i.masterSkill}
+ `):"").replace(/\\n/g,"\n").replace(/•/g,"+").trim();
+ const n=(e.match(/(^|\n)\+\s/g)??[]).length,h=[],r=[];
+ for(let t=0;
+ t<n;
+ t++)h.push(cD.DEFAULT_COLOR),r.push(cD.DEFAULT_COLOR);
+ const o=IR.getAwakeningBuffSummary(i.kindNum);
+ if(null!=o){
+ const t=SG.getText(o.nameKey,o.nameFallback),s=Number.isInteger(o.total)?String(o.total):o.total.toFixed(1),n=!1===o.isPercent?"":"%";
+ let a=`+ ${
+ t}
+  : ${
+ s}
+ ${
+ n}
+ `;
+ if(null!=o.coupleOwnedValue&&i.couple>0){
+ const t=wx.getInstance().getBookVO(i.couple),s=t?SG.getText(t.getNameKey(),t.name):"";
+ s&&(a+=` ( ${
+ s}
+  : ${
+ o.coupleOwnedValue}
+ ${
+ n}
+  )`)}
+ e+=`${
+ e?"\n":""}
+ ${
+ a}
+ `,h.push(cD.DEFAULT_COLOR),r.push(cD.DEFAULT_COLOR)}
+ if(i.couple>0){
+ const t=wx.getInstance().getBookVO(i.couple),s=t?SG.getText(t.getNameKey(),t.name):"";
+ if(s){
+ const t=SG.getValueReplace("GAME_1186","###",s,`${
+ s}
+ 의 초월 포인트가 50% 증가한다.`),n=wx.getInstance().calcHeroTransPoint(i.couple);
+ e+=`${
+ e?"\n":""}
+ + ${
+ t}
+  ( ${
+ Number.isInteger(n)?String(n):n.toFixed(1)}
+  )`,h.push(6732595),r.push(6732595)}
+ }
+ this.awakenMarker.setItemColors(h,r),this.awakenMarker.text=e,this.awakenMarker.x=this.lblSkill1.x,this.awakenMarker.y=this.lblSkill1.y,this.awakenMarker.visible=!0,this.lblAwakenLock.visible=!1}
+ else this.lblSkillTitle.visible=!0,this.lblSkill1.visible=!0,this.lblSkill2.visible=!0,this.lblSkill3.visible=""!==this.lblSkill3.text,this.lblSkillNote.visible=!0,this.lblAwakenLock.visible=!1,this.awakenMarker.visible=!1;
+ const T=u+this.skillBg.height+20,C=this.btnEvolve.width+this.btnRepresent.width+this.btnRevive.width+20;
+ let I=.5*(this.width-C);
+ this.btnEvolve.x=I,this.btnEvolve.y=T,I+=this.btnEvolve.width+10,this.btnRepresent.x=I,this.btnRepresent.y=T,I+=this.btnRepresent.width+10,this.btnRevive.x=I,this.btnRevive.y=T;
+ const k=0===e?SG.getText("COMMON_223","획 득"):SG.getText("GAME_67","진 화");
+ e>=5?(this.btnEvolve.activated=!1,this.btnEvolve.text="MAX"):n>=zZt[e]?(this.btnEvolve.activated=!0,this.btnEvolve.text=k):(this.btnEvolve.activated=!1,this.btnEvolve.text=k),this.btnRepresent.activated=e>0,this.btnRevive.activated=e>0,this.height=T+this.btnEvolve.height+30}
+ async onEvolve(){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const t=await rD.getInstance().pet.evolve(this.currentKindNum,!0);
+ this.requestPending=!1,!1!==t.success?(ML.setUserInfo(t.body),this.setData(),LZt.getInstance().setData(),KZt.getInstance().setData(),$qt.getInstance().setData()):wG.getInstance().showError(t)}
+ async onSetRepresent(){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const t=await rD.getInstance().pet.setRepresentPet(this.currentKindNum,!0);
+ this.requestPending=!1,!1!==t.success?(ML.setUserInfo(t.body),this.setData(),KZt.getInstance().setData(),$qt.getInstance().setData()):wG.getInstance().showError(t)}
+ onTabSkill(){
+ "skill"!==this.currentTab&&(this.currentTab="skill",this.setData())}
+ onTabAwaken(){
+ "awaken"!==this.currentTab&&(this.currentTab="awaken",this.setData())}
+ async onSetRevive(){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const t=await rD.getInstance().pet.setRevivePet(this.currentKindNum,!0);
+ this.requestPending=!1,!1!==t.success?(ML.setUserInfo(t.body),this.setData(),KZt.getInstance().setData()):wG.getInstance().showError(t)}
+ get className(){
+ return"PetDetailPopup"}
+ }
+ ;
+ Vt(qZt,"PetDetailPopup"),Kt(qZt,"_instance");
+ let YZt=qZt;
+ const XZt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblIntro"),Kt(this,"markerText"),this.lblIntro=new JD("",16767334,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblIntro,this.width-60),this.contentContainer.addChild(this.lblIntro),this.markerText=new AB("@",this.width-80,16,cD.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.markerText),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_569","정령의 고원"),this.lblIntro.text=SG.getText("GAME_727","정령의 고원은 [ 현재 소유한 병사 ] 및 [ 시간의 상점에 있는 병사 ]를 이용해서 스테이지를 하나씩 클리어하며, [ 펫 조각 ]을 획득하는 컨텐츠입니다."),this.lblIntro.x=30,this.lblIntro.y=80;
+ const t=[SG.getText("GAME_728","매일 15개의 입장권이 주어지고, 입장권은 전투에서 이길 경우에만 소진됩니다."),SG.getText("GAME_729","적은 인원으로 클리어할수록 더 많은 별을 획득합니다. 별 3개로 클리어하면, 다음부터는 [ 즉시완료 ]로 전투 없이 보상을 얻을 수 있습니다."),SG.getText("GAME_730","이전 스테이지를 클리어하고 일정 기사단 레벨에 도달해야 다음 스테이지에 도전할 수 있습니다."),SG.getText("GAME_731","병사의 레벨, 강화, 유물 효과, 영웅 고유스킬은 적용되지 않으며, 펫의 정령의 고원 전용 버프만 적용됩니다."),SG.getText("GAME_732","오크는 인간에게, 인간은 엘프에게, 엘프는 언데드에게, 언데드는 오크에게 강합니다. ( 오크 > 인간 > 엘프 > 언데드 > 오크 )"),SG.getText("GAME_733","적 수호병 아이콘에 노란 원이 있으면 물리면역, 파란 원이 있으면 마법면역입니다."),SG.getText("GAME_734","적 수호병 아이콘에 +가 있으면 정예, ++가 있으면 상급정예, +++가 있으면 최정예를 뜻합니다. 정예병사들은 일반병사보다 강력합니다.")];
+ this.markerText.text=t.map(t=>`@ ${
+ t}
+ `).join("\n"),this.markerText.x=30,this.markerText.y=this.lblIntro.y+this.lblIntro.height+22,this.height=this.markerText.y+this.markerText.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(XZt,"SpriteLandGuidePopup"),Kt(XZt,"_instance");
+ let JZt=XZt;
+ const QZt=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblTicket"),Kt(this,"btnFavorite"),Kt(this,"btnPrev"),Kt(this,"btnNext"),Kt(this,"btnGuide",new MB("UI_Ekkorr","UI_Alarm")),Kt(this,"_currentChapter",1),Kt(this,"onChapterChanged",null),Kt(this,"staleFrameCnt",0),this.setTitle(SG.getText("GAME_569","정령의 고원")),this.lblTitle.y-=4,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ JZt.getInstance().showGuide()}
+ ),this.positionGuideButton(),this.lblTicket=new $B("UI_PET_TICKET","15",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_16,"UI_Ekkorr"),this.lblTicket.iconScale=.6,this.lblTicket.x=this.lblTitle.x,this.lblTicket.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblTicket),this.btnFavorite=new ZL(SG.getText("GAME_1187","즐겨찾기")),this.btnFavorite.color=ZL.BROWN,this.btnFavorite.width=135,this.btnFavorite.height=45,this.btnFavorite.x=640-this.btnFavorite.width-6,this.btnFavorite.y=.5*(this.bg.height-this.btnFavorite.height),this.btnFavorite.onClick=this.onFavorite.bind(this),this.addChild(this.btnFavorite);
+ const t=42,i=.5*(this.bg.height-t)+1;
+ this.btnPrev=new MB("UI_Ekkorr","UI_Back"),this.btnPrev.scale.set(t/this.btnPrev.width,t/this.btnPrev.height),this.btnPrev.y=i,this.btnPrev.onClick=this.onPrevChapter.bind(this),this.addChild(this.btnPrev),this.btnNext=new MB("UI_Ekkorr","UI_Back"),this.btnNext.scale.set(-42/this.btnNext.width,t/this.btnNext.height),this.btnNext.y=i,this.btnNext.onClick=this.onNextChapter.bind(this),this.addChild(this.btnNext),this.btnNext.x=this.btnFavorite.x-8,this.btnPrev.x=this.btnNext.x-t-1-t,this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ this.staleFrameCnt=0,this.onFrame(),LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ async onFrame(){
+ var i;
+ if(++this.staleFrameCnt<t.STALE_FRAME_SKIP)return;
+ this.staleFrameCnt=0;
+ const s=gL.getInstance();
+ if(s.isStale()){
+ s.invalidate(),LM.getInstance().remove(this.onFrame,this);
+ const t=await rD.getInstance().spirit.getInfo();
+ if(!t.success)return void wG.getInstance().show(SG.getText("GAME_1248","게임 데이터를 다시 불러옵니다."),()=>{
+ Xt(async()=>{
+ const{
+ PetPopup:t}
+ =await Promise.resolve().then(()=>K1t);
+ return{
+ PetPopup:t}
+ }
+ ,void 0).then(({
+ PetPopup:t}
+ )=>{
+ t.getInstance().hide()}
+ )}
+ );
+ (null==(i=null==t?void 0:t.body)?void 0:i.spirit)&&(s.setData(t.body.spirit),this.updateTicket(),b1t.getInstance().setData()),this.staleFrameCnt=0,LM.getInstance().add(this.onFrame,this)}
+ }
+ get currentChapter(){
+ return this._currentChapter}
+ set currentChapter(t){
+ this._currentChapter=t}
+ updateTicket(){
+ const t=gL.getInstance();
+ this.lblTicket.text=`${
+ t.ticket}
+ `}
+ positionGuideButton(){
+ this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+6,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
+ onPrevChapter(){
+ const t=gL.getInstance().getChapters(),i=t.indexOf(this._currentChapter);
+ i>0&&(this._currentChapter=t[i-1],this.onChapterChanged&&this.onChapterChanged(this._currentChapter))}
+ onNextChapter(){
+ const t=gL.getInstance().getChapters(),i=t.indexOf(this._currentChapter);
+ i<t.length-1&&(this._currentChapter=t[i+1],this.onChapterChanged&&this.onChapterChanged(this._currentChapter))}
+ goChapter(t){
+ const i=gL.getInstance();
+ t<1?t=1:t>i.chapterMax&&(t=i.chapterMax),t!=this._currentChapter&&(this._currentChapter=t,this.onChapterChanged&&this.onChapterChanged(this._currentChapter))}
+ onFavorite(){
+ Xt(async()=>{
+ const{
+ PetPopup:t}
+ =await Promise.resolve().then(()=>K1t);
+ return{
+ PetPopup:t}
+ }
+ ,void 0).then(({
+ PetPopup:t}
+ )=>{
+ t.getInstance().goFavoriteView()}
+ )}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_569","정령의 고원")),this.btnFavorite.text=SG.getText("GAME_1187","즐겨찾기"),this.updateTicket(),this.positionGuideButton()}
+ }
+ ;
+ Vt(QZt,"SpriteLandSubMenu"),Kt(QZt,"instance"),Kt(QZt,"STALE_FRAME_SKIP",30);
+ let ZZt=QZt;
+ const t0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblReward",new $B("UI_GEM_ICON","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"petSprite",new He),Kt(this,"lblPetCount",new JD("",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnConfirm",new kU("","","확인",.8,200,70)),Kt(this,"onConfirmCallback",null),this.lblMessage.align="center",this.lblMessage.y=85,this.lblReward.iconScale=.9,this.petSprite.width=t.PET_SIZE,this.petSprite.height=t.PET_SIZE,this.contentContainer.addChild(this.lblMessage,this.lblReward,this.petSprite,this.lblPetCount,this.btnConfirm),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide()}
+ hide(){
+ if(super.hide(),this.onConfirmCallback){
+ const t=this.onConfirmCallback;
+ this.onConfirmCallback=null,t()}
+ }
+ showVictory(t,i=0,s=null){
+ this.onConfirmCallback=s,this.title=this.buildTitle(t,i),this.lblMessage.text=SG.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.setupReward(t),this.updateLayout(),super.show()}
+ showSweep(t,i=null){
+ this.onConfirmCallback=i,this.title=this.buildTitle(t,3),this.lblMessage.text=SG.getText("COMMON_379","즉시완료"),this.lblMessage.textColor=65280,this.btnConfirm.color=kU.GREEN,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.setupReward(t),this.updateLayout(),super.show()}
+ buildTitle(t,i){
+ const s=(t.kindNum-1)%40+1,e=t.chapter||1,n=`${
+ SG.getText("GAME_569","정령의 고원")}
+  ${
+ e}
+ -${
+ s}
+ `;
+ return i>0?`${
+ n}
+  (★${
+ i}
+ )`:n}
+ setupReward(i){
+ if("PET"===i.rewardType&&i.petKindNum>0){
+ this.petSprite.visible=!0,this.lblReward.visible=!1,this.petSprite.texture=QA.getTexture("UI_PET",`UI_PET${
+ i.petKindNum}
+ `),this.petSprite.width=t.PET_SIZE,this.petSprite.height=t.PET_SIZE;
+ const s=i.reward>0?i.reward:1;
+ this.lblPetCount.text=`x${
+ s}
+ `,this.lblPetCount.textColor=cD.COLOR_DEEP_SKYBLUE,this.lblPetCount.visible=!0}
+ else this.petSprite.visible=!1,this.lblPetCount.visible=!1,this.lblReward.visible=!0,"GEM"===i.rewardType?(this.lblReward.texture=QA.getTexture("UI_Ekkorr","UI_GEM_ICON"),this.lblReward.textColor=cD.COLOR_DEEP_SKYBLUE):(this.lblReward.texture=QA.getTexture("UI_Ekkorr","PVP_COIN_ON"),this.lblReward.textColor=cD.COLOR_PURPLE_PINK),this.lblReward.text=`${
+ i.reward}
+ `}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85;
+ let t=this.lblMessage.y+this.lblMessage.height+20;
+ this.petSprite.visible?(this.petSprite.x=.5*(this.width-this.petSprite.width),this.petSprite.y=t,this.lblPetCount.x=this.petSprite.x+this.petSprite.width-this.lblPetCount.width-4,this.lblPetCount.y=this.petSprite.y+this.petSprite.height-this.lblPetCount.height-2,t=this.petSprite.y+this.petSprite.height+20):this.lblReward.visible&&(this.lblReward.x=.5*(this.width-this.lblReward.width),this.lblReward.y=t,t=this.lblReward.y+this.lblReward.height+20),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+60}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(t0t,"SpiritResultPopup"),Kt(t0t,"_instance"),Kt(t0t,"PET_SIZE",78);
+ let i0t=t0t;
+ const s0t=new Ag({
+ fontFamily:"Arial",fill:16777215,stroke:{
+ color:"#000000",width:4,join:"round"}
+ ,fontSize:24,fontWeight:"bold"}
+ ),e0t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"_lblTimer"),Kt(this,"_bg"),Kt(this,"_showed",!1),Kt(this,"_getRemainingTime",null),Kt(this,"update",Vt(()=>{
+ if(!this._getRemainingTime)return;
+ const t=this._getRemainingTime(),i=Math.floor(t/60),s=t%60;
+ this._lblTimer.text=`${
+ String(i).padStart(2,"0")}
+ :${
+ String(s).padStart(2,"0")}
+ `,this._lblTimer.style.fill=t<=10?16729156:16777215,this._lblTimer.x=(120-this._lblTimer.width)/2}
+ ,"update")),this._bg=new Lf,this._bg.roundRect(0,0,120,34,8).fill({
+ color:0,alpha:.6}
+ ),this.addChild(this._bg),this._lblTimer=new Hg({
+ text:"01:00",style:s0t}
+ ),this._lblTimer.x=(120-this._lblTimer.width)/2,this._lblTimer.y=(34-this._lblTimer.height)/2,this.addChild(this._lblTimer),this.x=260,this.y=8}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ setTimeProvider(t){
+ this._getRemainingTime=t}
+ show(){
+ this._showed||(this._showed=!0,this.visible=!0,this._lblTimer.style.fill=16777215,this._lblTimer.text="01:00",LM.getInstance().add(this.update,this))}
+ hide(){
+ this._showed&&(this._showed=!1,this.visible=!1,LM.getInstance().remove(this.update,this))}
+ freeze(){
+ LM.getInstance().remove(this.update,this)}
+ }
+ ;
+ Vt(e0t,"DungeonTimer"),Kt(e0t,"_instance");
+ let n0t=e0t;
+ const h0t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"vsImage",new He(QA.getTexture("UI_Ekkorr","UI_VS"))),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"allyBtns",[]),Kt(this,"enemyBtns",[]),Kt(this,"battleContainer",new Ge),Kt(this,"btnStart",new ZL("시작")),Kt(this,"lblCapacity",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblEntryText",new JD("",16768358,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"heroList"),Kt(this,"selectedSlot",-1),Kt(this,"teamKindNums",[]),Kt(this,"teamTrans",[]),Kt(this,"heroVOs",[]),Kt(this,"floorVO",null),Kt(this,"enemyOverlays",[]),Kt(this,"maxAllies",12);
+ const t=VA.viewMainY,i=Math.max(VA.safeHeight-t,600);
+ this.bg.height=i,this.y=VA.safeHeight-i,this.lblTitle.text=SG.getText("GAME_80","도전의 탑"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle);
+ const s=this.lblTitle.y+this.lblTitle.height+20;
+ this.battleContainer.y=s,this.addChild(this.battleContainer);
+ for(let o=0;
+ o<12;
+ o++){
+ const t=Math.floor(o/4),i=o%4,s=new Hzt;
+ s.scale=.5,s.x=0+70*(2-t),s.y=48*i,s.showAtkType=!0,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
+ this.vsImage.scale=.6,this.vsImage.x=210,this.vsImage.y=72,this.battleContainer.addChild(this.vsImage);
+ const e=210+this.vsImage.width+15;
+ for(let o=0;
+ o<20;
+ o++){
+ const t=Math.floor(o/4),i=o%4,s=new Hzt;
+ s.scale=.5,s.x=e+70*t,s.y=48*i,s.activated=!1,s.hidePlusIcon(),this.battleContainer.addChild(s),this.enemyBtns.push(s)}
+ for(let o=0;
+ o<20;
+ o++){
+ const t=this.enemyBtns[o],i=new Ge;
+ i.eventMode="none",i.interactiveChildren=!1;
+ const s=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
+ color:0,width:7}
+ }
+ )}
+ );
+ s.anchor.set(0,1),s.x=3,s.y=82,i.addChild(s),i._lblShield=s;
+ const e=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:32,fontWeight:"bold",fill:16746564,stroke:{
+ color:0,width:9}
+ }
+ )}
+ );
+ e.anchor.set(1,0),e.x=102,e.y=-4,i.addChild(e),i._lblLevel=e,t.addChild(i),this.enemyOverlays.push(i)}
+ this.recenterBattleContainer(),this.lblCapacity.y=this.lblTitle.y,this.addChild(this.lblCapacity),this.updateCapacityPosition();
+ const n=s+192+5;
+ this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
+ const h=this.lblEntryText.y+this.lblEntryText.height+7,r=this.bg.height-h-90;
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new d5(Uzt,630,r),this.heroList.x=5,this.heroList.y=h,this.addChild(this.heroList),this.btnStart.color=ZL.RED,this.btnStart.width=200,this.btnStart.height=45,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateCapacityPosition(){
+ this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15}
+ async setData(t){
+ var i;
+ this.floorVO=t;
+ const s=Jjt.getInstance().ticket>0,e=`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ t.floor}
+ F`;
+ this.lblTitle.text=s?e:`${
+ e}
+  (조회 모드)`,this.btnStart.alpha=s?1:.5;
+ const n=this.buildConditionText(t);
+ this.lblEntryText.text=`${
+ SG.getText("COMMON_465","입장조건")}
+  : ${
+ n||SG.getText("COMMON_367","없음")}
+ `,this.maxAllies=Math.max(1,Math.min(12,(null==(i=t.battleVO)?void 0:i.star1)||12));
+ const h=Jjt.getInstance().seasonIndex;
+ let r=await $A.getTowerTeam(h,t.floor);
+ !r&&t.isCleared&&(r=await $A.getTowerTeam(-1,t.floor)),r&&r.kindNums&&12===r.kindNums.length?(this.teamKindNums=[...r.kindNums],this.teamTrans=[...r.trans],this.pruneInvalidTeamEntries(),this.clampTeamToMax()):this.initTeam(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList(),this.btnStart.text=SG.getText("COMMON_378","도전")}
+ buildConditionText(t){
+ const i=t.battleVO;
+ if(!i)return"";
+ const s=[];
+ if(i.gradeMax>0&&s.push(SG.getValueReplace("GAME_552","##",i.gradeMax,`${
+ i.gradeMax}
+ 성 이하`)),"0"!==String(i.tribes)){
+ const t={
+ 1:SG.getText("TRIBE_1","인간"),2:SG.getText("TRIBE_2","엘프"),3:SG.getText("TRIBE_3","언데드"),4:SG.getText("TRIBE_4","오크")}
+ ,e=new Set(String(i.tribes).split("|").map(Number));
+ for(const i of[1,2,3,4])e.has(i)||s.push(SG.getValueReplace("GAME_562","##",t[i],`${
+ t[i]}
+  제외`))}
+ return"Y"===i.femaleExclude&&s.push(SG.getText("GAME_554","여성 영웅 제외")),"Y"===i.maleExclude&&s.push(SG.getText("GAME_555","남성 영웅 제외")),"Y"===i.rangeExclude&&s.push(SG.getText("GAME_556","원거리 영웅 제외")),"Y"===i.meleeExclude&&s.push(SG.getText("GAME_557","근거리 영웅 제외")),"Y"===i.airExclude&&s.push(SG.getText("GAME_558","공중 영웅 제외")),s.join(" / ")}
+ getPlacedCount(){
+ let t=0;
+ for(let i=0;
+ i<12;
+ i++)this.teamKindNums[i]>0&&t++;
+ return t}
+ pruneInvalidTeamEntries(){
+ var t;
+ const i=null==(t=this.floorVO)?void 0:t.battleVO,s=wx.getInstance(),e=i&&"0"!==String(i.tribes)?new Set(String(i.tribes).split("|").map(Number)):null,n=this.calcTotalInventory(),h=new Map;
+ for(let r=0;
+ r<12;
+ r++){
+ const t=this.teamKindNums[r];
+ if(t<=0)continue;
+ const o=s.getBookVO(t);
+ if(!o){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if(i){
+ if(i.gradeMax>0&&o.grade>i.gradeMax){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if(e&&!e.has(o.tribe)){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if("Y"===i.femaleExclude&&o.sex===hx.FEMALE){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if("Y"===i.maleExclude&&o.sex===hx.MALE){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if("Y"===i.rangeExclude&&o.unitType===ix.RANGE){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if("Y"===i.meleeExclude&&o.unitType===ix.MELEE){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if("Y"===i.airExclude&&o.isAir){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ }
+ const a=`${
+ t}
+ _${
+ this.teamTrans[r]}
+ `,c=n.get(a)||0,l=h.get(a)||0;
+ l>=c?(this.teamKindNums[r]=-1,this.teamTrans[r]=0):h.set(a,l+1)}
+ }
+ clampTeamToMax(){
+ let t=0;
+ for(let i=0;
+ i<12;
+ i++)this.teamKindNums[i]>0&&(t++,t>this.maxAllies&&(this.teamKindNums[i]=-1,this.teamTrans[i]=0))}
+ initTeam(){
+ var t;
+ this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0);
+ const i=wx.getInstance().list,s=wx.getInstance(),e=null==(t=this.floorVO)?void 0:t.battleVO,n=e&&"0"!==String(e.tribes)?new Set(String(e.tribes).split("|").map(Number)):null;
+ let h=0;
+ for(let r=0;
+ r<i.length&&h<this.maxAllies;
+ r++){
+ const t=i[r];
+ if(!(t.kindNum>=1e4)){
+ if(e){
+ const i=s.getBookVO(t.kindNum);
+ if(i){
+ if(e.gradeMax>0&&i.grade>e.gradeMax)continue;
+ if(n&&!n.has(i.tribe))continue;
+ if("Y"===e.femaleExclude&&i.sex===hx.FEMALE)continue;
+ if("Y"===e.maleExclude&&i.sex===hx.MALE)continue;
+ if("Y"===e.rangeExclude&&i.unitType===ix.RANGE)continue;
+ if("Y"===e.meleeExclude&&i.unitType===ix.MELEE)continue;
+ if("Y"===e.airExclude&&i.isAir)continue}
+ }
+ this.teamKindNums[h]=t.kindNum,this.teamTrans[h]=t.trans,h++}
+ }
+ }
+ updateAllyButtons(){
+ const t=Math.max(1,ML.maxWave/10),i=this.getPlacedCount(),s=i>=this.maxAllies;
+ this.lblCapacity.text=`${
+ SG.getText("GAME_551","입장가능 영웅")}
+  : ${
+ i}
+  / ${
+ this.maxAllies}
+ `,this.lblCapacity.textColor=s?16729156:16777215,this.updateCapacityPosition();
+ for(let e=0;
+ e<12;
+ e++){
+ const i=this.allyBtns[e],n=bx.getVO();
+ if(this.teamKindNums[e]>0){
+ i.visible=!0,n.kindNum=this.teamKindNums[e],n.trans=this.teamTrans[e],n.level=t,i.setDataWith(e,n),i.hideLevel(),i.hideEnhance();
+ const s=e===this.selectedSlot;
+ i.setAlphaToFrame(s?1:.85),i.selected=s}
+ else if(s)i.visible=!1,i.selected=!1;
+ else{
+ i.visible=!0,n.kindNum=-1,i.setDataWith(e,n),i.hideBackground();
+ const t=e===this.selectedSlot;
+ i.setAlphaToFrame(t?.9:.4),i.selected=!1}
+ }
+ }
+ updateEnemyButtons(){
+ var t;
+ const i=Math.max(1,ML.maxWave/10)+10,s=null==(t=this.floorVO)?void 0:t.battleVO,e=s?Zjt.parseEnemies(s):new Array(20).fill(null),n=(null==s?void 0:s.enemyShields)?String(s.enemyShields).split("|").map(Number):[],h=(null==s?void 0:s.enemyLevels)?String(s.enemyLevels).split("|").map(Number):[];
+ for(let r=0;
+ r<20;
+ r++){
+ const t=this.enemyBtns[r],s=e[r],o=this.enemyOverlays[r],a=null==o?void 0:o._lblShield,c=null==o?void 0:o._lblLevel;
+ if(s){
+ const e=bx.getVO();
+ e.kindNum=s.kindNum,e.trans=s.trans,e.level=i,t.setDataWith(r,e),t.hideLevel(),t.hideEnhance(),t.setAlphaToFrame(1),t.visible=!0;
+ const o=n[r]||0;
+ if(a&&(1===o?(a.text="O",a.style.fill=16776960):2===o?(a.text="O",a.style.fill=4500223):a.text=""),c){
+ const t=h[r]??1;
+ c.text=7===t?"+":14===t?"++":21===t?"+++":""}
+ }
+ else t.visible=!1,a&&(a.text=""),c&&(c.text="")}
+ this.recenterBattleContainer()}
+ recenterBattleContainer(){
+ var t;
+ const i=(null==(t=this.allyBtns[0])?void 0:t.width)??40,s=140+i,e=this.vsImage.x+this.vsImage.width;
+ let n=0;
+ for(let o=0;
+ o<5;
+ o++)for(let t=0;
+ t<4;
+ t++)if(this.enemyBtns[4*o+t].visible){
+ n=o+1;
+ break}
+ let h=0;
+ if(n>0){
+ const t=n-1,s=this.enemyBtns[4*t];
+ h=s.x+(s.width||i)}
+ const r=Math.max(s,e,h);
+ this.battleContainer.x=.5*(this.bg.width-r)}
+ calcTotalInventory(){
+ const t=new Map,i=wx.getInstance().list;
+ for(const e of i){
+ if(e.kindNum>=1e4)continue;
+ const i=`${
+ e.kindNum}
+ _${
+ e.trans}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const s=wx.getInstance().ownedUnitList;
+ for(const e of s)if(!(e.kindNum>=1e4)){
+ if(e.count>0){
+ const i=`${
+ e.kindNum}
+ _0`;
+ t.set(i,(t.get(i)||0)+e.count)}
+ if(e.trans[0]>0){
+ const i=`${
+ e.kindNum}
+ _1`;
+ t.set(i,(t.get(i)||0)+e.trans[0])}
+ if(e.trans[1]>0){
+ const i=`${
+ e.kindNum}
+ _2`;
+ t.set(i,(t.get(i)||0)+e.trans[1])}
+ if(e.trans[2]>0){
+ const i=`${
+ e.kindNum}
+ _3`;
+ t.set(i,(t.get(i)||0)+e.trans[2])}
+ }
+ return t}
+ updateHeroList(){
+ var t;
+ Gzt.removeAll(this.heroVOs);
+ const i=new Map;
+ for(let r=0;
+ r<12;
+ r++){
+ if(this.teamKindNums[r]<=0)continue;
+ const t=`${
+ this.teamKindNums[r]}
+ _${
+ this.teamTrans[r]}
+ `;
+ i.set(t,(i.get(t)||0)+1)}
+ const s=this.calcTotalInventory(),e=wx.getInstance(),n=null==(t=this.floorVO)?void 0:t.battleVO,h=n&&"0"!==String(n.tribes)?new Set(String(n.tribes).split("|").map(Number)):null;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),-1,0,0,0));
+ for(const[r,o]of s){
+ const[t,s]=r.split("_"),a=Number(t),c=e.getBookVO(a);
+ if(n&&c){
+ if(n.gradeMax>0&&c.grade>n.gradeMax)continue;
+ if(h&&!h.has(c.tribe))continue;
+ if("Y"===n.femaleExclude&&c.sex===hx.FEMALE)continue;
+ if("Y"===n.maleExclude&&c.sex===hx.MALE)continue;
+ if("Y"===n.rangeExclude&&c.unitType===ix.RANGE)continue;
+ if("Y"===n.meleeExclude&&c.unitType===ix.MELEE)continue;
+ if("Y"===n.airExclude&&c.isAir)continue}
+ const l=i.get(r)||0;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),a,Number(s),o-l,o))}
+ this.heroVOs.sort((t,i)=>{
+ if(t.kindNum<=0)return-1;
+ if(i.kindNum<=0)return 1;
+ const s=e.getBookVO(t.kindNum),n=e.getBookVO(i.kindNum);
+ if(!s||!n)return 0;
+ const h=1e12*s.grade-1e9*s.evolStage+1e6*t.trans-s.tribe;
+ return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
+ ),this.heroList.dataProvider=QO.chunkArray(this.heroVOs,7)}
+ onClickAllyHero(t){
+ const i=this.teamKindNums[t]<=0,s=this.getPlacedCount()>=this.maxAllies;
+ i&&s||(this.selectedSlot===t?this.selectedSlot=-1:this.selectedSlot=t,this.updateAllyButtons())}
+ onClickHeroFromList(t,i){
+ if(t<=0){
+ if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
+ const t=this.selectedSlot;
+ this.teamKindNums[t]=-1,this.teamTrans[t]=0;
+ let i=-1;
+ for(let s=1;
+ s<=12;
+ s++){
+ const e=(t+s)%12;
+ if(this.teamKindNums[e]>0){
+ i=e;
+ break}
+ }
+ this.selectedSlot=i}
+ }
+ else{
+ const s=`${
+ t}
+ _${
+ i}
+ `;
+ let e=0;
+ for(let n=0;
+ n<12;
+ n++)this.teamKindNums[n]===t&&this.teamTrans[n]===i&&e++;
+ if(e>=(this.calcTotalInventory().get(s)||0))return;
+ if(this.selectedSlot>=0){
+ if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=this.maxAllies)return;
+ this.teamKindNums[this.selectedSlot]=t,this.teamTrans[this.selectedSlot]=i,this.selectedSlot=-1}
+ else{
+ if(this.getPlacedCount()>=this.maxAllies)return;
+ for(let s=0;
+ s<12;
+ s++)if(this.teamKindNums[s]<=0){
+ this.teamKindNums[s]=t,this.teamTrans[s]=i;
+ break}
+ }
+ }
+ this.updateAllyButtons(),this.updateHeroList()}
+ saveTeamToLocal(){
+ if(!this.floorVO)return;
+ const t=Jjt.getInstance().seasonIndex;
+ $A.saveTowerTeam(t,this.floorVO.floor,this.teamKindNums,this.teamTrans)}
+ async onStartBattle(){
+ if(!qG.getInstance().isRunning)return;
+ if(!this.floorVO)return;
+ if(this.getPlacedCount()<=0)return void u2.getInstance().showMessage(SG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다."));
+ if(Jjt.getInstance().ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_275","티켓이 부족합니다."));
+ const t=await rD.getInstance().tower.enter(this.floorVO.floor,!0);
+ if(!1===t.success)return void wG.getInstance().showError(t);
+ ML.setUser(t.body.user),Jjt.getInstance().setData(t.body.tower),this.saveTeamToLocal(),this.hide();
+ const i=v0t.getInstance();
+ i.setTeam([...this.teamKindNums],[...this.teamTrans]),i.startBattle(this.floorVO.floor,this.floorVO.battleVO)}
+ hide(){
+ this.saveTeamToLocal(),super.hide()}
+ show(){
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),Uzt.showAttackType=!0,this.show2()}
+ }
+ ;
+ Vt(h0t,"TowerReadyPopup"),Kt(h0t,"_instance");
+ let r0t=h0t;
+ const o0t=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_80","도전의 탑");
+ const t=[`1. ${
+ SG.getText("GAME_533","도전의 탑은 자신이 보유한 영웅을 이용해서 한층씩 올라가는 컨텐츠 입니다.")}
+ `,`2. ${
+ SG.getText("GAME_534","도전의 탑은 3일 단위로 초기화 되고, 초기화 될때마다 각 층을 수호하는 병사들은 달라집니다.")}
+ `,`3. ${
+ SG.getText("GAME_535","병사의 레벨과 강화는 모두 무시되고, 유물 버프와 종족버프등은 적용되지 않습니다.")}
+ `,`4. ${
+ SG.getText("GAME_536","오크는 인간에게 강하고, 인간은 엘프에게, 엘프는 언데드에게 그리고 언데드는 오크에게 강합니다.")}
+  ( ${
+ SG.getText("GAME_537","오크 > 인간 > 엘프 > 언데드 > 오크")}
+  )`,`5. ${
+ SG.getText("GAME_538","적 수호병 아이콘에 노란 원이 있으면 물리면역, 파란 원이 있으면 마법면역입니다.")}
+ `,`6. ${
+ SG.getText("GAME_539","각 층을 클리어하면 보상을 받습니다.")}
+  ${
+ SG.getText("GAME_540","보상은 각 층마다 오직 한 번만 받습니다.")}
+ `];
+ this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(o0t,"TowerGuidePopup"),Kt(o0t,"_instance");
+ let a0t=o0t;
+ const c0t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblTicket",new JD("티켓 : 5/5",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblTimer",new $B("Icon_Time02","00:00",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"btnGuide",new MB("UI_Ekkorr","UI_Alarm")),Kt(this,"lblSeasonRemaining",new JD("",16768358,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"refreshCooldown",0),this.lblTitle.setStyle(cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.updateTitle(),this.lblTitle.y=5,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ a0t.getInstance().showGuide()}
+ ),this.repositionGuideButton(),this.closeBtn.visible=!0,this.closeBtn.eventMode="static",this.closeBtn.on("pointertap",this.onBack,this),this.addChild(this.closeBtn),this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.text="00:00",this.addChild(this.lblTimer),this.lblTicket.y=5,this.lblTimer.y=this.lblTicket.y+this.lblTicket.height,this.lblSeasonRemaining.x=10,this.lblSeasonRemaining.y=this.lblTitle.y+this.lblTitle.height+2,this.addChild(this.lblSeasonRemaining),this.updateLayout(),this.updateSeasonRemaining()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ updateTitle(){
+ const t=Jjt.getInstance().seasonNumber;
+ t>0?this.setTitle(`${
+ SG.getText("GAME_80","도전의 탑")}
+  ( ${
+ SG.getValueReplace("GAME_561","##",t,t+"회차")}
+  )`):this.setTitle(SG.getText("GAME_80","도전의 탑")),this.repositionGuideButton()}
+ repositionGuideButton(){
+ this.btnGuide&&(this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2)}
+ updateSeasonRemaining(){
+ const t=Jjt.getInstance().seasonEndTime;
+ if(t<=0)return void(this.lblSeasonRemaining.text="");
+ const i=tx.time||Date.now(),s=Math.max(0,t-i),e=Math.floor(s/1e3),n=Math.floor(e/3600),h=Math.floor(e%3600/60);
+ this.lblSeasonRemaining.text=`${
+ SG.getText("COMMON_29","남은시간")}
+  : ${
+ n}
+ H ${
+ wU.digit(h)}
+ M`}
+ updateLayout(){
+ const t=this.closeBtn.x-10;
+ this.lblTicket.x=t-this.lblTicket.width,this.lblTimer.x=t-this.lblTimer.width}
+ onBack(){
+ i3t.getInstance().setData(),e3t.getInstance().currentSubView=i3t.getInstance()}
+ updateTicketInfo(){
+ const t=Jjt.getInstance();
+ this.lblTicket.text=`${
+ SG.getText("GAME_559","티켓")}
+  : ${
+ t.ticket}
+  / ${
+ t.maxTicket}
+ `,this.updateLayout()}
+ updateTimer(){
+ this.updateSeasonRemaining();
+ const t=Jjt.getInstance();
+ if(t.ticket>=t.maxTicket)return this.lblTimer.text="00:00",void this.updateLayout();
+ const i=6e5-(tx.time-t.ticketTime);
+ if(i<=1e3&&tx.time>this.refreshCooldown)return this.refreshCooldown=tx.time+1e4,void this.refreshFromServer();
+ const s=Math.floor(i/1e3),e=Math.floor(s/60),n=s%60;
+ this.lblTimer.text=`${
+ String(e).padStart(2,"0")}
+ :${
+ String(n).padStart(2,"0")}
+ `,this.updateLayout()}
+ async refreshFromServer(){
+ const t=await rD.getInstance().tower.getInfo();
+ !1!==t.success&&(Jjt.getInstance().setData(t.body.tower),this.updateTicketInfo())}
+ updateLanguage(){
+ this.updateTitle()}
+ }
+ ;
+ Vt(c0t,"TowerSubMenu"),Kt(c0t,"instance");
+ let l0t=c0t;
+ const u0t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"vsImage",new He(QA.getTexture("UI_Ekkorr","UI_VS"))),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20)),Kt(this,"allyBtns",[]),Kt(this,"enemyBtns",[]),Kt(this,"battleContainer",new Ge),Kt(this,"btnStart",new ZL("시작")),Kt(this,"btnExportData",new ZL("데이터 복사")),Kt(this,"btnScreenshot",new ZL("스샷")),Kt(this,"heroList"),Kt(this,"lblHeroList",new JD("유닛 카탈로그 (모든 유닛)",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"teamKindNums",[]),Kt(this,"teamTrans",[]),Kt(this,"enemyKindNums",[]),Kt(this,"enemyTrans",[]),Kt(this,"selectedSlot",-1),Kt(this,"heroVOs",[]),Kt(this,"floorVO",null),Kt(this,"filterTribes",new Set),Kt(this,"filterGradeMax",0),Kt(this,"filterFemaleExclude",!1),Kt(this,"filterMaleExclude",!1),Kt(this,"filterAirExclude",!1),Kt(this,"gradeBtns",[]),Kt(this,"tribeBtns",[]),Kt(this,"excludeFemaleBtn"),Kt(this,"excludeMaleBtn"),Kt(this,"excludeAirBtn"),Kt(this,"enemyLevels",[]),Kt(this,"enemyShields",[]),Kt(this,"enemyCustomTrans",[]),Kt(this,"enemyLevelBtns",[]),Kt(this,"enemyShieldBtns",[]),Kt(this,"enemyTransBtns",[]),Kt(this,"allyTransBtns",[]),Kt(this,"enemyBadges",[]),Kt(this,"allyBadges",[]),this.y-=400,this.y<0&&(this.y=0),this.bg.height+=400,this.lblTitle.text="[시뮬]",this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.buildFilterRow1(80,this.lblTitle.y),this.buildEnemySettings(this.bg.width-170,this.lblTitle.y-10);
+ const i=this.lblTitle.y+this.lblTitle.height+60;
+ this.battleContainer.y=i,this.addChild(this.battleContainer);
+ for(let t=0;
+ t<12;
+ t++){
+ const i=Math.floor(t/4),s=t%4,e=new Hzt;
+ e.scale=.5,e.x=0+70*(2-i),e.y=48*s,e.onClick=this.onClickAllySlot.bind(this),this.battleContainer.addChild(e),this.allyBtns.push(e)}
+ for(let t=0;
+ t<12;
+ t++){
+ const i=this.allyBtns[t],s=new Ge;
+ s.eventMode="none",s.interactiveChildren=!1;
+ const e=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:65484,stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ e.anchor.set(0,1),e.x=1,e.y=85,s.addChild(e),s._lblTrans=e,i.addChild(s),this.allyBadges.push(s)}
+ this.vsImage.scale=.6,this.vsImage.x=220,this.vsImage.y=72,this.battleContainer.addChild(this.vsImage);
+ const s=220+this.vsImage.width+30;
+ for(let r=0;
+ r<t.MAX_ENEMIES;
+ r++){
+ const t=Math.floor(r/4),i=r%4,e=new Hzt;
+ e.scale=.5,e.x=s+70*t,e.y=48*i,e.onClick=this.onClickEnemySlot.bind(this),this.battleContainer.addChild(e),this.enemyBtns.push(e)}
+ for(let r=0;
+ r<t.MAX_ENEMIES;
+ r++){
+ const t=this.enemyBtns[r],i=new Ge;
+ i.eventMode="none",i.interactiveChildren=!1;
+ const s=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:24,fontWeight:"bold",fill:16776960,stroke:{
+ color:0,width:4}
+ }
+ )}
+ );
+ s.anchor.set(.5,0),s.x=35,s.y=-2,i.addChild(s),i._lblLv=s;
+ const e=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:65484,stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ e.anchor.set(0,1),e.x=1,e.y=85,i.addChild(e),i._lblTrans=e;
+ const n=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:20,fontWeight:"bold",fill:16777215,stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ n.anchor.set(1,1),n.x=75,n.y=85,i.addChild(n),i._lblShield=n,t.addChild(i),this.enemyBadges.push(i)}
+ this.battleContainer.x=.5*(this.bg.width-this.battleContainer.width);
+ const e=i+192+15;
+ this.lblHeroList.x=15,this.lblHeroList.y=e,this.addChild(this.lblHeroList),this.buildFilterRow2(this.bg.width-198,e-2);
+ const n=e+this.lblHeroList.height+8,h=this.bg.height-n-110;
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new d5(Uzt,630,h),this.heroList.x=5,this.heroList.y=n,this.addChild(this.heroList),this.btnStart.color=ZL.RED,this.btnStart.width=200,this.btnStart.height=45,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-70,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart),this.btnExportData.color=ZL.GREEN,this.btnExportData.width=130,this.btnExportData.height=35,this.btnExportData.x=this.bg.width-this.btnExportData.width-10,this.btnExportData.y=this.btnStart.y+5,this.btnExportData.onClick=this.onExportData.bind(this),this.addChild(this.btnExportData),this.btnScreenshot.color=ZL.GREEN,this.btnScreenshot.width=90,this.btnScreenshot.height=35,this.btnScreenshot.x=10,this.btnScreenshot.y=this.btnStart.y+5,this.btnScreenshot.onClick=this.onScreenshot.bind(this),this.addChild(this.btnScreenshot)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async setData(t){
+ this.floorVO=t,this.lblTitle.text=`[시뮬] ${
+ t.floor}
+ 층`,this.filterTribes.clear(),this.filterGradeMax=0,this.filterFemaleExclude=!1,this.filterMaleExclude=!1,this.filterAirExclude=!1,this.refreshFilterUI();
+ const i=await $A.getTowerSimTeam(t.floor);
+ i&&i.kindNums&&12===i.kindNums.length?(this.teamKindNums=[...i.kindNums],this.teamTrans=[...i.trans]):this.initEmptyTeam();
+ const s=await $A.getTowerSimEnemies(t.floor);
+ s&&Array.isArray(s.kindNums)&&20===s.kindNums.length?(this.enemyKindNums=[...s.kindNums],this.enemyTrans=[...s.trans],this.enemyLevels=s.levels?[...s.levels]:new Array(20).fill(1),this.enemyShields=s.shields?[...s.shields]:new Array(20).fill(0),this.enemyCustomTrans=s.customTrans?[...s.customTrans]:new Array(20).fill(0)):this.initEmptyEnemies(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList()}
+ initEmptyTeam(){
+ this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0)}
+ initEmptyEnemies(){
+ this.enemyKindNums=new Array(20).fill(-1),this.enemyTrans=new Array(20).fill(0),this.enemyLevels=new Array(20).fill(1),this.enemyShields=new Array(20).fill(0),this.enemyCustomTrans=new Array(20).fill(0)}
+ getPlacedEnemyCount(){
+ let t=0;
+ for(let i=0;
+ i<20;
+ i++)this.enemyKindNums[i]>0&&t++;
+ return t}
+ getPlacedAllyCount(){
+ let t=0;
+ for(let i=0;
+ i<12;
+ i++)this.teamKindNums[i]>0&&t++;
+ return t}
+ updateAllyButtons(){
+ const t=Math.max(1,ML.maxWave/10);
+ for(let i=0;
+ i<12;
+ i++){
+ const s=this.allyBtns[i],e=bx.getVO();
+ if(this.teamKindNums[i]>0){
+ e.kindNum=this.teamKindNums[i],e.trans=this.teamTrans[i],e.level=t,s.setDataWith(i,e),s.hideLevel(),s.hideEnhance();
+ const n=i===this.selectedSlot;
+ s.setAlphaToFrame(n?1:.85),s.selected=n,s.visible=!0}
+ else{
+ e.kindNum=-1,s.setDataWith(i,e),s.hideBackground();
+ const t=i===this.selectedSlot;
+ s.setAlphaToFrame(t?.9:.4),s.selected=!1,s.visible=!0}
+ }
+ for(let i=0;
+ i<12;
+ i++){
+ const t=this.allyBadges[i];
+ if(!t)continue;
+ const s=t._lblTrans,e=this.teamTrans[i]||0;
+ s.text=this.teamKindNums[i]>0&&e>0?`T${
+ e}
+ `:""}
+ this.refreshSettingsUI()}
+ onClickAllySlot(t){
+ this.selectedSlot===t?this.selectedSlot=-1:this.selectedSlot=t,this.updateAllyButtons(),this.updateEnemyButtons()}
+ updateEnemyButtons(){
+ const i=Math.max(1,ML.maxWave/10)+10;
+ for(let s=0;
+ s<t.MAX_ENEMIES;
+ s++){
+ const e=this.enemyBtns[s],n=t.ENEMY_SLOT_OFFSET+s,h=this.selectedSlot===n;
+ if(this.enemyKindNums[s]>0){
+ const t=bx.getVO();
+ t.kindNum=this.enemyKindNums[s],t.trans=this.enemyTrans[s],t.level=i,e.setDataWith(s,t),e.hideLevel(),e.hideEnhance(),e.setAlphaToFrame(h?1:.85),e.selected=h,e.visible=!0}
+ else{
+ const t=bx.getVO();
+ t.kindNum=-1,e.setDataWith(s,t),e.hideBackground(),e.setAlphaToFrame(h?.9:.4),e.selected=!1,e.visible=!0}
+ }
+ for(let s=0;
+ s<t.MAX_ENEMIES;
+ s++){
+ const t=this.enemyBadges[s];
+ if(!t)continue;
+ const i=t._lblLv,e=t._lblTrans,n=t._lblShield,h=this.enemyLevels[s]??1;
+ i.text=h>1?`Lv${
+ h}
+ `:"";
+ const r=this.enemyCustomTrans[s]||0;
+ e.text=r>0?`T${
+ r}
+ `:"";
+ const o=this.enemyShields[s]||0;
+ 1===o?(n.text="물리",n.style.fill=16746564):2===o?(n.text="마법",n.style.fill=4500223):n.text=""}
+ this.refreshSettingsUI()}
+ onClickEnemySlot(i){
+ const s=t.ENEMY_SLOT_OFFSET+i;
+ this.selectedSlot===s?this.selectedSlot=-1:this.selectedSlot=s,this.updateAllyButtons(),this.updateEnemyButtons()}
+ updateHeroList(){
+ Gzt.removeAll(this.heroVOs),this.heroVOs.push(Gzt.set(Gzt.getVO(),-1,0,0,0));
+ const t=wx.getInstance();
+ for(const i of t.bookList){
+ if(!i)continue;
+ if(i.kindNum>=1e4)continue;
+ if(!this.passesFilter(i.kindNum))continue;
+ const t=Math.max(0,Math.min(3,i.maxTrans||0));
+ for(let s=0;
+ s<=t;
+ s++)this.heroVOs.push(Gzt.set(Gzt.getVO(),i.kindNum,s,99,99))}
+ this.heroVOs.sort((i,s)=>{
+ if(i.kindNum<=0)return-1;
+ if(s.kindNum<=0)return 1;
+ const e=t.getBookVO(i.kindNum),n=t.getBookVO(s.kindNum);
+ if(!e||!n)return 0;
+ const h=1e6*e.grade-e.tribe,r=1e6*n.grade-n.tribe;
+ return h!==r?r-h:i.kindNum!==s.kindNum?i.kindNum-s.kindNum:(s.trans||0)-(i.trans||0)}
+ ),this.heroList.dataProvider=QO.chunkArray(this.heroVOs,7)}
+ onClickHeroFromList(i,s){
+ if(i<=0){
+ if(this.selectedSlot<0)return;
+ if(this.selectedSlot>=t.ENEMY_SLOT_OFFSET){
+ const i=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
+ this.enemyKindNums[i]>0&&(this.enemyKindNums[i]=-1,this.enemyTrans[i]=0,this.enemyLevels[i]=1,this.enemyShields[i]=0,this.enemyCustomTrans[i]=0);
+ let s=-1;
+ for(let t=1;
+ t<=20;
+ t++){
+ const e=(i+t)%20;
+ if(this.enemyKindNums[e]>0){
+ s=e;
+ break}
+ }
+ this.selectedSlot=s>=0?t.ENEMY_SLOT_OFFSET+s:-1}
+ else{
+ const t=this.selectedSlot;
+ this.teamKindNums[t]>0&&(this.teamKindNums[t]=-1,this.teamTrans[t]=0);
+ let i=-1;
+ for(let s=1;
+ s<=12;
+ s++){
+ const e=(t+s)%12;
+ if(this.teamKindNums[e]>0){
+ i=e;
+ break}
+ }
+ this.selectedSlot=i}
+ }
+ else if(this.selectedSlot<0){
+ if(this.getPlacedAllyCount()<t.MAX_ALLIES){
+ for(let t=0;
+ t<12;
+ t++)if(this.teamKindNums[t]<=0){
+ this.teamKindNums[t]=i,this.teamTrans[t]=s;
+ break}
+ }
+ else for(let t=0;
+ t<20;
+ t++)if(this.enemyKindNums[t]<=0){
+ this.enemyKindNums[t]=i,this.enemyTrans[t]=s,this.enemyLevels[t]=1,this.enemyShields[t]=0,this.enemyCustomTrans[t]=0;
+ break}
+ }
+ else if(this.selectedSlot>=t.ENEMY_SLOT_OFFSET){
+ const e=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
+ this.enemyKindNums[e]=i,this.enemyTrans[e]=s,this.enemyLevels[e]=1,this.enemyShields[e]=0,this.enemyCustomTrans[e]=0;
+ let n=-1;
+ for(let t=1;
+ t<=20;
+ t++){
+ const i=(e+t)%20;
+ if(this.enemyKindNums[i]<=0){
+ n=i;
+ break}
+ }
+ this.selectedSlot=n>=0?t.ENEMY_SLOT_OFFSET+n:-1}
+ else{
+ if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedAllyCount()>=t.MAX_ALLIES)return;
+ const e=this.selectedSlot;
+ this.teamKindNums[e]=i,this.teamTrans[e]=s;
+ let n=-1;
+ for(let t=1;
+ t<=12;
+ t++){
+ const i=(e+t)%12;
+ if(this.teamKindNums[i]<=0){
+ n=i;
+ break}
+ }
+ this.selectedSlot=n}
+ this.updateAllyButtons(),this.updateEnemyButtons()}
+ saveToLocal(){
+ this.floorVO&&($A.saveTowerSimTeam(this.floorVO.floor,this.teamKindNums,this.teamTrans),$A.saveTowerSimEnemies(this.floorVO.floor,this.enemyKindNums,this.enemyTrans,this.enemyLevels,this.enemyShields,this.enemyCustomTrans))}
+ buildEnemiesString(){
+ return Zjt.stringifyEnemies(this.enemyKindNums,this.enemyTrans)}
+ async onStartBattle(){
+ if(!this.floorVO)return;
+ if(0===this.getPlacedAllyCount())return void u2.getInstance().showMessage("아군을 배치해주세요.");
+ if(0===this.getPlacedEnemyCount())return void u2.getInstance().showMessage("적을 배치해주세요.");
+ if(Jjt.getInstance().ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_275","티켓이 부족합니다."));
+ this.saveToLocal();
+ const i=this.floorVO.floor,s=this.floorVO,e=await rD.getInstance().tower.enter(i,!0);
+ if(!1===e.success)return void wG.getInstance().showError(e);
+ ML.setUser(e.body.user),Jjt.getInstance().setData(e.body.tower),this.hide();
+ const n=new Zjt;
+ Object.assign(n,this.floorVO.battleVO),n.enemyKindNums=this.buildEnemiesString(),n.enemyLevels=this.buildLevelsString(),n.enemyShields=this.buildShieldsString(),n.enemyTrans=this.buildCustomTransString(),n.tribes=this.filterTribes.size>0?Array.from(this.filterTribes).join("|"):"0",n.gradeMax=this.filterGradeMax,n.femaleExclude=this.filterFemaleExclude?"Y":"N",n.maleExclude=this.filterMaleExclude?"Y":"N",n.rangeExclude="N",n.meleeExclude="N",n.airExclude=this.filterAirExclude?"Y":"N";
+ const h={
+ ...this.floorVO}
+ ,r=v0t.getInstance();
+ r.setTeam([...this.teamKindNums],[...this.teamTrans]),r.startBattle(h.floor,n),r.setSimulationMode((e,n)=>{
+ const h=Jjt.getInstance().buildFloorVO(i)||s;
+ t.getInstance().setData(h).then(()=>{
+ t.getInstance().show()}
+ )}
+ )}
+ onExportData(){
+ if(0===this.getPlacedEnemyCount())return void u2.getInstance().showMessage("적이 비어있습니다.");
+ const t=this.buildEnemiesString(),i=this.buildCustomTransString(),s=this.buildShieldsString(),e=this.buildLevelsString(),n=this.filterTribes.size>0?Array.from(this.filterTribes).sort().join("|"):"0",h=this.getPlacedAllyCount(),r=h,o=h-1,a=h-2,c=[t,i,s,e,n,String(this.filterGradeMax),this.filterFemaleExclude?"Y":"N",this.filterMaleExclude?"Y":"N","N","N",this.filterAirExclude?"Y":"N",String(r),String(o),String(a)].join("\t");
+ let l=!1;
+ try{
+ navigator.clipboard&&navigator.clipboard.writeText&&(navigator.clipboard.writeText(c),l=!0)}
+ catch{
+ }
+ const u=`${
+ l?"[복사됨]":"[수동복사]"}
+  enemies=${
+ t}
+  | trans=${
+ i}
+  | shields=${
+ s}
+  | lvs=${
+ e}
+  | tribes=${
+ n}
+  | gMax=${
+ this.filterGradeMax}
+  | f=${
+ this.filterFemaleExclude?"Y":"N"}
+  a=${
+ this.filterAirExclude?"Y":"N"}
+  | star=${
+ r}
+ /${
+ o}
+ /${
+ a}
+ `;
+ u2.getInstance().showMessage(u)}
+ buildEnemySettings(t,i){
+ let s=t;
+ const e=new Hg({
+ text:"적Lv",style:new Ag({
+ fontFamily:"Arial",fontSize:13,fill:13421772}
+ )}
+ );
+ e.x=s,e.y=i+4,this.addChild(e),s+=e.width+4;
+ const n=[{
+ label:"0",extra:1}
+ ,{
+ label:"1",extra:7}
+ ,{
+ label:"2",extra:14}
+ ,{
+ label:"3",extra:21}
+ ];
+ for(const d of n){
+ const t=this.createToggleBtn(d.label,28,()=>this.onClickLevelSetting(d.extra));
+ t.x=s,t.y=i,this.addChild(t),this.enemyLevelBtns.push(t),s+=30}
+ s=t;
+ const h=i+25,r=new Hg({
+ text:"보호막",style:new Ag({
+ fontFamily:"Arial",fontSize:13,fill:13421772}
+ )}
+ );
+ r.x=s,r.y=h+4,this.addChild(r),s+=r.width+4;
+ const o=[{
+ id:0,label:"없음",w:36}
+ ,{
+ id:1,label:"물리",w:36}
+ ,{
+ id:2,label:"마법",w:36}
+ ];
+ for(const d of o){
+ const t=this.createToggleBtn(d.label,d.w,()=>this.onClickShieldSetting(d.id));
+ t.x=s,t.y=h,this.addChild(t),this.enemyShieldBtns.push(t),s+=d.w+2}
+ s=t;
+ const a=h+25,c=new Hg({
+ text:"초월",style:new Ag({
+ fontFamily:"Arial",fontSize:13,fill:65484}
+ )}
+ );
+ c.x=s,c.y=a+4,this.addChild(c),s+=c.width+4;
+ for(let d=0;
+ d<=3;
+ d++){
+ const t=this.createToggleBtn(String(d),28,()=>this.onClickTransSetting(d));
+ t.x=s,t.y=a,this.addChild(t),this.enemyTransBtns.push(t),s+=30}
+ s=t;
+ const l=a+25,u=new Hg({
+ text:"아군초",style:new Ag({
+ fontFamily:"Arial",fontSize:13,fill:8965375}
+ )}
+ );
+ u.x=s,u.y=l+4,this.addChild(u),s+=u.width+4;
+ for(let d=0;
+ d<=3;
+ d++){
+ const t=this.createToggleBtn(String(d),28,()=>this.onClickAllyTransSetting(d));
+ t.x=s,t.y=l,this.addChild(t),this.allyTransBtns.push(t),s+=30}
+ }
+ onClickLevelSetting(i){
+ if(this.selectedSlot<t.ENEMY_SLOT_OFFSET)return void u2.getInstance().showMessage("적 슬롯을 선택해주세요.");
+ const s=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
+ this.enemyKindNums[s]<=0?u2.getInstance().showMessage("영웅이 배치된 적 슬롯을 선택해주세요."):(this.enemyLevels[s]=i,this.updateEnemyButtons())}
+ onClickShieldSetting(i){
+ if(this.selectedSlot<t.ENEMY_SLOT_OFFSET)return void u2.getInstance().showMessage("적 슬롯을 선택해주세요.");
+ const s=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
+ this.enemyKindNums[s]<=0?u2.getInstance().showMessage("영웅이 배치된 적 슬롯을 선택해주세요."):(this.enemyShields[s]=i,this.updateEnemyButtons())}
+ onClickTransSetting(i){
+ if(this.selectedSlot<t.ENEMY_SLOT_OFFSET)return void u2.getInstance().showMessage("적 슬롯을 선택해주세요.");
+ const s=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
+ this.enemyKindNums[s]<=0?u2.getInstance().showMessage("영웅이 배치된 적 슬롯을 선택해주세요."):(this.enemyCustomTrans[s]=i,this.updateEnemyButtons())}
+ onClickAllyTransSetting(i){
+ if(this.selectedSlot<0||this.selectedSlot>=t.ENEMY_SLOT_OFFSET)return void u2.getInstance().showMessage("아군 슬롯을 선택해주세요.");
+ const s=this.selectedSlot;
+ this.teamKindNums[s]<=0?u2.getInstance().showMessage("영웅이 배치된 아군 슬롯을 선택해주세요."):(this.teamTrans[s]=i,this.updateAllyButtons())}
+ refreshSettingsUI(){
+ let i=-1,s=-1,e=-1;
+ if(this.selectedSlot>=t.ENEMY_SLOT_OFFSET){
+ const n=this.selectedSlot-t.ENEMY_SLOT_OFFSET;
+ this.enemyKindNums[n]>0&&(i=this.enemyLevels[n]??1,s=this.enemyShields[n]||0,e=this.enemyCustomTrans[n]||0)}
+ const n=[1,7,14,21];
+ for(let t=0;
+ t<this.enemyLevelBtns.length;
+ t++)this.setToggleState(this.enemyLevelBtns[t],i===n[t]);
+ for(let t=0;
+ t<this.enemyShieldBtns.length;
+ t++)this.setToggleState(this.enemyShieldBtns[t],s===t);
+ for(let t=0;
+ t<this.enemyTransBtns.length;
+ t++)this.setToggleState(this.enemyTransBtns[t],e===t);
+ let h=-1;
+ this.selectedSlot>=0&&this.selectedSlot<t.ENEMY_SLOT_OFFSET&&this.teamKindNums[this.selectedSlot]>0&&(h=this.teamTrans[this.selectedSlot]||0);
+ for(let t=0;
+ t<this.allyTransBtns.length;
+ t++)this.setToggleState(this.allyTransBtns[t],h===t)}
+ buildCustomTransString(){
+ let t=-1;
+ for(let s=19;
+ s>=0;
+ s--)if((this.enemyKindNums[s]??-1)>0){
+ t=s;
+ break}
+ if(t<0)return"";
+ const i=[];
+ for(let s=0;
+ s<=t;
+ s++)i.push(String(this.enemyCustomTrans[s]||0));
+ return i.join("|")}
+ buildLevelsString(){
+ let t=-1;
+ for(let s=19;
+ s>=0;
+ s--)if((this.enemyKindNums[s]??-1)>0){
+ t=s;
+ break}
+ if(t<0)return"";
+ const i=[];
+ for(let s=0;
+ s<=t;
+ s++)i.push(String(this.enemyLevels[s]??1));
+ return i.join("|")}
+ buildShieldsString(){
+ let t=-1;
+ for(let s=19;
+ s>=0;
+ s--)if((this.enemyKindNums[s]??-1)>0){
+ t=s;
+ break}
+ if(t<0)return"";
+ const i=[];
+ for(let s=0;
+ s<=t;
+ s++){
+ const t=this.enemyShields[s]||0;
+ i.push(String(t))}
+ return i.join("|")}
+ createToggleBtn(t,i,s){
+ const e=new Ge,n=new Lf;
+ n.roundRect(0,0,i,22,4),n.fill({
+ color:2236962,alpha:.85}
+ ),n.stroke({
+ color:6710886,width:1}
+ ),e.addChild(n);
+ const h=new Hg({
+ text:t,style:new Ag({
+ fontFamily:"Arial",fontSize:12,fontWeight:"bold",fill:11184810}
+ )}
+ );
+ return h.anchor.set(.5),h.x=i/2,h.y=11,e.addChild(h),e._bg=n,e._txt=h,e._width=i,e.eventMode="static",e.cursor="pointer",e.on("pointertap",t=>s()),e}
+ setToggleState(t,i){
+ const s=t._bg,e=t._txt,n=t._width;
+ s.clear(),s.roundRect(0,0,n,22,4),i?(s.fill({
+ color:11167300,alpha:.95}
+ ),s.stroke({
+ color:16764040,width:1.5}
+ ),e.style.fill=16777215):(s.fill({
+ color:2236962,alpha:.85}
+ ),s.stroke({
+ color:6710886,width:1}
+ ),e.style.fill=11184810)}
+ buildFilterRow1(t,i){
+ let s=t;
+ const e=new Hg({
+ text:"등급≤",style:new Ag({
+ fontFamily:"Arial",fontSize:13,fill:13421772}
+ )}
+ );
+ e.x=s,e.y=i+4,this.addChild(e),s+=e.width+4;
+ for(let r=1;
+ r<=6;
+ r++){
+ const t=this.createToggleBtn(`${
+ r}
+ `,24,()=>this.onClickGrade(r));
+ t.x=s,t.y=i,this.addChild(t),this.gradeBtns.push(t),s+=26}
+ s+=24;
+ const n=new Hg({
+ text:"종족",style:new Ag({
+ fontFamily:"Arial",fontSize:13,fill:13421772}
+ )}
+ );
+ n.x=s,n.y=i+4,this.addChild(n),s+=n.width+4;
+ const h=[{
+ id:1,name:"인"}
+ ,{
+ id:2,name:"엘"}
+ ,{
+ id:3,name:"언"}
+ ,{
+ id:4,name:"오"}
+ ];
+ for(const r of h){
+ const t=this.createToggleBtn(r.name,24,()=>this.onClickTribe(r.id));
+ t.x=s,t.y=i,this.addChild(t),this.tribeBtns.push(t),s+=26}
+ }
+ buildFilterRow2(t,i){
+ let s=t;
+ this.excludeFemaleBtn=this.createToggleBtn("여성제외",60,()=>{
+ this.filterFemaleExclude=!this.filterFemaleExclude,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
+ ),this.excludeFemaleBtn.x=s,this.excludeFemaleBtn.y=i,this.addChild(this.excludeFemaleBtn),s+=64,this.excludeMaleBtn=this.createToggleBtn("남성제외",60,()=>{
+ this.filterMaleExclude=!this.filterMaleExclude,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
+ ),this.excludeMaleBtn.x=s,this.excludeMaleBtn.y=i,this.addChild(this.excludeMaleBtn),s+=64,this.excludeAirBtn=this.createToggleBtn("공중제외",60,()=>{
+ this.filterAirExclude=!this.filterAirExclude,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
+ ),this.excludeAirBtn.x=s,this.excludeAirBtn.y=i,this.addChild(this.excludeAirBtn)}
+ onClickGrade(t){
+ this.filterGradeMax===t?this.filterGradeMax=0:this.filterGradeMax=t,this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
+ onClickTribe(t){
+ this.filterTribes.has(t)?this.filterTribes.delete(t):this.filterTribes.add(t),this.refreshFilterUI(),this.applyFilterToTeams(),this.updateHeroList()}
+ refreshFilterUI(){
+ for(let t=0;
+ t<this.gradeBtns.length;
+ t++)this.setToggleState(this.gradeBtns[t],this.filterGradeMax===t+1);
+ for(let t=0;
+ t<this.tribeBtns.length;
+ t++){
+ const i=t+1;
+ this.setToggleState(this.tribeBtns[t],this.filterTribes.has(i))}
+ this.setToggleState(this.excludeFemaleBtn,this.filterFemaleExclude),this.setToggleState(this.excludeMaleBtn,this.filterMaleExclude),this.setToggleState(this.excludeAirBtn,this.filterAirExclude)}
+ passesFilter(t){
+ const i=wx.getInstance().getBookVO(t);
+ return!(i&&(this.filterGradeMax>0&&i.grade>this.filterGradeMax||this.filterTribes.size>0&&!this.filterTribes.has(i.tribe)||this.filterFemaleExclude&&i.sex===hx.FEMALE||this.filterMaleExclude&&i.sex===hx.MALE||this.filterAirExclude&&i.isAir))}
+ applyFilterToTeams(){
+ let t=!1;
+ for(let i=0;
+ i<12;
+ i++)this.teamKindNums[i]>0&&!this.passesFilter(this.teamKindNums[i])&&(this.teamKindNums[i]=-1,this.teamTrans[i]=0,t=!0);
+ t&&this.updateAllyButtons()}
+ async onScreenshot(){
+ var t;
+ try{
+ const i=nS.app.renderer.extract.canvas(nS.app.stage),s=await new Promise(t=>i.toBlob(i=>t(i),"image/png"));
+ if(!s)return void u2.getInstance().showMessage("스샷 생성 실패");
+ const e=`tower_sim_${
+ (null==(t=this.floorVO)?void 0:t.floor)??0}
+ F_${
+ Date.now()}
+ .png`,n=URL.createObjectURL(s),h=document.createElement("a");
+ h.href=n,h.download=e,document.body.appendChild(h),h.click(),document.body.removeChild(h),URL.revokeObjectURL(n),u2.getInstance().showMessage(`스샷 저장: ${
+ e}
+ `)}
+ catch(Xst){
+ u2.getInstance().showMessage("스샷 실패: "+Xst)}
+ }
+ hide(){
+ this.saveToLocal(),super.hide()}
+ show(){
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),Uzt.showAttackType=!0,this.show2()}
+ }
+ ;
+ Vt(u0t,"TowerSimulationPopup"),Kt(u0t,"_instance"),Kt(u0t,"ENEMY_SLOT_OFFSET",100),Kt(u0t,"MAX_ALLIES",12),Kt(u0t,"MAX_ENEMIES",20);
+ let d0t=u0t;
+ const f0t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblFloor",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblCondition",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblGem",new $B("UI_GEM","0",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHonor",new $B("PVP_COIN_ON","0",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnChallenge",new zWt("도전",110)),Kt(this,"btnSimulate",new zWt("시뮬",80)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),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),CL.getInstance().development?this.btnSimulate.visible=!0:this.btnSimulate.visible=!1}
+ setData(t){
+ this.data=t;
+ const i=t;
+ this.lblFloor.text=`${
+ i.floor}
+ F`,this.lblFloor.x=.5*(130-this.lblFloor.width),this.lblFloor.y=.5*(this.bg.height-this.lblFloor.height),this.lblCondition.text=this.buildConditionText(i),this.updateRewardLabels(i);
+ const s=this.lblGem.height+5+this.lblCondition.height,e=.5*(this.bg.height-s),n=e;
+ this.lblCondition.y=e+this.lblGem.height+5,this.updateRewardPositions(n),this.btnChallenge.visible=!0,i.isNext?(this.btnChallenge.text=SG.getText("COMMON_378","도전"),this.setDimmed(!1),this.btnChallenge.alpha=1):i.isCleared?(this.btnChallenge.text=SG.getText("COMMON_377","클리어"),this.setDimmed(!0),this.btnChallenge.alpha=.6):(this.btnChallenge.text=SG.getText("COMMON_378","도전"),this.setDimmed(!0),this.btnChallenge.alpha=1)}
+ updateRewardLabels(t){
+ const i=t.reward;
+ i&&(this.lblGem.text=`${
+ i.gem1}
+ `,this.lblHonor.text=`${
+ i.honor1}
+ `)}
+ updateRewardPositions(t){
+ let i=135;
+ this.lblGem.x=i,this.lblGem.y=t,i+=this.lblGem.width+5,this.lblHonor.x=i,this.lblHonor.y=t+2}
+ buildConditionText(t){
+ const i=[],s=t.battleVO;
+ if(s.gradeMax>0&&i.push(SG.getValueReplace("GAME_552","##",s.gradeMax,`${
+ s.gradeMax}
+ 성 이하`)),"0"!==String(s.tribes)){
+ const t=String(s.tribes).split("|").map(t=>SG.getText(`TRIBE_${
+ t}
+ `,this.getTribeName(Number(t))));
+ i.push(t.join(","))}
+ return"Y"===s.femaleExclude&&i.push(SG.getText("GAME_554","여성 영웅 제외")),"Y"===s.maleExclude&&i.push(SG.getText("GAME_555","남성 영웅 제외")),"Y"===s.rangeExclude&&i.push(SG.getText("GAME_556","원거리 영웅 제외")),"Y"===s.meleeExclude&&i.push(SG.getText("GAME_557","근거리 영웅 제외")),"Y"===s.airExclude&&i.push(SG.getText("GAME_558","공중 영웅 제외")),i.length>0?i.join(" / "):SG.getText("COMMON_463","제한없음")}
+ setDimmed(t){
+ const i=t?8947848:16777215,s=t?6710886:11184810;
+ this.lblFloor.textColor=i,this.lblCondition.textColor=s,this.lblGem.textColor=t?8947848:cD.DEFAULT_COLOR,this.lblHonor.textColor=t?8947848:cD.DEFAULT_COLOR,this.lblGem.iconColor=t?6710886:16777215,this.lblHonor.iconColor=t?6710886:16777215}
+ getTribeName(t){
+ switch(t){
+ case 1:return"인간";
+ case 2:return"엘프";
+ case 3:return"언데드";
+ case 4:return"오크";
+ default:return`종족${
+ t}
+ `}
+ }
+ onSimulate(){
+ const t=this.data;
+ d0t.getInstance().setData(t),d0t.getInstance().show()}
+ async onChallenge(){
+ const t=this.data;
+ t.isCleared||t.isNext?(r0t.getInstance().setData(t),r0t.getInstance().show()):u2.getInstance().showMessage("아직 도전할 수 없는 층입니다.")}
+ get height(){
+ return this.bg.height+3}
+ }
+ ;
+ Vt(f0t,"TowerItemRenderer");
+ let p0t=f0t;
+ const g0t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"count",0),Kt(this,"lastTimerUpdate",0),Kt(this,"initialized",!1),this.list=new d5(p0t,630,VA.listHeight),this.list.x=5,this.list.y=l0t.getInstance().height,this.addChild(this.list),this.addChild(l0t.getInstance()),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ get className(){
+ return"TowerSubView"}
+ onAdded(){
+ LM.getInstance().add(this.onFrame,this),kF.getInstance().setTowerMode(!0),this.initialized&&(this.refreshList(),l0t.getInstance().updateTicketInfo(),l0t.getInstance().updateTitle())}
+ onRemoved(){
+ Tei.getInstance().unregisterListItemsGetter("Tower"),LM.getInstance().remove(this.onFrame,this),kF.getInstance().setTowerMode(!1)}
+ onFrame(){
+ var t,i;
+ if(this.count-- >0)return;
+ if(this.count=30,null==(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent))return void LM.getInstance().remove(this.onFrame,this);
+ const s=Date.now();
+ s-this.lastTimerUpdate>=1e3&&(this.lastTimerUpdate=s,l0t.getInstance().updateTimer())}
+ async setData(){
+ if(this.initialized)return void this.refreshList();
+ const t=Jjt.getInstance();
+ t.bookLoaded||(await Promise.all([MD.getInstance().loadBook(_D.TOWER_BATTLE_POOL),MD.getInstance().loadBook(_D.TOWER_SEASON_SET),MD.getInstance().loadBook(_D.TOWER_REWARD)]),t.setBattlePoolData(MD.getInstance().getBook(_D.TOWER_BATTLE_POOL)),t.setSeasonSetData(MD.getInstance().getBook(_D.TOWER_SEASON_SET)),t.setRewardData(MD.getInstance().getBook(_D.TOWER_REWARD)),t.bookLoaded=!0);
+ const i=await rD.getInstance().tower.getInfo(!0);
+ !1!==i.success?(this.initialized=!0,ML.setUser(i.body.user),t.setData(i.body.tower),t.getFloorList(),l0t.getInstance().updateTicketInfo(),l0t.getInstance().updateTitle(),this.refreshList()):wG.getInstance().showError(i)}
+ refreshList(){
+ Hjt.getInstance().currentMissionId==Hjt.KINDNUM_TOWER&&Tei.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"Tower");
+ const t=Jjt.getInstance().getFloorListReversed();
+ this.list.dataProvider=t}
+ updateLanguage(){
+ this.setData(),l0t.getInstance().updateLanguage()}
+ }
+ ;
+ Vt(g0t,"TowerSubView"),Kt(g0t,"instance");
+ let m0t=g0t;
+ const w0t=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.TOWER),Kt(this,"towerTeamVOs",[]),Kt(this,"towerSlotIndices",[]),Kt(this,"spawnedVOs",[]),Kt(this,"floor",0),Kt(this,"battleVO",null),Kt(this,"wasClearedBefore",!1),Kt(this,"initialEnemyCount",0),Kt(this,"isSimulation",!1),Kt(this,"onSimulationEnd",null),Kt(this,"speedHelper",new sJt("ef2.tower.battleSpeed")),Kt(this,"teamKindNums",[]),Kt(this,"teamTransList",[])}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ setSimulationMode(t){
+ this.isSimulation=!0,this.onSimulationEnd=t}
+ setTeam(t,i){
+ this.teamKindNums=t,this.teamTransList=i}
+ async startBattle(i,s){
+ this.cleanup(),VR.getInstance().setBattleContext(xR.Tower),this.isSimulation=!1,this.onSimulationEnd=null,this.initRandom(t.TEST_SEED),this.enableDeterminismCapture(),HB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.floor=i,this.battleVO=s;
+ const e=Jjt.getInstance().buildFloorVO(i);
+ this.wasClearedBefore=!(!e||!e.isCleared),await QA.generateTexture("Tower","ktx2",!1);
+ const n={
+ name:SG.getText("GAME_80","도전의 탑"),stage:i,reward:0,entryLimit:this.buildConditionText(s)}
+ ,h=c1t.getInstance();
+ h.setController(this),h.setDungeonData(n),this.speedHelper.enter(),this.speedHelper.attachButton(h,h.panelWidth-124,12);
+ for(const t of this.towerTeamVOs)t.remove();
+ this.towerTeamVOs.length=0;
+ for(let t=0;
+ t<12&&!(t>=this.teamKindNums.length);
+ t++){
+ if(this.teamKindNums[t]<=0)continue;
+ const i=bx.getVO();
+ i.id=-1,i.kindNum=this.teamKindNums[t],i.trans=this.teamTransList[t]||0,i.level=1,i.enhance=0,this.towerTeamVOs.push(i),this.towerSlotIndices.push(t)}
+ await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),jni.getInstance().switchToBattle(this),this.updateZIndexSorting(),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),n0t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),qG.getInstance().add(this.execute,this)}
+ async setupAllies(){
+ for(let i=0;
+ i<this.towerTeamVOs.length;
+ i++){
+ const s=this.towerTeamVOs[i],e=this.towerSlotIndices[i],n=await H2.getInstance().getUnit(s.className);
+ n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans),n.numBlock=0,n.baseMaxHp*=3,n.orgMaxHp*=3,n.maxHp*=3,n.health=n.maxHp,n.orgMoveSpd=n.moveSpd=1.3*n.moveSpd,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange,n.attackCoolDown=0,n.skillCallIndex=0,n.attackCallIndex=0,n.attackIndex=0;
+ const h=t.ALLY_FORMATION[e%t.ALLY_FORMATION.length];
+ n.x=h.x,n.y=h.y,n.xDefault=h.x+320,n.yDefault=h.y,n.lookAt(1),n.healthBar.setHealthColor(!0),n.isAir&&n.onFlyEnter(!0),rB.getInstance().addChild(n),this.friendList.push(n)}
+ }
+ async setupEnemies(){
+ if(!this.battleVO)return;
+ const i=Zjt.parseEnemies(this.battleVO),s=this.battleVO.enemyLevels?String(this.battleVO.enemyLevels).split("|").map(Number):[],e=this.battleVO.enemyShields?String(this.battleVO.enemyShields).split("|").map(Number):[];
+ let n=0;
+ for(let h=0;
+ h<20;
+ h++){
+ const r=i[h];
+ if(!r)continue;
+ const o=wx.getInstance().getBookVO(r.kindNum);
+ if(!o)continue;
+ const a=await H2.getInstance().getUnit(o.className);
+ a.battleController=this;
+ const c=s[h]||1,l=bx.getVO();
+ if(l.id=-1,l.kindNum=r.kindNum,l.trans=r.trans,l.level=c,l.enhance=0,this.spawnedVOs.push(l),a.setData(l),this.applyRawBvoStats(a,r.kindNum,r.trans),c>1){
+ const t=1+.05*(c-1);
+ a.baseAtkDmg*=t,a.orgAtkDmg*=t,a.atkDmg*=t,a.baseDef*=t,a.orgDef*=t,a.def*=t,a.baseMaxHp*=t,a.orgMaxHp*=t,a.maxHp*=t}
+ a.numBlock=0,a.baseMaxHp*=3,a.orgMaxHp*=3,a.maxHp*=3,a.health=a.maxHp,a.orgMoveSpd=a.moveSpd=1.3*a.moveSpd,a.detectRange=600,a.detectRange2=a.detectRange*a.detectRange,a.initDelay=0,a.attackCoolDown=0,a.skillCallIndex=0,a.attackCallIndex=0,a.attackIndex=0;
+ const u=t.ENEMY_FORMATION_20[h];
+ a.x=u.x,a.y=u.y,a.xDefault=u.x-320,a.yDefault=u.y,a.lookAt(-1),a.healthBar.setHealthColor(!1),rB.getInstance().addChild(a),this.enemyList.push(a),n++;
+ const d=e[h]||0;
+ 1===d?a.showPhysicalShield(t.TIME_LIMIT_FRAMES):2===d&&a.showMagicShield(t.TIME_LIMIT_FRAMES)}
+ this.initialEnemyCount=n}
+ applyRawBvoStats(t,i,s=0){
+ const e=wx.getInstance().getBookVO(i);
+ if(!e)return;
+ const n=1+.4*Math.max(0,s);
+ t.baseMaxHp=e.hp*n,t.baseAtkDmg=e.atkDmg*n,t.baseDef=e.def*n,t.orgMaxHp=t.maxHp=e.hp*n,t.orgAtkDmg=t.atkDmg=e.atkDmg*n,t.orgDef=t.def=e.def*n,t.phyDef=e.phyDef*n,t.magDef=e.magDef*n,t.hp=t.maxHp}
+ 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}
+ checkVictory(){
+ if(0===this.initialEnemyCount)return!1;
+ for(const t of this.enemyList)if(t.isAlive)return!1;
+ return!0}
+ checkDefeat(){
+ let i=!1;
+ for(const t of this.friendList)if(t.isAlive&&!t.isSummoned){
+ i=!0;
+ break}
+ return!i||this.battleTime>=t.TIME_LIMIT_FRAMES}
+ onVictoryCallback(){
+ this.dumpDeterminismReport(!0),setTimeout(async()=>{
+ qG.getInstance().remove(this.execute,this);
+ const t=this.towerTeamVOs.length,i=await rD.getInstance().tower.end(!0,t);
+ i.success&&i.body&&(i.body.user&&ML.setUser(i.body.user),i.body.tower&&Jjt.getInstance().setData(i.body.tower),kF.getInstance().updateAll()),lVt.getInstance().markDirty();
+ const s=!this.wasClearedBefore,e=s?Jjt.getInstance().getReward(this.floor):void 0,n=e?e.gem1:0,h=e?e.honor1:0,r=s&&(n>0||h>0);
+ if(this.isSimulation){
+ const t=this.onSimulationEnd,i=this.floor;
+ this.isSimulation=!1,this.onSimulationEnd=null;
+ const s=Vt(()=>{
+ jni.getInstance().returnToIdleBattle(),m0t.getInstance().refreshList(),l0t.getInstance().updateTicketInfo(),t&&t(!0,i)}
+ ,"onConfirm2");
+ return void(r?aJt.getInstance().showTowerVictory(s,n,h,`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ i}
+ F`):aJt.getInstance().showVictory(s,0,0,`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ i}
+ F`))}
+ const o=Vt(()=>{
+ jni.getInstance().returnToIdleBattle(),m0t.getInstance().refreshList(),l0t.getInstance().updateTicketInfo()}
+ ,"onConfirm");
+ r?aJt.getInstance().showTowerVictory(o,n,h,`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ this.floor}
+ F`):aJt.getInstance().showVictory(o,0,0,`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ this.floor}
+ F`)}
+ ,1500)}
+ onDefeatCallback(){
+ this.dumpDeterminismReport(!1),setTimeout(async()=>{
+ qG.getInstance().remove(this.execute,this);
+ const t=this.towerTeamVOs.length,i=await rD.getInstance().tower.end(!1,t);
+ if(i.success&&i.body&&(i.body.user&&ML.setUser(i.body.user),i.body.tower&&Jjt.getInstance().setData(i.body.tower),kF.getInstance().updateAll()),lVt.getInstance().markDirty(),this.isSimulation){
+ const t=this.onSimulationEnd,i=this.floor;
+ return this.isSimulation=!1,this.onSimulationEnd=null,void aJt.getInstance().showDefeat(()=>{
+ jni.getInstance().returnToIdleBattle(),m0t.getInstance().refreshList(),l0t.getInstance().updateTicketInfo(),t&&t(!1,i)}
+ ,`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ i}
+ F`)}
+ const s=this.floor;
+ aJt.getInstance().showDefeat(async()=>{
+ jni.getInstance().returnToIdleBattle(),m0t.getInstance().refreshList(),l0t.getInstance().updateTicketInfo();
+ const t=Jjt.getInstance().buildFloorVO(s);
+ if(t){
+ const i=r0t.getInstance();
+ await i.setData(t),i.show()}
+ }
+ ,`${
+ SG.getText("GAME_80","도전의 탑")}
+  - ${
+ s}
+ F`)}
+ ,1500)}
+ dumpDeterminismReport(t){
+ const i=this.getDeterminismReport();
+ this.friendList.filter(t=>t.isAlive).length,this.enemyList.filter(t=>t.isAlive).length,i.frames.length>0&&i.frames[i.frames.length-1].hash.toString(16)}
+ returnToMain(){
+ }
+ scheduleReturnToMain(){
+ }
+ getUsedHeroCount(){
+ return this.towerTeamVOs.length}
+ getRemainingTimeSeconds(){
+ const i=t.TIME_LIMIT_FRAMES-this.battleTime;
+ return Math.max(0,Math.ceil(i/60))}
+ buildConditionText(t){
+ const i=[];
+ return t.gradeMax>0&&i.push(SG.getValueReplace("GAME_552","##",t.gradeMax,`${
+ t.gradeMax}
+ 성 이하`)),"0"!==String(t.tribes)&&i.push(SG.getText("GAME_553","종족 제한")),"Y"===t.femaleExclude&&i.push(SG.getText("GAME_554","여성 영웅 제외")),"Y"===t.maleExclude&&i.push(SG.getText("GAME_555","남성 영웅 제외")),"Y"===t.rangeExclude&&i.push(SG.getText("GAME_556","원거리 영웅 제외")),"Y"===t.meleeExclude&&i.push(SG.getText("GAME_557","근거리 영웅 제외")),"Y"===t.airExclude&&i.push(SG.getText("GAME_558","공중 영웅 제외")),i.length>0?i.join(", "):""}
+ cleanup(){
+ VR.getInstance().setBattleContext(xR.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.initialEnemyCount=0;
+ for(const t of this.towerTeamVOs)t.remove();
+ this.towerTeamVOs.length=0,this.towerSlotIndices.length=0;
+ for(const t of this.spawnedVOs)t.remove();
+ this.spawnedVOs.length=0;
+ for(const t of this.enemyList)t.disablePatrol();
+ for(const t of this.friendList)t.disablePatrol();
+ super.cleanup()}
+ }
+ ;
+ Vt(w0t,"TowerBattleController"),Kt(w0t,"instance"),Kt(w0t,"TEST_DETERMINISM",!0),Kt(w0t,"TEST_SEED",12345),Kt(w0t,"TIME_LIMIT_FRAMES",4800),Kt(w0t,"ALLY_FORMATION",[{
+ x:180,y:370}
+ ,{
+ x:180,y:420}
+ ,{
+ x:180,y:470}
+ ,{
+ x:180,y:520}
+ ,{
+ x:95,y:370}
+ ,{
+ x:95,y:420}
+ ,{
+ x:95,y:470}
+ ,{
+ x:95,y:520}
+ ,{
+ x:10,y:370}
+ ,{
+ x:10,y:420}
+ ,{
+ x:10,y:470}
+ ,{
+ x:10,y:520}
+ ]),Kt(w0t,"ENEMY_FORMATION_20",(()=>{
+ const t=[380,445,510,575,640],i=[370,420,470,520],s=[];
+ for(let e=0;
+ e<5;
+ e++)for(let n=0;
+ n<4;
+ n++)s.push({
+ x:t[e],y:i[n]}
+ );
+ return s}
+ )());
+ let v0t=w0t;
+ const b0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnCancel",new kU("","","아니오",.7,160,70)),Kt(this,"btnConfirm",new kU("","","예",.8,160,70)),this.title="",this.lblMessage.text=SG.getText("GAME_723","전투를 포기하고 나가겠습니까?"),this.lblMessage.align="center",this.contentContainer.addChild(this.lblMessage),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=SG.getText("COMMON_400","아니오"),this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_399","예"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.btnClose.visible=!1,this.outSideClickHide=!1,this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ const t=.5*this.width;
+ this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=90;
+ const i=this.lblMessage.y+this.lblMessage.height+40,s=this.btnCancel.width+16+this.btnConfirm.width;
+ this.btnCancel.x=t-.5*s,this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+60}
+ show(){
+ this.lblMessage.text=SG.getText("GAME_723","전투를 포기하고 나가겠습니까?"),this.btnCancel.text=SG.getText("COMMON_400","아니오"),this.btnConfirm.text=SG.getText("COMMON_399","예"),this.updateLayout(),super.show()}
+ onConfirmClick(){
+ VR.getInstance().setBattleContext(xR.Normal),jni.getInstance().returnToIdleBattle(),V1t.getInstance().show(),b1t.getInstance().setData(),ZZt.getInstance().updateTicket(),this.hide()}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(b0t,"SpriteQuitPopup"),Kt(b0t,"_instance");
+ let _0t=b0t;
+ const y0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnCancel",new kU("","","아니오",.7,160,70)),Kt(this,"btnConfirm",new kU("","","예",.8,160,70)),this.title="";
+ let t=SG.getText("GAME_723","전투를 포기하고 나가겠습니까?");
+ this.lblMessage.text=t,this.lblMessage.align="center",this.contentContainer.addChild(this.lblMessage),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=SG.getText("COMMON_400","아니오"),this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_399","예"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.btnClose.visible=!1,this.outSideClickHide=!1,this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ show(){
+ this.lblMessage.text=SG.getText("GAME_723","전투를 포기하고 나가겠습니까?"),this.btnCancel.text=SG.getText("COMMON_400","아니오"),this.btnConfirm.text=SG.getText("COMMON_399","예"),this.updateLayout(),super.show()}
+ updateLayout(){
+ const t=.5*this.width;
+ this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=90;
+ const i=this.lblMessage.y+this.lblMessage.height+40,s=this.btnCancel.width+16+this.btnConfirm.width;
+ this.btnCancel.x=t-.5*s,this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+60}
+ async onConfirmClick(){
+ const t=v0t.getInstance().getUsedHeroCount(),i=await rD.getInstance().tower.end(!1,t,!0);
+ (null==i?void 0:i.success)&&i.body&&(i.body.user&&ML.setUser(i.body.user),i.body.tower&&Jjt.getInstance().setData(i.body.tower),kF.getInstance().updateAll(),m0t.getInstance().refreshList(),l0t.getInstance().updateTicketInfo()),jni.getInstance().returnToIdleBattle(),this.hide()}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(y0t,"TowerQuitPopup"),Kt(y0t,"_instance");
+ let M0t=y0t;
+ const E0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblTotal",new JD("",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblTreasure",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHero",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblPet",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"heroIconContainer",new Ge),this.contentContainer.addChild(this.lblTotal,this.lblTreasure,this.lblHero,this.heroIconContainer,this.lblPet),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showPopup(){
+ this.title=SG.getText("GAME_356","던전 재료 버프"),this.heroIconContainer.removeChildren();
+ const t=VR.getInstance().treasure.getGameplayBuff(OR.Core),i=kx.getInstance().getTotal(Cx.Core)+IR.getFinnyCoreContribution()+IR.getUnipetCoreContribution(),s=VR.getInstance().pet.getGameplayBuff(OR.Core),e=t+i+s;
+ let n=70;
+ this.lblTotal.text=`${
+ SG.getText("GAME_332","전체 버프")}
+  : +${
+ e}
+ %`,this.lblTotal.x=30,this.lblTotal.y=n,n+=this.lblTotal.height+15,this.lblTreasure.text=`${
+ SG.getText("GAME_4","유물")}
+  : +${
+ t}
+ %`,this.lblTreasure.textColor=t>0?11206570:8947848,this.lblTreasure.x=30,this.lblTreasure.y=n,n+=this.lblTreasure.height+8,this.lblHero.text=`${
+ SG.getText("GAME_3","영웅")}
+  : +${
+ i}
+ %`,this.lblHero.textColor=i>0?11206570:8947848,this.lblHero.x=30,this.lblHero.y=n,n+=this.lblHero.height+8;
+ const h=kx.getInstance(),r=h.getContributors(Cx.Core);
+ if(r.length>0){
+ const t=wx.getInstance(),i=[...r].sort((t,i)=>{
+ var s,e;
+ const n=(null==(s=h.getByKindNum(t))?void 0:s.value)??0;
+ return((null==(e=h.getByKindNum(i))?void 0:e.value)??0)-n}
+ );
+ let s=40;
+ for(const e of i){
+ const i=t.getBookVO(e);
+ if(!i)continue;
+ const n=new He(QA.getTexture("UI_Ekkorr",`Hero${
+ i.base}
+ `));
+ n.scale.set(.5),n.x=s,n.y=0,this.heroIconContainer.addChild(n),s+=n.width+5}
+ this.heroIconContainer.x=0,this.heroIconContainer.y=n,n+=(this.heroIconContainer.height||40)+10}
+ this.lblPet.text=`${
+ SG.getText("GAME_565","펫")}
+  : +${
+ s}
+ %`,this.lblPet.textColor=s>0?11206570:8947848,this.lblPet.x=30,this.lblPet.y=n,n+=this.lblPet.height+8,this.height=n+20,super.show()}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(E0t,"DungeonCoreBuffPopup"),Kt(E0t,"_instance");
+ let A0t=E0t;
+ const S0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblReward",new $B("Core1","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnConfirm",new kU("","","확인",.8,200,70)),this.title=SG.getText("COMMON_379","즉시완료"),this.lblMessage.align="center",this.lblMessage.y=85,this.lblMessage.textColor=65280,this.contentContainer.addChild(this.lblMessage,this.lblReward,this.btnConfirm),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide()}
+ hide(){
+ super.hide()}
+ setData(t,i,s,e){
+ this.title=SG.getText("COMMON_379","즉시완료"),this.lblMessage.text=`${
+ Nx.getMapName(t)}
+  ${
+ i}
+ `,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.lblReward.texture=QA.getTexture("UI_Ekkorr",`Core${
+ t}
+ `),this.lblReward.text=e>0?`${
+ VD.displayLargeNumberAsAlphabet(s)}
+  + ${
+ VD.displayLargeNumberAsAlphabet(e)}
+ `:VD.displayLargeNumberAsAlphabet(s),this.updateLayout()}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85;
+ let t=this.lblMessage.y+this.lblMessage.height+20;
+ this.lblReward.x=.5*(this.width-this.lblReward.width),this.lblReward.y=t,t=this.lblReward.y+this.lblReward.height+20,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+60}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(S0t,"DungeonInstantClearResultPopup"),Kt(S0t,"_instance");
+ let T0t=S0t;
+ const C0t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblCapacity",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblEntryText",new JD("",16768358,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"allyBtns",[]),Kt(this,"battleContainer",new Ge),Kt(this,"btnStart",new ZL("전투")),Kt(this,"heroList"),Kt(this,"selectedSlot",-1),Kt(this,"teamKindNums",[]),Kt(this,"teamTrans",[]),Kt(this,"heroVOs",[]),Kt(this,"dungeonVO",null);
+ const i=VA.viewMainY,s=Math.max(VA.safeHeight-i,600);
+ this.bg.height=s,this.y=VA.safeHeight-s,this.lblTitle.text="던전",this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.lblCapacity.y=this.lblTitle.y,this.addChild(this.lblCapacity);
+ const e=this.lblTitle.y+this.lblTitle.height+20;
+ this.battleContainer.y=e,this.addChild(this.battleContainer);
+ for(let o=0;
+ o<t.MAX_ALLIES;
+ o++){
+ const i=t.SLOT_LAYOUT[o],s=new Hzt;
+ s.scale=.65,s.x=95*(3-i.col),s.y=62*i.row,s.showAtkType=!0,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
+ this.recenterBattleContainer();
+ const n=e+186+20-20;
+ this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
+ const h=this.lblEntryText.y+this.lblEntryText.height+12,r=this.bg.height-h-90;
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new d5(Uzt,630,r),this.heroList.x=5,this.heroList.y=h,this.addChild(this.heroList),this.btnStart.color=ZL.RED,this.btnStart.width=200,this.btnStart.height=45,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ recenterBattleContainer(){
+ var t;
+ const i=285+((null==(t=this.allyBtns[0])?void 0:t.width)??50);
+ this.battleContainer.x=.5*(this.bg.width-i)}
+ updateCapacityPosition(){
+ this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15}
+ async setData(i){
+ this.dungeonVO=i,this.lblTitle.text=`${
+ Nx.getMapName(i.map)}
+  ${
+ i.level}
+ `,this.lblEntryText.text=`${
+ SG.getText("COMMON_465","입장조건")}
+  : ${
+ this.buildConditionText(i)}
+ `;
+ const s=await $A.getDungeonTeam(i.map);
+ s&&s.kindNums&&s.kindNums.length===t.MAX_ALLIES?(this.teamKindNums=[...s.kindNums],this.teamTrans=[...s.trans],this.pruneInvalidTeamEntries()):this.initTeam(),Uzt.showAttackType=!0,this.selectedSlot=-1,this.updateAllyButtons(),this.updateHeroList(),this.btnStart.text=SG.getText("COMMON_378","도전")}
+ buildConditionText(t){
+ if(t.prevent>0){
+ const i=SG.getText(`TRIBE_${
+ t.prevent}
+ `,"");
+ if(i)return SG.getValueReplace("GAME_562","##",i,`${
+ i}
+  제외`)}
+ return SG.getText("COMMON_367","없음")}
+ getPlacedCount(){
+ let i=0;
+ for(let s=0;
+ s<t.MAX_ALLIES;
+ s++)this.teamKindNums[s]>0&&i++;
+ return i}
+ pruneInvalidTeamEntries(){
+ var i;
+ const s=(null==(i=this.dungeonVO)?void 0:i.prevent)??0,e=wx.getInstance(),n=this.calcTotalInventory(),h=new Map;
+ for(let r=0;
+ r<t.MAX_ALLIES;
+ r++){
+ const t=this.teamKindNums[r];
+ if(t<=0)continue;
+ const i=e.getBookVO(t);
+ if(!i){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ if(s>0&&i.tribe===s){
+ this.teamKindNums[r]=-1,this.teamTrans[r]=0;
+ continue}
+ const o=`${
+ t}
+ _${
+ this.teamTrans[r]}
+ `,a=n.get(o)||0,c=h.get(o)||0;
+ c>=a?(this.teamKindNums[r]=-1,this.teamTrans[r]=0):h.set(o,c+1)}
+ }
+ initTeam(){
+ var i;
+ this.teamKindNums=new Array(t.MAX_ALLIES).fill(-1),this.teamTrans=new Array(t.MAX_ALLIES).fill(0);
+ const s=(null==(i=this.dungeonVO)?void 0:i.prevent)??0,e=wx.getInstance().list,n=wx.getInstance();
+ let h=0;
+ for(let r=0;
+ r<e.length&&h<t.MAX_ALLIES;
+ r++){
+ const t=e[r];
+ if(t.kindNum>=1e4)continue;
+ const i=n.getBookVO(t.kindNum);
+ s>0&&i&&i.tribe===s||(this.teamKindNums[h]=t.kindNum,this.teamTrans[h]=t.trans,h++)}
+ }
+ updateAllyButtons(){
+ const i=Math.max(1,ML.maxWave/10),s=this.getPlacedCount(),e=s>=t.MAX_ALLIES;
+ this.lblCapacity.text=`${
+ SG.getText("GAME_551","입장가능 영웅")}
+  : ${
+ s}
+  / ${
+ t.MAX_ALLIES}
+ `,this.lblCapacity.textColor=e?16729156:16777215,this.updateCapacityPosition();
+ for(let n=0;
+ n<t.MAX_ALLIES;
+ n++){
+ const t=this.allyBtns[n],s=bx.getVO();
+ if(this.teamKindNums[n]>0){
+ t.visible=!0,s.kindNum=this.teamKindNums[n],s.trans=this.teamTrans[n],s.level=i,t.setDataWith(n,s),t.hideLevel(),t.hideEnhance();
+ const e=n===this.selectedSlot;
+ t.setAlphaToFrame(e?1:.85),t.selected=e}
+ else if(e)t.visible=!1,t.selected=!1;
+ else{
+ t.visible=!0,s.kindNum=-1,t.setDataWith(n,s),t.hideBackground();
+ const i=n===this.selectedSlot;
+ t.setAlphaToFrame(i?.9:.4),t.selected=!1}
+ }
+ }
+ calcTotalInventory(){
+ const t=new Map,i=wx.getInstance().list;
+ for(const e of i){
+ if(e.kindNum>=1e4)continue;
+ const i=`${
+ e.kindNum}
+ _${
+ e.trans}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const s=wx.getInstance().ownedUnitList;
+ for(const e of s)if(!(e.kindNum>=1e4)){
+ if(e.count>0){
+ const i=`${
+ e.kindNum}
+ _0`;
+ t.set(i,(t.get(i)||0)+e.count)}
+ if(e.trans[0]>0){
+ const i=`${
+ e.kindNum}
+ _1`;
+ t.set(i,(t.get(i)||0)+e.trans[0])}
+ if(e.trans[1]>0){
+ const i=`${
+ e.kindNum}
+ _2`;
+ t.set(i,(t.get(i)||0)+e.trans[1])}
+ if(e.trans[2]>0){
+ const i=`${
+ e.kindNum}
+ _3`;
+ t.set(i,(t.get(i)||0)+e.trans[2])}
+ }
+ return t}
+ updateHeroList(){
+ var i;
+ Gzt.removeAll(this.heroVOs);
+ const s=new Map;
+ for(let r=0;
+ r<t.MAX_ALLIES;
+ r++){
+ if(this.teamKindNums[r]<=0)continue;
+ const t=`${
+ this.teamKindNums[r]}
+ _${
+ this.teamTrans[r]}
+ `;
+ s.set(t,(s.get(t)||0)+1)}
+ const e=this.calcTotalInventory(),n=wx.getInstance(),h=(null==(i=this.dungeonVO)?void 0:i.prevent)??0;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),-1,0,0,0));
+ for(const[t,r]of e){
+ const[i,e]=t.split("_"),o=Number(i),a=n.getBookVO(o);
+ if(h>0&&a&&a.tribe===h)continue;
+ const c=s.get(t)||0;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),o,Number(e),r-c,r))}
+ this.heroVOs.sort((t,i)=>{
+ if(t.kindNum<=0)return-1;
+ if(i.kindNum<=0)return 1;
+ const s=n.getBookVO(t.kindNum),e=n.getBookVO(i.kindNum);
+ if(!s||!e)return 0;
+ const h=1e12*s.grade-1e9*s.evolStage+1e6*t.trans-s.tribe;
+ return 1e12*e.grade-1e9*e.evolStage+1e6*i.trans-e.tribe-h}
+ ),this.heroList.dataProvider=QO.chunkArray(this.heroVOs,7)}
+ onClickAllyHero(i){
+ const s=this.teamKindNums[i]<=0,e=this.getPlacedCount()>=t.MAX_ALLIES;
+ s&&e||(this.selectedSlot===i?this.selectedSlot=-1:this.selectedSlot=i,this.updateAllyButtons())}
+ onClickHeroFromList(i,s){
+ if(i<=0){
+ if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
+ const i=this.selectedSlot;
+ this.teamKindNums[i]=-1,this.teamTrans[i]=0;
+ let s=-1;
+ for(let e=1;
+ e<=t.MAX_ALLIES;
+ e++){
+ const n=(i+e)%t.MAX_ALLIES;
+ if(this.teamKindNums[n]>0){
+ s=n;
+ break}
+ }
+ this.selectedSlot=s}
+ }
+ else{
+ const e=`${
+ i}
+ _${
+ s}
+ `;
+ let n=0;
+ for(let h=0;
+ h<t.MAX_ALLIES;
+ h++)this.teamKindNums[h]===i&&this.teamTrans[h]===s&&n++;
+ if(n>=(this.calcTotalInventory().get(e)||0))return;
+ if(this.selectedSlot>=0){
+ if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=t.MAX_ALLIES)return;
+ this.teamKindNums[this.selectedSlot]=i,this.teamTrans[this.selectedSlot]=s,this.selectedSlot=-1}
+ else{
+ if(this.getPlacedCount()>=t.MAX_ALLIES)return;
+ for(let e=0;
+ e<t.MAX_ALLIES;
+ e++)if(this.teamKindNums[e]<=0){
+ this.teamKindNums[e]=i,this.teamTrans[e]=s;
+ break}
+ }
+ }
+ this.updateAllyButtons(),this.updateHeroList()}
+ saveTeamToLocal(){
+ this.dungeonVO&&$A.saveDungeonTeam(this.dungeonVO.map,this.teamKindNums,this.teamTrans)}
+ async onStartBattle(){
+ if(!qG.getInstance().isRunning)return;
+ if(!this.dungeonVO)return;
+ const t=this.dungeonVO;
+ if(0===this.getPlacedCount())return void u2.getInstance().showMessage(SG.getText("GAME_285","전투에 출전할 병사를 슬롯에 추가해 주세요."));
+ if(Nx.getInstance().ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_93","던전 티켓이 부족합니다."));
+ if(t.maxWave>0&&ML.maxWave<t.maxWave)return void u2.getInstance().showMessage(SG.getValueReplace("GAME_94","##",t.maxWave,`최고 기록이 ${
+ t.maxWave}
+  이상이어야 합니다.`));
+ const i=await rD.getInstance().dungeon.start(t.id,!0);
+ if(!1===i.success)return void wG.getInstance().showError(i);
+ ML.setUser(i.body.user),this.saveTeamToLocal(),this.hide();
+ const s=q0t.getInstance();
+ s.setTeam([...this.teamKindNums],[...this.teamTrans]),s.startBattle(t.map,t.level)}
+ show(){
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.show2()}
+ hide(){
+ this.saveTeamToLocal(),super.hide()}
+ }
+ ;
+ Vt(C0t,"DungeonReadyPopup"),Kt(C0t,"_instance"),Kt(C0t,"MAX_ALLIES",10),Kt(C0t,"SLOT_LAYOUT",[{
+ col:0,row:0}
+ ,{
+ col:0,row:1}
+ ,{
+ col:0,row:2}
+ ,{
+ col:1,row:0}
+ ,{
+ col:1,row:1}
+ ,{
+ col:1,row:2}
+ ,{
+ col:2,row:0}
+ ,{
+ col:2,row:1}
+ ,{
+ col:2,row:2}
+ ,{
+ col:3,row:1}
+ ]);
+ let I0t=C0t;
+ const k0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblDesc"),Kt(this,"btnGem"),Kt(this,"btnAd"),Kt(this,"lblCooldown"),Kt(this,"requesting",!1),Kt(this,"onComplete"),this.lblDesc=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17),this.lblDesc.align="center",cD.setLabelWrapWidth(this.lblDesc,this.width-60),this.btnGem=new VB("UI_GEM",t.GEM_COST.toString()),this.btnGem.lbl.iconScale=.8,this.btnGem.color=VB.GREEN,this.btnGem.width=200,this.btnGem.height=55,this.btnGem.onClick=this.onGemClick.bind(this),this.btnAd=new VB("UI_MOVIE_SMALL",SG.getText("GAME_236","광고")),this.btnAd.lbl.iconScale=.6,this.btnAd.color=VB.BROWN,this.btnAd.width=200,this.btnAd.height=55,this.btnAd.onClick=this.onAdClick.bind(this),this.lblCooldown=new JD("",16737894,cD.DEFAULT_FONT_OPTION_16),this.lblCooldown.align="center",this.contentContainer.addChild(this.lblDesc,this.btnGem,this.btnAd,this.lblCooldown)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showPopup(t){
+ this.onComplete=t,this.title=SG.getText("GAME_357","던전 티켓 구매"),this.lblDesc.text=SG.getText("GAME_355","던전 티켓 3장을 구매하시겠습니까?"),this.updateAdState(),this.updateLayout(),this.outSideClickHide=!0,super.show()}
+ updateAdState(){
+ const i=t.ADS_TYPE,s=eU.getInstance().getDailyRemaining(i),e=eU.getInstance().getCooldownRemaining(i),n=eU.getInstance().isCooldownReady(i);
+ if(this.btnAd.text=`${
+ SG.getText("GAME_236","광고")}
+  (${
+ s}
+ /${
+ t.DAILY_MAX}
+ )`,0===s)this.btnAd.activated=!1,this.lblCooldown.visible=!1;
+ else if(!n&&e>0){
+ const t=Math.ceil(e/1e3),i=Math.floor(t/60),s=t%60;
+ this.lblCooldown.text=`${
+ String(i).padStart(2,"0")}
+ :${
+ String(s).padStart(2,"0")}
+ `,this.lblCooldown.visible=!0,this.btnAd.activated=!1}
+ else this.lblCooldown.visible=!1,this.btnAd.activated=!0}
+ updateLayout(){
+ let t=80;
+ this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.lblDesc.y=t,t+=this.lblDesc.height+30;
+ const i=this.btnGem.width+15+this.btnAd.width,s=.5*(this.width-i);
+ this.btnGem.x=s,this.btnGem.y=t,this.btnAd.x=s+this.btnGem.width+15,this.btnAd.y=t,this.lblCooldown.visible?(this.lblCooldown.x=this.btnAd.x+.5*(this.btnAd.width-this.lblCooldown.width),this.lblCooldown.y=t+this.btnAd.height+5,this.height=this.lblCooldown.y+this.lblCooldown.height+40):this.height=t+this.btnAd.height+40}
+ async onGemClick(){
+ if(this.requesting)return;
+ if(ML.gem<t.GEM_COST)return void wG.getInstance().show(SG.getText("COMMON_352","보석이 부족합니다."));
+ this.requesting=!0;
+ const i=await rD.getInstance().dungeon.buyTicket(!0);
+ this.requesting=!1,!1!==i.success?(i.body.user&&(ML.setUser(i.body.user),kF.getInstance().updateAll()),i.body.dungeon&&(Nx.getInstance().setData(i.body.dungeon),Hx.getInstance().setDungeonCores(i.body.dungeon)),this.hide(),this.onComplete&&this.onComplete()):wG.getInstance().showError(i)}
+ async onAdClick(){
+ try{
+ const t=sjt.getInstance().checkApproved();
+ if(!t.approved)return void wG.getInstance().show(t.errorMessage)}
+ catch{
+ return void wG.getInstance().show(SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 '안전 모드'로 제한됩니다."))}
+ if(this.requesting)return;
+ const i=t.ADS_TYPE;
+ 0!==eU.getInstance().getDailyRemaining(i)?eU.getInstance().isCooldownReady(i)&&(this.requesting=!0,ML.canSkipAds?(CU.trackAd("ad_skip",String(i)),await this.onAdComplete()):(CU.trackAd("ad_try",String(i)),await jL(async()=>{
+ CU.trackAd("ad_success",String(i)),await this.onAdComplete()}
+ ,i,()=>{
+ CU.trackAd("ad_fail",String(i))}
+ )),this.requesting=!1):wG.getInstance().show(SG.getText("GAME_358","오늘 최대 횟수를 초과했습니다."))}
+ async onAdComplete(){
+ const i=t.ADS_TYPE,s=await rD.getInstance().ads.watch(i,!0);
+ !1!==s.success?(lVt.getInstance().markDirty(),s.body.user&&(ML.setUserData(s.body.user),kF.getInstance().updateAll()),s.body.ads&&eU.getInstance().setData(s.body.ads),s.body.dungeon&&(Nx.getInstance().setData(s.body.dungeon),Hx.getInstance().setDungeonCores(s.body.dungeon)),this.hide(),this.onComplete&&this.onComplete()):wG.getInstance().showError(s)}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(k0t,"DungeonTicketPopup"),Kt(k0t,"_instance"),Kt(k0t,"ADS_TYPE",4),Kt(k0t,"GEM_COST",100),Kt(k0t,"DAILY_MAX",5);
+ let O0t=k0t;
+ const x0t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"lblName",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblProgress",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnEnter",new zWt("입장",110)),Kt(this,"core",new He(QA.getTexture("UI_Ekkorr","Core1"))),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Ekkorr","Dungeon1")),this.icon.x=4,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblName.x=130,this.lblName.y=18,this.addChild(this.lblName),this.core.scale.set(.8),this.core.x=130,this.core.y=18,this.addChild(this.core),this.lblProgress.x=this.lblName.x,this.lblProgress.y=this.lblName.y+this.lblName.height+5,this.addChild(this.lblProgress),this.btnEnter.width=110,this.btnEnter.height=60,this.btnEnter.x=this.bg.width-this.btnEnter.width-10,this.btnEnter.y=.5*(this.bg.height-this.btnEnter.height),this.addChild(this.btnEnter),this.btnEnter.on("pointertap",this.onEnter,this)}
+ setData(t){
+ this.data=t;
+ const i=t,s=i.icon;
+ this.icon.texture=QA.getTexture("UI_Ekkorr",s),this.lblName.text=SG.getText(i.getNameKey(),i.name);
+ const e=Nx.getInstance().getByMap(i.main)[0];
+ if(e.prevent>0){
+ const t=SG.getText("TRIBE_"+e.prevent,"종족");
+ this.lblProgress.text=SG.getText("GAME_307","##종족 입장제한").replace("##",t),this.lblProgress.visible=!0}
+ else this.lblProgress.visible=!1;
+ this.core.texture=QA.getTexture("UI_Ekkorr","Core"+i.main),this.core.x=this.lblName.x+this.lblName.width+5,this.core.y=.5*(this.lblName.height-this.core.height)+this.lblName.y,this.btnEnter.text=SG.getText("COMMON_376","입장")}
+ onEnter(){
+ const t=this.data;
+ K0t.getInstance().setData(t.main),e3t.getInstance().currentSubView=K0t.getInstance()}
+ get height(){
+ return this.bg.height+3}
+ }
+ ;
+ Vt(x0t,"DungeonMainItemRenderer");
+ let R0t=x0t;
+ const N0t=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_363","던전 안내");
+ const t=[`1. ${
+ SG.getText("GAME_364","던전에서 [던전재료]를 획득할 수 있습니다.")}
+ `,`2. ${
+ SG.getText("GAME_365"," 던전 티켓은 이길 경우에만 소모됩니다.")}
+ `,`3. ${
+ SG.getText("GAME_366","던전 전투에서 아군 영웅의 레벨은 기사단 레벨이 됩니다.")}
+ `,`4. ${
+ SG.getText("GAME_367","던전 재료는 유물을 구입하거나, 업그레이드하는데 사용됩니다.")}
+ `,`5. ${
+ SG.getText("GAME_368","각 던전마다 종족 제한이 있습니다.")}
+ `,`6. ${
+ SG.getText("GAME_369","파란 보호막은 마법에 면역이고, 노란 보호막은 물리에 면역입니다.")}
+ `];
+ this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(N0t,"DungeonGuidePopup"),Kt(N0t,"_instance");
+ let P0t=N0t;
+ const D0t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"btnGuide"),Kt(this,"lblTicket",new $B("DungeonTick","5",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblTimer",new $B("Icon_Time02","00:00",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"btnBuyTicket",new VB("DungeonTick","")),Kt(this,"onBuyComplete"),Kt(this,"refreshCooldown",0),Kt(this,"requestPending2",!1),this.closeBtn.visible=!0,this.closeBtn.interactive=!0,this.closeBtn.on("pointertap",this.onBack,this),this.updateLanguage(),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ P0t.getInstance().showGuide()}
+ ),this.btnBuyTicket.color=VB.BROWN,this.btnBuyTicket.lbl.iconScale=.4,this.btnBuyTicket.width=120,this.btnBuyTicket.height=50,this.btnBuyTicket.x=this.closeBtn.x-this.btnBuyTicket.width-5,this.btnBuyTicket.y=.5*(this.bg.height-this.btnBuyTicket.height),this.addChild(this.btnBuyTicket),this.btnBuyTicket.on("pointertap",this.onBuyTicket,this),this.lblTicket.iconScale=.4,this.lblTicket.text="0/0",this.lblTicket.y=this.btnBuyTicket.y,this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.text="00:00",this.lblTimer.y=this.lblTicket.y+this.lblTicket.height,this.addChild(this.lblTimer),this.updateLayout()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-5,this.lblTimer.x=this.btnBuyTicket.x-this.lblTimer.width-5}
+ onBack(){
+ kF.getInstance().setMode(CF.NORMAL),i3t.getInstance().setData(),e3t.getInstance().currentSubView=i3t.getInstance()}
+ onBuyTicket(){
+ O0t.getInstance().showPopup(()=>{
+ this.updateTicketInfo(),this.onBuyComplete&&this.onBuyComplete()}
+ )}
+ setData(){
+ this.updateLanguage(),this.updateTicketInfo(),this.updateTimer(),this.updateLayout()}
+ updateTicketInfo(){
+ const t=Nx.getInstance();
+ this.lblTicket.text=`${
+ t.ticket}
+  / ${
+ t.maxTicket}
+ `,this.updateLayout()}
+ updateTimer(){
+ const t=Nx.getInstance();
+ if(t.ticket>=t.maxTicket)return void(this.lblTimer.text="00:00");
+ const i=6e5-(tx.time-t.ticketTime);
+ if(i<=1e3&&tx.time>this.refreshCooldown)return this.refreshCooldown=tx.time+1e4,void this.refreshFromServer();
+ const s=Math.floor(i/1e3),e=Math.floor(s/60),n=s%60;
+ this.lblTimer.text=`${
+ String(e).padStart(2,"0")}
+ :${
+ String(n).padStart(2,"0")}
+ `}
+ async refreshFromServer(){
+ if(1==this.requestPending2)return;
+ this.setRequestPending2(!0);
+ const t=await rD.getInstance().dungeon.getInfo();
+ !1!==t.success?(Nx.getInstance().setData(t.body.dungeon),Hx.getInstance().setDungeonCores(t.body.dungeon),this.updateTicketInfo(),kF.getInstance().updateCores(),this.setRequestPending2(!1)):this.setRequestPending2(!1)}
+ setRequestPending2(t){
+ this.requestPending2=t}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_74","던전")),this.btnBuyTicket.text=SG.getText("COMMON_7","구매")}
+ }
+ ;
+ Vt(D0t,"DungeonSubMenu"),Kt(D0t,"instance");
+ let L0t=D0t;
+ const G0t=class{
+ constructor(t,i,s,e){
+ Kt(this,"main",1),Kt(this,"name",""),Kt(this,"nameOrig",""),Kt(this,"icon",""),Kt(this,"cleared",0),this.main=t,this.name=i,this.nameOrig=i,this.icon=s,this.cleared=e}
+ getNameKey(){
+ return`DUNGEON_MAIN_${
+ this.main}
+ `}
+ }
+ ;
+ Vt(G0t,"DungeonMainVO");
+ let B0t=G0t;
+ const U0t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"voList",[]),Kt(this,"lastTimerUpdate",0),Kt(this,"count",0),Kt(this,"initialized",!1),this.list=new KO(R0t,630,VA.listHeight),this.list.x=5,this.list.y=L0t.getInstance().height,this.addChild(this.list),this.addChild(L0t.getInstance()),this.voList.push(new B0t(1,"킹슬라임","Dungeon1",0)),this.voList.push(new B0t(2,"오크플라워","Dungeon2",0)),this.voList.push(new B0t(3,"혼토드","Dungeon3",0)),this.voList.push(new B0t(4,"다크허밋","Dungeon4",0)),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ get className(){
+ return"DungeonSubView"}
+ onAdded(){
+ LM.getInstance().add(this.onFrame,this),kF.getInstance().setMode(CF.DUNGEON),kF.getInstance().updateCores()}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ onFrame(){
+ var t;
+ this.count-- >0||(this.count=30,null!=(null==(t=this.parent)?void 0:t.parent)?tx.time-this.lastTimerUpdate>=1e3&&(this.lastTimerUpdate=tx.time,L0t.getInstance().updateTimer()):LM.getInstance().remove(this.onFrame,this))}
+ async setData(){
+ if(L0t.getInstance().setData(),this.initialized)return void this.refreshList();
+ const t=await rD.getInstance().dungeon.getInfo(!0);
+ !1!==t.success?(this.initialized=!0,ML.setUser(t.body.user),Nx.getInstance().setData(t.body.dungeon),Hx.getInstance().setDungeonCores(t.body.dungeon),kF.getInstance().updateCores(),this.refreshList()):wG.getInstance().showError(t)}
+ refreshList(){
+ Hjt.getInstance().currentMissionId==Hjt.KINDNUM_DUNGEON&&Tei.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"Dungeon");
+ for(let t=0;
+ t<4;
+ t++)this.voList[t].cleared=Nx.getInstance().cleared[t];
+ this.list.dataProvider=this.voList}
+ updateLanguage(){
+ let t;
+ const i=this.voList.length;
+ for(let s=0;
+ s<i;
+ ++s)t=this.voList[s],t.name=SG.getText(t.getNameKey(),t.nameOrig);
+ this.setData(),L0t.getInstance().updateLanguage()}
+ }
+ ;
+ Vt(U0t,"DungeonSubView"),Kt(U0t,"instance");
+ let F0t=U0t;
+ const H0t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblTicket",new $B("DungeonTick","5",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblTimer",new $B("Icon_Time02","00:00",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"btnBuyTicket",new VB("DungeonTick","")),Kt(this,"onBuyComplete"),Kt(this,"refreshCooldown",0),Kt(this,"requestPending2",!1),this.lblTicket.iconScale=.4,this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.text="00:00",this.lblTimer.x=this.lblTicket.x+80,this.lblTimer.y=this.lblTicket.y,this.addChild(this.lblTimer),this.closeBtn.visible=!0,this.addChild(this.closeBtn),this.btnBuyTicket.color=VB.BROWN,this.btnBuyTicket.lbl.iconScale=.4,this.btnBuyTicket.width=120,this.btnBuyTicket.height=50,this.btnBuyTicket.x=this.closeBtn.x-this.btnBuyTicket.width-5,this.btnBuyTicket.y=.5*(this.bg.height-this.btnBuyTicket.height),this.addChild(this.btnBuyTicket),this.lblTicket.text="5/5",this.lblTicket.y=this.btnBuyTicket.y,this.lblTimer.y=this.lblTicket.y+this.lblTicket.height,this.closeBtn.eventMode="static",this.btnBuyTicket.on("pointertap",this.onBuyTicket,this),this.closeBtn.on("pointertap",this.onBack,this),this.updateLayout()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ updateLayout(){
+ this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-5,this.lblTimer.x=this.btnBuyTicket.x-this.lblTimer.width-5}
+ onBack(){
+ F0t.getInstance().setData(),e3t.getInstance().currentSubView=F0t.getInstance()}
+ updateTicketInfo(){
+ const t=Nx.getInstance();
+ this.lblTicket.text=`${
+ t.ticket}
+  / ${
+ t.maxTicket}
+ `,this.updateAdButton(),this.updateLayout()}
+ updateAdButton(){
+ this.btnBuyTicket.text=SG.getText("COMMON_7","구매")}
+ updateTimer(){
+ const t=Nx.getInstance();
+ if(t.ticket>=t.maxTicket)return void(this.lblTimer.text="00:00");
+ const i=6e5-(tx.time-t.ticketTime);
+ if(i<=1e3&&tx.time>this.refreshCooldown)return this.refreshCooldown=tx.time+1e4,void this.refreshFromServer();
+ const s=Math.floor(i/1e3),e=Math.floor(s/60),n=s%60;
+ this.lblTimer.text=`${
+ String(e).padStart(2,"0")}
+ :${
+ String(n).padStart(2,"0")}
+ `,this.updateLayout()}
+ async refreshFromServer(){
+ if(1==this.requestPending2)return;
+ this.setRequestPending2(!0);
+ const t=await rD.getInstance().dungeon.getInfo();
+ !1!==t.success?(Nx.getInstance().setData(t.body.dungeon),Hx.getInstance().setDungeonCores(t.body.dungeon),this.updateTicketInfo(),kF.getInstance().updateCores(),this.setRequestPending2(!1)):this.setRequestPending2(!1)}
+ onBuyTicket(){
+ O0t.getInstance().showPopup(()=>{
+ this.updateTicketInfo(),this.onBuyComplete&&this.onBuyComplete()}
+ )}
+ setRequestPending2(t){
+ this.requestPending2=t}
+ updateLanguage(){
+ }
+ }
+ ;
+ Vt(H0t,"DungeonDetailSubMenu"),Kt(H0t,"instance"),Kt(H0t,"DUNGEON_ADS_TYPE",4),Kt(H0t,"DUNGEON_ADS_DAILY_MAX",5);
+ let W0t=H0t;
+ const $0t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblReward",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"btnChallenge",new zWt("도전",110)),Kt(this,"btnInstantClear",new zWt("즉시완료",110)),Kt(this,"lblDungeonMaterial",new $B("Core1","0",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"requestPending2",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Ekkorr","Dungeon1")),this.icon.scale=1,this.icon.x=4,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblName.x=130,this.lblName.y=15,this.addChild(this.lblName),this.lblDungeonMaterial.x=130,this.lblDungeonMaterial.y=this.lblName.y+this.lblName.height+7,this.addChild(this.lblDungeonMaterial);
+ const t=.5*(this.bg.height-62);
+ this.btnChallenge.height=62,this.btnChallenge.y=t,this.addChild(this.btnChallenge),this.btnInstantClear.height=62,this.btnInstantClear.y=t,this.addChild(this.btnInstantClear),this.btnChallenge.on("pointertap",this.onChallenge,this),this.btnInstantClear.on("pointertap",this.onInstantClear,this)}
+ onClick(t,i){
+ t<this.btnInstantClear.x-40&&A0t.getInstance().showPopup()}
+ setData(t){
+ this.data=t;
+ const i=t,s=Nx.getInstance().getClearedLevel(i.map)>=i.level;
+ this.lblName.text=`${
+ Nx.getMapName(i.map)}
+  ${
+ i.level}
+   (Lv ${
+ (i.unitLevel/10).toFixed(1)}
+ )`,this.icon.texture=QA.getTexture("UI_Ekkorr",`Dungeon${
+ i.map}
+ `),this.lblDungeonMaterial.texture=QA.getTexture("UI_Ekkorr",`Core${
+ i.map}
+ `);
+ const e=i.cores[i.map-1],n=this.getBonusCore(e);
+ this.lblDungeonMaterial.text=n>0?`${
+ VD.displayLargeNumberAsAlphabet(e)}
+  + ${
+ VD.displayLargeNumberAsAlphabet(n)}
+ `:VD.displayLargeNumberAsAlphabet(e),this.btnChallenge.visible=!0,this.btnInstantClear.visible=s,this.btnChallenge.text=SG.getText("COMMON_378","도전"),this.btnInstantClear.text=SG.getText("COMMON_379","즉시완료"),this.btnChallenge.x=this.bg.width-this.btnChallenge.width-10,this.btnInstantClear.x=this.btnChallenge.x-this.btnInstantClear.width-5}
+ getBonusCore(t){
+ const i=VR.getInstance().getGameplayMultiplier(OR.Core);
+ return Math.floor(t*i)-t}
+ async onChallenge(){
+ if(!qG.getInstance().isRunning)return;
+ const t=this.data;
+ if(Nx.getInstance().ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_93","던전 티켓이 부족합니다."));
+ if(t.maxWave>0&&ML.maxWave<t.maxWave)return void u2.getInstance().showMessage(SG.getValueReplace("GAME_94","##",t.maxWave,`최고 기록이 ${
+ t.maxWave}
+  이상이어야 합니다.`));
+ const i=I0t.getInstance();
+ await i.setData(t),i.show()}
+ async onInstantClear(){
+ if(!qG.getInstance().isRunning)return;
+ if(Nx.getInstance().ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_93","던전 티켓이 부족합니다."));
+ if(1==this.requestPending2)return;
+ this.setRequestPending2(!0);
+ const t=this.data,i=await rD.getInstance().dungeon.instantClear(t.id,!0);
+ if(!1===i.success)return this.setRequestPending2(!1),void wG.getInstance().showError(i);
+ ML.setUser(i.body.user),Nx.getInstance().setData(i.body.dungeon),Hx.getInstance().setDungeonCores(i.body.dungeon),K0t.getInstance().refreshList(),W0t.getInstance().updateTicketInfo(),kF.getInstance().updateCores(),lVt.getInstance().markDirty(),this.setRequestPending2(!1);
+ const s=t.cores[t.map-1],e=this.getBonusCore(s);
+ T0t.getInstance().setData(t.map,t.level,s,e),T0t.getInstance().show()}
+ setRequestPending2(t){
+ this.requestPending2=t}
+ get height(){
+ return this.bg.height+3}
+ }
+ ;
+ Vt($0t,"DungeonItemRenderer");
+ let j0t=$0t;
+ const V0t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"selectedMap",0),Kt(this,"lastTimerUpdate",0),Kt(this,"count",0),this.list=new KO(j0t,630,VA.listHeight),this.list.x=5,this.list.y=W0t.getInstance().height,this.addChild(this.list),this.addChild(W0t.getInstance()),W0t.getInstance().onBuyComplete=()=>{
+ this.refreshList()}
+ ,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(){
+ LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ onFrame(){
+ var t,i;
+ this.count-- >0||(this.count=30,null!=(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent)?tx.time-this.lastTimerUpdate>=1e3&&(this.lastTimerUpdate=tx.time,W0t.getInstance().updateTimer()):LM.getInstance().remove(this.onFrame,this))}
+ setData(t){
+ Hjt.getInstance().currentMissionId==Hjt.KINDNUM_DUNGEON&&1===t&&Tei.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"DungeonDetail"),this.selectedMap=t,this.lastTimerUpdate=0;
+ const i=Nx.getMapName(t);
+ W0t.getInstance().setTitle(i),W0t.getInstance().updateTicketInfo(),W0t.getInstance().updateTimer(),this.refreshList()}
+ refreshList(){
+ const t=Nx.getInstance(),i=t.getByMap(this.selectedMap),s=t.getClearedLevel(this.selectedMap),e=[];
+ for(const n of i){
+ const t=s>=n.level,i=n.level<=1||s>=n.level-1;
+ if(!t&&!i)break;
+ e.push(n)}
+ e.reverse(),this.list.dataProvider=e}
+ onDungeonStart(t){
+ }
+ get className(){
+ return"DungeonDetailSubView"}
+ updateLanguage(){
+ this.refreshList();
+ const t=Nx.getMapName(this.selectedMap);
+ W0t.getInstance().setTitle(t)}
+ }
+ ;
+ Vt(V0t,"DungeonDetailSubView"),Kt(V0t,"instance");
+ let K0t=V0t;
+ const z0t=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.DUNGEON),Kt(this,"speedHelper",new sJt("ef2.dungeon.battleSpeed")),Kt(this,"spawnVo",bx.getVO()),Kt(this,"dungeonTeamVOs",[]),Kt(this,"presetTeamKindNums",null),Kt(this,"presetTeamTrans",null),Kt(this,"ENEMY_CENTER_X",460),Kt(this,"ENEMY_CENTER_Y",200),Kt(this,"HERO_CENTER_X",100),Kt(this,"HERO_CENTER_Y",540),Kt(this,"dungeonId",0),Kt(this,"dungeonLevel",1),Kt(this,"enemyCastle",null),Kt(this,"initialEnemyCount",0),Kt(this,"defeatGraceStartFrame",-1),Kt(this,"enemyKindNums",[]),Kt(this,"enemyCount",8),Kt(this,"enemyUnitLevel",1),Kt(this,"bossShield",0),Kt(this,"mobShield",0),Kt(this,"dungonBossVO",bx.getVO())}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ setTeam(t,i){
+ this.presetTeamKindNums=[...t],this.presetTeamTrans=[...i]}
+ async startBattle(t,i){
+ this.cleanup(),HB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.defeatGraceStartFrame=-1,this.dungeonId=t,this.dungeonLevel=i;
+ const s=Nx.getInstance().getVOByMapLevel(t,i),e={
+ name:SG.getValue(`DUNGEON_MAIN_${
+ t}
+ `),stage:i,reward:0,entryLimit:""}
+ ;
+ s&&(e.reward=null==s?void 0:s.cores[s.map-1],s.prevent>0&&(e.entryLimit=SG.getText(`TRIBE_${
+ s.prevent}
+ `,"")));
+ const n=o1t.getInstance();
+ n.setDungeonData(e),this.speedHelper.enter(),this.speedHelper.attachButton(n,n.panelWidth-124,12),this.enemyKindNums=s?String(s.kindNums).split("|").map(t=>parseInt(t)).filter(t=>!isNaN(t)):[],this.enemyCount=s&&parseInt(String(s.numUnits))||8,this.enemyUnitLevel=(null==s?void 0:s.unitLevel)??1,this.bossShield=(null==s?void 0:s.bossShield)??0,this.mobShield=(null==s?void 0:s.mobShield)??0;
+ const h=(null==s?void 0:s.boss)??-1;
+ h>0&&(this.dungonBossVO.id=0,this.dungonBossVO.kindNum=h,this.dungonBossVO.level=(null==s?void 0:s.bossLevel)??i,this.dungonBossVO.enhance=0);
+ const r={
+ 1:"KingSlime",2:"OrcFlower",3:"HammerMole",4:"DarkHermit"}
+ [t];
+ if(r){
+ const t="ktx2";
+ await QA.generateTexture(r,t,!1)}
+ for(const a of this.dungeonTeamVOs)a.remove();
+ this.dungeonTeamVOs.length=0;
+ const o=(null==s?void 0:s.prevent)??0;
+ if(this.presetTeamKindNums&&this.presetTeamTrans){
+ for(let t=0;
+ t<this.presetTeamKindNums.length&&this.dungeonTeamVOs.length<10;
+ t++){
+ const i=this.presetTeamKindNums[t],s=this.presetTeamTrans[t]||0;
+ if(i<=0||i>=1e4)continue;
+ const e=wx.getInstance().getBookVO(i);
+ if(!e)continue;
+ if(o>0&&e.tribe===o)continue;
+ const n=bx.getVO();
+ n.id=-1,n.kindNum=i,n.trans=s,n.level=.1*ML.maxWave,n.enhance=0,this.dungeonTeamVOs.push(n)}
+ this.presetTeamKindNums=null,this.presetTeamTrans=null}
+ else{
+ const t=wx.getInstance().list,i=Math.min(t.length,10);
+ for(let s=0;
+ s<i;
+ s++){
+ const i=t[s];
+ if(i.kindNum>=1e4)continue;
+ if(o>0&&i.tribe===o)continue;
+ const e=bx.getVO();
+ e.id=-1,e.kindNum=i.kindNum,e.trans=i.trans,e.level=.1*ML.maxWave,e.enhance=0,this.dungeonTeamVOs.push(e)}
+ }
+ h>0?await this.setupEnemyCastle():this.enemyCastle=null,await this.setupEnemies(),await this.setupHeroTeam(),this.setupEnemyLists(),jni.getInstance().switchToBattle(this,{
+ dungeonId:t}
+ ),this.updateZIndexSorting(),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),n0t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),qG.getInstance().add(this.execute,this)}
+ async setupEnemyCastle(){
+ if(!this.dungonBossVO)return;
+ this.enemyCastle=await H2.getInstance().getUnit(this.dungonBossVO.className),this.enemyCastle.setData(this.dungonBossVO),this.enemyCastle.maxRevive=0,this.enemyCastle.numRevive=0,this.enemyCastle.reviveInterval=0,this.enemyCastle.showTombstone=!1;
+ const t=VR.getInstance().getMultiplier(this.enemyCastle.unitType,this.enemyCastle.tribe,kR.DungeonBossHp,void 0,!1,0,xR.Normal);
+ this.enemyCastle.maxHp*=4/t,this.enemyCastle.baseMaxHp=this.enemyCastle.orgMaxHp=this.enemyCastle.health=this.enemyCastle.maxHp,this.enemyCastle.orgMoveSpd=this.enemyCastle.moveSpd=1.3*this.enemyCastle.moveSpd,this.enemyCastle.isAlive=!0,this.enemyCastle.stayAfterDeath=!0,this.enemyCastle.isImmovable=!0,this.enemyCastle.resetToIdle(),this.enemyCastle.battleController=this,this.enemyCastle.initDelay=20,this.enemyCastle.x=this.ENEMY_CENTER_X,this.enemyCastle.y=this.ENEMY_CENTER_Y,this.enemyCastle.tx=this.ENEMY_CENTER_X,this.enemyCastle.ty=this.ENEMY_CENTER_Y,this.enemyCastle.xDefault=this.ENEMY_CENTER_X,this.enemyCastle.yDefault=this.ENEMY_CENTER_Y,this.enemyCastle.enablePatrol(this.ENEMY_CENTER_X,this.ENEMY_CENTER_Y,0),this.applyShield(this.enemyCastle,this.bossShield),this.enemyCastle.lookAt(-1),rB.getInstance().addChild(this.enemyCastle)}
+ async setupEnemies(){
+ if(0===this.enemyKindNums.length)return;
+ const t=this.HERO_CENTER_X-this.ENEMY_CENTER_X,i=this.HERO_CENTER_Y-this.ENEMY_CENTER_Y,s=Math.sqrt(t*t+i*i),e=t/s,n=i/s,h=-n,r=e;
+ for(let o=0;
+ o<this.enemyCount;
+ o++){
+ const t=this.enemyKindNums[this.random.nextInt(this.enemyKindNums.length)],i=wx.getInstance().getBookVO(t);
+ if(!i)continue;
+ const s=await H2.getInstance().getUnit(i.className);
+ s.battleController=this,this.initializeEnemyUnitByKindNum(s,t,this.enemyUnitLevel);
+ const a=VR.getInstance().getMultiplier(s.unitType,s.tribe,kR.DungeonNormalHp,void 0,!1,0,xR.Normal);
+ s.maxHp*=4/a,s.health=s.maxHp,s.orgMoveSpd=s.moveSpd=1.3*s.moveSpd;
+ const c=80+48*Math.floor(o/6),l=56*(o%6-2.5);
+ s.x=this.ENEMY_CENTER_X+e*c+h*l,s.y=this.ENEMY_CENTER_Y+n*c+r*l,s.xDefault=this.HERO_CENTER_X,s.yDefault=this.HERO_CENTER_Y,this.applyShield(s,this.mobShield),s.lookAt(-1),rB.getInstance().addChild(s),this.enemyList.push(s)}
+ this.initialEnemyCount=this.enemyList.length}
+ async setupHeroTeam(){
+ var t,i;
+ const s=this.dungeonTeamVOs;
+ if(!s||0===s.length)return;
+ VR.getInstance().setBattleContext(xR.Dungeon),VR.getInstance().recalculate();
+ const e=this.ENEMY_CENTER_X-this.HERO_CENTER_X,n=this.ENEMY_CENTER_Y-this.HERO_CENTER_Y,h=Math.sqrt(e*e+n*n),r=e/h,o=n/h,a=-o,c=r,l=[];
+ for(let u=0;
+ u<s.length;
+ u++){
+ const t=s[u],i=await H2.getInstance().getUnit(t.className);
+ t.level=Math.max(1,ML.maxWave/10),t.enhance=0,i.kindNum=t.kindNum,i.setData(t),i.numBlock=0,i.baseMaxHp*=4,i.baseMoveSpd*=1.3,VR.getInstance().applyToHero(i),i.health=i.maxHp,i.battleController=this,i.initDelay=0,i.showTombstone=!1,i.maxRevive=0,i.reviveInterval=0,i.totalDamageDealt=0,l.push(i)}
+ l.sort((t,i)=>(t.unitType===ix.MELEE?0:1)-(i.unitType===ix.MELEE?0:1));
+ for(let u=0;
+ u<l.length;
+ u++){
+ const s=l[u],e=Math.floor(u/3),n=60*(u%3-(Math.min(3,l.length-3*e)-1)/2),h=55*e;
+ s.x=this.HERO_CENTER_X+r*(50-h)+a*n,s.y=this.HERO_CENTER_Y+o*(50-h)+c*n,s.xDefault=(null==(t=this.enemyCastle)?void 0:t.x)??this.ENEMY_CENTER_X,s.yDefault=(null==(i=this.enemyCastle)?void 0:i.y)??this.ENEMY_CENTER_Y,s.lookAt(1),s.isAir&&s.onFlyEnter(!0),rB.getInstance().addChild(s),this.friendList.push(s)}
+ }
+ setupEnemyLists(){
+ this.enemyCastle&&!this.enemyList.includes(this.enemyCastle)&&this.enemyList.push(this.enemyCastle);
+ const t=this.friendList;
+ for(const i of this.friendList)i.enemyList=this.enemyList,i.allyList=this.friendList;
+ for(const i of this.enemyList)i.enemyList=t,i.allyList=this.enemyList;
+ this.enemyCastle&&(this.enemyCastle.enemyList=t,this.enemyCastle.allyList=this.enemyList)}
+ initializeEnemyUnit(t,i,s=1){
+ const e=wx.getInstance().bookList;
+ e.length;
+ const n=e.find(t=>t.className===i);
+ if(!n)return t.initDelay=0,t.showTombstone=!1,t.atkRange2=t.atkRange*t.atkRange,void(t.detectRange2=t.detectRange*t.detectRange);
+ this.spawnVo.id=-1,this.spawnVo.kindNum=n.kindNum,this.spawnVo.level=s,this.spawnVo.enhance=0,t.setData(this.spawnVo),t.initDelay=0,t.showTombstone=!1,t.maxRevive=0,t.reviveInterval=0}
+ initializeEnemyUnitByKindNum(t,i,s=1){
+ this.spawnVo.id=-1,this.spawnVo.kindNum=i,this.spawnVo.level=s,this.spawnVo.enhance=0,t.setData(this.spawnVo),t.initDelay=0,t.showTombstone=!1,t.maxRevive=0,t.reviveInterval=0,t.numBlock=0}
+ cleanup(){
+ VR.getInstance().setBattleContext(xR.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.initialEnemyCount=0,this.defeatGraceStartFrame=-1;
+ for(const t of this.dungeonTeamVOs)t.remove();
+ this.dungeonTeamVOs.length=0;
+ for(const t of this.enemyList)t.disablePatrol();
+ for(const t of this.friendList)t.disablePatrol();
+ this.enemyCastle&&(this.enemyCastle.disablePatrol(),this.enemyCastle.remove(),this.enemyCastle=null),super.cleanup()}
+ applyShield(i,s){
+ 1===s?i.showPhysicalShield(t.SHIELD_DURATION):2===s&&i.showMagicShield(t.SHIELD_DURATION)}
+ async restartDungeon(){
+ this.cleanup(),await this.startBattle(this.dungeonId,this.dungeonLevel)}
+ getDungeonInfo(){
+ return{
+ dungeonId:this.dungeonId,level:this.dungeonLevel,remainingEnemies:this.enemyList.filter(t=>!t.removed).length,totalEnemies:this.enemyCount,castleAlive:!!this.enemyCastle&&!this.enemyCastle.removed,heroesAlive:this.friendList.filter(t=>!t.removed).length,totalHeroes:this.friendList.length}
+ }
+ getEnemyCastle(){
+ return this.enemyCastle}
+ checkVictory(){
+ return this.enemyCastle?!this.enemyCastle.isAlive:0!==this.initialEnemyCount&&this.enemyList.every(t=>!t.isAlive)}
+ checkDefeat(){
+ return this.getRemainingTimeSeconds()<=0||(this.friendList.every(t=>!t.isAlive||t.isSummoned)?-1===this.defeatGraceStartFrame?(this.defeatGraceStartFrame=this.battleTime,!1):this.battleTime-this.defeatGraceStartFrame>=t.DEFEAT_GRACE_FRAMES:(this.defeatGraceStartFrame=-1,!1))}
+ getRemainingTimeSeconds(){
+ const i=t.TIME_LIMIT_FRAMES-this.battleTime;
+ return Math.max(0,Math.ceil(i/60))}
+ onVictoryCallback(){
+ n0t.getInstance().freeze(),setTimeout(async()=>{
+ qG.getInstance().remove(this.execute,this),VR.getInstance().setBattleContext(xR.Normal);
+ const t=await rD.getInstance().dungeon.end(!0,!0);
+ if(!1===t.success)return void wG.getInstance().showError(t);
+ ML.setUser(t.body.user),Nx.getInstance().setData(t.body.dungeon),Hx.getInstance().setDungeonCores(t.body.dungeon),lVt.getInstance().markDirty();
+ const i=Nx.getInstance().getVOByMapLevel(this.dungeonId,this.dungeonLevel),s=(null==i?void 0:i.map)??0,e=i?i.cores[s-1]:0;
+ aJt.getInstance().showVictory(()=>{
+ K0t.getInstance().refreshList(),W0t.getInstance().updateTicketInfo(),kF.getInstance().updateCores()}
+ ,s,e)}
+ ,2e3)}
+ onDefeatCallback(){
+ n0t.getInstance().freeze(),setTimeout(async()=>{
+ qG.getInstance().remove(this.execute,this),VR.getInstance().setBattleContext(xR.Normal);
+ const t=await rD.getInstance().dungeon.end(!1,!0);
+ if(!1===t.success)return void wG.getInstance().showError(t);
+ ML.setUser(t.body.user),Nx.getInstance().setData(t.body.dungeon),lVt.getInstance().markDirty();
+ const i=this.dungeonId,s=this.dungeonLevel;
+ aJt.getInstance().showDefeat(async()=>{
+ K0t.getInstance().refreshList(),W0t.getInstance().updateTicketInfo();
+ const t=Nx.getInstance().getVOByMapLevel(i,s);
+ if(t){
+ const i=I0t.getInstance();
+ await i.setData(t),i.show()}
+ }
+ )}
+ ,2e3)}
+ returnToMain(){
+ }
+ scheduleReturnToMain(){
+ }
+ hide(){
+ super.hide(),this.enemyCastle&&(this.enemyCastle.visible=!1)}
+ show(){
+ super.show(),this.enemyCastle&&(this.enemyCastle.visible=!0)}
+ }
+ ;
+ Vt(z0t,"DungeonBattleController"),Kt(z0t,"instance"),Kt(z0t,"TIME_LIMIT_FRAMES",3600),Kt(z0t,"DEFEAT_GRACE_FRAMES",60),Kt(z0t,"SHIELD_DURATION",3600);
+ let q0t=z0t;
+ const Y0t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnCancel",new kU("","","아니오",.7,160,70)),Kt(this,"btnConfirm",new kU("","","예",.8,160,70)),this.title="";
+ let t=SG.getText("GAME_298","던전전투를 포기하시겠습니까?")+"\n";
+ t+=SG.getText("GAME_299","전투를 포기하면, 던전 재료를 획득할 수 없습니다.")+"\n",this.lblMessage.text=t,this.lblMessage.align="center",this.contentContainer.addChild(this.lblMessage),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=SG.getText("COMMON_400","아니오"),this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_399","예"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.btnClose.visible=!1,this.outSideClickHide=!1,this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ show(){
+ let t=SG.getText("GAME_298","던전전투를 포기하시겠습니까?")+"\n";
+ t+=SG.getText("GAME_299","전투를 포기하면, 던전 재료를 획득할 수 없습니다.")+"\n",this.lblMessage.text=t,this.btnCancel.text=SG.getText("COMMON_400","아니오"),this.btnConfirm.text=SG.getText("COMMON_399","예"),this.updateLayout(),super.show()}
+ updateLayout(){
+ const t=.5*this.width;
+ this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=90;
+ const i=this.lblMessage.y+this.lblMessage.height+40,s=this.btnCancel.width+16+this.btnConfirm.width;
+ this.btnCancel.x=t-.5*s,this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+60}
+ async onConfirmClick(){
+ await rD.getInstance().dungeon.end(!1,!0),jni.getInstance().returnToIdleBattle(),this.hide()}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ Vt(Y0t,"DungeonQuitPopup"),Kt(Y0t,"_instance");
+ let X0t=Y0t;
+ const J0t=56,Q0t=36,Z0t=[16729156,16746496,16763904,6741316,4500223,13404415],t1t=new Ag({
+ fontFamily:"Arial",fill:16772744,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:14,fontWeight:"bold"}
+ ),i1t=new Ag({
+ fontFamily:"Arial",fill:13417369,stroke:{
+ color:"#000000",width:2,join:"round"}
+ ,fontSize:12}
+ ),s1t=new Ag({
+ fontFamily:"Arial",fill:16777215,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:13,fontWeight:"bold"}
+ ),e1t=new Ag({
+ fontFamily:"Arial",fill:14988422,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:13,fontWeight:"bolder"}
+ ),n1t=new Ag({
+ fontFamily:"Arial",fill:16777215,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:13,fontWeight:"bold"}
+ ),h1t=new Ag({
+ fontFamily:"Arial",fill:16768e3,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:14,fontWeight:"bold"}
+ ),r1t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"HEADER_H",26),Kt(this,"_showed",!1),Kt(this,"_frameCounter",0),Kt(this,"_snapshot",new Map),Kt(this,"_lblDungeonName"),Kt(this,"_lblDungeonInfo"),Kt(this,"rows",[]),Kt(this,"_staticBg",new Lf),Kt(this,"_barsG",new Lf),Kt(this,"bg",new ZD),this.bg.setIndex(6),this.addChild(this.bg),this.bg.width=640,this.bg.height=VA.stageHeight-640-(416+this.HEADER_H),this.bg.y=VA.safeHeight-640-this.bg.height,this._buildStaticBg(),this._buildDungeonHeader(),this._buildQuitButton(),this._buildMeterHeader(),this._buildRows(),this.addChild(this._barsG)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get PANEL_W(){
+ return VA.stageWidth||640}
+ get panelWidth(){
+ return this.PANEL_W}
+ get BAR_AREA_W(){
+ return this.PANEL_W-55-20-68}
+ _buildStaticBg(){
+ const t=this._staticBg,i=this.PANEL_W;
+ t.rect(0,0,i,J0t).fill({
+ color:0,alpha:.85}
+ ),t.rect(0,0,i,30).fill({
+ color:854784,alpha:.5}
+ ),t.rect(0,54,i,2).fill({
+ color:8939059,alpha:.7}
+ ),t.rect(0,J0t,i,this.HEADER_H).fill({
+ color:0,alpha:.75}
+ );
+ for(let s=0;
+ s<10;
+ s++){
+ const e=J0t+this.HEADER_H+s*Q0t,n=s%2==0?.6:.45;
+ t.rect(0,e,i,Q0t).fill({
+ color:0,alpha:n}
+ )}
+ this.addChild(t)}
+ _buildDungeonHeader(){
+ const t=this.PANEL_W;
+ let i,s;
+ i=SG.getText("DUNGEON_MAIN_1","킹슬라임"),s=SG.getValueReplace("COMMON_397","##",1,"1단계"),this._lblDungeonName=new Hg({
+ text:`${
+ i}
+  (${
+ s}
+ )`,style:t1t}
+ ),this._lblDungeonName.x=(t-this._lblDungeonName.width)/2,this._lblDungeonName.y=(30-this._lblDungeonName.height)/2,this.addChild(this._lblDungeonName),i=`${
+ SG.getText("COMMON_22","보상")}
+  : ${
+ SG.getValueReplace("COMMON_394","##",0,"0개")}
+ `,s=`${
+ SG.getText("COMMON_396","입장제한")}
+  : ${
+ SG.getText("TRIBE_1","인간")}
+ `,this._lblDungeonInfo=new Hg({
+ text:`${
+ i}
+           ${
+ s}
+ `,style:i1t}
+ ),this._lblDungeonInfo.x=(t-this._lblDungeonInfo.width)/2,this._lblDungeonInfo.y=30+(26-this._lblDungeonInfo.height)/2,this.addChild(this._lblDungeonInfo)}
+ _buildQuitButton(){
+ const t=new kKt;
+ t.width=40,t.height=40,t.x=this.PANEL_W-40-8,t.y=8,t.onClick=()=>{
+ this.onQuitButtonClick()}
+ ,this.addChild(t)}
+ onQuitButtonClick(){
+ X0t.getInstance().show()}
+ _buildMeterHeader(){
+ const t=new Hg({
+ text:"⚔ DAMAGE METER",style:h1t}
+ );
+ t.x=8,t.y=J0t+(this.HEADER_H-t.height)/2,this.addChild(t)}
+ _buildRows(){
+ for(let t=0;
+ t<10;
+ t++){
+ const i=J0t+this.HEADER_H+t*Q0t,s=this.PANEL_W,e=new He;
+ e.width=32,e.height=32,e.x=2,e.y=i+Math.floor(2),this.addChild(e);
+ const n=new Hg({
+ text:`${
+ t+1}
+ .`,style:s1t}
+ );
+ n.x=55,n.y=i+Math.floor((Q0t-n.height)/2),this.addChild(n);
+ const h=new Hg({
+ text:"-",style:e1t}
+ );
+ h.x=77,h.y=i+Math.floor((Q0t-h.height)/2),this.addChild(h);
+ const r=new Hg({
+ text:"0",style:n1t}
+ );
+ r.x=s-43,r.y=i+Math.floor((Q0t-r.height)/2),this.addChild(r),this.rows.push({
+ icon:e,lblRank:n,lblName:h,lblDmg:r}
+ )}
+ }
+ setDungeonData(t){
+ const i=this.PANEL_W;
+ let s,e;
+ s=t.name,e=SG.getValueReplace("COMMON_397","##",t.stage,`${
+ t.stage}
+ 단계`),this._lblDungeonName.text=`${
+ s}
+  (${
+ e}
+ )`,this._lblDungeonName.x=(i-this._lblDungeonName.width)/2,s=`${
+ SG.getText("COMMON_22","보상")}
+  : ${
+ SG.getValueReplace("COMMON_394","##",t.reward.toLocaleString(),`${
+ t.reward.toLocaleString()}
+ 개`)}
+ `,e=t.entryLimit?`${
+ SG.getText("COMMON_396","입장제한")}
+  : ${
+ t.entryLimit}
+ `:`${
+ SG.getText("COMMON_396","입장제한")}
+  : ${
+ SG.getText("COMMON_367","없음")}
+ `,this._lblDungeonInfo.text=`${
+ s}
+           ${
+ e}
+ `,this._lblDungeonInfo.x=(i-this._lblDungeonInfo.width)/2}
+ update(){
+ this._frameCounter++,this._frameCounter<10||(this._frameCounter=0,this._refresh())}
+ getHeroes(){
+ return q0t.getInstance().getFriendList()}
+ _refresh(){
+ for(const e of this.getHeroes()){
+ let t=e.className;
+ if(e.kindNum>0){
+ const i=wx.getInstance().getBookVO(e.kindNum);
+ i&&(t=SG.getText(i.getNameKey(),e.name))}
+ this._snapshot.set(e,{
+ name:t,base:e.base,damage:e.totalDamageDealt}
+ )}
+ const t=[...this._snapshot.values()].sort((t,i)=>i.damage-t.damage),i=t.length>0?t[0].damage:0;
+ this._barsG.clear();
+ for(let e=0;
+ e<10;
+ e++){
+ const n=this.rows[e],h=t[e];
+ if(h){
+ n.icon.visible=!0;
+ try{
+ n.icon.texture=QA.getTexture("UI_Ekkorr",`Hero${
+ h.base}
+ `);
+ const t=n.icon.texture;
+ if(t.width>0&&t.height>0){
+ const i=t.width/t.height;
+ n.icon.height=32,n.icon.width=32*i}
+ }
+ catch(s){
+ }
+ if(n.lblRank.text=`${
+ e+1}
+ .`,n.lblName.text=h.name,n.lblDmg.text=VD.displayLargeNumberAsAlphabet(Math.floor(h.damage)),i>0){
+ const t=h.damage/i,s=Math.max(2,Math.floor(t*this.BAR_AREA_W)),n=75,r=J0t+this.HEADER_H+e*Q0t+Math.floor(2);
+ this._barsG.rect(n,r,s,32).fill({
+ color:Z0t[e%Z0t.length],alpha:.4}
+ )}
+ }
+ else n.icon.visible=!1,n.lblRank.text="",n.lblName.text="",n.lblDmg.text=""}
+ }
+ show(){
+ this._showed||(this._showed=!0,this._snapshot.clear(),this.visible=!0,this._frameCounter=10,this._refresh(),LM.getInstance().add(this.update,this))}
+ hide(){
+ this._showed&&(this._showed=!1,this.visible=!1,LM.getInstance().remove(this.update,this))}
+ reset(){
+ this._frameCounter=0}
+ }
+ ;
+ Vt(r1t,"DungeonBattleStatus"),Kt(r1t,"_instance");
+ let o1t=r1t;
+ const a1t=class t extends o1t{
+ constructor(){
+ super(),Kt(this,"_controller",null)}
+ static getInstance(){
+ return this._towerInstance||(this._towerInstance=new t),this._towerInstance}
+ setController(t){
+ this._controller=t}
+ getHeroes(){
+ return this._controller?this._controller.getFriendList():v0t.getInstance().getFriendList()}
+ setDungeonData(t){
+ super.setDungeonData(t);
+ const i=t.entryLimit?t.entryLimit:SG.getText("COMMON_367","없음");
+ this._lblDungeonInfo.text=`${
+ SG.getText("COMMON_396","입장제한")}
+  : ${
+ i}
+ `,this._lblDungeonInfo.x=(640-this._lblDungeonInfo.width)/2,this._lblDungeonInfo.y=30+(26-this._lblDungeonInfo.height)/2-3}
+ onQuitButtonClick(){
+ this._controller!==u1t.getInstance()?M0t.getInstance().show():_0t.getInstance().show()}
+ }
+ ;
+ Vt(a1t,"TowerBattleStatus"),Kt(a1t,"_towerInstance");
+ let c1t=a1t;
+ const l1t=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.TOWER),Kt(this,"teamVOs",[]),Kt(this,"teamSlotIndices",[]),Kt(this,"spawnedVOs",[]),Kt(this,"stageKindNum",0),Kt(this,"stageVO",null),Kt(this,"speedHelper",new sJt("ef2.sprite.battleSpeed")),Kt(this,"teamKindNums",[]),Kt(this,"teamTransList",[])}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ setTeam(t,i){
+ this.teamKindNums=t,this.teamTransList=i}
+ async startBattle(t,i){
+ this.cleanup(),HB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.stageKindNum=t,this.stageVO=i,await QA.generateTexture("Highland","ktx2",!1);
+ const s={
+ name:SG.getText("GAME_569","정령의 고원"),stage:t,reward:0,entryLimit:this.buildConditionText(i)}
+ ,e=c1t.getInstance();
+ e.setController(this),e.setDungeonData(s),this.speedHelper.enter(),this.speedHelper.attachButton(e,e.panelWidth-124,12);
+ for(const n of this.teamVOs)n.remove();
+ this.teamVOs.length=0,this.teamSlotIndices.length=0;
+ for(let n=0;
+ n<12&&!(n>=this.teamKindNums.length);
+ n++){
+ if(this.teamKindNums[n]<=0)continue;
+ const t=bx.getVO();
+ t.id=-1,t.kindNum=this.teamKindNums[n],t.trans=this.teamTransList[n]||0,t.level=1,t.enhance=0,this.teamVOs.push(t),this.teamSlotIndices.push(n)}
+ await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),jni.getInstance().switchToBattle(this),QG.getInstance().setBackground(XG.HIGHLAND),this.updateZIndexSorting(),qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),n0t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),qG.getInstance().add(this.execute,this)}
+ async setupAllies(){
+ VR.getInstance().setBattleContext(xR.Sprite),VR.getInstance().recalculate();
+ for(let i=0;
+ i<this.teamVOs.length;
+ i++){
+ const s=this.teamVOs[i],e=this.teamSlotIndices[i],n=await H2.getInstance().getUnit(s.className);
+ n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans),n.numBlock=0,n.baseMaxHp*=3,n.baseMoveSpd*=1.3,VR.getInstance().applyToHero(n),n.health=n.maxHp,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange;
+ const h=t.ALLY_FORMATION[e%t.ALLY_FORMATION.length];
+ n.x=h.x,n.y=h.y,n.xDefault=h.x+320,n.yDefault=h.y,n.lookAt(1),n.healthBar.setHealthColor(!0),n.isAir&&n.onFlyEnter(!0),rB.getInstance().addChild(n),this.friendList.push(n)}
+ }
+ async setupEnemies(){
+ if(!this.stageVO)return;
+ const i=this.stageVO,s=Zjt.parseEnemies(i),e=i.enemyLevels?String(i.enemyLevels).split("|").map(Number):[],n=i.enemyShields?String(i.enemyShields).split("|").map(Number):[];
+ for(let h=0;
+ h<20;
+ h++){
+ const i=s[h];
+ if(!i)continue;
+ const r=wx.getInstance().getBookVO(i.kindNum);
+ if(!r)continue;
+ const o=await H2.getInstance().getUnit(r.className);
+ o.battleController=this;
+ const a=e[h]||1,c=bx.getVO();
+ if(c.id=-1,c.kindNum=i.kindNum,c.trans=i.trans,c.level=a,c.enhance=0,this.spawnedVOs.push(c),o.setData(c),this.applyRawBvoStats(o,i.kindNum,i.trans),a>1){
+ const t=1+.05*(a-1);
+ o.baseAtkDmg*=t,o.orgAtkDmg*=t,o.atkDmg*=t,o.baseDef*=t,o.orgDef*=t,o.def*=t,o.baseMaxHp*=t,o.orgMaxHp*=t,o.maxHp*=t}
+ o.numBlock=0,o.baseMaxHp*=3,o.orgMaxHp*=3,o.maxHp*=3,o.health=o.maxHp,o.orgMoveSpd=o.moveSpd=1.3*o.moveSpd,o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange;
+ const l=t.ENEMY_FORMATION_20[h];
+ o.x=l.x,o.y=l.y,o.xDefault=l.x-320,o.yDefault=l.y,o.lookAt(-1),o.healthBar.setHealthColor(!1),rB.getInstance().addChild(o),this.enemyList.push(o);
+ const u=n[h]||0;
+ 1===u?o.showPhysicalShield(t.TIME_LIMIT_FRAMES):2===u&&o.showMagicShield(t.TIME_LIMIT_FRAMES)}
+ }
+ applyRawBvoStats(t,i,s=0){
+ const e=wx.getInstance().getBookVO(i);
+ if(!e)return;
+ const n=1+.4*Math.max(0,s);
+ t.baseMaxHp=e.hp*n,t.baseAtkDmg=e.atkDmg*n,t.baseDef=e.def*n,t.orgMaxHp=t.maxHp=e.hp*n,t.orgAtkDmg=t.atkDmg=e.atkDmg*n,t.orgDef=t.def=e.def*n,t.phyDef=e.phyDef*n,t.magDef=e.magDef*n,t.hp=t.maxHp}
+ 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}
+ checkVictory(){
+ for(const t of this.enemyList)if(t.isAlive)return!1;
+ return this.enemyList.length>0}
+ checkDefeat(){
+ let i=!1;
+ for(const t of this.friendList)if(t.isAlive){
+ i=!0;
+ break}
+ return!i&&this.friendList.length>0||this.battleTime>=t.TIME_LIMIT_FRAMES}
+ calcStar(){
+ if(!this.stageVO)return 1;
+ const t=this.teamKindNums.filter(t=>t>0).length;
+ return t<=this.stageVO.star3?3:t<=this.stageVO.star2?2:1}
+ onVictoryCallback(){
+ setTimeout(async()=>{
+ qG.getInstance().remove(this.execute,this),VR.getInstance().setBattleContext(xR.Normal);
+ const t=this.calcStar(),i=await rD.getInstance().spirit.play(this.stageKindNum,t,!0);
+ lVt.getInstance().markDirty();
+ const s=Vt(()=>{
+ jni.getInstance().returnToIdleBattle(),V1t.getInstance().show(),b1t.getInstance().setData(),ZZt.getInstance().updateTicket()}
+ ,"onConfirm");
+ if(!i.success||!i.body)return wG.getInstance().showError(i),void s();
+ ML.setUserInfo(i.body),kF.getInstance().updateAll(),Hjt.getInstance().petStep=3;
+ const e=this.stageVO;
+ if(e)i0t.getInstance().showVictory(e,t,s);
+ else{
+ const i=(this.stageKindNum-1)%40+1,e=1;
+ aJt.getInstance().showVictory(s,0,0,`${
+ SG.getText("GAME_569","정령의 고원")}
+  ${
+ e}
+ -${
+ i}
+  (★${
+ t}
+ )`)}
+ }
+ ,1500)}
+ onDefeatCallback(){
+ setTimeout(async()=>{
+ var t;
+ qG.getInstance().remove(this.execute,this),VR.getInstance().setBattleContext(xR.Normal);
+ const i=(this.stageKindNum-1)%40+1,s=(null==(t=this.stageVO)?void 0:t.chapter)||1;
+ aJt.getInstance().showDefeat(()=>{
+ jni.getInstance().returnToIdleBattle(),V1t.getInstance().show(),b1t.getInstance().setData(),ZZt.getInstance().updateTicket()}
+ ,`${
+ SG.getText("GAME_569","정령의 고원")}
+  ${
+ s}
+ -${
+ i}
+ `)}
+ ,1500)}
+ returnToMain(){
+ }
+ scheduleReturnToMain(){
+ }
+ getRemainingTimeSeconds(){
+ const i=t.TIME_LIMIT_FRAMES-this.battleTime;
+ return Math.max(0,Math.ceil(i/60))}
+ buildConditionText(t){
+ const i=[];
+ return t.gradeMax>0&&i.push(SG.getValueReplace("GAME_552","##",t.gradeMax,`${
+ t.gradeMax}
+ 성 이하`)),"0"!==String(t.tribes)&&i.push(SG.getText("GAME_553","종족 제한")),"Y"===t.femaleExclude&&i.push(SG.getText("GAME_554","여성 영웅 제외")),"Y"===t.maleExclude&&i.push(SG.getText("GAME_555","남성 영웅 제외")),"Y"===t.rangeExclude&&i.push(SG.getText("GAME_556","원거리 영웅 제외")),"Y"===t.meleeExclude&&i.push(SG.getText("GAME_557","근거리 영웅 제외")),"Y"===t.airExclude&&i.push(SG.getText("GAME_558","공중 영웅 제외")),i.length>0?i.join(", "):""}
+ cleanup(){
+ VR.getInstance().setBattleContext(xR.Normal),this.speedHelper.detachButton(),this.speedHelper.exit();
+ for(const t of this.teamVOs)t.remove();
+ this.teamVOs.length=0,this.teamSlotIndices.length=0;
+ for(const t of this.spawnedVOs)t.remove();
+ this.spawnedVOs.length=0;
+ for(const t of this.enemyList)t.disablePatrol();
+ for(const t of this.friendList)t.disablePatrol();
+ super.cleanup()}
+ }
+ ;
+ Vt(l1t,"SpriteBattleController"),Kt(l1t,"instance"),Kt(l1t,"TIME_LIMIT_FRAMES",4800),Kt(l1t,"ALLY_FORMATION",[{
+ x:180,y:370}
+ ,{
+ x:180,y:420}
+ ,{
+ x:180,y:470}
+ ,{
+ x:180,y:520}
+ ,{
+ x:95,y:370}
+ ,{
+ x:95,y:420}
+ ,{
+ x:95,y:470}
+ ,{
+ x:95,y:520}
+ ,{
+ x:10,y:370}
+ ,{
+ x:10,y:420}
+ ,{
+ x:10,y:470}
+ ,{
+ x:10,y:520}
+ ]),Kt(l1t,"ENEMY_FORMATION_20",(()=>{
+ const t=[380,445,510,575,640],i=[370,420,470,520],s=[];
+ for(let e=0;
+ e<5;
+ e++)for(let n=0;
+ n<4;
+ n++)s.push({
+ x:t[e],y:i[n]}
+ );
+ return s}
+ )());
+ let u1t=l1t;
+ const d1t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"vsImage",new He(QA.getTexture("UI_Ekkorr","UI_VS"))),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblTryCount"),Kt(this,"lblTicket"),Kt(this,"btnBuyTicket"),Kt(this,"allyBtns",[]),Kt(this,"enemyBtns",[]),Kt(this,"battleContainer",new Ge),Kt(this,"btnStart",new ZL("도전")),Kt(this,"btnSweep",new ZL("즉시완료")),Kt(this,"enemyOverlays",[]),Kt(this,"lblCapacity",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblEntryText",new JD("",16768358,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblStar3",new JD("",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblStar2",new JD("",13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblStar1",new JD("",13404228,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"heroList"),Kt(this,"selectedSlot",-1),Kt(this,"teamKindNums",[]),Kt(this,"teamTrans",[]),Kt(this,"heroVOs",[]),Kt(this,"currentStageVO",null),Kt(this,"maxAllies",12);
+ const t=V1t.getInstance().y,i=Math.max(VA.safeHeight-t+40,700);
+ this.bg.height=i,this.y=VA.safeHeight-i,this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.lblTryCount=new JD("",8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblTryCount),this.lblTicket=new $B("UI_PET_TICKET","15",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_16,"UI_Ekkorr"),this.lblTicket.iconScale=.6,this.lblTicket.textOffsetX=3,this.addChild(this.lblTicket),this.btnBuyTicket=new VB("UI_PET_TICKET",SG.getText("COMMON_7","구매"),.6),this.btnBuyTicket.color=VB.BROWN,this.btnBuyTicket.width=120,this.btnBuyTicket.height=40,this.btnBuyTicket.onClick=this.onBuyTicket.bind(this),this.addChild(this.btnBuyTicket);
+ const s=this.lblTitle.y+this.lblTitle.height+20;
+ this.battleContainer.y=s,this.addChild(this.battleContainer);
+ for(let a=0;
+ a<12;
+ a++){
+ const t=Math.floor(a/4),i=a%4,s=new Hzt;
+ s.scale=.5,s.x=0+70*(2-t),s.y=48*i,s.showAtkType=!0,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
+ this.vsImage.scale=.6,this.vsImage.x=210,this.vsImage.y=72,this.battleContainer.addChild(this.vsImage);
+ const e=210+this.vsImage.width+15;
+ for(let a=0;
+ a<20;
+ a++){
+ const t=Math.floor(a/4),i=a%4,s=new Hzt,n=new Ge;
+ n.eventMode="none",n.interactiveChildren=!1;
+ const h=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
+ color:0,width:7}
+ }
+ )}
+ );
+ h.anchor.set(0,1),h.x=3,h.y=82,n.addChild(h),n._lblShield=h;
+ const r=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:32,fontWeight:"bold",fill:16746564,stroke:{
+ color:0,width:9}
+ }
+ )}
+ );
+ r.anchor.set(1,0),r.x=102,r.y=-4,n.addChild(r),n._lblLevel=r,s.scale=.5,s.x=e+70*t,s.y=48*i,s.activated=!1,s.hidePlusIcon(),this.battleContainer.addChild(s),this.enemyBtns.push(s),s.addChild(n),this.enemyOverlays.push(n)}
+ this.recenterBattleContainer(),this.addChild(this.lblCapacity);
+ const n=s+192+5;
+ this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
+ const h=n+this.lblEntryText.height+5;
+ this.lblStar3.x=15,this.lblStar3.y=h,this.addChild(this.lblStar3),this.lblStar2.x=120,this.lblStar2.y=h,this.addChild(this.lblStar2),this.lblStar1.x=210,this.lblStar1.y=h,this.addChild(this.lblStar1);
+ const r=h+this.lblStar3.height+7,o=this.bg.height-r-90;
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new d5(Uzt,630,o),this.heroList.x=5,this.heroList.y=r,this.addChild(this.heroList),this.btnSweep.color=ZL.GREEN,this.btnSweep.width=160,this.btnSweep.height=55,this.btnSweep.x=.5*(this.bg.width-340),this.btnSweep.y=this.bg.height-65,this.btnSweep.onClick=this.onSweep.bind(this),this.addChild(this.btnSweep),this.btnStart.color=ZL.RED,this.btnStart.width=160,this.btnStart.height=55,this.btnStart.x=this.btnSweep.x+this.btnSweep.width+20,this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ this.lblTryCount.x=this.lblTitle.x+this.lblTitle.width+3,this.lblTryCount.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTryCount.height-1),this.btnBuyTicket.x=this.bg.width-this.btnBuyTicket.width-15,this.btnBuyTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnBuyTicket.height),this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-10,this.lblTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTicket.height)}
+ updateCapacityPosition(){
+ this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15,this.lblCapacity.y=this.lblStar3.y+.5*(this.lblStar3.height-this.lblCapacity.height)}
+ async setData(t){
+ this.currentStageVO=t;
+ const i=(t.kindNum-1)%40+1;
+ this.lblTitle.text=`${
+ SG.getText("GAME_569","정령의 고원")}
+  ${
+ t.chapter}
+ -${
+ i}
+ `;
+ const s=this.buildConditionText(t);
+ this.lblEntryText.text=`${
+ SG.getText("COMMON_465","입장조건")}
+  : ${
+ s||SG.getText("COMMON_367","없음")}
+ `,this.maxAllies=Math.max(1,Math.min(12,t.star1||12));
+ const e=gL.getInstance(),n=e.getStageVO(t.kindNum),h=n?n.star:0,r=n?n.dailyCount:0,o=16763904,a=6710886;
+ this.lblStar3.text=`★★★ : ${
+ t.star3}
+ `,this.lblStar3.textColor=h>=3?o:a,this.lblStar2.text=`★★ : ${
+ t.star2}
+ `,this.lblStar2.textColor=h>=2?o:a,this.lblStar1.text=`★ : ${
+ t.star1}
+ `,this.lblStar1.textColor=h>=1?o:a;
+ const c=t.numTry-r;
+ this.lblTryCount.text=`(${
+ c}
+ /${
+ t.numTry}
+ )`,this.lblTryCount.textColor=c<=0?16729156:6728243,this.lblTicket.text=`${
+ e.ticket}
+ `;
+ const l=h>=3;
+ this.btnSweep.visible=l,l?(this.btnSweep.x=.5*(this.bg.width-340),this.btnStart.x=this.btnSweep.x+this.btnSweep.width+20):this.btnStart.x=.5*(this.bg.width-this.btnStart.width);
+ const u=await $A.getSpiritTeam(t.kindNum);
+ u&&u.kindNums&&12===u.kindNums.length?(this.teamKindNums=[...u.kindNums],this.teamTrans=[...u.trans]):this.initTeam(),this.clampTeamToMax(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList(),this.btnStart.text=SG.getText("COMMON_378","도전"),this.btnSweep.text=SG.getText("COMMON_379","즉시완료"),this.btnBuyTicket.text=SG.getText("COMMON_7","구매"),this.updateLayout()}
+ buildConditionText(t){
+ const i=[];
+ return t.gradeMax>0&&i.push(SG.getValueReplace("GAME_552","##",t.gradeMax,`${
+ t.gradeMax}
+ 성 이하`)),"0"!==String(t.tribes)&&i.push(SG.getText("GAME_553","종족 제한")),"Y"===t.femaleExclude&&i.push(SG.getText("GAME_554","여성 영웅 제외")),"Y"===t.maleExclude&&i.push(SG.getText("GAME_555","남성 영웅 제외")),"Y"===t.rangeExclude&&i.push(SG.getText("GAME_556","원거리 영웅 제외")),"Y"===t.meleeExclude&&i.push(SG.getText("GAME_557","근거리 영웅 제외")),"Y"===t.airExclude&&i.push(SG.getText("GAME_558","공중 영웅 제외")),i.join(" / ")}
+ getPlacedCount(){
+ let t=0;
+ for(let i=0;
+ i<12;
+ i++)this.teamKindNums[i]>0&&t++;
+ return t}
+ clampTeamToMax(){
+ let t=0;
+ for(let i=0;
+ i<12;
+ i++)this.teamKindNums[i]>0&&(t++,t>this.maxAllies&&(this.teamKindNums[i]=-1,this.teamTrans[i]=0))}
+ initTeam(){
+ this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0);
+ const t=wx.getInstance().list,i=wx.getInstance(),s=this.currentStageVO,e=s&&"0"!==String(s.tribes)?new Set(String(s.tribes).split("|").map(Number)):null;
+ let n=0;
+ for(let h=0;
+ h<t.length&&n<this.maxAllies;
+ h++){
+ const r=t[h];
+ if(!(r.kindNum>=1e4)){
+ if(s){
+ const t=i.getBookVO(r.kindNum);
+ if(t){
+ if(s.gradeMax>0&&t.grade>s.gradeMax)continue;
+ if(e&&!e.has(t.tribe))continue;
+ if("Y"===s.femaleExclude&&t.sex===hx.FEMALE)continue;
+ if("Y"===s.maleExclude&&t.sex===hx.MALE)continue;
+ if("Y"===s.rangeExclude&&t.unitType===ix.RANGE)continue;
+ if("Y"===s.meleeExclude&&t.unitType===ix.MELEE)continue;
+ if("Y"===s.airExclude&&t.isAir)continue}
+ }
+ this.teamKindNums[n]=r.kindNum,this.teamTrans[n]=r.trans,n++}
+ }
+ }
+ updateAllyButtons(){
+ const t=Math.max(1,ML.maxWave/10),i=this.getPlacedCount(),s=i>=this.maxAllies;
+ this.lblCapacity.text=`${
+ SG.getText("GAME_551","입장가능 영웅")}
+  : ${
+ i}
+  / ${
+ this.maxAllies}
+ `,this.lblCapacity.textColor=s?16729156:16777215,this.updateCapacityPosition();
+ const e=this.currentStageVO;
+ if(e){
+ const t=6710886,s=4521796;
+ i>0&&i<=e.star3?(this.lblStar3.textColor=s,this.lblStar2.textColor=t,this.lblStar1.textColor=t):i>e.star3&&i<=e.star2?(this.lblStar3.textColor=t,this.lblStar2.textColor=s,this.lblStar1.textColor=t):i>e.star2&&i<=e.star1?(this.lblStar3.textColor=t,this.lblStar2.textColor=t,this.lblStar1.textColor=s):(this.lblStar3.textColor=t,this.lblStar2.textColor=t,this.lblStar1.textColor=t)}
+ for(let n=0;
+ n<12;
+ n++){
+ const i=this.allyBtns[n],e=bx.getVO();
+ this.teamKindNums[n]>0?(i.visible=!0,e.kindNum=this.teamKindNums[n],e.trans=this.teamTrans[n],e.level=t,i.setDataWith(n,e),i.hideLevel(),i.hideEnhance(),i.setAlphaToFrame(n===this.selectedSlot?1:.85),i.selected=n===this.selectedSlot):s?(i.visible=!1,i.selected=!1):(i.visible=!0,e.kindNum=-1,i.setDataWith(n,e),i.hideBackground(),i.setAlphaToFrame(n===this.selectedSlot?.9:.4),i.selected=!1)}
+ }
+ updateEnemyButtons(){
+ const t=Math.max(1,ML.maxWave/10)+10,i=this.currentStageVO,s=i?Zjt.parseEnemies(i):new Array(20).fill(null),e=(null==i?void 0:i.enemyShields)?String(i.enemyShields).split("|").map(Number):[],n=(null==i?void 0:i.enemyLevels)?String(i.enemyLevels).split("|").map(Number):[];
+ for(let h=0;
+ h<20;
+ h++){
+ const i=this.enemyBtns[h],r=s[h],o=this.enemyOverlays[h],a=null==o?void 0:o._lblShield,c=null==o?void 0:o._lblLevel;
+ if(r){
+ const s=bx.getVO();
+ s.kindNum=r.kindNum,s.trans=r.trans,s.level=t,i.setDataWith(h,s),i.hideLevel(),i.hideEnhance(),i.setAlphaToFrame(1),i.visible=!0;
+ const o=e[h]||0;
+ if(a&&(1===o?(a.text="O",a.style.fill=16776960):2===o?(a.text="O",a.style.fill=4500223):a.text=""),c){
+ const t=n[h]??1;
+ c.text=7===t?"+":14===t?"++":21===t?"+++":""}
+ }
+ else i.visible=!1,a&&(a.text=""),c&&(c.text="")}
+ this.recenterBattleContainer()}
+ recenterBattleContainer(){
+ var t;
+ const i=(null==(t=this.allyBtns[0])?void 0:t.width)??40,s=140+i,e=this.vsImage.x+this.vsImage.width;
+ let n=0;
+ for(let o=0;
+ o<5;
+ o++)for(let t=0;
+ t<4;
+ t++)if(this.enemyBtns[4*o+t].visible){
+ n=o+1;
+ break}
+ let h=0;
+ if(n>0){
+ const t=n-1,s=this.enemyBtns[4*t];
+ h=s.x+(s.width||i)}
+ const r=Math.max(s,e,h);
+ this.battleContainer.x=.5*(this.bg.width-r)}
+ calcTotalInventory(){
+ const t=new Map,i=wx.getInstance().list;
+ for(const e of i){
+ if(e.kindNum>=1e4)continue;
+ const i=`${
+ e.kindNum}
+ _${
+ e.trans}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const s=wx.getInstance().ownedUnitList;
+ for(const e of s)if(!(e.kindNum>=1e4)){
+ if(e.count>0){
+ const i=`${
+ e.kindNum}
+ _0`;
+ t.set(i,(t.get(i)||0)+e.count)}
+ for(let i=0;
+ i<3;
+ i++)if(e.trans[i]>0){
+ const s=`${
+ e.kindNum}
+ _${
+ i+1}
+ `;
+ t.set(s,(t.get(s)||0)+e.trans[i])}
+ }
+ return t}
+ updateHeroList(){
+ Gzt.removeAll(this.heroVOs);
+ const t=new Map;
+ for(let h=0;
+ h<12;
+ h++){
+ if(this.teamKindNums[h]<=0)continue;
+ const i=`${
+ this.teamKindNums[h]}
+ _${
+ this.teamTrans[h]}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const i=this.calcTotalInventory(),s=wx.getInstance(),e=this.currentStageVO,n=e&&"0"!==String(e.tribes)?new Set(String(e.tribes).split("|").map(Number)):null;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),-1,0,0,0));
+ for(const[h,r]of i){
+ const[i,o]=h.split("_"),a=Number(i),c=s.getBookVO(a);
+ if(e&&c){
+ if(e.gradeMax>0&&c.grade>e.gradeMax)continue;
+ if(n&&!n.has(c.tribe))continue;
+ if("Y"===e.femaleExclude&&c.sex===hx.FEMALE)continue;
+ if("Y"===e.maleExclude&&c.sex===hx.MALE)continue;
+ if("Y"===e.rangeExclude&&c.unitType===ix.RANGE)continue;
+ if("Y"===e.meleeExclude&&c.unitType===ix.MELEE)continue;
+ if("Y"===e.airExclude&&c.isAir)continue}
+ const l=t.get(h)||0;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),a,Number(o),r-l,r))}
+ this.heroVOs.sort((t,i)=>{
+ if(t.kindNum<=0)return-1;
+ if(i.kindNum<=0)return 1;
+ const e=s.getBookVO(t.kindNum),n=s.getBookVO(i.kindNum);
+ if(!e||!n)return 0;
+ const h=1e12*e.grade-1e9*e.evolStage+1e6*t.trans-e.tribe;
+ return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
+ ),this.heroList.dataProvider=QO.chunkArray(this.heroVOs,7)}
+ onClickAllyHero(t){
+ const i=this.teamKindNums[t]<=0,s=this.getPlacedCount()>=this.maxAllies;
+ i&&s||(this.selectedSlot=this.selectedSlot===t?-1:t,this.updateAllyButtons())}
+ onClickHeroFromList(t,i){
+ if(t<=0){
+ if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
+ const t=this.selectedSlot;
+ this.teamKindNums[t]=-1,this.teamTrans[t]=0;
+ let i=-1;
+ for(let s=1;
+ s<=12;
+ s++){
+ const e=(t+s)%12;
+ if(this.teamKindNums[e]>0){
+ i=e;
+ break}
+ }
+ this.selectedSlot=i}
+ }
+ else{
+ const s=`${
+ t}
+ _${
+ i}
+ `;
+ let e=0;
+ for(let n=0;
+ n<12;
+ n++)this.teamKindNums[n]===t&&this.teamTrans[n]===i&&e++;
+ if(e>=(this.calcTotalInventory().get(s)||0))return;
+ if(this.selectedSlot>=0){
+ if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=this.maxAllies)return;
+ this.teamKindNums[this.selectedSlot]=t,this.teamTrans[this.selectedSlot]=i,this.selectedSlot=-1}
+ else{
+ if(this.getPlacedCount()>=this.maxAllies)return;
+ for(let s=0;
+ s<12;
+ s++)if(this.teamKindNums[s]<=0){
+ this.teamKindNums[s]=t,this.teamTrans[s]=i;
+ break}
+ }
+ }
+ this.updateAllyButtons(),this.updateHeroList()}
+ async onStartBattle(){
+ if(!qG.getInstance().isRunning)return;
+ if(!this.currentStageVO)return;
+ if(this.getPlacedCount()<=0)return void u2.getInstance().showMessage(SG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다."));
+ if(this.getPlacedCount()>this.maxAllies)return void u2.getInstance().showMessage(SG.getText("GAME_724","최대 입장가능한 영웅 수를 초과했습니다."));
+ const t=gL.getInstance();
+ if(t.ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_275","티켓이 부족합니다."));
+ const i=t.getStageVO(this.currentStageVO.kindNum);
+ if((i?i.dailyCount:0)>=this.currentStageVO.numTry)return void u2.getInstance().showMessage(SG.getText("COMMON_477","오늘 도전 횟수를 모두 사용했습니다."));
+ $A.saveSpiritTeam(this.currentStageVO.kindNum,this.teamKindNums,this.teamTrans),NU.getInstance().removeAll(),this.hide(),V1t.getInstance().hide();
+ const s=u1t.getInstance();
+ s.setTeam([...this.teamKindNums],[...this.teamTrans]),s.startBattle(this.currentStageVO.kindNum,this.currentStageVO)}
+ async onSweep(){
+ if(!this.currentStageVO)return;
+ const t=gL.getInstance();
+ if(t.ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_275","티켓이 부족합니다."));
+ const i=t.getStageVO(this.currentStageVO.kindNum);
+ if((i?i.dailyCount:0)>=this.currentStageVO.numTry)return void u2.getInstance().showMessage(SG.getText("COMMON_477","오늘 도전 횟수를 모두 사용했습니다."));
+ const s=await rD.getInstance().spirit.sweep(this.currentStageVO.kindNum);
+ if(!1===s.success)return void u2.getInstance().showMessage(SG.getText("COMMON_478","즉시완료 실패"));
+ s.body&&(ML.setUserInfo(s.body),kF.getInstance().updateAll()),lVt.getInstance().markDirty();
+ const e=this.currentStageVO;
+ i0t.getInstance().showSweep(e,()=>{
+ b1t.getInstance().setData(),this.setData(e)}
+ )}
+ onBuyTicket(){
+ const t=gL.getInstance();
+ if(!t.canPurchase())return void u2.getInstance().showMessage(SG.getText("COMMON_342","오늘 더 이상 구매할 수 없습니다."));
+ const i=t.getNextPurchaseCost(),s=OZt.getInstance();
+ s.setData(i,SG.getValueReplace("GAME_600","##",3,"보석으로 티켓 3개를 구매하시겠습니까?")),s.onConfirm=async()=>{
+ const i=await rD.getInstance().spirit.buyTicket();
+ !1!==i.success?(i.body&&(ML.setUserInfo(i.body),i.body.spirit&&t.setData(i.body.spirit),kF.getInstance().updateAll()),this.lblTicket.text=`${
+ t.ticket}
+ `,this.updateLayout(),b1t.getInstance().setData(),u2.getInstance().showMessage(SG.getValueReplace("GAME_601","##",3,"티켓 3개를 구매하였습니다."))):u2.getInstance().showMessage(SG.getText("COMMON_467","구매 실패했습니다."))}
+ ,s.show()}
+ show(){
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),Uzt.showAttackType=!0,this.updateAllyButtons(),this.updateHeroList(),this.show2()}
+ onAdded(){
+ V1t.getInstance().visible=!1;
+ const t=kF.getInstance();
+ t.setMode(CF.TOWER),this.addChild(t)}
+ onRemoved(){
+ V1t.getInstance().visible=!0,V1t.getInstance().addChild(kF.getInstance())}
+ }
+ ;
+ Vt(d1t,"SpriteBattleReadyPopup"),Kt(d1t,"_instance");
+ let f1t=d1t;
+ const p1t=class extends qO{
+ constructor(){
+ super(),Kt(this,"cells",[]),Kt(this,"posList",[]),Kt(this,"kindNumArray",[]);
+ for(let t=0;
+ t<5;
+ t++){
+ const i=new w1t;
+ i.x=2+126*t,i.y=0,this.addChild(i),this.cells.push(i),this.posList.push(i.x)}
+ this.posList.push(630)}
+ get width(){
+ return 630}
+ get height(){
+ return 120}
+ setData(t){
+ const i=t;
+ if(!i)return;
+ this.kindNumArray=i;
+ const s=gL.getInstance(),e=Math.floor(ML.maxWave/100);
+ for(let n=0;
+ n<5;
+ n++){
+ const t=this.cells[n];
+ if(n<i.length){
+ const h=i[n],r=s.getBookVO(h);
+ r?(t.setStage(r,e),t.visible=!0):t.visible=!1}
+ else t.visible=!1}
+ }
+ onClick(t,i){
+ for(let s=0;
+ s<this.cells.length;
+ s++)if(t>this.posList[s]&&t<this.posList[s+1]){
+ if(s<this.kindNumArray.length&&this.cells[s].visible){
+ const t=this.kindNumArray[s],i=gL.getInstance(),e=i.getBookVO(t);
+ if(!e)break;
+ if(Math.floor(ML.maxWave/100)<e.reqLevel){
+ const t=100*e.reqLevel;
+ u2.getInstance().showMessage(SG.getValueReplace("GAME_717","##",t,`최고환생층 ${
+ t}
+ 층 이상에서 접근할 수 있습니다.`));
+ break}
+ if(t>1){
+ const s=i.getStageVO(t-1);
+ if(!s||s.star<=0){
+ u2.getInstance().showMessage(SG.getText("GAME_718","이전 스테이지를 먼저 클리어해야 합니다."));
+ break}
+ }
+ f1t.getInstance().setData(e),f1t.getInstance().show()}
+ break}
+ }
+ }
+ ;
+ Vt(p1t,"SpiritLandItemRenderer");
+ let g1t=p1t;
+ const m1t=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"stageBg"),Kt(this,"lblStage"),Kt(this,"lblStar"),Kt(this,"petSprite"),Kt(this,"lblReward"),Kt(this,"lblTryCount"),Kt(this,"lockIcon"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
+ ),this.bg.width=124,this.bg.height=115,this.addChild(this.bg),this.stageBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_01"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
+ ),this.stageBg.width=40,this.stageBg.height=25,this.stageBg.x=5,this.stageBg.y=5,this.addChild(this.stageBg),this.lblStage=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblStage),this.lblStar=new JD("",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblStar),this.petSprite=new He,this.petSprite.width=60,this.petSprite.height=60,this.petSprite.x=32,this.petSprite.y=25,this.addChild(this.petSprite),this.lblReward=new $B("UI_GEM_ICON","0",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblReward.iconScale=.8,this.addChild(this.lblReward),this.lblTryCount=new JD("",8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblTryCount),this.lockIcon=new He(QA.getTexture("UI_Ekkorr","UI_Lock")),this.lockIcon.x=.5*(124-this.lockIcon.width),this.lockIcon.y=40,this.lockIcon.visible=!1,this.addChild(this.lockIcon)}
+ setStage(t,i){
+ const s=gL.getInstance(),e=s.getStageVO(t.kindNum),n=e?e.star:0,h=e?e.dailyCount:0;
+ let r=i<t.reqLevel;
+ if(!r&&t.kindNum>1){
+ const i=s.getStageVO(t.kindNum-1);
+ (!i||i.star<=0)&&(r=!0)}
+ const o=(t.kindNum-1)%40+1;
+ this.lblStage.text=`${
+ t.chapter}
+ -${
+ o}
+ `,this.stageBg.width=Math.max(40,this.lblStage.width+16),this.lblStage.x=this.stageBg.x+.5*(this.stageBg.width-this.lblStage.width),this.lblStage.y=this.stageBg.y+.5*(this.stageBg.height-this.lblStage.height),n>0?(this.lblStar.text="★".repeat(n),this.lblStar.textColor=16763904):(this.lblStar.text="★",this.lblStar.textColor=6710886),this.lblStar.x=124-this.lblStar.width-5,this.lblStar.y=3,this.lockIcon.visible=r,this.lblTryCount.visible=!r,this.alpha=r?.5:1,"PET"===t.rewardType&&t.petKindNum>0?(this.petSprite.visible=!0,this.lblReward.visible=!1,this.petSprite.texture=QA.getTexture("UI_PET",`UI_PET${
+ t.petKindNum}
+ `),this.petSprite.width=60,this.petSprite.height=60):(this.petSprite.visible=!1,this.lblReward.visible=!0,"GEM"===t.rewardType?(this.lblReward.texture=QA.getTexture("UI_Ekkorr","UI_GEM_ICON"),this.lblReward.textColor=cD.COLOR_DEEP_SKYBLUE):(this.lblReward.texture=QA.getTexture("UI_Ekkorr","PVP_COIN_ON"),this.lblReward.textColor=cD.COLOR_PURPLE_PINK),this.lblReward.text=`${
+ t.reward}
+ `,this.lblReward.x=.5*(124-this.lblReward.width),this.lblReward.y=.6*(this.bg.height-25));
+ const a=t.numTry-h;
+ this.lblTryCount.text=`${
+ a}
+ /${
+ t.numTry}
+ `,this.lblTryCount.x=.5*(124-this.lblTryCount.width),this.lblTryCount.y=92,this.lblTryCount.visible=!0,this.lblTryCount.textColor=a<=0?16729156:6728243}
+ }
+ ;
+ Vt(m1t,"SpiritCell");
+ let w1t=m1t;
+ const v1t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list");
+ const t=V1t.getInstance().contentHeight-60-10;
+ this.list=new d5(g1t,630,t),this.list.x=4,this.list.y=0,this.addChild(this.list),ZZt.getInstance().onChapterChanged=t=>{
+ this.setData(t)}
+ }
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ }
+ onRemoved(){
+ Tei.getInstance().unregisterListItemsGetter("Pet")}
+ setData(t){
+ Tei.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"Pet");
+ const i=gL.getInstance(),s=t??ZZt.getInstance().currentChapter,e=i.getStagesByChapter(s).map(t=>t.kindNum);
+ this.list.dataProvider=QO.chunkArray(e,5),ZZt.getInstance().updateTicket()}
+ get className(){
+ return"SpriteLandSubView"}
+ updateLanguage(){
+ this.setData()}
+ goChapter(t,i=-1){
+ ZZt.getInstance().goChapter(t),-1!=i&&((i-1)%40+1<21?this.list.scrollTo(0):this.list.scrollTo(Math.floor(4.2)))}
+ }
+ ;
+ Vt(v1t,"SpriteLandSubView"),Kt(v1t,"instance");
+ let b1t=v1t;
+ const _1t=class extends qO{
+ constructor(){
+ super(),Kt(this,"cells",[]),Kt(this,"posList",[]),Kt(this,"petKindNums",[]);
+ for(let t=0;
+ t<2;
+ t++){
+ const i=new E1t;
+ i.x=2+315*t,i.y=0,this.addChild(i),this.cells.push(i),this.posList.push(i.x)}
+ this.posList.push(630)}
+ get width(){
+ return 630}
+ get height(){
+ return 98}
+ setData(t){
+ const i=t;
+ if(i){
+ this.petKindNums=i;
+ for(let t=0;
+ t<2;
+ t++){
+ const s=this.cells[t];
+ t<i.length?(s.setData(i[t]),s.visible=!0):s.visible=!1}
+ }
+ }
+ onClick(t,i){
+ for(let s=0;
+ s<this.cells.length;
+ s++)if(t>this.posList[s]&&t<this.posList[s+1]){
+ if(s<this.petKindNums.length&&this.cells[s].visible){
+ const e=t-this.posList[s];
+ this.cells[s].onClick(e,i)}
+ break}
+ }
+ }
+ ;
+ Vt(_1t,"FavoritePetItemRenderer");
+ let y1t=_1t;
+ const M1t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"petIcon"),Kt(this,"lblName"),Kt(this,"lblPiece"),Kt(this,"lblAvailable"),Kt(this,"btnComplete"),Kt(this,"btnMove"),Kt(this,"petKindNum",0),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
+ ),this.bg.width=311,this.bg.height=92,this.addChild(this.bg),this.petIcon=new J2,this.petIcon.x=8,this.petIcon.y=.5*(92-this.petIcon.height),this.addChild(this.petIcon),this.petIcon.eventMode="dynamic",this.petIcon.on("pointertap",this.onPetIconClick,this);
+ const t=this.petIcon.x+this.petIcon.width+10;
+ this.lblName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=t,this.lblName.y=this.petIcon.y,this.addChild(this.lblName),cD.setLabelWrapWidth(this.lblName,this.bg.width-this.lblName.x),this.lblPiece=new JD("",8978244,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPiece.x=t,this.addChild(this.lblPiece),this.lblAvailable=new JD("",6737151,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblAvailable.x=t,this.addChild(this.lblAvailable),this.btnComplete=new gzt(SG.getText("COMMON_379","즉시완료")),this.btnComplete.autoResize=!1,this.btnComplete.width=130,this.btnComplete.height=42,this.btnComplete.x=311-this.btnComplete.width-8,this.btnComplete.y=92-this.btnComplete.height-8,this.addChild(this.btnComplete),this.btnMove=new gzt(SG.getText("COMMON_65","이동")),this.btnMove.visible=!1,this.btnMove.autoResize=!1,this.btnMove.width=this.btnComplete.width,this.btnMove.height=this.btnComplete.height,this.btnMove.x=this.btnComplete.x,this.btnMove.y=this.btnComplete.y,this.addChild(this.btnMove)}
+ setData(t){
+ this.petKindNum=t;
+ const i=cx.getInstance(),s=i.getBookVO(t),e=i.getPetVO(t),n=(null==e?void 0:e.grade)??0;
+ n>0?this.petIcon.setPet(t,n):this.petIcon.setInactive(t),this.lblName.text=SG.getText(`PET_NAME_${
+ t}
+ `,(null==s?void 0:s.name)||""),this.lblName.y=this.petIcon.y+11-.5*this.lblName.height;
+ const h=gL.getInstance(),{
+ remain:r,remainStar3:o,total:a,totalStar3:c}
+ =this.calcTryCount();
+ this.lblAvailable.text=`(${
+ r}
+ /${
+ a}
+ )`,this.lblAvailable.textColor=r<=0?16729156:6737151,this.lblAvailable.y=this.petIcon.y+this.petIcon.height-this.lblAvailable.height+1,this.lblPiece.text=`${
+ (null==e?void 0:e.piece)??0}
+ `,this.lblPiece.y=this.lblAvailable.y-this.lblPiece.height+2;
+ const l=h.ticket>0;
+ o>0?(this.btnComplete.selected=this.btnComplete.activated=l,this.btnComplete.visible=!0,this.btnMove.visible=!1):r>0?(this.btnComplete.visible=!1,this.btnMove.selected=this.btnMove.activated=l,this.btnMove.visible=!0):c>0?(this.btnComplete.selected=this.btnComplete.activated=!1,this.btnComplete.visible=!0,this.btnMove.visible=!1):(this.btnComplete.visible=!1,this.btnMove.selected=this.btnMove.activated=!1,this.btnMove.visible=!0)}
+ calcTryCount(){
+ const t=gL.getInstance(),i=t.getStagesByPetKindNum(this.petKindNum);
+ let s=0,e=0,n=0,h=0;
+ for(const r of i){
+ const i=t.getStageVO(r.kindNum);
+ !i||i.star<1||(n+=r.numTry,s+=Math.max(0,r.numTry-i.dailyCount),i.star>2&&(h+=r.numTry,e+=Math.max(0,r.numTry-i.dailyCount)))}
+ return{
+ remain:s,remainStar3:e,total:n,totalStar3:h}
+ }
+ getSweepableStages(){
+ const t=gL.getInstance();
+ return t.getStagesByPetKindNum(this.petKindNum).filter(i=>{
+ const s=t.getStageVO(i.kindNum);
+ return s&&s.star>=3&&i.numTry-s.dailyCount>0}
+ )}
+ onClick(t,i){
+ this.btnComplete.visible?this.btnComplete.selected&&t>=this.btnComplete.x&&t<=this.btnComplete.x+this.btnComplete.width&&i>=this.btnComplete.y&&i<=this.btnComplete.y+this.btnComplete.height&&this.onComplete():this.btnMove.visible&&t>=this.btnMove.x&&t<=this.btnMove.x+this.btnMove.width&&i>=this.btnMove.y&&i<=this.btnMove.y+this.btnMove.height&&this.onMove()}
+ async onComplete(){
+ var i,s,e,n;
+ if(t.isPrompting)return;
+ const h=gL.getInstance();
+ if(h.ticket<=0)return void u2.getInstance().showMessage(SG.getText("GAME_275","티켓이 부족합니다."));
+ const r=this.getSweepableStages();
+ if(0===r.length)return void u2.getInstance().showMessage(SG.getText("COMMON_477","오늘 도전 횟수를 모두 사용했습니다."));
+ const{
+ remainStar3:o}
+ =this.calcTryCount(),a=S1t.getInstance().maxPromptCount;
+ let c=Math.min(o,a,h.ticket);
+ if(c<=0)return;
+ t.isPrompting=!0;
+ let l=0,u=!1;
+ try{
+ for(const t of r){
+ if(c<=0||h.ticket<=0)break;
+ const r=await rD.getInstance().spirit.sweep(t.kindNum,c);
+ if(!1===r.success)break;
+ (null==(i=r.body)?void 0:i.spirit)&&h.setData(r.body.spirit),(null==(s=r.body)?void 0:s.pet)&&cx.getInstance().setData(r.body.pet);
+ const o=(null==(n=null==(e=r.body)?void 0:e.spirit)?void 0:n.sweepCount)??0;
+ l+=o*(t.reward||0),c-=o,0!==o&&(u=!0)}
+ }
+ finally{
+ t.isPrompting=!1}
+ u&&lVt.getInstance().markDirty(),S1t.getInstance().setData(),u2.getInstance().showMessage(SG.getValueReplace("GAME_1189","##",l,`펫 조각 ${
+ l}
+ 개를 획득했습니다.`))}
+ async onMove(){
+ const t=gL.getInstance(),i=t.getStagesByPetKindNum(this.petKindNum);
+ if(0==i.length)return;
+ let s=-1,e=-1;
+ const n=i.length;
+ for(let h=0;
+ h<n;
+ ++h){
+ const n=t.getStageVO(i[h].kindNum);
+ if(n&&!(n.star<=0)&&!(n.star>2||i[h].numTry-n.dailyCount<1)){
+ s=i[h].chapter,e=i[h].kindNum;
+ break}
+ }
+ -1!=s&&(await C1t.getInstance().clickCloseBtn(),b1t.getInstance().goChapter(s,e))}
+ onPetIconClick(){
+ this.petKindNum>0&&YZt.getInstance().showPet(this.petKindNum)}
+ }
+ ;
+ Vt(M1t,"FavoritePetCell"),Kt(M1t,"isPrompting",!1);
+ let E1t=M1t;
+ const A1t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"btn1"),Kt(this,"btn3"),Kt(this,"btnMax"),Kt(this,"list"),Kt(this,"_maxPromptCount",1);
+ this.btn1=this.makePromptButton(SG.getText("GAME_1190","1회"),140,48),this.btn1.x=94,this.btn1.y=4,this.btn1.onClick=()=>this.setPromptCount(1),this.addChild(this.btn1),this.btn3=this.makePromptButton(SG.getText("GAME_1191","3회"),140,48),this.btn3.x=250,this.btn3.y=4,this.btn3.onClick=()=>this.setPromptCount(3),this.addChild(this.btn3),this.btnMax=this.makePromptButton(SG.getText("GAME_1192","Max"),140,48),this.btnMax.x=406,this.btnMax.y=4,this.btnMax.onClick=()=>this.setPromptCount(999),this.addChild(this.btnMax);
+ const t=V1t.getInstance().contentHeight-60-10-V1t.getInstance().getMenuTabHeight();
+ this.list=new d5(y1t,630,t),this.list.x=4,this.list.y=60,this.addChild(this.list),this.updatePromptButtons()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ get maxPromptCount(){
+ return this._maxPromptCount}
+ makePromptButton(t,i,s){
+ const e=new gzt(t);
+ return e.autoResize=!1,e.width=i,e.height=s,e}
+ setPromptCount(t){
+ this._maxPromptCount=t,this.updatePromptButtons()}
+ updatePromptButtons(){
+ this.btn1.selected=1===this._maxPromptCount,this.btn3.selected=3===this._maxPromptCount,this.btnMax.selected=this._maxPromptCount>=999}
+ setData(){
+ const t=[...gL.getInstance().favoritePets].sort((t,i)=>{
+ var s,e,n,h;
+ const r=cx.getInstance(),o=(null==(s=r.getPetVO(t))?void 0:s.grade)??0,a=(null==(e=r.getPetVO(i))?void 0:e.grade)??0,c=o<5?o:-1,l=a<5?a:-1;
+ if(c!==l)return l-c;
+ const u=(null==(n=r.getPetVO(t))?void 0:n.kindNum)??0;
+ return((null==(h=r.getPetVO(i))?void 0:h.kindNum)??0)-u}
+ );
+ this.list.dataProvider=QO.chunkArray(t,2),C1t.getInstance().updateTicket()}
+ get className(){
+ return"FavoritePetSubView"}
+ updateLanguage(){
+ this.btn1.text=SG.getText("GAME_1190","1회"),this.btn3.text=SG.getText("GAME_1191","3회"),this.btnMax.text=SG.getText("GAME_1192","Max"),this.setData()}
+ }
+ ;
+ Vt(A1t,"FavoritePetSubView"),Kt(A1t,"instance");
+ let S1t=A1t;
+ const T1t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblTicket"),Kt(this,"btnSetting"),Kt(this,"btnBuyTicket"),Kt(this,"btnClose",new kKt),this.setTitle(SG.getText("GAME_1187","즐겨찾기")),this.lblTitle.y-=4,this.lblTicket=new $B("UI_PET_TICKET","15",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_16,"UI_Ekkorr"),this.lblTicket.iconScale=.6,this.lblTicket.x=this.lblTitle.x,this.lblTicket.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblTicket),this.btnClose.x=640-this.btnClose.width-6,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.btnClose.onClick=this.onClose.bind(this),this.addChild(this.btnClose),this.btnBuyTicket=new VB("UI_PET_TICKET",SG.getText("COMMON_7","구매"),.6),this.btnBuyTicket.color=VB.BROWN,this.btnBuyTicket.width=120,this.btnBuyTicket.height=45,this.btnBuyTicket.x=this.btnClose.x-this.btnBuyTicket.width-4,this.btnBuyTicket.y=.5*(this.bg.height-this.btnBuyTicket.height),this.btnBuyTicket.onClick=this.onBuyTicket.bind(this),this.addChild(this.btnBuyTicket),this.btnSetting=new ZL(SG.getText("COMMON_49","설정")),this.btnSetting.color=ZL.BROWN,this.btnSetting.width=110,this.btnSetting.height=45,this.btnSetting.x=this.btnBuyTicket.x-this.btnSetting.width-4,this.btnSetting.y=this.btnBuyTicket.y,this.btnSetting.onClick=this.onSetting.bind(this),this.addChild(this.btnSetting)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateTicket(){
+ this.lblTicket.text=`${
+ gL.getInstance().ticket}
+ `}
+ onClose(){
+ Xt(async()=>{
+ const{
+ PetPopup:t}
+ =await Promise.resolve().then(()=>K1t);
+ return{
+ PetPopup:t}
+ }
+ ,void 0).then(({
+ PetPopup:t}
+ )=>{
+ t.getInstance().goSpiritLandView()}
+ )}
+ async clickCloseBtn(){
+ await this.onClose()}
+ onSetting(){
+ Xt(async()=>{
+ const{
+ FavoritePetSelectPopup:t}
+ =await Promise.resolve().then(()=>odi);
+ return{
+ FavoritePetSelectPopup:t}
+ }
+ ,void 0).then(({
+ FavoritePetSelectPopup:t}
+ )=>{
+ t.getInstance().setData(),t.getInstance().show()}
+ )}
+ onBuyTicket(){
+ const t=gL.getInstance();
+ if(!t.canPurchase())return void u2.getInstance().showMessage(SG.getText("COMMON_342","오늘 더 이상 구매할 수 없습니다."));
+ const i=t.getNextPurchaseCost(),s=OZt.getInstance();
+ s.setData(i,SG.getValueReplace("GAME_600","##",3,"보석으로 티켓 3개를 구매하시겠습니까?")),s.onConfirm=async()=>{
+ const i=await rD.getInstance().spirit.buyTicket();
+ !1!==i.success?(i.body&&(ML.setUserInfo(i.body),i.body.spirit&&t.setData(i.body.spirit),kF.getInstance().updateAll()),S1t.getInstance().setData(),u2.getInstance().showMessage(SG.getValueReplace("GAME_601","##",3,"티켓 3개를 구매하였습니다."))):u2.getInstance().showMessage(SG.getText("COMMON_467","구매 실패했습니다."))}
+ ,s.show()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_1187","즐겨찾기")),this.btnSetting.text=SG.getText("COMMON_49","설정"),this.btnBuyTicket.text=SG.getText("COMMON_7","구매"),this.updateTicket()}
+ }
+ ;
+ Vt(T1t,"FavoritePetSubMenu"),Kt(T1t,"instance");
+ let C1t=T1t;
+ const I1t=class t extends uzt{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.addChild(C1t.getInstance());
+ const t=S1t.getInstance();
+ t.y=C1t.getInstance().height,this.currentSubView=t}
+ get className(){
+ return"FavoritePetView"}
+ }
+ ;
+ Vt(I1t,"FavoritePetView"),Kt(I1t,"instance");
+ let k1t=I1t;
+ const O1t=class t extends uzt{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.addChild(RZt.getInstance());
+ const t=LZt.getInstance();
+ t.y=RZt.getInstance().height,this.currentSubView=t}
+ get className(){
+ return"PetListView"}
+ }
+ ;
+ Vt(O1t,"PetListView"),Kt(O1t,"instance");
+ let x1t=O1t;
+ const R1t=class t extends uzt{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.addChild(jZt.getInstance());
+ const t=KZt.getInstance();
+ t.y=jZt.getInstance().height,this.currentSubView=t}
+ get className(){
+ return"PetMainView"}
+ }
+ ;
+ Vt(R1t,"PetMainView"),Kt(R1t,"instance");
+ let N1t=R1t;
+ const P1t=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"petIcon"),Kt(this,"lblQty"),Kt(this,"lblName"),Kt(this,"lblPrice"),Kt(this,"btnBuy"),Kt(this,"qtyBg"),Kt(this,"vo",null),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.x=5,this.bg.width=630,this.bg.height=90,this.addChild(this.bg),this.petIcon=new J2,this.petIcon.x=24,this.petIcon.y=.5*(this.bg.height-this.petIcon.height)-2,this.addChild(this.petIcon),this.petIcon.eventMode="dynamic",this.petIcon.on("pointertap",this.onPetIconClick,this),this.qtyBg=new He(QA.getTexture("UI_Ekkorr","Quest_bg")),this.qtyBg.eventMode="none",this.qtyBg.tint=13378082,this.qtyBg.width=30,this.qtyBg.height=18,this.qtyBg.x=this.petIcon.x+this.petIcon.width-this.qtyBg.width+4,this.qtyBg.y=this.petIcon.y+this.petIcon.height-this.qtyBg.height-2,this.addChild(this.qtyBg),this.lblQty=new JD("x3",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblQty.eventMode="none",this.lblQty.x=this.qtyBg.x+.5*(this.qtyBg.width-this.lblQty.width),this.lblQty.y=this.qtyBg.y+.5*(this.qtyBg.height-this.lblQty.height),this.addChild(this.lblQty),this.lblName=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.lblName.y=18,this.addChild(this.lblName),this.lblPrice=new $B("UI_GEM","0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPrice.x=145,this.lblPrice.y=50,this.addChild(this.lblPrice),this.btnBuy=new ZL(SG.getText("COMMON_7","구매")),this.btnBuy.color=ZL.BROWN,this.btnBuy.width=130,this.btnBuy.height=60,this.btnBuy.x=this.bg.x+this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.btnBuy.onClick=()=>{
+ this.vo&&t.onBuyClick&&t.onBuyClick(this.vo,this)}
+ ,this.addChild(this.btnBuy)}
+ setData(t){
+ const i=t;
+ this.vo=i;
+ const s=cx.getInstance().getBookVO(i.kindNum),e=(null==s?void 0:s.name)??`Pet ${
+ i.kindNum}
+ `,n=SG.getText(`PET_NAME_${
+ i.kindNum}
+ `,e),h=SG.getText("GAME_711","펫조각");
+ this.lblName.text=`${
+ n}
+  ( ${
+ h}
+  : x${
+ i.piece}
+  )`,this.petIcon.setInactive(i.kindNum),i.currency===TZt.GEM?this.lblPrice.texture=QA.getTexture("UI_Ekkorr","UI_GEM"):this.lblPrice.texture=QA.getTexture("UI_Ekkorr","PVP_COIN_ON"),this.lblPrice.text=`${
+ i.price}
+ `,this.lblQty.text=`x${
+ i.piece}
+ `,this.lblQty.x=this.qtyBg.x+.5*(this.qtyBg.width-this.lblQty.width),this.btnBuy.text=SG.getText("COMMON_7","구매")}
+ clearCache(){
+ }
+ get height(){
+ return this.bg.height+2}
+ onPetIconClick(){
+ this.vo&&this.vo.kindNum>0&&YZt.getInstance().showPet(this.vo.kindNum)}
+ }
+ ;
+ Vt(P1t,"PetShopItemRenderer"),Kt(P1t,"onBuyClick",null);
+ let D1t=P1t;
+ const L1t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"lblEmpty"),Kt(this,"requestPending",!1),this.list=new d5(D1t,640,720),this.list.x=0,this.list.y=0,this.addChild(this.list),this.lblEmpty=new JD("",10066329,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEmpty.x=320-.5*this.lblEmpty.width,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ }
+ onRemoved(){
+ }
+ async setData(t=!1){
+ D1t.onBuyClick=(t,i)=>this.onBuy(t,i);
+ const i=IZt.getInstance();
+ if(t||!i.isLoaded)try{
+ const t=await rD.getInstance().petShop.getInfo();
+ (null==t?void 0:t.success)&&t.body&&(ML.setUserInfo(t.body),i.setData(t.body),kF.getInstance().updateAll())}
+ catch(Xst){
+ }
+ this.refreshList()}
+ refreshList(){
+ const t=IZt.getInstance();
+ 0===t.slots.length?(this.list.dataProvider=[],this.lblEmpty.text=SG.getText("GAME_737","오늘 구매 가능한 펫이 모두 소진되었습니다."),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.lblEmpty.visible=!0):(this.list.dataProvider=t.slots.slice(),this.lblEmpty.visible=!1)}
+ onBuy(t,i){
+ if(this.requestPending)return;
+ if((t.currency===TZt.GEM?ML.gem:ML.honorCoin)<t.price){
+ const i=t.currency===TZt.GEM?"COMMON_352":"GAME_194",s=t.currency===TZt.GEM?"보석이 부족합니다.":"명예코인이 부족합니다.";
+ return void u2.getInstance().showMessage(SG.getText(i,s))}
+ const s=t.currency===TZt.GEM?"UI_GEM_ICON":"PVP_COIN_ON",e=OZt.getInstance();
+ e.setData(t.price,SG.getValueReplace("GAME_738","##",t.piece,`펫 조각 ${
+ t.piece}
+ 개를 구매하시겠습니까?`),s),e.onConfirm=async()=>{
+ if(!this.requestPending){
+ this.requestPending=!0;
+ try{
+ const i=await rD.getInstance().petShop.buy(t.slotIndex);
+ if(!1===(null==i?void 0:i.success))return void wG.getInstance().showError(i);
+ (null==i?void 0:i.body)&&(ML.setUserInfo(i.body),IZt.getInstance().setData(i.body),kF.getInstance().updateAll(),this.refreshList(),u2.getInstance().showMessage(SG.getValueReplace("GAME_739","##",t.piece,`펫 조각 ${
+ t.piece}
+ 개를 획득하였습니다.`)))}
+ catch(Xst){
+ }
+ finally{
+ this.requestPending=!1}
+ }
+ }
+ ,e.show()}
+ get className(){
+ return"PetShopSubView"}
+ updateLanguage(){
+ this.refreshList()}
+ }
+ ;
+ Vt(L1t,"PetShopSubView"),Kt(L1t,"instance");
+ let G1t=L1t;
+ const B1t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblRemainTitle"),Kt(this,"lblRemainTime"),Kt(this,"btnRefresh"),Kt(this,"frameCnt",0),Kt(this,"requestPending",!1),this.setTitle(SG.getText("GAME_570","상점")),this.btnRefresh=new ZL(SG.getText("COMMON_60","새로고침")),this.btnRefresh.color=ZL.BROWN,this.btnRefresh.width=130,this.btnRefresh.height=50,this.btnRefresh.x=640-this.btnRefresh.width-6,this.btnRefresh.y=.5*(this.bg.height-this.btnRefresh.height),this.btnRefresh.onClick=this.onRefresh.bind(this),this.addChild(this.btnRefresh),this.lblRemainTitle=new JD(SG.getText("COMMON_29","남은 시간"),16746598,cD.DEFAULT_FONT_OPTION_15),this.lblRemainTime=new JD("00:00",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.addChild(this.lblRemainTitle),this.addChild(this.lblRemainTime),this.layoutRemainLabels(),this.refreshTime()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ layoutRemainLabels(){
+ const t=this.btnRefresh.x-8;
+ this.lblRemainTime.x=t-this.lblRemainTime.width,this.lblRemainTime.y=.5*(this.bg.height-this.lblRemainTime.height)+1,this.lblRemainTitle.x=this.lblRemainTime.x-this.lblRemainTitle.width-4,this.lblRemainTitle.y=.5*(this.bg.height-this.lblRemainTitle.height)+2}
+ onAdded(){
+ this.frameCnt=0,this.refreshTime(),this.refreshButtonState(),LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ async onFrame(){
+ if(++this.frameCnt<t.FRAME_SKIP)return;
+ this.frameCnt=0,this.refreshTime(),this.refreshButtonState();
+ const i=IZt.getInstance();
+ i.isStale()&&(i.invalidate(),LM.getInstance().remove(this.onFrame,this),await G1t.getInstance().setData(!0),i.isLoaded?(this.frameCnt=0,LM.getInstance().add(this.onFrame,this)):wG.getInstance().show(SG.getText("GAME_1248","게임 데이터를 다시 불러옵니다."),()=>{
+ Xt(async()=>{
+ const{
+ PetPopup:t}
+ =await Promise.resolve().then(()=>K1t);
+ return{
+ PetPopup:t}
+ }
+ ,void 0).then(({
+ PetPopup:t}
+ )=>{
+ t.getInstance().hide()}
+ )}
+ ))}
+ refreshTime(){
+ const t=IZt.getInstance().getRemainingTimeText();
+ this.lblRemainTime.text=t,this.layoutRemainLabels()}
+ refreshButtonState(){
+ const t=IZt.getInstance().canRefresh;
+ this.btnRefresh.activated=!0,this.btnRefresh.alpha=t?1:.5}
+ async onRefresh(){
+ if(!this.requestPending)if(IZt.getInstance().canRefresh){
+ this.requestPending=!0;
+ try{
+ const t=await rD.getInstance().petShop.refresh();
+ if(!1===(null==t?void 0:t.success))return void wG.getInstance().showError(t);
+ (null==t?void 0:t.body)&&(ML.setUserInfo(t.body),IZt.getInstance().setData(t.body),kF.getInstance().updateAll(),G1t.getInstance().updateLanguage(),this.refreshButtonState(),u2.getInstance().showMessage(SG.getText("GAME_741","펫 상점이 새로고침되었습니다.")))}
+ catch(Xst){
+ }
+ finally{
+ this.requestPending=!1}
+ }
+ else u2.getInstance().showMessage(SG.getText("GAME_740","내일 0시(UTC) 이후 새로고침할 수 있습니다."))}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_570","상점")),this.btnRefresh.text=SG.getText("COMMON_60","새로고침"),this.lblRemainTitle.text=SG.getText("COMMON_29","남은 시간"),this.layoutRemainLabels()}
+ }
+ ;
+ Vt(B1t,"PetShopSubMenu"),Kt(B1t,"instance"),Kt(B1t,"FRAME_SKIP",30);
+ let U1t=B1t;
+ const F1t=class t extends uzt{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.addChild(U1t.getInstance());
+ const t=G1t.getInstance();
+ t.y=U1t.getInstance().height,this.currentSubView=t,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ onAdded(){
+ U1t.getInstance().onAdded(),G1t.getInstance().onAdded()}
+ onRemoved(){
+ U1t.getInstance().onRemoved(),G1t.getInstance().onRemoved()}
+ get className(){
+ return"PetShopView"}
+ }
+ ;
+ Vt(F1t,"PetShopView"),Kt(F1t,"instance");
+ let H1t=F1t;
+ const W1t=class t extends uzt{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.addChild(ZZt.getInstance());
+ const t=b1t.getInstance();
+ t.y=ZZt.getInstance().height,this.currentSubView=t,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ onAdded(){
+ ZZt.getInstance().onAdded(),b1t.getInstance().onAdded()}
+ onRemoved(){
+ ZZt.getInstance().onRemoved(),b1t.getInstance().onRemoved()}
+ get className(){
+ return"SpriteLandView"}
+ }
+ ;
+ Vt(W1t,"SpriteLandView"),Kt(W1t,"instance");
+ let $1t=W1t;
+ const j1t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"tabMain"),Kt(this,"tabPetList"),Kt(this,"tabPlateau"),Kt(this,"tabShop"),Kt(this,"tabPetListRedDot",new JL),Kt(this,"viewContainer",new Ge),Kt(this,"_currentView",null),Kt(this,"_activeIndex",0),Kt(this,"enterFrameCount",0),Kt(this,"onEnterFrame",Vt(()=>{
+ this.visible&&(++this.enterFrameCount<30||(this.enterFrameCount=0,this.updatePetListRedDot()))}
+ ,"onEnterFrame")),Kt(this,"spiritLoadPromise",null),Kt(this,"onVisibilityChange",Vt(()=>{
+ document.hidden||this.selectTab(this._activeIndex)}
+ ,"onVisibilityChange")),Kt(this,"onPetListUpdateBind"),this.bg.height<880&&(this.y=Math.max(0,VA.safeHeight-880),this.bg.height=VA.safeHeight-this.y),this.btnClose.y=-this.btnClose.height-1,this.viewContainer.x=0,this.viewContainer.y=t.CONTENT_TOP_Y,this.addChild(this.viewContainer),this.tabMain=new gzt(SG.getText("GAME_566","메인"),120),this.tabPetList=new gzt(SG.getText("GAME_568","펫 목록"),120),this.tabPlateau=new gzt(SG.getText("GAME_569","정령의 고원"),120),this.tabShop=new gzt(SG.getText("GAME_570","상점"),120);
+ const i=[this.tabMain,this.tabPetList,this.tabPlateau,this.tabShop],s=t.TAB_WIDTH*i.length+t.TAB_GAP*(i.length-1),e=Math.floor(.5*(this.bg.width-s)),n=this.bg.height-t.TAB_HEIGHT-t.TAB_BOTTOM_MARGIN;
+ for(let h=0;
+ h<i.length;
+ h++){
+ const s=i[h];
+ s.autoResize=!1,s.width=t.TAB_WIDTH,s.height=t.TAB_HEIGHT,s.allowMultiline=!0,s.text=s.text,s.x=e+h*(t.TAB_WIDTH+t.TAB_GAP),s.y=n,s.index=h,s.onClick=()=>this.selectTab(h),this.addChild(s)}
+ this.tabPetList.addChild(this.tabPetListRedDot),this.tabPetListRedDot.x=t.TAB_WIDTH-30,this.tabPetListRedDot.y=-8,this.tabPetListRedDot.visible=!1,this.selectTab(0),Tei.getInstance().registerSubMenuButtonGetter(t=>"tabPlateau"===t&&this.tabPlateau.visible?{
+ parent:this,btn:{
+ x:this.tabPlateau.x,y:this.tabPlateau.y,width:this.tabPlateau.width,height:this.tabPlateau.height}
+ }
+ :null)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onAdded(){
+ super.onAdded(),this.setPetListUpdate(!0)}
+ onRemoved(){
+ super.onRemoved(),this.setPetListUpdate(!1);
+ const t=Hjt.getInstance();
+ t.petStep=3!=t.petStep?0:t.petStep}
+ updatePetListRedDot(){
+ const t=cx.getInstance().hasAnyEvolvable();
+ this.tabPetListRedDot.visible=t,t?this.tabPetListRedDot.show():this.tabPetListRedDot.hide()}
+ selectTab(t){
+ this._activeIndex=t;
+ const i=[this.tabMain,this.tabPetList,this.tabPlateau,this.tabShop];
+ for(let n=0;
+ n<i.length;
+ n++)i[n].selected=n===t;
+ const s=Hjt.getInstance();
+ s.petStep=3!=s.petStep?1:s.petStep;
+ let e=null;
+ switch(t){
+ case 0:e=N1t.getInstance(),jZt.getInstance().updateLanguage(),KZt.getInstance().setData();
+ break;
+ case 1:e=x1t.getInstance(),RZt.getInstance().updateLanguage(),LZt.getInstance().setData();
+ break;
+ case 2:s.petStep=3!=s.petStep?2:s.petStep,e=$1t.getInstance(),ZZt.getInstance().updateLanguage(),gL.getInstance().isStale()&&gL.getInstance().invalidate(),this.ensureSpiritData().then(()=>{
+ b1t.getInstance().setData()}
+ );
+ break;
+ case 3:e=H1t.getInstance(),U1t.getInstance().updateLanguage(),IZt.getInstance().isStale()&&IZt.getInstance().invalidate(),G1t.getInstance().setData()}
+ e&&this.setCurrentView(e)}
+ onMenuClick(t){
+ t!=this._activeIndex&&this.selectTab(t)}
+ ensureSpiritData(){
+ return gL.getInstance().isDataLoaded?Promise.resolve():(this.spiritLoadPromise||(this.spiritLoadPromise=rD.getInstance().spirit.getInfo().then(t=>{
+ var i;
+ (null==(i=null==t?void 0:t.body)?void 0:i.spirit)&&(gL.getInstance().setData(t.body.spirit),this.updateFavoritePets()),this.spiritLoadPromise=null}
+ )),this.spiritLoadPromise)}
+ get currentView(){
+ return this._currentView}
+ goFavoriteView(){
+ this.setCurrentView(k1t.getInstance()),S1t.getInstance().setData()}
+ goSpiritLandView(){
+ this.setCurrentView($1t.getInstance()),b1t.getInstance().setData()}
+ setCurrentView(t){
+ this._currentView!==t&&(this._currentView&&this._currentView.parent&&this.viewContainer.removeChild(this._currentView),this._currentView=t,this._currentView&&this.viewContainer.addChild(this._currentView))}
+ get contentHeight(){
+ return this.bg.height-t.CONTENT_TOP_Y-t.TAB_HEIGHT-t.TAB_BOTTOM_MARGIN}
+ show(){
+ kF.getInstance().setMode(CF.TOWER),this.tabMain.text=SG.getText("GAME_567","메인"),this.tabPetList.text=SG.getText("GAME_568","펫 목록"),this.tabPlateau.text=SG.getText("GAME_569","정령의 고원"),this.tabShop.text=SG.getText("GAME_570","상점"),this.selectTab(this._activeIndex),this.updatePetListRedDot(),LM.getInstance().remove(this.onEnterFrame,this),LM.getInstance().add(this.onEnterFrame,this),this.show2(),this.ensureSpiritData(),document.addEventListener("visibilitychange",this.onVisibilityChange)}
+ hide(){
+ kF.getInstance().setMode(CF.NORMAL),LM.getInstance().remove(this.onEnterFrame,this),document.removeEventListener("visibilitychange",this.onVisibilityChange),super.hide(),this.setCurrentView(null)}
+ get className(){
+ return"PetPopup"}
+ getMenuTabHeight(){
+ return this.tabMain.height}
+ async updateFavoritePets(){
+ var t;
+ const i=gL.getInstance(),s=Math.floor(ML.maxWave/100),e=[],n=[],h=i.favoritePets.length;
+ let r;
+ for(let a=0;
+ a<h;
+ ++a){
+ r=i.getStagesByPetKindNum(i.favoritePets[a]);
+ let t=0;
+ const h=r.length;
+ for(let e=0;
+ e<h&&!(r[e].reqLevel>s);
+ ++e){
+ const s=i.getStageVO(r[e].kindNum);
+ if(!s||s.star<=0)break;
+ t++}
+ 0===t?n.push(i.favoritePets[a]):e.push(i.favoritePets[a])}
+ if(0==n.length)return;
+ const o=await rD.getInstance().spirit.saveFavoritePets(e);
+ o.success&&(null==(t=o.body)?void 0:t.spirit)&&gL.getInstance().setData(o.body.spirit)}
+ setPetListUpdate(t){
+ cS.getInstance().removeEventListener("PetListUpdate",this.onPetListUpdateBind),t&&(this.onPetListUpdateBind=this.onPetListUpdate.bind(this),cS.getInstance().addEventListener("PetListUpdate",this.onPetListUpdateBind))}
+ onPetListUpdate(t){
+ 1==this._activeIndex&&LZt.getInstance().setData()}
+ }
+ ;
+ Vt(j1t,"PetPopup"),Kt(j1t,"_instance"),Kt(j1t,"TAB_HEIGHT",60),Kt(j1t,"TAB_GAP",1),Kt(j1t,"TAB_WIDTH",159),Kt(j1t,"TAB_BOTTOM_MARGIN",5),Kt(j1t,"CONTENT_TOP_Y",40);
+ let V1t=j1t;
+ const K1t=Object.freeze(Object.defineProperty({
+ __proto__:null,PetPopup:V1t}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),z1t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblRank",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblScore",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),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)}
+ setData(t){
+ this.data=t,this.lblRank.text=`${
+ t.rank}
+ `,this.lblName.text=t.name,this.lblScore.text=t.score.toLocaleString(),t.name===ML.name?(this.lblName.textColor=cD.COLOR_YELLOW,this.lblRank.textColor=cD.COLOR_YELLOW):(this.lblName.textColor=16777215,this.lblRank.textColor=16777215)}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(z1t,"DailyRankingItemRenderer");
+ let q1t=z1t;
+ const Y1t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblRank",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"iconGem"),Kt(this,"lblGem",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"iconHonorCoin"),Kt(this,"lblHonorCoin",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=610,this.bg.height=48,this.bg.x=5,this.addChild(this.bg);
+ const t=.5*(this.bg.height-this.lblRank.height);
+ this.lblRank.x=20,this.lblRank.y=t,this.addChild(this.lblRank),this.iconGem=new He(QA.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=22,this.iconGem.height=22,this.iconGem.x=234,this.iconGem.y=.5*(this.bg.height-22),this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+28,this.lblGem.y=t,this.addChild(this.lblGem),this.iconHonorCoin=new He(QA.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonorCoin.width=22,this.iconHonorCoin.height=22,this.iconHonorCoin.x=420,this.iconHonorCoin.y=.5*(this.bg.height-22),this.addChild(this.iconHonorCoin),this.lblHonorCoin.x=this.iconHonorCoin.x+28,this.lblHonorCoin.y=t,this.addChild(this.lblHonorCoin)}
+ setData(t){
+ this.data=t,this.lblRank.text=SG.getValueReplace("GAME_97","##",t.rank,`${
+ t.rank}
+ 위`),this.lblGem.text=String(t.gem),this.lblHonorCoin.text=String(t.honorCoin),this.lblRank.x=10+.5*(80-this.lblRank.width)}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(Y1t,"DailyRewardItemRenderer");
+ let X1t=Y1t;
+ const J1t=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_359","일일 랭킹전 안내");
+ const t=[`1. ${
+ SG.getText("GAME_360","일일랭킹전은 최대 30명이 경쟁합니다.")}
+ `,`2. ${
+ SG.getText("GAME_361","24시간동안 가장 높은곳에서 환생한 유저 순으로 랭킹이 정해집니다.")}
+ `,`3. ${
+ SG.getText("GAME_362","보상은 하루가 끝나면, 우편으로 전송됩니다.")}
+ `];
+ this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(J1t,"DailyRankingGuidePopup"),Kt(J1t,"_instance");
+ let Q1t=J1t;
+ const Z1t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"btnRefresh",new zWt("새로고침",110)),Kt(this,"btnReward",new zWt("보상",120)),Kt(this,"btnGuide"),this.closeBtn.visible=!0,this.closeBtn.eventMode="static",this.closeBtn.on("pointertap",this.onBack,this),this.btnReward.width=120,this.btnReward.height=50,this.btnReward.x=this.closeBtn.x-this.btnReward.width-5,this.btnReward.y=.5*(this.bg.height-this.btnReward.height),this.btnReward.on("pointertap",this.onReward,this),this.addChild(this.btnReward),this.btnRefresh.width=110,this.btnRefresh.height=50,this.btnRefresh.x=this.btnReward.x-this.btnRefresh.width-5,this.btnRefresh.y=.5*(this.bg.height-this.btnRefresh.height),this.btnRefresh.on("pointertap",this.onRefresh,this),this.addChild(this.btnRefresh),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ Q1t.getInstance().showGuide()}
+ ),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onBack(){
+ i3t.getInstance().setData(),e3t.getInstance().currentSubView=i3t.getInstance()}
+ onRefresh(){
+ s2t.getInstance().refresh()}
+ onReward(){
+ s2t.getInstance().toggleRewards()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_78","일일 랭킹전")),this.btnReward.text=SG.getText("COMMON_22","보상"),this.btnReward.x=this.closeBtn.x-this.btnReward.width-5,this.btnRefresh.text=SG.getText("COMMON_60","새로고침"),this.btnRefresh.x=this.btnReward.x-this.btnRefresh.width-5,this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
+ }
+ ;
+ Vt(Z1t,"DailyBattleSubMenu"),Kt(Z1t,"instance");
+ let t2t=Z1t;
+ const i2t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"lblMyRank",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblMyScore",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblTimer",new JD("",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblTotalCount",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblNotJoined",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnJoin",new eG(SG.getText("COMMON_371","참여하기"))),Kt(this,"joined",!1),Kt(this,"rewardList"),Kt(this,"lblHdrRank",new JD("등수",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrGem",new JD("보석",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrHonorCoin",new JD("명예코인",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"showingRewards",!1),Kt(this,"cachedRewards",null),Kt(this,"lastFetchTime",0),Kt(this,"cachedData",null),Kt(this,"lastRefreshTime",0),Kt(this,"timerRunning",!1),Kt(this,"timerUpdateCount",0),this.addChild(t2t.getInstance());
+ const t=t2t.getInstance().height;
+ this.lblMyRank.x=15,this.lblMyRank.y=t+10,this.addChild(this.lblMyRank),this.lblMyScore.x=15,this.lblMyScore.y=this.lblMyRank.y+25,this.addChild(this.lblMyScore),this.lblTimer.x=400,this.lblTimer.y=t+10,this.addChild(this.lblTimer),this.lblTotalCount.x=400,this.lblTotalCount.y=this.lblTimer.y+25,this.addChild(this.lblTotalCount);
+ const i=t+65,s=VA.listHeight-i+t;
+ this.list=new KO(q1t,630,s),this.list.x=10,this.list.y=i,this.addChild(this.list),this.lblNotJoined.x=150,this.lblNotJoined.y=t+120,this.addChild(this.lblNotJoined),this.btnJoin.text=SG.getText("COMMON_371","참여하기"),this.btnJoin.color=ZL.GREEN,this.btnJoin.width=200,this.btnJoin.height=55,this.btnJoin.x=.5*(640-this.btnJoin.width),this.btnJoin.y=t+180,this.btnJoin.onClick=this.onJoin.bind(this),this.addChild(this.btnJoin);
+ const e=t+30,n=VA.listHeight-e+t;
+ this.rewardList=new KO(X1t,630,n),this.rewardList.x=10,this.rewardList.y=e,this.rewardList.visible=!1,this.addChild(this.rewardList),this.lblHdrRank.x=25,this.lblHdrRank.y=t+5,this.lblHdrRank.visible=!1,this.addChild(this.lblHdrRank),this.lblHdrGem.x=250,this.lblHdrGem.y=t+5,this.lblHdrGem.visible=!1,this.addChild(this.lblHdrGem),this.lblHdrHonorCoin.x=435,this.lblHdrHonorCoin.y=t+5,this.lblHdrHonorCoin.visible=!1,this.addChild(this.lblHdrHonorCoin),this.showNotJoinedState(),this.on("removed",this.onRemoved.bind(this))}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ this.showingRewards&&this.hideRewards()}
+ setData(){
+ t2t.getInstance().updateLanguage();
+ const i=Date.now();
+ null!=this.cachedData&&i-this.lastFetchTime<t.CACHE_DURATION?this.showJoinedState(this.cachedData):this.loadInfo()}
+ refresh(){
+ const i=Date.now();
+ i-this.lastRefreshTime<t.REFRESH_COOLDOWN||(this.lastRefreshTime=i,this.loadInfo())}
+ async loadInfo(){
+ const t=await rD.getInstance().dailyRanking.getInfo(!0);
+ !1!==t.success?(this.lastFetchTime=Date.now(),null==t.body?(this.cachedData=null,this.showNotJoinedState()):(this.cachedData=t.body,this.showJoinedState(t.body)),this.showingRewards&&this.hideRewards()):wG.getInstance().showError(t)}
+ async onJoin(){
+ var t;
+ const i=await rD.getInstance().dailyRanking.join(!0);
+ !1!==i.success?(lVt.getInstance().markDirty(),this.cachedData=i.body,this.lastFetchTime=Date.now(),this.showJoinedState(i.body),oVt.getInstance().updateDailyRanking(!0,(null==(t=i.body)?void 0:t.myScore)??0),wVt.getInstance().getStatus()):wG.getInstance().showError(i)}
+ async toggleRewards(){
+ if(this.showingRewards)return void this.hideRewards();
+ if(null!=this.cachedRewards)return void this.showRewards(this.cachedRewards);
+ const t=await rD.getInstance().dailyRanking.getRewards(!0);
+ !1!==t.success?(this.cachedRewards=t.body??[],this.showRewards(this.cachedRewards)):wG.getInstance().showError(t)}
+ showRewards(t){
+ this.showingRewards=!0,this.lblMyRank.visible=!1,this.lblMyScore.visible=!1,this.lblTimer.visible=!1,this.lblTotalCount.visible=!1,this.list.visible=!1,this.lblNotJoined.visible=!1,this.btnJoin.visible=!1,this.lblHdrRank.text=SG.getText("COMMON_388","등수"),this.lblHdrGem.text=SG.getText("COMMON_350","보석"),this.lblHdrHonorCoin.text=SG.getText("GAME_88","명예코인"),this.lblHdrRank.visible=!0,this.lblHdrGem.visible=!0,this.lblHdrHonorCoin.visible=!0,this.rewardList.dataProvider=t,this.rewardList.visible=!0}
+ hideRewards(){
+ this.showingRewards=!1,this.lblHdrRank.visible=!1,this.lblHdrGem.visible=!1,this.lblHdrHonorCoin.visible=!1,this.rewardList.visible=!1,this.joined&&this.cachedData?this.showJoinedState(this.cachedData):this.showNotJoinedState()}
+ showNotJoinedState(){
+ this.joined=!1,this.stopTimer(),this.lblNotJoined.text=SG.getText("GAME_92","일일 랭킹전에 참여하지 않았습니다."),this.lblNotJoined.x=.5*(640-this.lblNotJoined.width),this.lblNotJoined.visible=!0,this.btnJoin.text=SG.getText("COMMON_371","참여하기"),this.btnJoin.x=.5*(640-this.btnJoin.width),this.btnJoin.visible=!0,this.lblMyRank.visible=!1,this.lblMyScore.visible=!1,this.lblTimer.visible=!1,this.lblTotalCount.visible=!1,this.list.visible=!1}
+ showJoinedState(t){
+ this.joined=!0,this.lblNotJoined.visible=!1,this.btnJoin.visible=!1,this.lblMyRank.visible=!0,this.lblMyScore.visible=!0,this.lblTimer.visible=!0,this.lblTotalCount.visible=!0,this.list.visible=!0,this.lblMyRank.text=`${
+ SG.getText("COMMON_374","내 순위")}
+ : ${
+ t.myRank}
+ `,this.lblMyScore.text=`${
+ SG.getText("COMMON_375","내 점수")}
+ : ${
+ t.myScore.toLocaleString()}
+ `,this.lblTotalCount.text=`${
+ SG.getText("COMMON_372","참가자")}
+ : ${
+ t.totalCount}
+ `,t.topEntries&&t.topEntries.length>0?this.list.dataProvider=t.topEntries:this.list.dataProvider=[],this.startTimer()}
+ startTimer(){
+ this.timerRunning||(this.timerRunning=!0,this.timerUpdateCount=0,this.updateTimer(),LM.getInstance().add(this.updateTimer,this))}
+ stopTimer(){
+ this.timerRunning&&(this.timerRunning=!1,LM.getInstance().remove(this.updateTimer,this))}
+ updateTimer(){
+ var t,i;
+ if(++this.timerUpdateCount<30)return;
+ if(null==(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent))return void this.stopTimer();
+ this.timerUpdateCount=0;
+ const s=tx.time;
+ if(s<=0)return;
+ const e=new Date(s);
+ e.setUTCHours(24,0,0,0);
+ const n=e.getTime()-s;
+ if(n<=0)return this.lblTimer.text=SG.getText("COMMON_32","종료"),void this.stopTimer();
+ const h=Math.floor(n/36e5),r=Math.floor(n%36e5/6e4),o=Math.floor(n%6e4/1e3),a=h.toString().padStart(2,"0"),c=r.toString().padStart(2,"0"),l=o.toString().padStart(2,"0");
+ this.lblTimer.text=`${
+ SG.getText("COMMON_29","남은 시간")}
+ : ${
+ a}
+ :${
+ c}
+ :${
+ l}
+ `}
+ get className(){
+ return"DailyBattleSubView"}
+ updateLanguage(){
+ t2t.getInstance().updateLanguage(),this.joined&&this.cachedData?this.showJoinedState(this.cachedData):this.joined||(this.lblNotJoined.text=SG.getText("GAME_92","일일 랭킹전에 참여하지 않았습니다."),this.btnJoin.text=SG.getText("COMMON_371","참여하기"))}
+ }
+ ;
+ Vt(i2t,"DailyBattleSubView"),Kt(i2t,"instance"),Kt(i2t,"CACHE_DURATION",6e5),Kt(i2t,"REFRESH_COOLDOWN",6e4);
+ let s2t=i2t;
+ const e2t=class t{
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ goPvp(){
+ CYt.getInstance().isPVPBattlePopup()||(Lni.getInstance().onMenuClickByIndex(4),B5t.getInstance().show())}
+ goDungeon(){
+ NU.getInstance().children.length>0&&(NU.getInstance().removeChildren(),kF.ensureMounted(Zqt.getInstance())),CYt.getInstance().isDungeonSubView()||(Lni.getInstance().onMenuClickByIndex(4),F0t.getInstance().setData(),e3t.getInstance().currentSubView=F0t.getInstance())}
+ goDailyRanking(){
+ NU.getInstance().children.length>0&&(NU.getInstance().removeChildren(),kF.ensureMounted(Zqt.getInstance())),CYt.getInstance().isDailyBattleSubView()||(Lni.getInstance().onMenuClickByIndex(4),s2t.getInstance().setData(),e3t.getInstance().currentSubView=s2t.getInstance())}
+ goTower(){
+ NU.getInstance().children.length>0&&(NU.getInstance().removeChildren(),kF.ensureMounted(Zqt.getInstance())),CYt.getInstance().isTowerSubView()||(Lni.getInstance().onMenuClickByIndex(4),m0t.getInstance().setData(),e3t.getInstance().currentSubView=m0t.getInstance())}
+ goSpritLand(){
+ NU.getInstance().children.length>0&&(NU.getInstance().removeChildren(),kF.ensureMounted(Zqt.getInstance())),CYt.getInstance().isPetPopup()||Aei.getInstance().executeOnPetBtnClick2(),V1t.getInstance().onMenuClick(2)}
+ async goPaymentShop(t,i=null){
+ const s=t5.getInstance();
+ if(s.isReviewShop())return;
+ const e=s.unlockWave;
+ if(0==CL.getInstance().stage&&ML.maxWave<e&&ML.wave<e)return void u2.getInstance().showMessage(SG.getValueReplace("GAME_34","##",e,`${
+ e}
+  wave 이상에서 개방됩니다.`));
+ const n=bYt.getInstance();
+ 0==CYt.getInstance().isShopView()&&(n.setDataCallback=i,i=null,await Lni.getInstance().onMenuClickByIndex(5)),0==CYt.getInstance().isShopPaySubView()&&SYt.getInstance().clickTab(1),t!=n.getActiveIndex()&&n.clickTab(t),i&&i()}
+ async goPaymentShopWithProductIds(t){
+ const i=Vt(()=>{
+ bYt.getInstance().scrollWithProductIds(t)}
+ ,"callback");
+ this.goPaymentShop(1,i)}
+ goInventory(){
+ NU.getInstance().children.length>0&&(NU.getInstance().removeChildren(),kF.ensureMounted(Zqt.getInstance())),CYt.getInstance().isInventoryPopup()||Aei.getInstance().executeOnInventoryBtnClick()}
+ }
+ ;
+ Vt(e2t,"ShortcutManager"),Kt(e2t,"instance");
+ let n2t=e2t;
+ const h2t=class t extends OB{
+ constructor(){
+ super(),Kt(this,"markerText"),this.markerText=new AB("@",this.width-80,16,cD.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.markerText),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_1203","화석 발굴");
+ const t=[SG.getText("GAME_1205","화석발굴 이벤트는 한달간 진행됩니다."),SG.getText("GAME_1206","매일 00:00:00 ( utc )에 망치가 30개씩 제공됩니다."),SG.getText("GAME_1207","화석은 흰색/ 녹색/ 파란색/ 보라색/ 붉은색으로 총 5단계가 있고, 등급이 높을수록 보상을 많이 줍니다."),SG.getText("GAME_1208","비서도 일정시간마다 망치를 구해옵니다. ( 고급비서는 2배 )"),SG.getText("GAME_1209","이벤트가 종료하면, 진행된 모든 단계가 초기화 됩니다.")];
+ this.markerText.text=t.map(t=>`@ ${
+ t}
+ `).join("\n"),this.markerText.x=30,this.markerText.y=80,this.height=this.markerText.y+this.markerText.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.45*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(h2t,"MineGuidePopup"),Kt(h2t,"_instance");
+ let r2t=h2t;
+ const o2t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"xId",0),Kt(this,"yId",0),Kt(this,"img",new He),Kt(this,"_health",0),this.img.x=.5*(t.CELL_W-t.SPRITE_W),this.img.y=.5*(t.CELL_H-t.SPRITE_H),this.addChild(this.img)}
+ set health(t){
+ if(t<0&&(t=0),this._health=t,t<=0)return void(this.visible=!1);
+ this.visible=!0;
+ const i=Math.max(1,Math.min(12,Math.ceil(t))),s=QA.getTexture("UI_MINE",`NumBlock_${
+ i}
+ _1.png`);
+ s&&(this.img.texture=s)}
+ get health(){
+ return this._health}
+ applyDamage(t){
+ this.health=this._health-t}
+ reset(){
+ this._health=0,this.visible=!0}
+ }
+ ;
+ Vt(o2t,"Block"),Kt(o2t,"CELL_W",70),Kt(o2t,"CELL_H",72),Kt(o2t,"SPRITE_W",72),Kt(o2t,"SPRITE_H",82);
+ let a2t=o2t;
+ const c2t=class extends Ge{
+ constructor(){
+ super(),Kt(this,"xId",0),Kt(this,"yId",0),Kt(this,"grade",1),Kt(this,"kindNum",0),Kt(this,"num",0),Kt(this,"isExcavated",!1),Kt(this,"img",new He),this.addChild(this.img)}
+ setData(t){
+ this.xId=t.x,this.yId=t.y,this.kindNum=t.kindNum,this.num=t.num,this.grade=Math.max(1,Math.min(5,t.grade??1)),this.isExcavated=!1,this.visible=t.num>0;
+ const i=QA.getTexture("UI_MINE",`randomBox${
+ this.grade}
+ .png`);
+ i&&(this.img.texture=i),this.img.x=.5*(a2t.CELL_W-this.img.width),this.img.y=.5*(a2t.CELL_H-this.img.height)}
+ }
+ ;
+ Vt(c2t,"MineBoxObj");
+ let l2t=c2t;
+ const u2t=class extends Ge{
+ constructor(){
+ super(),Kt(this,"xIndex",0),Kt(this,"yIndex",0),Kt(this,"shape","square"),Kt(this,"grade",1),Kt(this,"kindNum",0),Kt(this,"num",0),Kt(this,"isExcavated",!1),Kt(this,"img",new He),this.addChild(this.img)}
+ setData(t){
+ this.shape=t.shape,this.grade=Math.max(1,Math.min(7,t.grade??1)),this.kindNum=t.kindNum,this.num=t.num,this.isExcavated=!1;
+ const i=t.coordinates[0];
+ this.xIndex=i.x,this.yIndex=i.y;
+ const s=`BoneBox_${
+ t.shape}
+ _${
+ this.grade}
+ .png`,e=QA.getTexture("UI_MINE",s);
+ e&&(this.img.texture=e);
+ const{
+ w:n,h}
+ =this.getCellSize(),r=n*a2t.CELL_W,o=h*a2t.CELL_H;
+ this.img.x=.5*(r-this.img.width),this.img.y=.5*(o-this.img.height)}
+ getCellSize(){
+ return"square"===this.shape?{
+ w:2,h:2}
+ :"vLine"===this.shape?{
+ w:1,h:4}
+ :{
+ w:4,h:1}
+ }
+ }
+ ;
+ Vt(u2t,"TreasureChest");
+ let d2t=u2t;
+ const f2t=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lbl"),Kt(this,"count",0),Kt(this,"duration",180),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:6,topHeight:6,rightWidth:6,bottomHeight:6}
+ ),this.bg.alpha=.7,this.bg.width=640,this.bg.height=50,this.addChild(this.bg),this.lbl=new JD("Toast",cD.DEFAULT_COLOR),this.lbl.x=.5*(this.bg.width-this.lbl.width),this.lbl.y=25,this.addChild(this.lbl),this.eventMode="none"}
+ show(t,i,s=cD.DEFAULT_COLOR,e=null,n=!0,h=180,r=.7){
+ this.lbl.text=t,cD.setLabelWrapWidth(this.lbl,this.bg.width-10),this.lbl.textColor=s,this.lbl.x=.5*(this.bg.width-this.lbl.width),this.bg.height=this.lbl.height+2*this.lbl.y,this.y=i-this.height,this.duration=h,this.bg.alpha=r,null==e&&(e=YD.getInstance()),e&&e.addChild(this),1==n&&this.startCheckHide(),BVt.showItemsInVertical([this])}
+ hide(){
+ this.parent&&this.parent.removeChild(this)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ startCheckHide(){
+ this.count=0,LM.getInstance().add(this.checkHide,this)}
+ checkHide(){
+ ++this.count>this.duration&&(this.count=0,this.count=0,this.hide(),LM.getInstance().remove(this.checkHide,this))}
+ }
+ ;
+ Vt(f2t,"BaseToast");
+ let p2t=f2t;
+ const g2t=class t extends p2t{
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ constructor(){
+ super()}
+ }
+ ;
+ Vt(g2t,"Toast"),Kt(g2t,"_instance");
+ let m2t=g2t;
+ const w2t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"xNum",0),Kt(this,"yNum",0),Kt(this,"blocks",[]),Kt(this,"revealedChests",new Map),Kt(this,"revealedBoxes",new Map),Kt(this,"blockContainer",new Ge),Kt(this,"chestContainer",new Ge),Kt(this,"boxContainer",new Ge),Kt(this,"fxContainer",new Ge),Kt(this,"xSpace",a2t.CELL_W),Kt(this,"ySpace",a2t.CELL_H),Kt(this,"gridBg",new Lf),Kt(this,"initialized",!1),Kt(this,"gameStarted",!1),Kt(this,"gameEnded",!1),Kt(this,"pending",!1),Kt(this,"onAllChestsExcavated",null),Kt(this,"onComplete",null),Kt(this,"onHammerUsed",null),Kt(this,"onDamageAndExcavated",null),Kt(this,"onError",null),Kt(this,"onHammerEmpty",null),this.addChild(this.gridBg),this.addChild(this.chestContainer),this.addChild(this.boxContainer),this.addChild(this.blockContainer),this.addChild(this.fxContainer)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ async initialize(){
+ this.initialized||(this.initialized=!0,this.eventMode="dynamic",this.on("pointerdown",this.onPointerDown,this))}
+ async startGame(){
+ var t,i,s;
+ if(this.gameStarted)return!0;
+ const e=jG.getInstance();
+ if(!e.instance){
+ const n=await rD.getInstance().mine.start(!0);
+ if(!n||!1===n.success)return null==(t=this.onError)||t.call(this,(null==n?void 0:n.error)??null,n),!1;
+ e.setStatusData(null==(i=n.body)?void 0:i.status),e.setInstanceData(null==(s=n.body)?void 0:s.instance)}
+ const n=e.instance;
+ return!!n&&(this.buildGrid(n),this.gameStarted=!0,this.gameEnded=!1,this.pending=!1,!0)}
+ applyDiscovered(t,i){
+ for(const s of t)this.spawnChest(s);
+ for(const s of i)this.spawnBox(s)}
+ buildGrid(t){
+ var i,s;
+ this.clearGrid(),this.xNum=t.xNum,this.yNum=t.yNum;
+ const e=this.xNum*this.xSpace,n=this.yNum*this.ySpace;
+ this.gridBg.clear(),this.gridBg.roundRect(-4,-4,e+8,n+8,8),this.gridBg.fill({
+ color:1710626,alpha:.5}
+ );
+ for(let h=0;
+ h<this.xNum;
+ h++){
+ this.blocks[h]=[];
+ for(let e=0;
+ e<this.yNum;
+ e++){
+ const n=new a2t;
+ n.x=h*this.xSpace,n.y=e*this.ySpace,n.xId=h,n.yId=e;
+ const r=(null==(s=null==(i=t.blocks)?void 0:i[e])?void 0:s[h])??0;
+ n.health=r,this.blockContainer.addChild(n),this.blocks[h][e]=n}
+ }
+ }
+ clearGrid(){
+ for(const t of this.blocks)for(const i of t)this.blockContainer.removeChild(i);
+ this.blocks=[];
+ for(const t of this.revealedChests.values())this.chestContainer.removeChild(t);
+ this.revealedChests.clear();
+ for(const t of this.revealedBoxes.values())this.boxContainer.removeChild(t);
+ this.revealedBoxes.clear()}
+ async onPointerDown(t){
+ var i,s;
+ if(!this.gameStarted||this.gameEnded||this.pending)return;
+ if(0==xG.isValidEvent(RG.MINE_EVENT))return void m2t.getInstance().show(SG.getText("COMMON_169","이벤트가 종료되었습니다."),350,16777215,YD.getInstance(),!0,600);
+ if(1==jG.getInstance().isSeasonChanged())return m2t.getInstance().show(SG.getText("COMMON_349","시즌이 변경되었습니다."),350,16777215,YD.getInstance(),!0,600),void P2t.getInstance().hide();
+ if(jG.getInstance().status.hammerCount<=0)return void(null==(i=this.onHammerEmpty)||i.call(this));
+ const e=t.getLocalPosition(this),n=Math.floor(e.x/this.xSpace),h=Math.floor(e.y/this.ySpace);
+ if(n<0||h<0||n>=this.xNum||h>=this.yNum)return;
+ const r=null==(s=this.blocks[n])?void 0:s[h];
+ !r||!r.visible||r.health<=0||await this.doDamage(n,h)}
+ async doDamage(i,s){
+ var e,n,h,r,o,a;
+ this.pending=!0;
+ const c=await rD.getInstance().mine.doDamage(i,s);
+ if(!c||!1===c.success)return null==(e=this.onError)||e.call(this,(null==c?void 0:c.error)??null,c),void(this.pending=!1);
+ const l=jG.getInstance();
+ l.setStatusData(null==(n=c.body)?void 0:n.status),l.setInstanceData(null==(h=c.body)?void 0:h.instance),null==(r=this.onHammerUsed)||r.call(this);
+ const u=(null==(o=c.body)?void 0:o.revealedChests)??[],d=(null==(a=c.body)?void 0:a.discoveredBoxes)??[];
+ l.setDiscoveryData(u,d);
+ const f=[];
+ for(const t of u)if("fully"===this.spawnChest(t)){
+ const i=t.coordinates[0];
+ f.push({
+ x:i.x*this.xSpace,y:i.y*this.ySpace}
+ )}
+ for(const t of d)this.spawnBox(t);
+ this.playPang(i,s),FO.delayedCall(t.PANG_REVEAL_DELAY,()=>{
+ var t,i,s;
+ this.syncBlocksFromServer();
+ for(const n of f)this.playGain(n.x,n.y);
+ null==(t=this.onDamageAndExcavated)||t.call(this),this.pending=!1;
+ const e=l.instance;
+ if(e){
+ const t=[...this.revealedChests.values()].filter(t=>t.isExcavated).length;
+ t>=e.chestCount&&(this.gameEnded=!0,null==(i=this.onAllChestsExcavated)||i.call(this),null==(s=this.onComplete)||s.call(this))}
+ }
+ )}
+ syncBlocksFromServer(){
+ var t,i;
+ const s=jG.getInstance().instance;
+ if(s)for(let e=0;
+ e<this.xNum;
+ e++)for(let n=0;
+ n<this.yNum;
+ n++){
+ const h=(null==(i=null==(t=s.blocks)?void 0:t[n])?void 0:i[e])??0;
+ this.blocks[e][n].health=h}
+ }
+ spawnChest(t){
+ if(!t.coordinates||0===t.coordinates.length)return"none";
+ const i=t.coordinates[0],s=`${
+ i.x}
+ ,${
+ i.y}
+ `;
+ let e=this.revealedChests.get(s);
+ const n=!e;
+ e||(e=new d2t,e.setData(t),e.x=i.x*this.xSpace,e.y=i.y*this.ySpace,e.isExcavated=!1,this.chestContainer.addChild(e),this.revealedChests.set(s,e));
+ const h=e.isExcavated;
+ return e.isExcavated=t.fullyExcavated,t.fullyExcavated&&!h?"fully":n?"new":"none"}
+ spawnBox(t){
+ if(t.num<=0)return;
+ const i=`${
+ t.x}
+ ,${
+ t.y}
+ `;
+ if(this.revealedBoxes.has(i))return;
+ const s=new l2t;
+ s.setData(t),s.x=t.x*this.xSpace,s.y=t.y*this.ySpace,s.isExcavated=!0,this.boxContainer.addChild(s),this.revealedBoxes.set(i,s)}
+ async endGame(){
+ var t;
+ const i=await rD.getInstance().mine.end(!0);
+ return(null==i?void 0:i.success)&&(jG.getInstance().setStatusData(null==(t=i.body)?void 0:t.status),jG.getInstance().clearInstance(),this.syncRewardManagers(i.body)),this.gameEnded=!0,i}
+ async exitGame(){
+ var t;
+ const i=await rD.getInstance().mine.exit(!0);
+ return(null==i?void 0:i.success)&&(jG.getInstance().setStatusData(null==(t=i.body)?void 0:t.status),jG.getInstance().clearInstance(),this.syncRewardManagers(i.body)),this.gameEnded=!0,i}
+ syncRewardManagers(t){
+ (null==t?void 0:t.pet)&&cx.getInstance().setData(t.pet),(null==t?void 0:t.inventory)&&FVt.getInstance().setData({
+ inventory:t.inventory}
+ )}
+ reset(){
+ this.clearGrid(),this.gameStarted=!1,this.gameEnded=!1,this.pending=!1}
+ getHammerDamageCells(i,s){
+ const e=[];
+ for(const n of t.HAMMER_DAMAGE_PATTERN){
+ const t=i+n.dx,h=s+n.dy;
+ t<0||h<0||t>=this.xNum||h>=this.yNum||e.push({
+ x:t,y:h,damage:n.damage}
+ )}
+ return e}
+ playPang(t,i){
+ const s=t*this.xSpace+.5*this.xSpace,e=i*this.ySpace+.5*this.ySpace;
+ for(const n of this.getHammerDamageCells(t,i))this.playFxAnimation("PangSmoke",s+(n.x-t)*this.xSpace,e+(n.y-i)*this.ySpace,1);
+ this.playFxAnimation("PangAni",s,e,1)}
+ playFxAnimation(t,i,s,e=1){
+ var n;
+ const h=QA.getTextures("UI_MINE",t);
+ if(0===h.length)return;
+ const r=new Wf(h),o=null==(n=h[0])?void 0:n.defaultAnchor;
+ if(o?r.anchor.set(o.x,o.y):r.anchor.set(.5),r.x=i,r.y=s,r.scale.set(e),r.loop=!1,r.animationSpeed=.8,"PangAni"===t){
+ const t=6;
+ r.onFrameChange=i=>{
+ i===t&&zL.getInstance().playSFX(zL.SFX_STONE_BREAK,.8)}
+ }
+ r.onComplete=()=>{
+ r.removeFromParent(),r.destroy()}
+ ,this.fxContainer.addChild(r),r.gotoAndPlay(0)}
+ playGain(t,i){
+ const s=new Lf;
+ s.circle(0,0,14),s.fill({
+ color:16773222}
+ ),s.stroke({
+ width:2,color:13144064}
+ ),s.x=t+.5*this.xSpace,s.y=i+.5*this.ySpace,this.fxContainer.addChild(s),FO.to(s,{
+ alpha:0,y:s.y-30,duration:.6,onComplete:Vt(()=>{
+ this.fxContainer.removeChild(s),s.destroy()}
+ ,"onComplete")}
+ )}
+ }
+ ;
+ Vt(w2t,"MineMain"),Kt(w2t,"instance"),Kt(w2t,"HAMMER_DAMAGE_PATTERN",[{
+ dx:0,dy:0,damage:2}
+ ,{
+ dx:-1,dy:0,damage:1}
+ ,{
+ dx:1,dy:0,damage:1}
+ ,{
+ dx:0,dy:-1,damage:1}
+ ,{
+ dx:0,dy:1,damage:1}
+ ]),Kt(w2t,"PANG_REVEAL_DELAY",.2);
+ let v2t=w2t;
+ async function b2t(t){
+ if(!t)return!1;
+ try{
+ return await navigator.clipboard.writeText(t),!0}
+ catch(i){
+ }
+ return!1}
+ function _2t(t,i=1){
+ return Number.isFinite(t)?Number(t.toFixed(i)).toString():"0"}
+ Vt(b2t,"copyToClipboard"),Vt(_2t,"formatDecimal");
+ const y2t=class extends MB{
+ constructor(t,i=1,s="Icon_Arrow_Left_01",e="Icon_Arrow_Right_01",n=!1){
+ const h="UI_Ekkorr",r="left"===t?s:e;
+ super(h,r,i),Kt(this,"bg2"),Kt(this,"textureNameLeft","Icon_Arrow_Left_01"),Kt(this,"textureNameRight","Icon_Arrow_Right_01"),Kt(this,"_direction","left"),this._direction=t,this.textureNameLeft=s,this.textureNameRight=e,n&&(this.bg2=new He(QA.getTexture(h,r)),this.bg2.anchor.set(.5,.5),this.bg2.scale.set(this.iconScale),"left"===this._direction?this.bg2.x=this.bg.x+this.bg.width-3:this.bg2.x=this.bg.x-this.bg2.width+3,this.bg2.y=this.bg.y,this.addChild(this.bg2))}
+ get direction(){
+ return this._direction}
+ set direction(t){
+ t!==this._direction&&(this._direction=t,"left"===this._direction?this.setTexture("UI_Ekkorr",this.textureNameLeft):this.setTexture("UI_Ekkorr",this.textureNameRight))}
+ setTexture(t,i){
+ super.setTexture(t,i),this.bg2&&(this.bg2.texture=QA.getTexture(t,i),this.bg2.scale.set(this.iconScale),"left"===this._direction?this.bg2.x=this.bg.x+this.bg.width-5:this.bg2.x=this.bg.x-this.bg2.width+5,this.bg2.y=this.bg.y)}
+ }
+ ;
+ Vt(y2t,"ArrowButton");
+ let M2t=y2t;
+ const E2t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"item"),Kt(this,"bonusGem"),Kt(this,"bonusHonorCoin"),Kt(this,"amountBg"),Kt(this,"amountLbl"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
+ ),this.bg.alpha=.05,this.bg.width=530,this.bg.height=75,this.addChild(this.bg),this.item=new T2t,this.addChild(this.item),this.amountBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
+ ),this.amountBg.width=200,this.amountBg.height=this.bg.height,this.amountBg.x=this.item.width+5,this.addChild(this.amountBg),this.amountLbl=new JD("0",16777215),this.amountLbl.x=this.amountBg.x+.5*(this.amountBg.width-this.amountLbl.width),this.amountLbl.y=.5*(this.amountBg.height-this.amountLbl.height),this.addChild(this.amountLbl),this.bonusGem=new T2t,this.bonusGem.x=this.amountBg.x+this.amountBg.width+5,this.addChild(this.bonusGem),this.bonusHonorCoin=new T2t,this.bonusHonorCoin.x=this.bonusGem.x+this.bonusGem.width+5,this.addChild(this.bonusHonorCoin)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ let i=t.type,s=t.grade??-1,e=t.kindNum??-1,n=t.subType??"";
+ this.item.setData(i,0,s,e,n),this.item.setText(`${
+ t.prob}
+ %`),t.min===t.max?this.amountLbl.text=`${
+ t.min}
+ `:this.amountLbl.text=`${
+ t.min}
+  ~ ${
+ t.max}
+ `,this.amountLbl.x=this.amountBg.x+.5*(this.amountBg.width-this.amountLbl.width),this.bonusGem.setData(n5.gem,0),t.minGem+t.maxGem>0?t.minGem===t.maxGem?this.bonusGem.setText(String(t.minGem)):this.bonusGem.setText(`${
+ t.minGem}
+ ~${
+ t.maxGem}
+ `):this.bonusGem.setText("0"),this.bonusHonorCoin.setData(n5.honorCoin,0),t.minHonorCoin+t.maxHonorCoin>0?t.minHonorCoin===t.maxHonorCoin?this.bonusHonorCoin.setText(String(t.minHonorCoin)):this.bonusHonorCoin.setText(`${
+ t.minHonorCoin}
+ ~${
+ t.maxHonorCoin}
+ `):this.bonusHonorCoin.setText("0")}
+ }
+ ;
+ Vt(E2t,"MineRewardInfoItemRenderer");
+ let A2t=E2t;
+ const S2t=class extends r5{
+ constructor(){
+ super(),Kt(this,"bg2"),this.bg.removeFromParent(),this.bg2=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
+ ),this.bg2.width=105,this.bg2.height=75,this.addChildAt(this.bg2,0),this.eventMode="dynamic",this.on("pointertap",this.onImgTap,this)}
+ get width(){
+ return this.bg2.width}
+ get height(){
+ return this.bg2.height}
+ updateLayout(){
+ if(!this.bg2)return void super.updateLayout();
+ const t=this.bg2.width,i=this.bg2.height-5;
+ this.img.x=.5*(t-this.img.width),this.img.y=.5*(i-this.img.height)-3,this.lblNum.x=.5*(t-this.lblNum.width),this.lblNum.y=i-this.lblNum.height,this.petIcon.visible&&(this.petIcon.x=.5*(t-this.petIcon.width),this.petIcon.y=.5*(i-this.petIcon.height)+3)}
+ setText(t){
+ this.lblNum.text=String(t),this.updateLayout()}
+ onImgTap(t){
+ const i=this._type,s=this._subType;
+ let e="";
+ if(i==n5.ticket&&s==n5.heroGacha?e=SG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i==n5.ticket&&s==n5.heroSelect?e=SG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i==n5.ticket&&s==n5.treasureGacha?e=SG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i==n5.ticket&&s==n5.petSelect?e=SG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i!=n5.trans||s!=n5.hero&&s!=n5.treasure?i==n5.runeTicket&&(e=SG.getText("GAME_1502","레이드 상점에서 크리스탈을 랜덤하게 획득할 수 있습니다.")):e=SG.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다."),!e)return;
+ const n=l5.getInstance();
+ n.text=e;
+ let h=this.img.x+this.img.width,r=this.y+.5*(this.height-n.height)-2;
+ n.show(this.parent,h,r)}
+ }
+ ;
+ Vt(S2t,"MineRewardItem");
+ let T2t=S2t;
+ const C2t=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"frame"),Kt(this,"icon"),Kt(this,"lblCount"),Kt(this,"lblPercent"),Kt(this,"cover"),Kt(this,"_activated",!0),this.bg=new He(QA.getTexture("UI_MINE","Frame_Fossil_Rank_01_Bg.png")),this.bg.x=3,this.bg.y=3,this.addChild(this.bg),this.frame=new He(QA.getTexture("UI_MINE","Frame_Fossil_Rank_01.png")),this.addChild(this.frame),this.icon=new He(QA.getTexture("UI_MINE","Item_Rank_01.png")),this.addChild(this.icon);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_17;
+ t.fill=cD.COLOR_WHITE,this.lblCount=new JD("0",t.fill,t),this.addChild(this.lblCount),this.lblPercent=new JD("0",t.fill,t),this.addChild(this.lblPercent),this.cover=new He(QA.getTexture("UI_MINE","Slot_Empty.png")),this.cover.visible=!1,this.cover.alpha=.7,this.addChild(this.cover),this.updateLayout(),this.hideCount(),this.hidePercent()}
+ updateLayout(){
+ const t=this.frame.width,i=this.frame.height;
+ this.lblCount.x=.5*(t-this.lblCount.width),this.lblCount.y=i-this.lblCount.height,this.lblPercent.x=.5*(t-this.lblPercent.width),this.lblPercent.y=i-this.lblPercent.height,this.icon.x=.5*(t-this.icon.width),this.icon.y=.5*(i-this.icon.height)}
+ setGrade(t){
+ this.bg.texture=QA.getTexture("UI_MINE",`Frame_Fossil_Rank_0${
+ t}
+ _Bg.png`),this.frame.texture=QA.getTexture("UI_MINE",`Frame_Fossil_Rank_0${
+ t}
+ .png`),this.icon.texture=QA.getTexture("UI_MINE",`Item_Rank_0${
+ t}
+ .png`)}
+ showCount(){
+ this.lblCount.visible=!0}
+ hideCount(){
+ this.lblCount.visible=!1}
+ setCount(t,i){
+ this.lblCount.text=`${
+ t}
+ /${
+ i}
+ `,this.lblCount.textColor=t<i?cD.COLOR_WHITE:cD.COLOR_YELLOW,this.updateLayout()}
+ showPercent(){
+ this.lblPercent.visible=!0}
+ hidePercent(){
+ this.lblPercent.visible=!1}
+ setPercent(t){
+ this.lblPercent.text=`${
+ t}
+ %`,this.updateLayout()}
+ get activated(){
+ return this._activated}
+ set activated(t){
+ t!=this._activated&&(this._activated=t,this.cover.visible=!this._activated)}
+ }
+ ;
+ Vt(C2t,"MineFossilIcon");
+ let I2t=C2t;
+ const k2t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"levelContainer"),Kt(this,"levelBg"),Kt(this,"lblLevel"),Kt(this,"btnPrev"),Kt(this,"btnNext"),Kt(this,"fossilContainer"),Kt(this,"fossilIcons"),Kt(this,"fossilIndicator"),Kt(this,"headerContainer"),Kt(this,"headerBg"),Kt(this,"headerItem"),Kt(this,"headerAmount"),Kt(this,"headerBonus"),Kt(this,"list"),Kt(this,"currentGrade",1),Kt(this,"mineLevel",-1),Kt(this,"mineMaxLevel",-1),this.height=800,this.outSideClickHide=!0,this.title=SG.getText("GAME_1221","보상 정보"),this.levelContainer=new Ge,this.addChild(this.levelContainer),this.fossilContainer=new Ge,this.addChild(this.fossilContainer),this.headerContainer=new Ge,this.addChild(this.headerContainer),this.levelBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:25,rightWidth:30,bottomHeight:25}
+ ),this.levelBg.alpha=.6,this.levelBg.width=this.width-60,this.levelBg.height=60,this.levelContainer.addChild(this.levelBg);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_18;
+ let i;
+ t.fill=cD.COLOR_WHITE,t.fontSize=22,this.lblLevel=new JD("Lv.1",t.fill,t),this.levelContainer.addChild(this.lblLevel),this.btnPrev=new M2t("left"),this.btnPrev.onClick=()=>{
+ this.goLevel(this.mineLevel-1)}
+ ,this.levelContainer.addChild(this.btnPrev),this.btnNext=new M2t("right"),this.btnNext.onClick=()=>{
+ this.goLevel(this.mineLevel+1)}
+ ,this.levelContainer.addChild(this.btnNext),this.fossilIcons=[];
+ for(let e=0;
+ e<5;
+ ++e)i=new I2t,i.eventMode="static",i.cursor="pointer",i.on("pointertap",()=>this.clickFossil(e)),i.setGrade(e+1),i.setPercent(0),i.showPercent(),i.x=e*(i.width+15),this.fossilContainer.addChild(i),this.fossilIcons.push(i);
+ this.fossilIndicator=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_SELECT"),leftWidth:25,topHeight:25,rightWidth:25,bottomHeight:25}
+ ),this.fossilIndicator.eventMode="none",this.fossilIndicator.x=-6,this.fossilIndicator.y=-6,this.fossilIndicator.width=this.fossilIcons[0].width+12,this.fossilIndicator.height=this.fossilIcons[0].height+12,this.fossilContainer.addChild(this.fossilIndicator),this.headerBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","blackRect"),leftWidth:6,topHeight:6,rightWidth:6,bottomHeight:6}
+ ),this.headerBg.width=this.width-24,this.headerBg.height=40,this.headerContainer.addChild(this.headerBg);
+ const s=cD.DEFAULT_FONT_OPTION_16;
+ s.fill=cD.DEFAULT_COLOR,this.headerItem=new JD("Item",s.fill,s),this.headerContainer.addChild(this.headerItem),this.headerAmount=new JD("Amount",s.fill,s),this.headerContainer.addChild(this.headerAmount),this.headerBonus=new JD("Bonus",s.fill,s),this.headerContainer.addChild(this.headerBonus),this.list=new d5(A2t,530,500,5),this.addChild(this.list),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ this.levelContainer.x=.5*(this.width-this.levelContainer.width),this.levelContainer.y=70,this.fossilContainer.x=.5*(this.width-this.fossilContainer.width),this.fossilContainer.y=this.levelContainer.y+this.levelContainer.height+15,this.headerContainer.x=.5*(this.width-this.headerContainer.width),this.headerContainer.y=this.fossilContainer.y+this.fossilContainer.height+20,this.lblLevel.x=.5*(this.levelBg.width-this.lblLevel.width),this.lblLevel.y=.5*(this.levelBg.height-this.lblLevel.height),this.btnPrev.x=30,this.btnPrev.y=.5*(this.levelBg.height-this.btnPrev.height),this.btnNext.x=this.levelBg.width-this.btnNext.width-30,this.btnNext.y=this.btnPrev.y,this.headerItem.x=.5*(105-this.headerItem.width)+13,this.headerItem.y=.5*(this.headerBg.height-this.headerItem.height),this.headerAmount.x=110+.5*(200-this.headerAmount.width)+13,this.headerAmount.y=this.headerItem.y,this.headerBonus.x=315+.5*(215-this.headerBonus.width)+13,this.headerBonus.y=this.headerItem.y,this.list.x=this.bg.x+.5*(this.bg.width-this.list.getListWidth()),this.list.y=this.headerContainer.y+this.headerContainer.height;
+ const t=this.height-this.list.y-20;
+ this.list.setListHeight(t)}
+ show(){
+ var t;
+ this.title=SG.getText("GAME_1221","보상 정보");
+ const i=jG.getInstance();
+ this.mineLevel=(null==(t=i.instance)?void 0:t.mineLevel)??1,this.mineMaxLevel=i.getMaxLevel(),this.update(this.mineLevel),this.updateLayout(),super.show()}
+ update(t){
+ this.lblLevel.text=`Lv.${
+ t}
+ `;
+ const i=jG.getInstance().getLevelVO(t);
+ if(!i)return;
+ const s=i.getChestWeights();
+ let e;
+ const n=this.fossilIcons.length;
+ for(let h=0;
+ h<n;
+ ++h)e=this.fossilIcons[h],e.setPercent(s[h]),s[h]>0?e.activated=!0:e.activated=!1;
+ BVt.showItemsInAlpha([this.fossilContainer]),this.clickFossil(this.currentGrade-1)}
+ goLevel(t){
+ t<1||t>this.mineMaxLevel||(this.mineLevel=t,1==this.mineLevel?(this.btnPrev.alpha=.7,this.btnNext.alpha=1):this.mineLevel==this.mineMaxLevel?(this.btnPrev.alpha=1,this.btnNext.alpha=.7):(this.btnPrev.alpha=1,this.btnNext.alpha=1),this.update(t))}
+ async clickFossil(t){
+ const i=this.fossilIcons[t];
+ if(!i.activated)return;
+ this.fossilIndicator.x=i.x-6,this.fossilIndicator.y=i.y-6;
+ const s=t+1,e=jG.getInstance().getChestRewardList(s),n=[];
+ let h,r;
+ const o=e.length;
+ for(let a=0;
+ a<o;
+ ++a)if(r=e[a],0!==r.prob){
+ switch("petPiece"!==r.type&&(h={
+ ...r}
+ ),r.type){
+ case"gem":h.type=n5.gem;
+ break;
+ case"honorCoin":h.type=n5.honorCoin;
+ break;
+ case"spriteLandTicket":h.type=n5.petTicket;
+ break;
+ case"hammer":h.type=n5.hammer;
+ break;
+ case"hero5":h.type=n5.ticket,h.subType=n5.heroGacha;
+ break;
+ case"hero5s":h.type=n5.ticket,h.subType=n5.heroSelect;
+ break;
+ case"treasure6":h.type=n5.ticket,h.subType=n5.treasureGacha;
+ break;
+ case"runeTicket":h.type=n5.runeTicket;
+ break;
+ case"petPiece":const t=xG.currentMineEvent,i=t?t.petKindNums.length:r.kindNums.length;
+ for(let s=0;
+ s<i;
+ ++s)h={
+ ...r}
+ ,h.type=n5.pet,h.prob=Number(_2t(r.prob/i,1)),h.kindNum=t?t.petKindNums[s]:r.kindNums[s],n.push(h)}
+ "petPiece"!==r.type&&n.push(h)}
+ this.list.dataProvider=n,this.list.scrollTo(0),this.list.y=this.headerContainer.y+this.headerContainer.height,BVt.showItemsInVertical([this.list])}
+ }
+ ;
+ Vt(k2t,"MineRewardInfoPopup"),Kt(k2t,"_instance");
+ let O2t=k2t;
+ const x2t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"onConfirm",null),Kt(this,"fallbackText",new Hg({
+ text:"",style:{
+ fontSize:18,fill:16777215}
+ }
+ )),Kt(this,"rows",[]),Kt(this,"totalContainer",new Ge),Kt(this,"totalBg",new Lf),Kt(this,"totalTitle",new Hg({
+ text:SG.getText("GAME_1204","전체보상"),style:{
+ fontSize:16,fill:16767334,fontWeight:"bold"}
+ }
+ )),Kt(this,"totalSlots",[]),Kt(this,"btnConfirm",new kU("","",SG.getText("COMMON_1","확인"),.8,200,70)),Kt(this,"resourceContainer"),Kt(this,"resourceBg"),Kt(this,"lblGem"),Kt(this,"lblHonorCoin"),Kt(this,"gemPoint",new gi),Kt(this,"gemPointInitialized",!1),Kt(this,"honorPoint",new gi),Kt(this,"honorPointInitialized",!1),this.width=t.W,this.height=300,this.title=SG.getText("COMMON_22","보상"),this.btnClose.visible=!1,this.outSideClickHide=!1,this.fallbackText.visible=!1,this.contentContainer.addChild(this.fallbackText);
+ for(let i=0;
+ i<t.MAX_ROWS;
+ i++){
+ const t=this.createRewardRow();
+ t.container.visible=!1,this.rows.push(t),this.contentContainer.addChild(t.container)}
+ this.totalContainer.visible=!1,this.totalContainer.addChild(this.totalBg,this.totalTitle),this.totalTitle.x=14,this.totalTitle.y=8;
+ for(let i=0;
+ i<t.MAX_TOTAL_LABELS;
+ i++){
+ const t=this.createRewardSlot();
+ this.totalSlots.push(t),this.totalContainer.addChild(t.container)}
+ this.contentContainer.addChild(this.totalContainer),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.contentContainer.addChild(this.btnConfirm),this.resourceContainer=new Ge,this.resourceContainer.y=75,this.contentContainer.addChild(this.resourceContainer),this.resourceBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
+ ),this.resourceBg.width=300,this.resourceContainer.addChild(this.resourceBg),this.lblGem=new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblGem.x=30,this.lblGem.y=.5*(this.resourceBg.height-this.lblGem.height),this.resourceContainer.addChild(this.lblGem),this.lblHonorCoin=new $B("PVP_COIN_ON","0",cD.COLOR_PURPLE_PINK,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblHonorCoin.x=this.lblGem.x+this.lblGem.width+50,this.lblHonorCoin.y=.5*(this.resourceBg.height-this.lblHonorCoin.height),this.resourceContainer.addChild(this.lblHonorCoin)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ show(t=null,i=null,s=null){
+ const e="string"==typeof t?null:t;
+ this.setRewardData(e),this.updateGem(),this.updateHonorCoin(),super.show(),setTimeout(()=>{
+ const t=this.sumReward(e,"gem");
+ t>0&&(ML.gem+=t,kF.getInstance().updateGem(),this.displayGemGathering(t));
+ const i=this.sumReward(e,"honorCoin");
+ i>0&&(ML.honorCoin+=i,kF.getInstance().updateHonor(),this.displayHonorCoinGathering(i))}
+ ,300)}
+ hide(){
+ if(!this.parent)return;
+ const t=this.onConfirm;
+ this.onConfirm=null,super.hide(),null==t||t()}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ onConfirmClick(){
+ this.hide()}
+ setRewardData(i){
+ this.resetRows();
+ let s=this.resourceContainer.y+this.resourceContainer.height+25;
+ const e=((null==i?void 0:i.details)??[]).slice(0,t.MAX_ROWS);
+ if(e.length>0){
+ const i=t.DETAIL_GRID_COLS,n=i*t.DETAIL_CARD_W+(i-1)*t.DETAIL_CARD_GAP_X,h=.5*(this.width-n),r=Math.ceil(e.length/i),o=Array.from({
+ length:r}
+ ,()=>t.DETAIL_CARD_H);
+ for(let s=0;
+ s<e.length;
+ s++){
+ const n=this.rows[s],r=this.setRowData(n,e[s]),a=s%i,c=Math.floor(s/i);
+ o[c]=Math.max(o[c],r),n.container.visible=!0,n.container.x=h+a*(t.DETAIL_CARD_W+t.DETAIL_CARD_GAP_X)}
+ const a=[];
+ let c=s;
+ for(let s=0;
+ s<r;
+ s++)a[s]=c,c+=o[s]+t.DETAIL_CARD_GAP_Y;
+ for(let t=0;
+ t<e.length;
+ t++)this.rows[t].container.y=a[Math.floor(t/i)];
+ s=c-(r>0?t.DETAIL_CARD_GAP_Y:0)}
+ else s=this.setFallbackRewards(i,s);
+ s=this.setTotalRewards(i,s+12),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=s+20,this.height=this.btnConfirm.y+this.btnConfirm.height+50,this.resetPostionY()}
+ resetRows(){
+ this.fallbackText.visible=!1,this.totalContainer.visible=!1;
+ for(const t of this.totalSlots)this.resetRewardSlot(t);
+ for(const t of this.rows){
+ t.container.visible=!1,t.empty.visible=!1,t.image.texture=is.EMPTY;
+ for(const i of t.slots)this.resetRewardSlot(i)}
+ }
+ setFallbackRewards(t,i){
+ return this.getTotalDisplayRewards(t).length>0?i:(this.fallbackText.text="(획득한 보상이 없습니다)",this.fallbackText.style.fill=12632256,this.fallbackText.visible=!0,this.fallbackText.x=.5*(this.width-this.fallbackText.width),this.fallbackText.y=i,i+this.fallbackText.height)}
+ setTotalRewards(i,s){
+ const e=this.getTotalDisplayRewards(i);
+ if(e.length<=0)return s;
+ this.totalContainer.visible=!0,this.totalContainer.x=.5*(this.width-t.ROW_W),this.totalContainer.y=s;
+ const n=this.layoutTotalRewardLabels(e,34),h=Math.max(64,n+10);
+ return this.totalBg.clear(),this.totalBg.roundRect(0,0,t.ROW_W,h,8),this.totalBg.fill({
+ color:2828063,alpha:.92}
+ ),this.totalBg.stroke({
+ width:1,color:7166516,alpha:.9}
+ ),s+h+8}
+ getTotalDisplayRewards(t){
+ const i=((null==t?void 0:t.totals)??[]).filter(t=>Math.max(0,Number(t.num)||0)>0).map(t=>({
+ type:t.type,kindNum:t.kindNum,num:Math.max(0,Number(t.num)||0)}
+ )),s=Math.max(0,(null==t?void 0:t.gainedExp)??0);
+ return s>0&&i.push({
+ type:"exp",num:s,kindNum:-1}
+ ),this.sortDisplayRewards(i,!0)}
+ createRewardRow(){
+ const i=new Ge,s=new Lf,e=new He(is.EMPTY),n=new Hg({
+ text:"보상 없음",style:{
+ fontSize:16,fill:12632256}
+ }
+ ),h=[];
+ i.addChild(s,e,n),n.y=34,n.visible=!1;
+ for(let r=0;
+ r<t.MAX_REWARD_LABELS;
+ r++){
+ const t=this.createRewardSlot();
+ h.push(t),i.addChild(t.container)}
+ return{
+ container:i,bg:s,image:e,empty:n,slots:h}
+ }
+ setRowData(i,s){
+ this.setDetailImage(i.image,s),i.image.x=.5*(t.DETAIL_CARD_W-i.image.width),i.image.y=t.DETAIL_IMAGE_Y+.5*(t.DETAIL_IMAGE_H-i.image.height);
+ const e=this.getDisplayRewards(s);
+ let n=i.image.y+i.image.height;
+ e.length<=0?(i.empty.visible=!0,i.empty.x=.5*(t.DETAIL_CARD_W-i.empty.width),i.empty.y=t.DETAIL_REWARD_Y,n=i.empty.y+i.empty.height):n=this.layoutCardRewardLabels(i,e,t.DETAIL_REWARD_Y);
+ const h=Math.max(t.DETAIL_CARD_H,n+10);
+ return i.bg.clear(),i.bg.roundRect(0,0,t.DETAIL_CARD_W,h,8),i.bg.fill({
+ color:2039848,alpha:.9}
+ ),i.bg.stroke({
+ width:1,color:4935260,alpha:.9}
+ ),h}
+ getDisplayRewards(t){
+ const i=(t.rewards??[]).filter(t=>"exp"!==t.type&&Math.max(0,Number(t.num)||0)>0);
+ return this.sortDisplayRewards(i)}
+ sortDisplayRewards(t,i=!1){
+ return t.map((t,i)=>({
+ reward:t,index:i}
+ )).sort((t,s)=>{
+ const e=this.getRewardSortPriority(t.reward,i),n=this.getRewardSortPriority(s.reward,i);
+ return e!==n?e-n:t.index-s.index}
+ ).map(t=>t.reward)}
+ getRewardSortPriority(t,i){
+ return"gem"===t.type?0:"honorCoin"===t.type?1:i&&"exp"===t.type?99:10}
+ layoutCardRewardLabels(i,s,e){
+ const n=t.DETAIL_CARD_W-12,h=[];
+ let r=[],o=0;
+ for(let c=0;
+ c<s.length&&c<t.MAX_REWARD_LABELS;
+ c++){
+ const e=i.slots[c];
+ this.setRewardSlot(e,s[c]);
+ const a=this.getRewardSlotWidth(e),l=this.getRewardSlotHeight(e),u=0===r.length?a:o+t.REWARD_GAP_X+a;
+ r.length>0&&u>n&&(h.push(r),r=[],o=0),r.push({
+ slot:e,width:a,height:l}
+ ),o=0===o?a:o+t.REWARD_GAP_X+a}
+ r.length>0&&h.push(r);
+ let a=e;
+ for(const c of h){
+ const i=c.reduce((t,i)=>t+i.width,0)+Math.max(0,c.length-1)*t.REWARD_GAP_X,s=Math.max(24,...c.map(t=>t.height));
+ let e=.5*(t.DETAIL_CARD_W-i);
+ for(const n of c)n.slot.container.x=e,n.slot.container.y=a+.5*(s-n.height),n.slot.container.visible=!0,e+=n.width+t.REWARD_GAP_X;
+ a+=s+t.REWARD_GAP_Y}
+ return a-t.REWARD_GAP_Y}
+ layoutTotalRewardLabels(i,s){
+ const e=t.ROW_W-28,n=[];
+ let h=[],r=0;
+ for(let a=0;
+ a<i.length&&a<t.MAX_TOTAL_LABELS;
+ a++){
+ const s=this.totalSlots[a];
+ this.setRewardSlot(s,i[a]);
+ const o=this.getRewardSlotWidth(s),c=this.getRewardSlotHeight(s),l=0===h.length?o:r+t.REWARD_GAP_X+o;
+ h.length>0&&l>e&&(n.push(h),h=[],r=0),h.push({
+ slot:s,width:o,height:c}
+ ),r=0===r?o:r+t.REWARD_GAP_X+o}
+ h.length>0&&n.push(h);
+ let o=s;
+ for(const a of n){
+ const i=Math.max(24,...a.map(t=>t.height));
+ let s=14;
+ for(const e of a)e.slot.container.x=s,e.slot.container.y=o+.5*(i-e.height),e.slot.container.visible=!0,s+=e.width+t.REWARD_GAP_X;
+ o+=i+t.REWARD_GAP_Y}
+ return o-t.REWARD_GAP_Y}
+ createRewardSlot(){
+ const t=new Ge,i=new $B("ShipArenaCoin","0",cD.COLOR_WHITE,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ i.textSize=17;
+ const s=new He(is.EMPTY),e=new JD("0",cD.COLOR_WHITE,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ e.textSize=17;
+ const n=new JD("xp +0",16767334,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ return n.textSize=17,t.visible=!1,s.visible=!1,e.visible=!1,n.visible=!1,t.addChild(i,s,e,n),{
+ container:t,iconLabel:i,petSprite:s,petCount:e,expLabel:n}
+ }
+ resetRewardSlot(t){
+ t.container.visible=!1,t.iconLabel.visible=!1,t.petSprite.visible=!1,t.petCount.visible=!1,t.expLabel.visible=!1,t.petSprite.texture=is.EMPTY}
+ setRewardSlot(t,i){
+ if(this.setExpRewardSlot(t,i))return;
+ if(this.setPetPieceRewardSlot(t,i))return;
+ t.rewardType=i.type,t.iconLabel.visible=!0,t.petSprite.visible=!1,t.petCount.visible=!1,t.expLabel.visible=!1;
+ const s=t.iconLabel,e=this.getRewardIconInfo(i);
+ s.texture=QA.getTexture(e.sheetName,e.iconName)??is.EMPTY,s.textColor=e.color,s.iconScale=e.scale,s.text=VD.displayLargeNumberAsAlphabet(i.num),s.textOffsetX=4}
+ getTotalSlotWithType(t){
+ return this.totalSlots.find(i=>i.rewardType==t)}
+ setExpRewardSlot(t,i){
+ return"exp"===i.type&&(t.rewardType="exp",t.iconLabel.visible=!1,t.petSprite.visible=!1,t.petCount.visible=!1,t.expLabel.visible=!0,t.expLabel.text=`xp +${
+ VD.displayLargeNumberAsAlphabet(i.num)}
+ `,t.expLabel.x=0,t.expLabel.y=0,!0)}
+ setPetPieceRewardSlot(i,s){
+ if("petPiece"!==s.type)return!1;
+ const e=Math.floor(Number(s.kindNum)||0);
+ if(e<=0||!QA.hasSheet("UI_PET"))return!1;
+ const n=QA.getTexture("UI_PET",`UI_PET${
+ e}
+ `);
+ if(!n)return!1;
+ i.rewardType="petPiece",i.iconLabel.visible=!1,i.petSprite.visible=!0,i.petCount.visible=!0,i.expLabel.visible=!1,i.petSprite.texture=n,i.petSprite.scale.set(1);
+ const h=t.PET_REWARD_ICON_SIZE,r=Math.min(h/Math.max(1,i.petSprite.width),h/Math.max(1,i.petSprite.height));
+ return i.petSprite.scale.set(r),i.petSprite.x=.5*(h-i.petSprite.width),i.petSprite.y=.5*(h-i.petSprite.height),i.petCount.text=VD.displayLargeNumberAsAlphabet(s.num),i.petCount.textColor=cD.COLOR_WHITE,i.petCount.x=h+4,i.petCount.y=.5*(h-i.petCount.height),!0}
+ getRewardSlotWidth(i){
+ return i.expLabel.visible?i.expLabel.width:i.petSprite.visible?t.PET_REWARD_ICON_SIZE+4+i.petCount.width:i.iconLabel.width}
+ getRewardSlotHeight(i){
+ return i.expLabel.visible?i.expLabel.height:i.petSprite.visible?Math.max(t.PET_REWARD_ICON_SIZE,i.petCount.y+i.petCount.height):i.iconLabel.height}
+ getRewardIconInfo(t){
+ switch(t.type){
+ case"gem":return{
+ iconName:"UI_GEM_ICON",sheetName:"UI_Ekkorr",color:cD.COLOR_DEEP_SKYBLUE,scale:.78}
+ ;
+ case"honorCoin":return{
+ iconName:"PVP_COIN_ON",sheetName:"UI_Ekkorr",color:cD.COLOR_PURPLE_PINK,scale:.78}
+ ;
+ case"exp":return{
+ iconName:"ShipArenaCoin",sheetName:"UI_Ekkorr",color:16767334,scale:.85}
+ ;
+ case"hammer":return{
+ iconName:"Thumbnail_Hammer_01.png",sheetName:"UI_MINE",color:cD.COLOR_WHITE,scale:.192}
+ ;
+ case"spriteLandTicket":return{
+ iconName:"UI_PET_TICKET",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.6}
+ ;
+ case"hero5":return{
+ iconName:"Ticket_HeroGacha",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.54}
+ ;
+ case"hero5s":return{
+ iconName:"Ticket_HeroSelect",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.54}
+ ;
+ case"treasure6":return{
+ iconName:"Ticket_TreasureGacha",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.54}
+ ;
+ case"petPiece":return{
+ iconName:"Ticket_PetSelect",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.54}
+ ;
+ case"runeTicket":return{
+ iconName:"RuneTicket",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.6}
+ ;
+ default:return{
+ iconName:"ShipArenaCoin",sheetName:"UI_Ekkorr",color:cD.COLOR_WHITE,scale:.85}
+ }
+ }
+ setDetailImage(i,s){
+ const e=Math.max(1,Math.floor(s.grade??1));
+ let n="";
+ n="box"===s.source?`randomBox${
+ Math.min(5,e)}
+ .png`:`BoneBox_${
+ s.shape??"square"}
+ _${
+ Math.min(7,e)}
+ .png`,i.texture=QA.getTexture("UI_MINE",n)??is.EMPTY,i.scale.set(1);
+ const h=Math.min(1,t.DETAIL_IMAGE_W/Math.max(1,i.width),t.DETAIL_IMAGE_H/Math.max(1,i.height));
+ i.scale.set(h)}
+ getRewardName(t){
+ switch(t.type){
+ case"gem":return"보석";
+ case"honorCoin":return"명예코인";
+ case"spriteLandTicket":return"정령고원 티켓";
+ case"hammer":return"망치";
+ case"hero5":return"5성 영웅 확정권";
+ case"hero5s":return"5성 영웅 선택권";
+ case"treasure6":return"6성 유물권";
+ case"petPiece":return t.kindNum?`펫 조각 ${
+ t.kindNum}
+ `:"펫 조각";
+ case"runeTicket":return SG.getText("GAME_1500","크리스탈 뽑기권");
+ case"kindNum":return t.kindNum?`kindNum ${
+ t.kindNum}
+ `:"보상";
+ case"a":return"보상 A";
+ case"b":return"보상 B";
+ default:return null!=t.type&&t.type.length>0?t.type:t.kindNum?`kindNum ${
+ t.kindNum}
+ `:"보상"}
+ }
+ sumReward(t,i){
+ const s=null==t?void 0:t.totals;
+ return Array.isArray(s)?s.filter(t=>(null==t?void 0:t.type)===i).reduce((t,i)=>t+Math.max(0,Number(i.num)||0),0):0}
+ updateGem(){
+ this.lblGem.text=ML.gem.toFixed(0),this.updateResouceLayout()}
+ updateHonorCoin(){
+ this.lblHonorCoin.text=ML.honorCoin.toFixed(0),this.updateResouceLayout()}
+ updateResouceLayout(){
+ this.lblHonorCoin.x=this.lblGem.x+this.lblGem.width+50,this.resourceBg.width=this.lblHonorCoin.x+this.lblHonorCoin.width+30,this.resourceContainer.x=this.totalContainer.x+this.totalContainer.width-this.resourceContainer.width}
+ displayGemGathering(t){
+ const i=this.getTotalSlotWithType("gem");
+ if(!i)return;
+ const s=i.container;
+ let e=s.getGlobalPosition(),n=VA.stage.toLocal(e);
+ Q6t.getInstance().getGemInMine(n.x+.5*s.width-15,n.y+.5*s.height-20,t,Math.min(30,t),this,1.2)}
+ displayHonorCoinGathering(t){
+ const i=this.getTotalSlotWithType("honorCoin");
+ if(!i)return;
+ const s=i.container;
+ let e=s.getGlobalPosition(),n=VA.stage.toLocal(e);
+ Q6t.getInstance().getHonorCoinInMine(n.x+.5*s.width-15,n.y+.5*s.height-20,t,Math.min(30,t),this,1.2)}
+ getGemPoint(){
+ return 0==this.gemPointInitialized&&(this.gemPointInitialized=!0,this.gemPoint.x=this.x-.5*this.width+this.resourceContainer.x+this.lblGem.x+.5*this.lblGem.getIcon().width,this.gemPoint.y=this.y-.5*this.height+this.resourceContainer.y+this.lblGem.y+.5*this.lblGem.getIcon().height),this.gemPoint}
+ getHonorPoint(){
+ return 0==this.honorPointInitialized&&(this.honorPointInitialized=!0,this.honorPoint.x=this.x-.5*this.width+this.resourceContainer.x+this.lblHonorCoin.x+.5*this.lblHonorCoin.getIcon().width,this.honorPoint.y=this.y-.5*this.height+this.resourceContainer.y+this.lblHonorCoin.y+.5*this.lblHonorCoin.getIcon().height),this.honorPoint}
+ startGemMotion(t=null,i=1.2){
+ this.lblGem.startMotion(t,i)}
+ startHonorCoinMotion(t=null,i=1.2){
+ this.lblHonorCoin.startMotion(t,i)}
+ }
+ ;
+ Vt(x2t,"MineRewardPopup"),Kt(x2t,"instance"),Kt(x2t,"W",560),Kt(x2t,"MAX_ROWS",5),Kt(x2t,"MAX_REWARD_LABELS",6),Kt(x2t,"MAX_TOTAL_LABELS",16),Kt(x2t,"ROW_W",480),Kt(x2t,"DETAIL_GRID_COLS",3),Kt(x2t,"DETAIL_CARD_W",150),Kt(x2t,"DETAIL_CARD_H",166),Kt(x2t,"DETAIL_CARD_GAP_X",13),Kt(x2t,"DETAIL_CARD_GAP_Y",8),Kt(x2t,"DETAIL_IMAGE_W",110),Kt(x2t,"DETAIL_IMAGE_H",76),Kt(x2t,"DETAIL_IMAGE_Y",16),Kt(x2t,"DETAIL_REWARD_Y",102),Kt(x2t,"REWARD_GAP_X",14),Kt(x2t,"REWARD_GAP_Y",6),Kt(x2t,"PET_REWARD_ICON_SIZE",25);
+ let R2t=x2t;
+ const N2t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"titleUp"),Kt(this,"titleInfo"),Kt(this,"bg"),Kt(this,"iconHammer"),Kt(this,"lblTitle"),Kt(this,"btnGuide"),Kt(this,"lblEventTimer"),Kt(this,"lblHammer"),Kt(this,"expProgressContainer"),Kt(this,"expProgressPanel"),Kt(this,"expProgressTrack"),Kt(this,"expProgressPreview"),Kt(this,"expProgressFill"),Kt(this,"expProgressFrame"),Kt(this,"lblExpLevel"),Kt(this,"lblExpValue"),Kt(this,"btnClose"),Kt(this,"btnPlus"),Kt(this,"infoContainer"),Kt(this,"btnInfo"),Kt(this,"infoLine"),Kt(this,"fossilIcons"),Kt(this,"fossilLabelBg"),Kt(this,"fossilLabel"),Kt(this,"fossilLabelContainer"),Kt(this,"initialized",!1),Kt(this,"uiBuilt",!1),Kt(this,"expTween",null),Kt(this,"eventEndTimeMs",0),Kt(this,"lastEventTimerText","")}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ buildUI(){
+ const i=t.OVERLAP;
+ let s;
+ this.titleUp=new He(QA.getTexture("UI_MINE","Base_Title_up.png")),this.titleUp.x=0,this.titleUp.y=0,this.addChild(this.titleUp),this.bg=new He(QA.getTexture("UI_MINE","EBlock_bg.png")),this.bg.x=.5*(t.OUTER_W-t.BG_W),this.bg.y=this.titleUp.y+this.titleUp.height-i-i,this.addChild(this.bg),this.expProgressContainer=new Ge,this.expProgressContainer.x=this.bg.x+.5*(this.bg.width-t.HUD_W),this.expProgressContainer.y=this.bg.y+20,this.addChild(this.expProgressContainer),this.buildExpProgress(),this.titleInfo=new He(QA.getTexture("UI_MINE","Base_Title_info.png")),this.titleInfo.x=0,this.titleInfo.y=this.bg.y+this.bg.height-i-i,this.addChild(this.titleInfo),this.lblTitle=new JD(SG.getText("GAME_1203","화석 발굴"),cD.COLOR_WHITE,cD.WHITE_OUTLINE_FONT_OPTION_22),this.lblTitle.textSize=23,this.lblTitle.x=52,this.lblTitle.y=this.titleUp.y+.5*(this.titleUp.height-this.lblTitle.height)-3,this.addChild(this.lblTitle),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.onClick=()=>{
+ r2t.getInstance().showGuide()}
+ ,this.addChild(this.btnGuide),this.positionGuideButton(),this.btnClose=new kKt,this.btnClose.x=t.OUTER_W-this.btnClose.width-18,this.btnClose.y=12,this.btnClose.eventMode="static",this.btnClose.cursor="pointer",this.btnClose.on("pointertap",this.onClose,this),this.addChild(this.btnClose),this.lblEventTimer=new JD("",16768376,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEventTimer.textSize=18,this.lblEventTimer.visible=!1,this.addChild(this.lblEventTimer),this.infoContainer=new Ge,this.infoContainer.x=50,this.infoContainer.y=this.titleInfo.y,this.addChild(this.infoContainer),this.btnInfo=new MB("UI_MINE","Btn_TreasureBox_Information.png"),this.btnInfo.onClick=()=>{
+ O2t.getInstance().show()}
+ ,this.btnInfo.y=.5*(this.titleInfo.height-this.btnInfo.height),this.infoContainer.addChild(this.btnInfo),this.infoLine=new Lf,this.infoLine.rect(0,0,2,this.btnInfo.height),this.infoLine.fill(0),this.infoLine.x=this.btnInfo.x+this.btnInfo.width+10,this.infoLine.y=this.btnInfo.y+.5*(this.btnInfo.height-this.infoLine.height),this.infoContainer.addChild(this.infoLine),this.fossilIcons=[];
+ let e=this.infoLine.x+10;
+ for(let t=0;
+ t<5;
+ ++t)s=new I2t,s.setGrade(t+1),s.x=e+t*(s.width+5),s.y=this.btnInfo.y+.5*(this.btnInfo.height-s.height),this.infoContainer.addChild(s),this.fossilIcons.push(s);
+ this.fossilLabelContainer=new Ge,this.fossilLabelContainer.scale=.8,this.fossilLabelContainer.x=e,this.fossilLabelContainer.y=-10,this.infoContainer.addChild(this.fossilLabelContainer),this.fossilLabelBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Btn_Unit_01"),leftWidth:30,topHeight:20,rightWidth:30,bottomHeight:20}
+ ),this.fossilLabelBg.alpha=.9,this.fossilLabelContainer.addChild(this.fossilLabelBg);
+ const n=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ n.fill=13351840,n.fontSize=22,n.stroke={
+ color:"#333333",width:4,join:"round"}
+ ,this.fossilLabel=new JD(SG.getText("GAME_1220","감지된 화석"),n.fill,n),this.fossilLabel.x=30,this.fossilLabel.y=this.fossilLabelBg.y+.5*(this.fossilLabelBg.height-this.fossilLabel.height)+1,this.fossilLabelContainer.addChild(this.fossilLabel),this.fossilLabelBg.width=this.fossilLabel.width+2*this.fossilLabel.x,this.uiBuilt=!0}
+ buildExpProgress(){
+ this.expProgressPanel=new Lf,this.expProgressTrack=new Lf,this.expProgressPreview=new Lf,this.expProgressFill=new Lf,this.expProgressFrame=new Lf,this.expProgressPanel.roundRect(0,0,t.HUD_W,t.HUD_H,12),this.expProgressPanel.fill({
+ color:2761753,alpha:.52}
+ ),this.expProgressPanel.stroke({
+ width:2,color:6968369,alpha:.78}
+ ),this.expProgressPanel.roundRect(4,4,t.HUD_W-8,12,7),this.expProgressPanel.fill({
+ color:16777215,alpha:.07}
+ ),this.expProgressContainer.addChild(this.expProgressPanel),this.expProgressContainer.addChild(this.expProgressTrack),this.expProgressContainer.addChild(this.expProgressPreview),this.expProgressContainer.addChild(this.expProgressFill),this.expProgressContainer.addChild(this.expProgressFrame),this.lblExpLevel=new JD("Lv.1",cD.COLOR_WHITE,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblExpLevel.textSize=17,this.lblExpLevel.x=14,this.lblExpLevel.y=.5*(t.HUD_H-this.lblExpLevel.height),this.expProgressContainer.addChild(this.lblExpLevel),this.lblExpValue=new JD("0/0",cD.COLOR_WHITE,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblExpValue.textSize=17,this.expProgressContainer.addChild(this.lblExpValue);
+ const i=this.expProgressPanel;
+ this.btnPlus=new MB("UI_Ekkorr","Btn_Plus2"),this.btnPlus.x=i.width-this.btnPlus.width-15,this.btnPlus.y=.5*(i.height-this.btnPlus.height),this.btnPlus.onClick=()=>{
+ this.hide();
+ const t=t5.getInstance().getProductIdsWithHammer();
+ t.length>0?n2t.getInstance().goPaymentShopWithProductIds(t):n2t.getInstance().goPaymentShop(1)}
+ ,this.expProgressContainer.addChild(this.btnPlus),this.lblHammer=new JD("0",cD.COLOR_WHITE,cD.WHITE_OUTLINE_FONT_OPTION_22),this.lblHammer.textSize=26,this.lblHammer.x=this.btnPlus.x-70,this.lblHammer.y=.5*(i.height-this.lblHammer.height)-1,this.expProgressContainer.addChild(this.lblHammer),this.iconHammer=new He(QA.getTexture("UI_MINE","Thumbnail_Hammer_01.png")),this.iconHammer.scale.set(.6),this.iconHammer.x=this.lblHammer.x-this.iconHammer.width,this.iconHammer.y=i.height-this.iconHammer.height,this.expProgressContainer.addChild(this.iconHammer),this.drawExpProgress(0,0)}
+ async ensureMineBookData(){
+ const t=jG.getInstance();
+ try{
+ if(t.bookList.length<=0){
+ await MD.getInstance().loadBook(_D.MINE_LEVEL);
+ const i=MD.getInstance().getBook(_D.MINE_LEVEL);
+ t.setBookData(i)}
+ if(t.chestRewardList.length<=0){
+ await MD.getInstance().loadBook(_D.MINE_CHEST_REWARD);
+ const i=MD.getInstance().getBook(_D.MINE_CHEST_REWARD);
+ t.setChestRewardBookData(i)}
+ }
+ catch(i){
+ }
+ }
+ async show(){
+ var i,s,e,n;
+ if(!(QA.hasSheet("UI_MINE")||await QA.generateTexture("UI_MINE","ktx2",!1)&&QA.hasSheet("UI_MINE")))return;
+ this.uiBuilt||this.buildUI(),this.initialized=!0,await this.ensureMineBookData();
+ const h=jG.getInstance();
+ let r=h.revealedChests,o=h.discoveredBoxes;
+ if(h.needsStatusFetchForPopup()){
+ const t=await rD.getInstance().mine.getStatus(!0);
+ if(!t||!1===t.success)return;
+ h.setStatusData(null==(i=t.body)?void 0:i.status),h.setInstanceData(null==(s=t.body)?void 0:s.instance),r=(null==(e=t.body)?void 0:e.revealedChests)??[],o=(null==(n=t.body)?void 0:n.discoveredBoxes)??[],h.setDiscoveryData(r,o)}
+ const a=v2t.getInstance();
+ await a.initialize(),a.reset(),this.mountMineMain(a),a.onAllChestsExcavated=()=>{
+ }
+ ,a.onComplete=()=>this.handleComplete(),a.onHammerUsed=()=>this.refreshHeader(),a.onDamageAndExcavated=()=>this.refreshRevealedChests(),a.onHammerEmpty=()=>{
+ u2.getInstance().showMessage(SG.getText("GAME_1215","망치가 부족합니다."))}
+ ,a.onError=(t,i)=>{
+ }
+ ,await a.startGame(),(r.length>0||o.length>0)&&a.applyDiscovered(r,o),this.positionMineMain(a),this.refreshHeader(),this.refreshRevealedChests(),this.refreshEventTimerConfig(),this.startEventTimer(),this.x=.5*(VA.stageWidth-t.OUTER_W);
+ const c=VA.stageHeight;
+ this.y=Math.max(40,.5*(c-this.height)),BVt.showItemsInVertical([this],20,.3),xL.getInstance().addPopup(this)}
+ onClose(){
+ this.killExpTween(),this.stopEventTimer(),BVt.hideItemsInVertical([this],20,.2,()=>{
+ xL.getInstance().removePopup(this),v2t.getInstance().reset()}
+ )}
+ hide(){
+ this.onClose()}
+ async handleComplete(){
+ var t,i;
+ const s=await rD.getInstance().mine.end(!0);
+ if(!s||!1===s.success)return;
+ this.syncRewardManagers(s.body),jG.getInstance().clearInstance();
+ const e=null==(t=s.body)?void 0:t.rewards,n=null==(i=s.body)?void 0:i.status,h=R2t.getInstance();
+ h.onConfirm=()=>{
+ this.applyCompleteResultAndStartNext(n,e)}
+ ,h.show(e)}
+ async applyCompleteResultAndStartNext(t,i){
+ if(!t)return;
+ await this.animateExpToStatus(t);
+ const s=jG.getInstance();
+ s.setStatusData(t),s.clearInstance(),this.refreshHeader(),this.refreshRevealedChests(),await this.resetAndStartNext()}
+ async resetAndStartNext(){
+ const t=v2t.getInstance();
+ t.reset(),await t.startGame()&&(this.positionMineMain(t),this.bringChromeToFront(),this.refreshHeader(),this.refreshRevealedChests())}
+ refreshHeader(){
+ if(!this.uiBuilt)return;
+ const t=jG.getInstance(),i=t.status,s=xG.currentMineEvent;
+ s&&s.seasonId,this.lblTitle.text=SG.getText("GAME_1203","화석 발굴"),this.positionGuideButton(),this.lblHammer.text=String(i.hammerCount),this.refreshExpProgress(t)}
+ refreshRevealedChests(){
+ var t;
+ const i=jG.getInstance(),s=null==(t=i.instance)?void 0:t.mineLevel;
+ if(!s)return;
+ const e=i.getLevelVO(s);
+ if(!e)return;
+ let n;
+ const h=i.revealedChests.length,r=this.fossilIcons.length;
+ for(let o=0;
+ o<r;
+ ++o)if(n=this.fossilIcons[o],o<h){
+ const t=i.revealedChests[o];
+ n.activated=!0,n.setGrade(t.grade),n.alpha=t.fullyExcavated?1:.6,n.visible=!0}
+ else n.visible=!1;
+ this.fossilLabel.text=h>0?`${
+ SG.getText("GAME_1220","감지된 화석")}
+  (${
+ h}
+ /${
+ e.numChest}
+ )`:SG.getText("GAME_1220","감지된 화석"),this.fossilLabelBg.width=this.fossilLabel.width+2*this.fossilLabel.x}
+ refreshEventTimerConfig(){
+ this.eventEndTimeMs=this.getEventEndTimeMsFromEventMngr(),this.lastEventTimerText="",this.updateEventTimer()}
+ startEventTimer(){
+ LM.getInstance().remove(this.updateEventTimer,this),this.eventEndTimeMs>0&&LM.getInstance().add(this.updateEventTimer,this)}
+ stopEventTimer(){
+ LM.getInstance().remove(this.updateEventTimer,this)}
+ updateEventTimer(){
+ if(!this.uiBuilt||!this.lblEventTimer)return;
+ if(this.checkIfSeaonChanged(),this.eventEndTimeMs<=0)return void(this.lblEventTimer.visible=!1);
+ const t=tx.time>0?tx.time:Date.now(),i=this.eventEndTimeMs-t;
+ if(i<=0)return this.lblEventTimer.visible=!1,void this.stopEventTimer();
+ const s=wU.displayTimeAsDHHMM(Math.floor(i/1e3));
+ s!==this.lastEventTimerText&&(this.lastEventTimerText=s,this.lblEventTimer.text=s,this.lblEventTimer.visible=!0,this.positionEventTimer())}
+ positionEventTimer(){
+ const t=this.btnClose.x-12,i=this.btnGuide.x+this.btnGuide.width+16;
+ this.lblEventTimer.x=Math.max(i,t-this.lblEventTimer.width),this.lblEventTimer.y=this.titleUp.y+.5*(this.titleUp.height-this.lblEventTimer.height)-3}
+ checkIfSeaonChanged(){
+ if(1==jG.getInstance().isSeasonChanged())return m2t.getInstance().show(SG.getText("COMMON_349","시즌이 변경되었습니다."),350,16777215,YD.getInstance(),!0,600),void this.hide()}
+ positionGuideButton(){
+ this.btnGuide&&this.lblTitle&&(this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+8,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2)}
+ getEventEndTimeMsFromEventMngr(){
+ if(0==xG.isValidEvent(RG.MINE_EVENT))return 0;
+ const t=xG.currentMineEvent;
+ return t?new Date(t.endTime).getTime():0}
+ getEventEndTimeMsFromConfig(){
+ const i=AL.getInstance().getClientData(t.EVENT_END_TIME_KEY);
+ if(null==i||""===i)return 0;
+ const s=String(i).trim();
+ if(!s)return 0;
+ const e=s.match(/^(\d{
+ 4}
+ )(\d{
+ 2}
+ )(\d{
+ 2}
+ )$/);
+ if(e){
+ const[,t,i,s]=e;
+ return Date.UTC(Number(t),Number(i)-1,Number(s)+1)}
+ if(/^\d+$/.test(s)){
+ const t=Number(s);
+ return!Number.isFinite(t)||t<=0?0:s.length<=10?1e3*t:t}
+ const n=s.match(/^(\d{
+ 4}
+ )-(\d{
+ 2}
+ )-(\d{
+ 2}
+ )$/);
+ if(n){
+ const[,t,i,s]=n;
+ return Date.UTC(Number(t),Number(i)-1,Number(s)+1)}
+ const h=s.match(/^(\d{
+ 4}
+ )-(\d{
+ 2}
+ )-(\d{
+ 2}
+ )[ T](\d{
+ 2}
+ ):(\d{
+ 2}
+ )(?::(\d{
+ 2}
+ ))?$/);
+ if(h){
+ const[,t,i,s,e,n,r]=h;
+ return Date.UTC(Number(t),Number(i)-1,Number(s),Number(e),Number(n),Number(r??0))}
+ const r=Date.parse(s);
+ return Number.isFinite(r)?r:0}
+ refreshExpProgress(t){
+ const i=t.status;
+ this.setExpProgressDisplay(i.mineLevel,i.mineExp)}
+ setExpProgressDisplay(i,s,e=s){
+ const n=Math.max(0,Math.floor(s)),h=Math.max(n,Math.floor(e)),r=jG.getInstance(),o=r.getLevelVO(i),a=r.getLevelVO(i+1),c=r.getMaxLevel(),l=Math.max(0,Math.floor((null==o?void 0:o.accReqExp)??0));
+ let u=0,d=0,f="0/-";
+ if(a){
+ const t=Math.max(0,Math.floor(a.accReqExp)),i=Math.max(1,t-l),s=Math.min(i,Math.max(0,n-l)),e=Math.min(i,Math.max(s,h-l));
+ u=Math.min(1,s/i),d=Math.min(1,e/i),f=`${
+ s}
+ /${
+ i}
+ `}
+ else c>0&&i>=c&&(u=1,d=1,f=`${
+ Math.max(0,n-l)}
+ /MAX`);
+ this.lblExpLevel.text=`Lv.${
+ i}
+ `,this.lblExpValue.text=f,this.lblExpValue.x=t.EXP_BAR_X+.5*(t.EXP_BAR_W-this.lblExpValue.width),this.lblExpValue.y=t.EXP_BAR_Y+.5*(t.EXP_BAR_H-this.lblExpValue.height),this.drawExpProgress(u,d)}
+ drawExpProgress(i,s=i){
+ const e=t.EXP_BAR_X,n=t.EXP_BAR_Y,h=t.EXP_BAR_W,r=t.EXP_BAR_H,o=Math.max(0,Math.min(h,Math.round(h*i))),a=Math.max(0,Math.min(h,Math.round(h*s)));
+ if(this.expProgressTrack.clear(),this.expProgressTrack.roundRect(e,n,h,r,9),this.expProgressTrack.fill({
+ color:1380364,alpha:.86}
+ ),this.expProgressPreview.clear(),a>0){
+ const t=Math.min(9,.5*a);
+ this.expProgressPreview.roundRect(e,n,a,r,t),this.expProgressPreview.fill({
+ color:16777215,alpha:.32}
+ )}
+ if(this.expProgressFill.clear(),o>0){
+ const t=Math.min(9,.5*o);
+ this.expProgressFill.roundRect(e,n,o,r,t),this.expProgressFill.fill({
+ color:2592488,alpha:.98}
+ ),this.expProgressFill.roundRect(e+2,n+2,Math.max(0,o-4),5,3),this.expProgressFill.fill({
+ color:12118015,alpha:.45}
+ )}
+ this.expProgressFrame.clear(),this.expProgressFrame.roundRect(e,n,h,r,9),this.expProgressFrame.stroke({
+ width:2,color:5193515,alpha:.95}
+ )}
+ async animateExpToStatus(t){
+ this.killExpTween();
+ const i=jG.getInstance();
+ let s=Math.max(1,Math.floor(i.status.mineLevel)),e=Math.max(0,Math.floor(i.status.mineExp));
+ const n=Math.max(s,Math.floor(Number(t.mineLevel)||s)),h=Math.max(e,Math.floor(Number(t.mineExp)||e));
+ for(;
+ s<n;
+ ){
+ const t=i.getLevelVO(s+1);
+ if(!t)break;
+ const n=Math.max(e,Math.floor(t.accReqExp));
+ await this.animateExpSegment(s,e,n),s+=1,e=n,this.setExpProgressDisplay(s,e)}
+ await this.animateExpSegment(s,e,h)}
+ animateExpSegment(t,i,s){
+ const e={
+ value:i}
+ ,n=Math.min(1.05,Math.max(.45,Math.abs(s-i)/90));
+ return this.setExpProgressDisplay(t,i,s),new Promise(i=>{
+ this.expTween=FO.to(e,{
+ value:s,duration:n,ease:"power2.out",onUpdate:Vt(()=>{
+ this.setExpProgressDisplay(t,e.value,s)}
+ ,"onUpdate"),onComplete:Vt(()=>{
+ this.expTween=null,this.setExpProgressDisplay(t,s,s),i()}
+ ,"onComplete")}
+ )}
+ )}
+ killExpTween(){
+ this.expTween&&(this.expTween.kill(),this.expTween=null)}
+ syncRewardManagers(t){
+ (null==t?void 0:t.pet)&&cx.getInstance().setData(t.pet),(null==t?void 0:t.inventory)&&FVt.getInstance().setData({
+ inventory:t.inventory}
+ )}
+ mountMineMain(t){
+ t.parent===this&&this.removeChild(t);
+ const i=this.getChildIndex(this.bg);
+ this.addChildAt(t,Math.min(i+1,this.children.length)),this.bringChromeToFront()}
+ positionMineMain(i){
+ i.scale.set(1);
+ const s=this.bg.width-66,e=this.bg.y+t.GRID_TOP_PAD,n=this.bg.height-t.GRID_TOP_PAD-t.GRID_BOTTOM_PAD,h=Math.min(1,s/i.width,n/i.height);
+ i.scale.set(h),i.x=this.bg.x+.5*(this.bg.width-i.width),i.y=e+Math.max(0,.5*(n-i.height))}
+ bringChromeToFront(){
+ const t=[this.titleUp,this.expProgressContainer,this.titleInfo,this.lblTitle,this.btnGuide,this.lblEventTimer,this.btnClose,this.iconHammer,this.lblHammer,this.infoContainer];
+ for(const i of t)(null==i?void 0:i.parent)===this&&this.addChild(i)}
+ isInitialized(){
+ return this.initialized}
+ }
+ ;
+ Vt(N2t,"MinePopup"),Kt(N2t,"instance"),Kt(N2t,"OUTER_W",594),Kt(N2t,"BG_W",574),Kt(N2t,"OVERLAP",5),Kt(N2t,"HUD_W",526),Kt(N2t,"HUD_H",50),Kt(N2t,"EVENT_END_TIME_KEY","MINE_EVENT_END_TIME"),Kt(N2t,"EXP_BAR_X",76),Kt(N2t,"EXP_BAR_Y",15),Kt(N2t,"EXP_BAR_W",222),Kt(N2t,"EXP_BAR_H",20),Kt(N2t,"GRID_TOP_PAD",118),Kt(N2t,"GRID_BOTTOM_PAD",42);
+ let P2t=N2t;
+ const D2t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"btnDungeon",new MB("UI_Ekkorr","HeroGrade6")),Kt(this,"btnIdle",new MB("UI_Ekkorr","HeroGrade4")),Kt(this,"btnMap3",new MB("UI_Ekkorr","HeroGrade2")),Kt(this,"btnMap4",new MB("UI_Ekkorr","HeroGrade16")),Kt(this,"btnRaid",new MB("UI_Ekkorr","HeroGrade8")),Kt(this,"btnBuff",new MB("UI_Ekkorr","HeroGrade10")),Kt(this,"btnMine",new MB("UI_Ekkorr","HeroGrade12")),Kt(this,"healthOrb",mZt.getInstance()),Kt(this,"waveCallInfo",f2.getInstance()),this.healthOrb.x=640-.5*this.healthOrb.width-3,this.healthOrb.y=13,this.addChild(this.healthOrb),this.waveCallInfo.x=10,this.waveCallInfo.y=0,this.addChild(this.waveCallInfo),this.waveCallInfo.eventMode="static",this.waveCallInfo.on("pointerup",this.getNextWave,this),this.waveCallInfo.start(),Yjt.getInstance().x=0,Yjt.getInstance().y=-13,this.addChild(Yjt.getInstance()),Yjt.getInstance().onVisibilityChanged=t=>{
+ this.waveCallInfo.y=t?-65:0}
+ ,this.btnDungeon.x=500,this.btnDungeon.y=0,this.btnIdle.x=this.healthOrb.x-this.btnIdle.width-10,this.btnIdle.y=this.healthOrb.y,this.addChild(this.btnIdle),this.btnIdle.on("pointerup",this.onIdle,this),this.btnDungeon.x=this.btnIdle.x-this.btnDungeon.width-10,this.btnDungeon.y=this.btnIdle.y,this.addChild(this.btnDungeon),this.btnDungeon.on("pointerup",this.onDungeon,this),this.btnMap3.x=this.btnDungeon.x-this.btnMap3.width-10,this.btnMap3.y=this.btnDungeon.y,this.addChild(this.btnMap3),this.btnMap3.on("pointerup",this.onMap3,this),this.btnMap4.x=this.btnMap3.x-this.btnMap4.width-10,this.btnMap4.y=this.btnMap3.y,this.addChild(this.btnMap4),this.btnMap4.on("pointerup",this.onMap4,this),this.btnRaid.x=this.btnMap4.x-this.btnRaid.width-10,this.btnRaid.y=this.btnMap4.y,this.addChild(this.btnRaid),this.btnRaid.on("pointerup",this.onRaid,this),this.btnBuff.x=this.btnRaid.x-this.btnBuff.width-10,this.btnBuff.y=this.btnRaid.y,this.addChild(this.btnBuff),this.btnBuff.on("pointerup",this.onBuff,this),this.btnMine.x=this.btnBuff.x-this.btnMine.width-10,this.btnMine.y=this.btnBuff.y,this.addChild(this.btnMine),this.btnMine.on("pointerup",this.onMine,this);
+ const t=CL.getInstance().development;
+ this.btnIdle.visible=t,this.btnDungeon.visible=t,this.btnMap3.visible=t,this.btnMap4.visible=t,this.btnRaid.visible=t,this.btnBuff.visible=t,this.btnMine.visible=t}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onPowerSave(){
+ $L(),fZt.getInstance().activate()}
+ getNextWave(){
+ $L(),ML.isSoulResting?u2.getInstance().showMessage(SG.getText("GAME_866","영혼의 휴식중에는 사용할 수 없습니다.")):this.waveCallInfo.callWave()}
+ async onPet(){
+ $L(),V1t.getInstance().show()}
+ async onIdle(){
+ $L();
+ const t=gJt.getInstance();
+ t.setMode(fJt.HORIZONTAL),await t.startBattle()}
+ async onDungeon(){
+ $L();
+ const t=gJt.getInstance();
+ t.setMode(fJt.VERTICAL),await t.startBattle()}
+ async onMap3(){
+ $L();
+ const t=gJt.getInstance();
+ t.setMapIndex(3),await t.startBattle()}
+ async onMap4(){
+ $L();
+ const t=gJt.getInstance();
+ t.setMapIndex(4),await t.startBattle()}
+ async onRaid(){
+ $L(),await uZt.getInstance().startBattle({
+ bossKindNum:100004}
+ )}
+ async onPVP(){
+ await wJt.getInstance().startBattle(10,{
+ horizontal:!1}
+ )}
+ async onNextWave(){
+ await jL(()=>{
+ }
+ )}
+ onBuff(){
+ $L(),SZt.getInstance().show()}
+ async onMine(){
+ $L(),await P2t.getInstance().show()}
+ }
+ ;
+ Vt(D2t,"RightBottomMenus"),Kt(D2t,"instance");
+ let L2t=D2t;
+ const G2t=640,B2t=320,U2t=30,F2t=[4500223,2280703,8974079,6741452,4521898,2289373,5618687,7842559,10079487,11197951],H2t=[16729156,16746496,16763904,15623714,16733542,16724872,16737860,15615010,16746564,16755302],W2t=new Ag({
+ fontFamily:"Arial",fill:16768e3,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:14,fontWeight:"bold"}
+ );
+ new Ag({
+ fontFamily:"Arial",fill:16750848,stroke:{
+ color:"#000000",width:4,join:"round"}
+ ,fontSize:16,fontWeight:"bold"}
+ );
+ const $2t=new Ag({
+ fontFamily:"Arial",fill:8969727,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:14,fontWeight:"bold"}
+ ),j2t=new Ag({
+ fontFamily:"Arial",fill:16746632,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:14,fontWeight:"bold"}
+ ),V2t=new Ag({
+ fontFamily:"Arial",fill:13430527,stroke:{
+ color:"#000000",width:2,join:"round"}
+ ,fontSize:14}
+ ),K2t=new Ag({
+ fontFamily:"Arial",fill:16764108,stroke:{
+ color:"#000000",width:2,join:"round"}
+ ,fontSize:14}
+ ),z2t=new Ag({
+ fontFamily:"Arial",fill:16768e3,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:14,fontWeight:"bold"}
+ ),q2t=new Ag({
+ fontFamily:"Arial",fill:8969727,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:13,fontWeight:"bold"}
+ ),Y2t=new Ag({
+ fontFamily:"Arial",fill:16746632,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:13,fontWeight:"bold"}
+ ),X2t=new Ag({
+ fontFamily:"Arial",fill:16777215,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:12,fontWeight:"bold"}
+ ),J2t=new Ag({
+ fontFamily:"Arial",fill:11197951,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:12,fontWeight:"bolder"}
+ ),Q2t=new Ag({
+ fontFamily:"Arial",fill:16755370,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:12,fontWeight:"bolder"}
+ ),Z2t=new Ag({
+ fontFamily:"Arial",fill:16777215,stroke:{
+ color:"#000000",width:3,join:"round"}
+ ,fontSize:12,fontWeight:"bold"}
+ ),t5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"_showed",!1),Kt(this,"_frameCounter",0),Kt(this,"_allySnap",new Map),Kt(this,"_enemySnap",new Map),Kt(this,"_lblLeague"),Kt(this,"_lblMyName"),Kt(this,"_lblEnemyName"),Kt(this,"_lblMyScore"),Kt(this,"_lblEnemyScore"),Kt(this,"_lblMyRecord"),Kt(this,"_lblEnemyRecord"),Kt(this,"_lblAlly"),Kt(this,"_lblEnemy"),Kt(this,"allyRows",[]),Kt(this,"enemyRows",[]),Kt(this,"_allyBarsG",new Lf),Kt(this,"_enemyBarsG",new Lf),Kt(this,"bg",new ZD),Kt(this,"btnClose",new hG),this.bg.setIndex(6),this.addChild(this.bg),this.bg.width=640,this.bg.height=VA.stageHeight-640-454,this.bg.y=VA.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)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ _buildMatchHeader(){
+ const t=26,i=new Lf;
+ i.rect(0,0,G2t,108).fill({
+ color:0,alpha:.85}
+ ),this.addChild(i);
+ const s=new Lf;
+ s.rect(0,0,G2t,30).fill({
+ color:1118515,alpha:.9}
+ ),this.addChild(s),this._lblLeague=new Hg({
+ text:"무한랭킹전 1일차 [ A 리그 ]",style:W2t}
+ ),this._lblLeague.x=(G2t-this._lblLeague.width)/2,this._lblLeague.y=(30-this._lblLeague.height)/2,this.addChild(this._lblLeague);
+ const e=new He(QA.getTexture("UI_Ekkorr","Ui_BattleVs_Bg"));
+ e.y=30,this.addChild(e);
+ const n=new He(QA.getTexture("UI_Ekkorr","Ui_BattleVs_Bg"));
+ n.scale.set(-1,1),n.x=e.width+n.width,n.y=e.y,this.addChild(n);
+ const h=new He(QA.getTexture("UI_Ekkorr","Icon_Vs"));
+ h.x=.5*(G2t-h.width),h.y=e.y+.5*(e.height-h.height),this.addChild(h),this._lblMyName=new Hg({
+ text:"내 이름 (999위)",style:$2t}
+ ),this._lblMyName.x=8,this._lblMyName.y=34+(t-this._lblMyName.height)/2,this.addChild(this._lblMyName),this._lblEnemyName=new Hg({
+ text:"상대 이름 (999위)",style:j2t}
+ ),this._lblEnemyName.x=G2t-this._lblEnemyName.width-8,this._lblEnemyName.y=34+(t-this._lblEnemyName.height)/2,this.addChild(this._lblEnemyName),this._lblMyScore=new Hg({
+ text:"점수 : 0",style:V2t}
+ ),this._lblMyScore.x=8,this._lblMyScore.y=56+(t-this._lblMyScore.height)/2,this.addChild(this._lblMyScore),this._lblEnemyScore=new Hg({
+ text:"점수 : 0",style:K2t}
+ ),this._lblEnemyScore.x=G2t-this._lblEnemyScore.width-8,this._lblEnemyScore.y=56+(t-this._lblEnemyScore.height)/2,this.addChild(this._lblEnemyScore),this._lblMyRecord=new Hg({
+ text:"0승 0패",style:V2t}
+ ),this._lblMyRecord.x=8,this._lblMyRecord.y=78+(t-this._lblMyRecord.height)/2,this.addChild(this._lblMyRecord),this._lblEnemyRecord=new Hg({
+ text:"0승 0패",style:K2t}
+ ),this._lblEnemyRecord.x=G2t-this._lblEnemyRecord.width-8,this._lblEnemyRecord.y=78+(t-this._lblEnemyRecord.height)/2,this.addChild(this._lblEnemyRecord);
+ const r=new Lf;
+ r.rect(0,106,G2t,2).fill({
+ color:4482730,alpha:.8}
+ ),this.addChild(r)}
+ _buildDamageHeaders(){
+ const t=new Lf;
+ t.rect(0,108,G2t,26).fill({
+ color:0,alpha:.8}
+ ),this.addChild(t);
+ const i=new Hg({
+ text:"⚔ PVP DAMAGE METER",style:z2t}
+ );
+ i.x=(G2t-i.width)/2,i.y=108+(26-i.height)/2,this.addChild(i);
+ const s=new Lf;
+ s.rect(0,134,G2t,20).fill({
+ color:17,alpha:.7}
+ ),this.addChild(s),this._lblAlly=new Hg({
+ text:`👥 ${
+ SG.getText("COMMON_461","아군")}
+ `,style:q2t}
+ ),this._lblAlly.x=8,this._lblAlly.y=134+(20-this._lblAlly.height)/2,this.addChild(this._lblAlly),this._lblEnemy=new Hg({
+ text:`💀 ${
+ SG.getText("COMMON_462","적군")}
+ `,style:Y2t}
+ ),this._lblEnemy.x=328,this._lblEnemy.y=134+(20-this._lblEnemy.height)/2,this.addChild(this._lblEnemy)}
+ _buildAllRows(){
+ for(let t=0;
+ t<10;
+ t++)this.allyRows.push(this._buildRow(t,0,J2t)),this.enemyRows.push(this._buildRow(t,B2t,Q2t))}
+ _buildRow(t,i,s){
+ const e=154+t*U2t,n=t%2==0?.55:.4,h=new Lf;
+ h.rect(i,e,B2t,U2t).fill({
+ color:0,alpha:n}
+ ),this.addChild(h);
+ const r=new He;
+ r.height=26,r.width=26,r.x=i+2,r.y=e+Math.floor(2),this.addChild(r);
+ const o=new Hg({
+ text:`${
+ t+1}
+ .`,style:X2t}
+ );
+ o.x=i+45,o.y=e+Math.floor((U2t-o.height)/2),this.addChild(o);
+ const a=new Hg({
+ text:"-",style:s}
+ );
+ a.x=i+62,a.y=e+Math.floor((U2t-a.height)/2),this.addChild(a);
+ const c=new Hg({
+ text:"0",style:Z2t}
+ );
+ return c.x=i+B2t-35,c.y=e+Math.floor((U2t-c.height)/2),this.addChild(c),{
+ icon:r,lblRank:o,lblName:a,lblDmg:c}
+ }
+ _buildDivider(){
+ const t=new Lf;
+ t.rect(319,134,2,320).fill({
+ color:8947848,alpha:.5}
+ ),this.addChild(t)}
+ setMatchData(t){
+ let i="";
+ i+=SG.getText("GAME_76","무한 랭킹전"),i+=" "+SG.getText("GAME_276","제 ##회 @@일차").replace("##",t.episode.toString()).replace("@@",t.dayNum.toString()),i+=` [ ${
+ SG.getText("GAME_138","## 리그").replace("##",t.league)}
+  ]`,this._lblLeague.text=i,this._lblLeague.x=(G2t-this._lblLeague.width)/2,this._lblMyName.text=`${
+ t.myName}
+  (${
+ SG.getText("GAME_97","##위").replace("##",t.myRank.toString())}
+ )`,this._lblEnemyName.text=`${
+ t.enemyName}
+  (${
+ SG.getText("GAME_97","##위").replace("##",t.enemyRank.toString())}
+ )`,this._lblEnemyName.x=G2t-this._lblEnemyName.width-8,this._lblMyScore.text=SG.getText("COMMON_37","점수")+` : ${
+ t.myScore.toLocaleString()}
+ `,this._lblEnemyScore.text=SG.getText("COMMON_37","점수")+` : ${
+ t.enemyScore.toLocaleString()}
+ `,this._lblEnemyScore.x=G2t-this._lblEnemyScore.width-8,this._lblMyRecord.text=`${
+ SG.getText("GAME_279","##승").replace("##",t.myWin.toString())}
+ `,this._lblMyRecord.text+=` ${
+ SG.getText("GAME_280","##패").replace("##",t.myLose.toString())}
+ `,this._lblEnemyRecord.text=`${
+ SG.getText("GAME_279","##승").replace("##",t.enemyWin.toString())}
+ `,this._lblEnemyRecord.text+=` ${
+ SG.getText("GAME_280","##패").replace("##",t.enemyLose.toString())}
+ `,this._lblEnemyRecord.x=G2t-this._lblEnemyRecord.width-8,this._lblAlly.text=`👥 ${
+ SG.getText("COMMON_461","아군")}
+ `,this._lblEnemy.text=`💀 ${
+ SG.getText("COMMON_462","적군")}
+ `}
+ update(){
+ this._frameCounter++,this._frameCounter<10||(this._frameCounter=0,this._refresh())}
+ _getActiveController(){
+ const t=jni.getInstance().getCurrentBattle();
+ return t&&jni.getInstance().getCurrentBattleType()===OU.PVP2?t:wJt.getInstance()}
+ _refresh(){
+ const t=this._getActiveController(),i=wx.getInstance(),s=Vt(t=>{
+ let s=t.className;
+ if(t.kindNum>0){
+ const e=i.getBookVO(t.kindNum);
+ e&&(s=SG.getText(e.getNameKey(),t.name))}
+ return{
+ name:s,base:t.base,damage:t.totalDamageDealt}
+ }
+ ,"buildEntry");
+ for(const o of t.getFriendList())o.isCastle||this._allySnap.set(o,s(o));
+ for(const o of t.getEnemyList())o.isCastle||this._enemySnap.set(o,s(o));
+ const e=[...this._allySnap.values()].filter(t=>t.damage>0).sort((t,i)=>i.damage-t.damage),n=[...this._enemySnap.values()].filter(t=>t.damage>0).sort((t,i)=>i.damage-t.damage),h=e.length>0?e[0].damage:0,r=n.length>0?n[0].damage:0;
+ this._allyBarsG.clear(),this._enemyBarsG.clear(),this._updateColumn(this.allyRows,e,h,0,F2t,this._allyBarsG),this._updateColumn(this.enemyRows,n,r,B2t,H2t,this._enemyBarsG)}
+ _updateColumn(t,i,s,e,n,h){
+ for(let o=0;
+ o<10;
+ o++){
+ const a=t[o],c=i[o];
+ if(c){
+ a.icon.visible=!0;
+ try{
+ a.icon.texture=QA.getTexture("UI_Ekkorr",`Hero${
+ c.base}
+ `);
+ const t=a.icon.texture;
+ if(t.width>0&&t.height>0){
+ const i=t.width/t.height;
+ a.icon.height=26,a.icon.width=26*i}
+ }
+ catch(r){
+ }
+ if(a.lblRank.text=`${
+ o+1}
+ .`,a.lblName.text=c.name.length>7?c.name.substring(0,7):c.name,a.lblDmg.text=VD.displayLargeNumberAsAlphabet(Math.floor(c.damage)),s>0){
+ const t=c.damage/s,i=Math.max(2,Math.floor(200*t)),r=e+60,a=154+o*U2t+Math.floor(2);
+ h.rect(r,a,i,26).fill({
+ color:n[o%n.length],alpha:.4}
+ )}
+ }
+ else a.icon.visible=!1,a.lblRank.text="",a.lblName.text="",a.lblDmg.text=""}
+ }
+ show(){
+ this._allySnap.clear(),this._enemySnap.clear(),this._frameCounter=10,this._clearRows(),this._showed||(this._showed=!0,this.visible=!0,LM.getInstance().add(this.update,this))}
+ _clearRows(){
+ this._allyBarsG.clear(),this._enemyBarsG.clear();
+ for(let t=0;
+ t<10;
+ t++){
+ const i=this.allyRows[t];
+ i.icon.visible=!1,i.lblRank.text="",i.lblName.text="",i.lblDmg.text="";
+ const s=this.enemyRows[t];
+ s.icon.visible=!1,s.lblRank.text="",s.lblName.text="",s.lblDmg.text=""}
+ }
+ hide(){
+ this._showed&&(this._showed=!1,this.visible=!1,LM.getInstance().remove(this.update,this))}
+ reset(){
+ this._frameCounter=0}
+ onClickGiveUp(){
+ const t=jni.getInstance().getCurrentBattleType()===OU.PVP2;
+ let i="";
+ if(i+=SG.getText("GAME_281","무한랭킹전 전투를 종료하시겠습니까?")+"\n",i+=SG.getText("GAME_282","전투를 종료하면 패배 처리 됩니다."),t){
+ const t=jni.getInstance().getCurrentBattle();
+ b$t.getInstance().show(i,()=>{
+ t.giveUp()}
+ ,()=>{
+ t.resume()}
+ ),t.pause()}
+ else b$t.getInstance().show(i,()=>{
+ wJt.getInstance().giveUp()}
+ ,()=>{
+ wJt.getInstance().resume()}
+ ),wJt.getInstance().pause()}
+ }
+ ;
+ Vt(t5t,"PVPBattleStatus"),Kt(t5t,"_instance");
+ let i5t=t5t;
+ const s5t=class extends oS{
+ constructor(){
+ super(),this.addChild(Aei.getInstance()),this.addChild(whi.getInstance()),this.addChild(L2t.getInstance()),this.addChild(Zqt.getInstance()),this.addChild(Lni.getInstance()),Zqt.getInstance().y=VA.viewMainY,Lni.getInstance().y=VA.safeHeight-Lni.getInstance().height,whi.getInstance().y=0,whi.getInstance().start(),EU.getInstance().update(),$2.getInstance().y=60,$2.getInstance().refreshSlots(),this.addChild($2.getInstance()),Aei.getInstance().x=VA.stageWidth,Aei.getInstance().y=whi.getInstance().y+whi.getInstance().height+10,L2t.getInstance().x=0,L2t.getInstance().y=VA.viewMainY-70;
+ const t=o1t.getInstance();
+ t.y=642,t.visible=!1,this.addChild(t);
+ const i=c1t.getInstance();
+ i.y=642,i.visible=!1,this.addChild(i);
+ const s=i5t.getInstance();
+ s.y=642,s.visible=!1,this.addChild(s)}
+ updateLayout(){
+ Zqt.getInstance().y=VA.viewMainY,Lni.getInstance().y=VA.safeHeight-Lni.getInstance().height}
+ }
+ ;
+ Vt(s5t,"UILayer");
+ let e5t=s5t;
+ const n5t=class t extends tJt{
+ constructor(){
+ super(),Kt(this,"battleType",OU.PVP2),Kt(this,"BATTLEFIELD_WIDTH",640),Kt(this,"BATTLEFIELD_HEIGHT",640),Kt(this,"VIEWPORT_WIDTH",640),Kt(this,"GAME_ZOOM",1.3),Kt(this,"CAMERA_LERP",.08),Kt(this,"cameraX",0),Kt(this,"ALLY_CASTLE_X",126),Kt(this,"ALLY_CASTLE_Y",536),Kt(this,"ENEMY_CASTLE_X",1320),Kt(this,"ENEMY_CASTLE_Y",536),Kt(this,"ALLY_SPAWN_X",200),Kt(this,"ENEMY_SPAWN_X",1200),Kt(this,"Y_MIN",520),Kt(this,"Y_MAX",600),Kt(this,"ENEMY_COUNT",10),Kt(this,"CRANE_WING_ARC",20),Kt(this,"PVP_TIME_LIMIT_FRAMES",3600),Kt(this,"pvpStarted",!1),Kt(this,"speedHelper",new sJt("ef2.pvp2.battleSpeed")),Kt(this,"enemyCastle",null),Kt(this,"allyCastle",null),Kt(this,"timerText",null),Kt(this,"spawnedVOs",[]),Kt(this,"pvpTeamVOs",[]),Kt(this,"marchMode",!1),Kt(this,"allySpawnQueue",[]),Kt(this,"enemySpawnQueue",[]),Kt(this,"allySpawnTimer",0),Kt(this,"enemySpawnTimer",0),Kt(this,"MARCH_SPAWN_INTERVAL",56),Kt(this,"MARCH_ALLY_CASTLE_X",40),Kt(this,"MARCH_ALLY_CASTLE_Y",320),Kt(this,"MARCH_ENEMY_CASTLE_X",600),Kt(this,"MARCH_ENEMY_CASTLE_Y",320)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ async startBattle(t=10){
+ this.cleanup(),VR.getInstance().setBattleContext(xR.Pvp),HB.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=wx.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=bx.getVO();
+ n.id=-1,n.kindNum=s.kindNum,n.trans=s.trans,n.level=t,n.enhance=0,this.pvpTeamVOs.push(n)}
+ await QG.getInstance().setSingleBackground("images/bg/pvp.png",this.BATTLEFIELD_WIDTH,this.BATTLEFIELD_HEIGHT),jhi.zoomEnabled=!1,this.cameraX=0,this.applyCameraPosition(),await this.setupEnemies(t),await this.setupHeroTeam(),await this.setupCastles(t),this.setupEnemyLists(),this.createTimerUI(),jni.getInstance().switchToBattle(this),jhi.zoomEnabled=!1,this.applyCameraPosition(),qG.getInstance().remove(this.execute,this),await new Promise(t=>setTimeout(t,3e3)),this.pvpStarted=!0,qG.getInstance().add(this.execute,this)}
+ async startMarchBattle(t,i,s,e,n=10){
+ this.cleanup(),this.marchMode=!0,VR.getInstance().setBattleContext(xR.Pvp),HB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
+ for(const h of this.pvpTeamVOs)null==h||h.remove();
+ this.pvpTeamVOs.length=0;
+ for(let h=0;
+ h<10;
+ h++){
+ if(h>=t.length||t[h]<=0||t[h]>=1e4){
+ this.pvpTeamVOs.push(null);
+ continue}
+ const s=bx.getVO();
+ s.id=-1,s.kindNum=t[h],s.trans=i[h],s.level=Math.floor(ML.maxWave/100),s.enhance=0,this.pvpTeamVOs.push(s)}
+ await this.setupMarchAllies(),await this.setupMarchEnemies(s,e,n),this.setupEnemyLists(),this.createTimerUI(),jni.getInstance().switchToBattle(this),QG.getInstance().setBackground(XG.PVP2),jhi.zoomEnabled=!1,qG.getInstance().remove(this.execute,this),await aB.getInstance().play(),this.pvpStarted=!0,qG.getInstance().add(this.execute,this)}
+ async setupMarchCastles(t){
+ const i=await H2.getInstance().getUnit(rx.ElfTown5);
+ i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.MARCH_ENEMY_CASTLE_X,i.y=i.yDefault=this.MARCH_ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),rB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
+ const s=await H2.getInstance().getUnit(rx.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),rB.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;
+ s++){
+ const e=i[s];
+ if(!e)continue;
+ const n=await H2.getInstance().getUnit(e.className);
+ n.battleController=this,this.initializeUnitByKindNum(n,e.kindNum,e.level,e.trans),n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange,n.numBlock=0;
+ const h=t.ALLY_FORMATION[s%t.ALLY_FORMATION.length];
+ 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),rB.getInstance().addChild(n),this.friendList.push(n)}
+ }
+ async setupMarchEnemies(i,s,e){
+ for(let n=0;
+ n<i.length;
+ n++){
+ const h=i[n];
+ if(h<=0)continue;
+ const r=wx.getInstance().getBookVO(h);
+ if(!r)continue;
+ const o=await H2.getInstance().getUnit(r.className);
+ o.battleController=this,this.initializeUnitByKindNum(o,h,e,s[n]),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange,o.numBlock=0;
+ const a=t.ENEMY_FORMATION[n%t.ENEMY_FORMATION.length];
+ 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),rB.getInstance().addChild(o),this.enemyList.push(o)}
+ }
+ async spawnMarchAlly(t){
+ const i=await H2.getInstance().getUnit(t.className);
+ i.battleController=this,this.initializeUnitByKindNum(i,t.kindNum,t.level),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.numBlock=0,i.x=-30,i.y=450+80*this.random.next(),i.xDefault=670,i.yDefault=490,i.healthBar.setHealthColor(!0),i.enemyList=this.enemyList,i.allyList=this.friendList,i.isAir&&i.onFlyEnter(!0),rB.getInstance().addChild(i),this.friendList.push(i)}
+ async spawnMarchEnemy(t,i){
+ const s=wx.getInstance().getBookVO(t);
+ if(!s)return;
+ const e=await H2.getInstance().getUnit(s.className);
+ e.battleController=this,this.initializeUnitByKindNum(e,t,i),e.detectRange=1400,e.detectRange2=e.detectRange*e.detectRange,e.numBlock=0,e.x=670,e.y=450+80*this.random.next(),e.xDefault=-30,e.yDefault=490,e.healthBar.setHealthColor(!1),e.enemyList=this.friendList,e.allyList=this.enemyList,rB.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(){
+ const t=HB.getInstance();
+ t.scale.set(this.GAME_ZOOM),t.x=this.cameraX,t.y=VA.SAFE_AREA_TOP+this.VIEWPORT_WIDTH*(1-this.GAME_ZOOM)}
+ createTimerUI(){
+ this.removeTimerUI(),this.timerText=new Hg({
+ text:this.formatTime(Math.ceil(this.PVP_TIME_LIMIT_FRAMES/60)),style:t.TIMER_STYLE}
+ ),this.timerText.anchor.set(.5,0),this.timerText.x=320,this.timerText.y=8,e5t.getInstance().addChild(this.timerText),this.speedHelper.enter(),this.speedHelper.attachButton(e5t.getInstance(),380,6)}
+ removeTimerUI(){
+ this.timerText&&(this.timerText.parent&&this.timerText.parent.removeChild(this.timerText),this.timerText.destroy(),this.timerText=null)}
+ formatTime(t){
+ return`${
+ Math.floor(t/60)}
+ :${
+ (t%60).toString().padStart(2,"0")}
+ `}
+ getRemainingSeconds(){
+ if(!this.pvpStarted)return Math.ceil(this.PVP_TIME_LIMIT_FRAMES/60);
+ const t=this.PVP_TIME_LIMIT_FRAMES-this.battleTime;
+ return Math.max(0,Math.ceil(t/60))}
+ isTimeExpired(){
+ return!!this.pvpStarted&&this.battleTime>=this.PVP_TIME_LIMIT_FRAMES}
+ async setupEnemies(t){
+ const i=wx.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=wx.getInstance().getBookVO(i);
+ if(!r)continue;
+ const o=await H2.getInstance().getUnit(r.className);
+ o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,i,t),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),rB.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=wx.getInstance().getBookVO(r);
+ if(!o)continue;
+ const a=await H2.getInstance().getUnit(o.className);
+ a.battleController=this,this.initializeUnitByKindNum(a,r,h.level),a.initDelay=0,a.showTombstone=!1,a.totalDamageDealt=0,a.detectRange=1400,a.detectRange2=a.detectRange*a.detectRange,a.numBlock=0;
+ 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),rB.getInstance().addChild(a),this.friendList.push(a)}
+ }
+ async setupCastles(t){
+ const i=await H2.getInstance().getUnit(rx.ElfTown5);
+ i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.ENEMY_CASTLE_X,i.y=i.yDefault=this.ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),rB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
+ const s=await H2.getInstance().getUnit(rx.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),rB.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){
+ const n=bx.getVO();
+ n.id=-1,n.kindNum=i,n.level=s,n.enhance=0,n.trans=e,this.spawnedVOs.push(n),t.setData(n),t.initDelay=0,t.showTombstone=!1}
+ checkProgress(){
+ 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(ML.maxWave/100);
+ this.spawnMarchEnemy(t.kindNum,i)}
+ }
+ if(this.timerText&&!this.battleEnded){
+ const t=this.getRemainingSeconds();
+ this.timerText.text=this.formatTime(t),this.timerText.style.fill=t<=10?16724787:t<=20?16755200:16777215}
+ super.checkProgress()}
+ cleanup(){
+ VR.getInstance().setBattleContext(xR.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.removeTimerUI(),this.enemyCastle=null,this.allyCastle=null,this.pvpStarted=!1,this.marchMode=!1,this.allySpawnQueue.length=0,this.enemySpawnQueue.length=0;
+ for(const t of this.pvpTeamVOs)null==t||t.remove();
+ this.pvpTeamVOs.length=0;
+ for(const t of this.spawnedVOs)t.remove();
+ this.spawnedVOs.length=0;
+ for(const t of this.enemyList)t.disablePatrol();
+ for(const t of this.friendList)t.disablePatrol();
+ jhi.zoomEnabled=!0,super.cleanup()}
+ checkVictory(){
+ 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}
+ checkDefeat(){
+ 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}
+ onVictoryCallback(){
+ B5t.getInstance().endBattle(!0),setTimeout(()=>{
+ qG.getInstance().remove(this.execute,this),rJt.getInstance().showVictory()}
+ ,2e3)}
+ onDefeatCallback(){
+ B5t.getInstance().endBattle(!1),setTimeout(()=>{
+ qG.getInstance().remove(this.execute,this),rJt.getInstance().showDefeat()}
+ ,2e3)}
+ returnToMain(){
+ }
+ scheduleReturnToMain(){
+ }
+ pause(){
+ qG.getInstance().remove(this.execute,this)}
+ resume(){
+ qG.getInstance().add(this.execute,this)}
+ giveUp(){
+ this.onDefeatCallback()}
+ }
+ ;
+ Vt(n5t,"PVP2BattleController"),Kt(n5t,"instance"),Kt(n5t,"TIMER_STYLE",new Ag({
+ fontFamily:"Arial",fontSize:28,fontWeight:"bold",fill:16777215,stroke:{
+ color:"#000000",width:5,join:"round"}
+ }
+ )),Kt(n5t,"ALLY_FORMATION",[{
+ x:180,y:440}
+ ,{
+ x:180,y:490}
+ ,{
+ x:180,y:540}
+ ,{
+ x:180,y:590}
+ ,{
+ x:80,y:460}
+ ,{
+ x:80,y:520}
+ ,{
+ x:80,y:580}
+ ,{
+ x:10,y:460}
+ ,{
+ x:10,y:520}
+ ,{
+ x:10,y:580}
+ ]),Kt(n5t,"ENEMY_FORMATION",n5t.ALLY_FORMATION.map(t=>({
+ x:640-t.x,y:t.y}
+ )));
+ let h5t=n5t;
+ const r5t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"vsImage",new He(QA.getTexture("UI_Ekkorr","UI_VS"))),Kt(this,"allyBtns",[]),Kt(this,"enemyBtns",[]),Kt(this,"battleContainer",new Ge),Kt(this,"btnStart",new ZL("전투")),Kt(this,"lblMyName",new JD("",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMyStats",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpName",new JD("",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpStats",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"heroList"),Kt(this,"selectedSlot",-1),Kt(this,"lblHeroList",new JD("영웅 선택",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"teamKindNums",[]),Kt(this,"teamTrans",[]),Kt(this,"originalTeam",""),Kt(this,"heroVOs",[]),Kt(this,"pvpInfo"),Kt(this,"userPvp"),Kt(this,"opInfo"),Kt(this,"opKindNums",[]),Kt(this,"opTrans",[]),Kt(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);
+ const t=this.lblMyStats.y+this.lblMyStats.height+8;
+ this.battleContainer.y=t,this.addChild(this.battleContainer);
+ const i=[{
+ col:0,row:0,yOff:0}
+ ,{
+ col:0,row:1,yOff:0}
+ ,{
+ col:0,row:2,yOff:0}
+ ,{
+ col:0,row:3,yOff:0}
+ ,{
+ col:1,row:0,yOff:32}
+ ,{
+ col:1,row:1,yOff:32}
+ ,{
+ col:1,row:2,yOff:32}
+ ,{
+ col:2,row:0,yOff:32}
+ ,{
+ col:2,row:1,yOff:32}
+ ,{
+ col:2,row:2,yOff:32}
+ ];
+ for(let o=0;
+ o<10;
+ o++){
+ const t=i[o],s=new Hzt;
+ s.scale=.65,s.x=0+91*(2-t.col),s.y=62*t.row+t.yOff,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
+ this.vsImage.scale=.6,this.vsImage.x=264,this.vsImage.y=93,this.battleContainer.addChild(this.vsImage);
+ const s=264+this.vsImage.width+20,e=[{
+ col:0,row:0,yOff:0}
+ ,{
+ col:0,row:1,yOff:0}
+ ,{
+ col:0,row:2,yOff:0}
+ ,{
+ col:0,row:3,yOff:0}
+ ,{
+ col:1,row:0,yOff:32}
+ ,{
+ col:1,row:1,yOff:32}
+ ,{
+ col:1,row:2,yOff:32}
+ ,{
+ col:2,row:0,yOff:32}
+ ,{
+ col:2,row:1,yOff:32}
+ ,{
+ col:2,row:2,yOff:32}
+ ];
+ for(let o=0;
+ o<10;
+ o++){
+ const t=e[o],i=new Hzt;
+ i.scale=.65,i.x=s+91*t.col,i.y=62*t.row+t.yOff,i.activated=!1,i.hidePlusIcon(),this.battleContainer.addChild(i),this.enemyBtns.push(i)}
+ this.battleContainer.x=.5*(this.bg.width-this.battleContainer.width);
+ const n=t+248+15-20;
+ this.lblHeroList.x=15,this.lblHeroList.y=n,this.addChild(this.lblHeroList);
+ const h=n+this.lblHeroList.height+8,r=this.bg.height-h-60-15;
+ this.heroList=new d5(Uzt,630,r),this.heroList.x=5,this.heroList.y=h,this.addChild(this.heroList),this.btnStart.color=ZL.RED,this.btnStart.width=200,this.btnStart.height=50,this.btnStart.x=.5*(this.bg.width-this.btnStart.width),this.btnStart.y=this.bg.height-70+10,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ setData(t,i,s){
+ this.pvpInfo=t,this.userPvp=i,this.opInfo=s,this.lblHeroList.text=SG.getText("GAME_563","영웅 선택"),this.btnStart.text=SG.getText("GAME_70","전투"),this.lblMyName.text=`Rank.${
+ i.rank}
+   ${
+ ML.name}
+ `;
+ let e=Number(i.total)-Number(i.win);
+ this.lblMyStats.text=`${
+ SG.getText("COMMON_37","점수")}
+  : ${
+ i.point.toLocaleString()}
+  ( ${
+ i.total}
+ -${
+ i.win}
+ -${
+ e}
+  )`,this.lblOpName.text=`Rank.${
+ s.rank}
+   ${
+ s.name}
+ `,this.lblOpName.x=this.bg.width-this.lblOpName.width-15,e=Number(s.total)-Number(s.win),this.lblOpStats.text=`${
+ SG.getText("COMMON_37","점수")}
+  : ${
+ s.point.toLocaleString()}
+  ( ${
+ s.total}
+ -${
+ s.win}
+ -${
+ e}
+  )`,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(),Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.updateHeroList()}
+ initTeam(){
+ this.teamKindNums=new Array(10).fill(-1),this.teamTrans=new Array(10).fill(0);
+ const t=[],i=[];
+ this.parseTeamData(this.pvpInfo.team,t,i);
+ for(let s=0;
+ s<Math.min(t.length,10);
+ s++)this.teamKindNums[s]=t[s],this.teamTrans[s]=i[s];
+ this.originalTeam=this.buildTeamStr()}
+ buildTeamStr(){
+ const t=[];
+ for(let i=0;
+ i<10;
+ i++)this.teamKindNums[i]>0?t.push(`${
+ this.teamKindNums[i]}
+ -${
+ this.teamTrans[i]}
+ `):t.push("0-0");
+ return t.join("|")}
+ async saveTeamIfChanged(){
+ const t=this.buildTeamStr();
+ if(t===this.originalTeam)return;
+ const i=await rD.getInstance().pvp.updateTeam(t,!0);
+ !1!==i.success?(this.pvpInfo.team=i.body,this.originalTeam=t):wG.getInstance().showError(i)}
+ parseTeamData(t,i,s){
+ if(i.length=0,s.length=0,t)for(const e of t.split("|")){
+ const[t,n]=e.split("-").map(Number);
+ i.push(0===t?-1:t),s.push(0===t?0:n)}
+ }
+ updateAllyButtons(){
+ const t=Math.floor(ML.maxWave/100);
+ for(let i=0;
+ i<10;
+ i++){
+ const s=this.allyBtns[i],e=bx.getVO();
+ this.teamKindNums[i]>0?(e.kindNum=this.teamKindNums[i],e.trans=this.teamTrans[i],e.level=t,s.setDataWith(i,e),s.hideEnhance(),s.setAlphaToFrame(i===this.selectedSlot?1:.85)):(e.kindNum=-1,s.setDataWith(i,e),s.hideBackground(),s.setAlphaToFrame(i===this.selectedSlot?.8:.4)),s.selected=i===this.selectedSlot}
+ }
+ updateEnemyButtons(){
+ const t=Math.floor(this.opInfo.maxWave/100);
+ for(let i=0;
+ i<10;
+ i++){
+ const s=this.enemyBtns[i],e=bx.getVO();
+ i<this.opKindNums.length?(e.kindNum=this.opKindNums[i],e.trans=this.opTrans[i],e.level=t,s.setDataWith(i,e),s.hideEnhance()):(e.kindNum=-1,s.setDataWith(i,e)),s.setAlphaToFrame(1)}
+ }
+ calcTotalInventory(){
+ const t=new Map,i=wx.getInstance().list;
+ for(const e of i){
+ if(e.kindNum>=1e4)continue;
+ const i=`${
+ e.kindNum}
+ _${
+ e.trans}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const s=wx.getInstance().ownedUnitList;
+ for(const e of s)if(!(e.kindNum>=1e4)){
+ if(e.count>0){
+ const i=`${
+ e.kindNum}
+ _0`;
+ t.set(i,(t.get(i)||0)+e.count)}
+ if(e.trans[0]>0){
+ const i=`${
+ e.kindNum}
+ _1`;
+ t.set(i,(t.get(i)||0)+e.trans[0])}
+ if(e.trans[1]>0){
+ const i=`${
+ e.kindNum}
+ _2`;
+ t.set(i,(t.get(i)||0)+e.trans[1])}
+ if(e.trans[2]>0){
+ const i=`${
+ e.kindNum}
+ _3`;
+ t.set(i,(t.get(i)||0)+e.trans[2])}
+ }
+ return t}
+ updateHeroList(){
+ Gzt.removeAll(this.heroVOs);
+ const t=new Map;
+ for(let e=0;
+ e<10;
+ e++){
+ if(this.teamKindNums[e]<=0)continue;
+ const i=`${
+ this.teamKindNums[e]}
+ _${
+ this.teamTrans[e]}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const i=this.calcTotalInventory();
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),-1,0,0,0));
+ for(const[e,n]of i){
+ const[i,s]=e.split("_"),h=t.get(e)||0;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),Number(i),Number(s),n-h,n))}
+ const s=wx.getInstance();
+ this.heroVOs.sort((t,i)=>{
+ if(t.kindNum<=0)return-1;
+ if(i.kindNum<=0)return 1;
+ const e=s.getBookVO(t.kindNum),n=s.getBookVO(i.kindNum);
+ if(!e||!n)return 0;
+ const h=1e12*e.grade-1e9*e.evolStage+1e6*t.trans-e.tribe;
+ return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
+ ),this.heroList.dataProvider=QO.chunkArray(this.heroVOs,7)}
+ onClickAllyHero(t){
+ this.selectedSlot===t?this.selectedSlot=-1:(this.teamKindNums[this.selectedSlot]>0&&this.teamKindNums[t]>0&&([this.teamKindNums[this.selectedSlot],this.teamKindNums[t]]=[this.teamKindNums[t],this.teamKindNums[this.selectedSlot]],[this.teamTrans[this.selectedSlot],this.teamTrans[t]]=[this.teamTrans[t],this.teamTrans[this.selectedSlot]]),this.selectedSlot=t),this.updateAllyButtons()}
+ onClickHeroFromList(t,i){
+ if(t<=0){
+ if(this.selectedSlot>=0&&this.selectedSlot<10&&this.teamKindNums[this.selectedSlot]>0){
+ this.teamKindNums[this.selectedSlot]=-1,this.teamTrans[this.selectedSlot]=0;
+ let t=-1;
+ for(let i=this.selectedSlot+1;
+ i<10;
+ i++)if(this.teamKindNums[i]>0){
+ t=i;
+ break}
+ if(t<0)for(let i=0;
+ i<this.selectedSlot;
+ i++)if(this.teamKindNums[i]>0){
+ t=i;
+ break}
+ this.selectedSlot=t}
+ }
+ else{
+ const s=`${
+ t}
+ _${
+ i}
+ `;
+ let e=0;
+ for(let n=0;
+ n<10;
+ n++)this.teamKindNums[n]===t&&this.teamTrans[n]===i&&e++;
+ if(e>=(this.calcTotalInventory().get(s)||0))return;
+ if(this.selectedSlot>=0){
+ this.teamKindNums[this.selectedSlot]=t,this.teamTrans[this.selectedSlot]=i;
+ let s=-1;
+ for(let t=this.selectedSlot+1;
+ t<10;
+ t++)if(this.teamKindNums[t]<=0){
+ s=t;
+ break}
+ this.selectedSlot=s}
+ else for(let n=0;
+ n<10;
+ n++)if(this.teamKindNums[n]<=0){
+ this.teamKindNums[n]=t,this.teamTrans[n]=i;
+ break}
+ }
+ this.updateAllyButtons(),this.updateHeroList()}
+ isEmptyTeam(){
+ for(let t=0;
+ t<10;
+ t++)if(this.teamKindNums[t]>0)return!1;
+ return!0}
+ async onStartBattle(){
+ if(!qG.getInstance().isRunning)return;
+ if(!this.userPvp)return;
+ if(this.userPvp.ticket<=0)return void wG.getInstance().show(SG.getText("GAME_275","티켓이 부족합니다."));
+ if(this.isEmptyTeam())return void wG.getInstance().show(SG.getText("GAME_285","전투에 출전할 병사를 슬롯에 추가해 주세요."));
+ if(this.requestPending)return;
+ this.requestPending=!0,await this.saveTeamIfChanged();
+ const t=await rD.getInstance().pvp.startBattle(this.opInfo.uid,!0);
+ if(!1===t.success)return this.requestPending=!1,void wG.getInstance().showError(t);
+ c5t.getInstance().battleId=t.body.battleId,this.userPvp.ticket--,oVt.getInstance().updatePvpTicket(this.userPvp.ticket,this.userPvp.ticketTime??null),this.hide(),this.onPVP(),this.requestPending=!1,wVt.getInstance().getStatus()}
+ onPVP(){
+ B5t.getInstance().hideAllPvPPopups(),i5t.getInstance().setMatchData({
+ episode:this.pvpInfo.episode,dayNum:this.pvpInfo.round,league:this.getGradeText(this.userPvp.grade),myName:ML.name,myRank:this.userPvp.rank,myScore:this.userPvp.point,myWin:this.userPvp.win,myLose:this.userPvp.lose,enemyName:this.opInfo.name,enemyRank:this.opInfo.rank,enemyScore:this.opInfo.point,enemyWin:this.opInfo.win,enemyLose:Number(this.opInfo.total)-Number(this.opInfo.win)}
+ ),h5t.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100))}
+ getGradeText(t){
+ return["","C","B","A","S"][t]??""}
+ show(){
+ Uzt.showAttackType=!1,this.show2()}
+ onRemoved(){
+ B5t.getInstance().addResourceInfo(),kF.ensureMounted(Zqt.getInstance())}
+ hide(){
+ this.saveTeamIfChanged(),super.hide()}
+ }
+ ;
+ Vt(r5t,"PVP2ReadyPopup"),Kt(r5t,"_instance");
+ let o5t=r5t;
+ const a5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"lblPoint",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblTicket",new $B("PVP_TICKET_ON","",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblTimer",new $B("Icon_Time02","",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblSettlement",new JD("",16755370,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"opponentList"),Kt(this,"btnBuyTicket",new kU("UI_GEM","","티켓구매",.8,140,60)),Kt(this,"btnRefreshOppo",new kU("UI_GEM","","새로고침",.8,140,60)),Kt(this,"pvpInfo",null),Kt(this,"userPvp",null),Kt(this,"battleId",0),Kt(this,"lastLoadTime",0),Kt(this,"requestPending",!1),Kt(this,"requestPending2",!1),Kt(this,"timerRunning",!1),Kt(this,"timerUpdateCount",0),Kt(this,"rechargeTime",0),Kt(this,"myHeroKindNums",[]),Kt(this,"myHeroTrans",[]),this.lblPoint.x=12,this.lblPoint.y=4,this.addChild(this.lblPoint),this.lblTicket.iconScale=.9,this.lblTicket.x=12,this.lblTicket.y=30,this.addChild(this.lblTicket),this.lblTimer.iconScale=.7,this.lblTimer.x=this.lblTicket.x+80,this.lblTimer.y=30,this.addChild(this.lblTimer),this.btnRefreshOppo.color=kU.BROWN,this.btnRefreshOppo.width=140,this.btnRefreshOppo.height=60,this.btnRefreshOppo.x=640-this.btnRefreshOppo.width-19,this.btnRefreshOppo.y=0,this.btnRefreshOppo.onClick=this.onChangeOpponentList.bind(this),this.addChild(this.btnRefreshOppo),this.btnBuyTicket.color=kU.BROWN,this.btnBuyTicket.width=140,this.btnBuyTicket.height=60,this.btnBuyTicket.x=this.btnRefreshOppo.x-this.btnBuyTicket.width-7,this.btnBuyTicket.y=0,this.btnBuyTicket.onClick=this.onBuyTicket.bind(this),this.addChild(this.btnBuyTicket),this.lblSettlement.y=200,this.addChild(this.lblSettlement),this.lblSettlement.visible=!1;
+ const t=B5t.getInstance().listHeight-60-10;
+ this.opponentList=new KO(KXt,625,t),this.opponentList.x=0,this.opponentList.y=68,this.addChild(this.opponentList),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ onAdded(){
+ this.pvpInfo&&this.startTimer()}
+ onRemoved(){
+ Tei.getInstance().unregisterListItemsGetter("PvP"),this.stopTimer()}
+ setData(){
+ this.updateButtonLabels(),this.pvpInfo&&tx.time-this.lastLoadTime<t.LOAD_COOLDOWN?this.registerMissionGuild():this.loadInfo()}
+ updateButtonLabels(){
+ this.btnBuyTicket.text=SG.getText("COMMON_385","티켓 구매"),this.btnRefreshOppo.text=SG.getText("COMMON_60","새로고침")}
+ async loadInfo(){
+ var t;
+ const i=await rD.getInstance().pvp.getInfo(!0);
+ !1!==i.success?(this.pvpInfo=i.body,this.userPvp=null==(t=i.body)?void 0:t.userPvp,this.lastLoadTime=tx.time,this.parseTeamData(this.pvpInfo.team,this.myHeroKindNums,this.myHeroTrans),this.updateInfoLabels(),this.startTimer(),this.pvpInfo.isSettlement?this.showSettlement():(this.hideSettlement(),this.loadOpponentList())):wG.getInstance().showError(i)}
+ registerMissionGuild(){
+ Hjt.getInstance().currentMissionId==Hjt.KINDNUM_PVP&&Tei.getInstance().registerListItemsGetter(()=>this.opponentList.getItemList(),"PvP")}
+ async loadOpponentList(){
+ const t=await rD.getInstance().pvp.getOpponentList(!0);
+ !1!==t.success?this.displayOpponentList(t.body.opponents):wG.getInstance().showError(t)}
+ displayOpponentList(t){
+ this.registerMissionGuild(),t.sort((t,i)=>(Number(t.rank)||999)-(Number(i.rank)||999)),this.opponentList.dataProvider=t;
+ const i=this.opponentList.itemList;
+ if(i)for(const s of i)s.onFight=this.onReadyBattle.bind(this)}
+ async onChangeOpponentList(){
+ const t=await rD.getInstance().pvp.changeOpponentList(!0);
+ !1!==t.success?(this.displayOpponentList(t.body.opponents),"gem"in t.body&&(ML.gem=t.body.gem,kF.getInstance().updateGem()),this.userPvp&&(this.userPvp.refreshCount=(this.userPvp.refreshCount||0)+1,this.updateRefreshInfo())):wG.getInstance().showError(t)}
+ async onReadyBattle(t){
+ this.userPvp&&(this.userPvp.ticket<=0?wG.getInstance().show(SG.getText("GAME_275","티켓이 부족합니다.")):(await this.getMyTeamInfo(),o5t.getInstance().setData(this.pvpInfo,this.userPvp,t),o5t.getInstance().show()))}
+ async getMyTeamInfo(){
+ const t=await rD.getInstance().pvp.getTeam(!0);
+ !1!==t.success?t.body&&(this.pvpInfo.team=t.body):wG.getInstance().showError(t)}
+ async endBattle(t){
+ if(this.battleId<=0)return;
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ const i=await rD.getInstance().pvp.endBattle(this.battleId,t,!0);
+ if(!1===i.success)return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ lVt.getInstance().markDirty(),"gem"in i.body&&(ML.gem=i.body.gem,kF.getInstance().updateGem());
+ const{
+ gainPoint:s,newPoint:e}
+ =i.body;
+ this.userPvp&&(this.userPvp.point=e),this.battleId=0,this.updateInfoLabels(),this.setRequestPending(!1),this.loadInfo(),t&&wVt.getInstance().getStatus()}
+ setRequestPending(t){
+ this.requestPending=t}
+ setRequestPending2(t){
+ this.requestPending2=t}
+ getTicketCost(){
+ var t;
+ const i=Number((null==(t=this.userPvp)?void 0:t.ticketPurchaseCount)??0),s=AL.getInstance().getClientData("PVP_TICKET_COST").split("|").map(Number);
+ return i<s.length?s[i]:s[s.length-1]}
+ async onBuyTicket(){
+ const t=this.getTicketCost();
+ if(ML.gem<t)return void wG.getInstance().show(SG.getText("COMMON_352","보석이 부족합니다."));
+ let i=SG.getText("GAME_283","##보석을 소모하여 무한 랭킹전 티켓을 1장 구매하시겠습니까?");
+ b$t.getInstance().show(i.replace("##",String(t)),this.buyTitcket.bind(this))}
+ async buyTitcket(){
+ if(1==this.requestPending2)return;
+ this.setRequestPending2(!0);
+ const t=await rD.getInstance().pvp.buyTicket(1,!0);
+ if(0==t.success)return wG.getInstance().showError(t),void this.setRequestPending2(!1);
+ !1!==t.success?(this.userPvp=t.body.userPvp,this.updateInfoLabels(),"gem"in t.body&&(ML.gem=t.body.gem,kF.getInstance().updateGem()),this.setRequestPending2(!1)):wG.getInstance().showError(t)}
+ showSettlement(){
+ this.lblSettlement.text=`${
+ SG.getText("GAME_103","정산 시간입니다.")}
+  (23:00 ~ 23:59 UTC)`,this.lblSettlement.x=.5*(620-this.lblSettlement.width),this.lblSettlement.visible=!0,this.opponentList.dataProvider=[],this.btnRefreshOppo.activated=!1}
+ hideSettlement(){
+ this.lblSettlement.visible=!1}
+ getGradeText(t){
+ return["","C","B","A","S"][t]??""}
+ updateInfoLabels(){
+ if(!this.pvpInfo||!this.userPvp)return;
+ let t="";
+ t+=SG.getText("GAME_76","무한 랭킹전"),t+=" ( "+SG.getText("GAME_276","제 ##회 @@일차").replace("##",this.pvpInfo.episode.toString()).replace("@@",this.pvpInfo.round.toString())+" ) ",t+=` [ ${
+ SG.getText("GAME_138","## 리그").replace("##",this.getGradeText(this.userPvp.grade))}
+  ]`,B5t.getInstance().updateTitle(t);
+ const i=this.userPvp.rank??"";
+ this.lblPoint.text=SG.getText("COMMON_37","점수")+`: ${
+ this.userPvp.point.toLocaleString()}
+ `+(i?` (${
+ SG.getText("GAME_97","##위").replace("##",String(i))}
+ )`:""),this.lblTicket.text=`${
+ this.userPvp.ticket}
+ /${
+ this.userPvp.maxTicket}
+ `;
+ const s=this.getTicketCost();
+ this.btnBuyTicket.iconText=String(s),this.updateButtonLabels(),this.updateRefreshInfo()}
+ updateRefreshInfo(){
+ var t;
+ const i=(null==(t=this.userPvp)?void 0:t.refreshCount)||0;
+ i<5?(this.btnRefreshOppo.showIconLabel=!0,this.btnRefreshOppo.showTextLabel=!0,this.btnRefreshOppo.iconLabel.iconScale=.8,this.btnRefreshOppo.iconLabel.iconHidden=!0,this.btnRefreshOppo.iconText=`${
+ SG.getText("COMMON_16","무료")}
+  ${
+ 5-i}
+ /5`,this.btnRefreshOppo.text=SG.getText("COMMON_60","새로고침")):(this.btnRefreshOppo.showIconLabel=!0,this.btnRefreshOppo.showTextLabel=!0,this.btnRefreshOppo.iconLabel.iconScale=.8,this.btnRefreshOppo.iconLabel.iconHidden=!1,this.btnRefreshOppo.iconText="100",this.btnRefreshOppo.text=SG.getText("COMMON_60","새로고침")),this.btnRefreshOppo.activated=!0}
+ startTimer(){
+ this.timerRunning||(this.timerRunning=!0,this.timerUpdateCount=0,this.rechargeTime=Number(AL.getInstance().getClientData("PVP_TICKET_CHARGE_TIME")),this.updateTimer(),LM.getInstance().add(this.updateTimer,this))}
+ stopTimer(){
+ this.timerRunning&&(this.timerRunning=!1,LM.getInstance().remove(this.updateTimer,this))}
+ updateTimer(){
+ if(++this.timerUpdateCount<30)return;
+ if(null==this.parent)return void this.stopTimer();
+ if(this.timerUpdateCount=0,!this.userPvp)return;
+ if(this.userPvp.ticket>=this.userPvp.maxTicket)return void(this.lblTimer.text=SG.getText("GAME_105","충전 완료"));
+ const t=tx.time;
+ if(t<=0)return;
+ const i=new Date(this.userPvp.ticketTime).getTime()+60*this.rechargeTime*1e3-t;
+ if(i<=0)return void(this.lblTimer.text=SG.getText("GAME_107","충전 중"));
+ const s=Math.floor(i/6e4),e=Math.floor(i%6e4/1e3),n=s.toString().padStart(2,"0"),h=e.toString().padStart(2,"0");
+ this.lblTimer.text=`${
+ n}
+ :${
+ h}
+ `}
+ parseTeamData(t,i,s){
+ if(i.length=0,s.length=0,t)for(const e of t.split("|")){
+ const[t,n]=e.split("-").map(Number);
+ i.push(t),s.push(n)}
+ }
+ }
+ ;
+ Vt(a5t,"PVPBattleSubView"),Kt(a5t,"instance"),Kt(a5t,"LOAD_COOLDOWN",18e4);
+ let c5t=a5t;
+ const l5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"btnClose",new kKt),Kt(this,"vsImage",new He(QA.getTexture("UI_Ekkorr","UI_VS"))),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20)),Kt(this,"lblMyName",new JD("My Name",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMyRank",new JD("My Rank",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMyPoint",new JD("My Point",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMyStats",new JD("My Stats",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMyWave",new JD("My Wave",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpName",new JD("Op Name",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpRank",new JD("Op Rank",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpPoint",new JD("Op Point",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpStats",new JD("Op Stats",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblOpWave",new JD("Op Wave",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHelp",new JD("Op Wave",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"myIconBtns"),Kt(this,"opIconBtns"),Kt(this,"btnFight",new ZL("전투")),Kt(this,"requestPending",!1),Kt(this,"pvpInfo"),Kt(this,"userPvp"),Kt(this,"opInfo"),Kt(this,"myKindNums",[]),Kt(this,"myTrans",[]),Kt(this,"opKindNums",[]),Kt(this,"opTrans",[]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
+ ),this.addChild(this.bg),this.bg.width=640,this.bg.height=750-Lni.getInstance().height,this.lblTitle.text=SG.getText("GAME_76","무한 랭킹전"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.addChild(this.lblMyName,this.lblMyStats),this.addChild(this.lblOpName,this.lblOpStats,this.lblHelp),this.lblOpName.y=this.lblTitle.y+this.lblTitle.height+20,this.lblOpRank.y=this.lblOpName.y+this.lblOpName.height,this.lblOpPoint.y=this.lblOpRank.y,this.lblOpStats.y=this.lblOpName.y,this.lblOpWave.y=this.lblOpStats.y,this.opIconBtns=[];
+ let t=this.lblTitle.x+20,i=this.lblOpStats.y+this.lblOpStats.height;
+ for(let s=0;
+ s<10;
+ ++s){
+ const e=new Hzt;
+ e.scale=.9,e.x=t+s%5*e.width,e.y=i+Math.floor(s/5)*e.height,e.activated=!1,e.hidePlusIcon(),this.addChild(e),this.opIconBtns.push(e)}
+ this.vsImage.scale=.8,this.vsImage.x=.5*(this.bg.width-this.vsImage.width),this.vsImage.y=300,this.addChild(this.vsImage),this.lblMyName.y=this.vsImage.y+this.vsImage.height+15,this.lblMyRank.y=this.lblMyName.y+this.lblMyName.height,this.lblMyPoint.y=this.lblMyRank.y,this.lblMyStats.y=this.lblMyName.y,this.lblMyWave.y=this.lblMyStats.y,this.myIconBtns=[],i=this.lblMyStats.y+this.lblMyStats.height;
+ for(let s=0;
+ s<10;
+ ++s){
+ const e=new Hzt;
+ e.scale=.9,e.x=t+s%5*e.width,e.y=i+Math.floor(s/5)*e.height,e.onClick=this.onClickMyHero.bind(this),this.addChild(e),this.myIconBtns.push(e)}
+ this.y=VA.safeHeight-this.bg.height-Lni.getInstance().height,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.hide.bind(this),this.addChild(this.btnClose),this.btnFight.color=ZL.RED,this.btnFight.width=200,this.btnFight.height=45,this.btnFight.x=.5*(this.bg.width-this.btnFight.width),this.btnFight.y=610,this.btnFight.onClick=this.onStartBattle.bind(this),this.addChild(this.btnFight),this.lblHelp.text=SG.getText("GAME_399","무한랭킹전에서 영웅은 기사단 레벨로 전투합니다."),this.lblHelp.x=.5*(this.bg.width-this.lblHelp.width),this.lblHelp.y=this.btnFight.y-this.lblHelp.height-10,this.addChild(this.lblHelp),this.updateLayout(),this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onClickMyHero(t){
+ g5t.getInstance().setData(this.pvpInfo.team,t),g5t.getInstance().show()}
+ async onStartBattle(){
+ if(!this.userPvp)return;
+ if(this.userPvp.ticket<=0)return void wG.getInstance().show(SG.getText("GAME_275","티켓이 부족합니다."));
+ const t=o5t.getInstance();
+ t.setData(this.pvpInfo,this.userPvp,this.opInfo),t.show()}
+ onPVP(){
+ B5t.getInstance().hideAllPvPPopups(),i5t.getInstance().setMatchData({
+ episode:this.pvpInfo.episode,dayNum:this.pvpInfo.round,league:this.getGradeText(this.userPvp.grade),myName:ML.name,myRank:this.userPvp.rank,myScore:this.userPvp.point,myWin:this.userPvp.win,myLose:this.userPvp.lose,enemyName:this.opInfo.name,enemyRank:this.opInfo.rank,enemyScore:this.opInfo.point,enemyWin:this.opInfo.win,enemyLose:Number(this.opInfo.total)-Number(this.opInfo.win)}
+ ),h5t.getInstance().startMarchBattle(this.myKindNums,this.myTrans,this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100))}
+ setRequestPending(t){
+ this.requestPending=t}
+ updateLayout(){
+ this.lblMyName.x=this.lblTitle.x+25,this.lblMyRank.x=this.lblMyName.x,this.lblMyPoint.x=120,this.lblMyStats.x=this.width-this.lblMyStats.width-50,this.lblMyWave.x=400,this.lblOpName.x=this.lblMyName.x,this.lblOpRank.x=this.lblMyRank.x,this.lblOpPoint.x=this.lblMyPoint.x,this.lblOpStats.x=this.width-this.lblMyStats.width-50,this.lblOpWave.x=this.lblMyWave.x}
+ updateLanguage(){
+ let t="";
+ t+=SG.getText("GAME_76","무한 랭킹전"),t+=" ( "+SG.getText("GAME_276","제 ##회 @@일차").replace("##",this.pvpInfo.episode.toString()).replace("@@",this.pvpInfo.round.toString())+" ) ",t+=` [ ${
+ SG.getText("GAME_138","## 리그").replace("##",this.getGradeText(this.userPvp.grade))}
+  ]`,this.lblTitle.text=t,this.lblHelp.text=SG.getText("GAME_399","무한랭킹전에서 영웅은 기사단 레벨로 전투합니다."),this.lblHelp.x=.5*(this.bg.width-this.lblHelp.width)}
+ setData(t,i,s){
+ this.pvpInfo=t,this.userPvp=i,this.opInfo=s,this.updateInfo(),this.updateLanguage(),this.updateLayout()}
+ updateInfo(){
+ const t=SG.getText("GAME_97","##위").replace("##",this.userPvp.rank),i=SG.getText("COMMON_37","점수")+` : ${
+ this.userPvp.point.toLocaleString()}
+ `;
+ this.lblMyName.text=`[${
+ t}
+ ] ${
+ ML.name}
+  (${
+ i}
+ )`;
+ let s=SG.getText("GAME_278","##전-@@승-$$패"),e=Number(this.userPvp.total)-Number(this.userPvp.win);
+ this.lblMyStats.text=s.replace("##",this.userPvp.total.toString()).replace("@@",this.userPvp.win.toString()).replace("$$",e.toString()),this.updateMyTeam();
+ const n=SG.getText("GAME_97","##위").replace("##",this.opInfo.rank),h=SG.getText("COMMON_37","점수")+` : ${
+ this.opInfo.point.toLocaleString()}
+ `;
+ let r,o;
+ this.lblOpName.text=`[${
+ n}
+ ] ${
+ this.opInfo.name}
+  (${
+ h}
+ )`,e=Number(this.opInfo.total)-Number(this.opInfo.win),this.lblOpStats.text=s.replace("##",this.opInfo.total.toString()).replace("@@",this.opInfo.win.toString()).replace("$$",e.toString()),this.opKindNums=[],this.opTrans=[],this.parseTeamData(this.opInfo.team,this.opKindNums,this.opTrans);
+ let a=this.opKindNums.length;
+ for(let c=0;
+ c<10;
+ ++c)r=this.opIconBtns[c],o=bx.getVO(),c<a?(o.kindNum=this.opKindNums[c],o.trans=this.opTrans[c],o.level=Math.floor(this.opInfo.maxWave/100),r.setDataWith(c,o),r.setAlphaToFrame(1)):(o.kindNum=-1,r.setDataWith(c,o),r.setAlphaToFrame(.3))}
+ updateMyTeam(){
+ let t,i;
+ this.myKindNums=[],this.myTrans=[],this.parseTeamData(this.pvpInfo.team,this.myKindNums,this.myTrans);
+ let s=this.myKindNums.length;
+ for(let e=0;
+ e<10;
+ ++e)t=this.myIconBtns[e],i=bx.getVO(),e<s?(i.kindNum=this.myKindNums[e],i.trans=this.myTrans[e],i.level=Math.floor(ML.maxWave/100),t.setDataWith(e,i),t.setAlphaToFrame(1)):(i.kindNum=-1,t.setDataWith(e,i),t.setAlphaToFrame(.3))}
+ parseTeamData(t,i,s){
+ if(i.length=0,s.length=0,t)for(const e of t.split("|")){
+ const[t,n]=e.split("-").map(Number);
+ i.push(t),s.push(n)}
+ }
+ show(){
+ NU.getInstance().addChild(this)}
+ hide(){
+ B5t.getInstance().addResourceInfo(),null!=this.parent&&this.parent.removeChild(this)}
+ onAdded(){
+ this.addResourceInfo()}
+ onRemoved(){
+ kF.ensureMounted(Zqt.getInstance())}
+ addResourceInfo(){
+ this.addChild(kF.getInstance()),this.addChild(Jqt.getInstance())}
+ getGradeText(t){
+ return["","C","B","A","S"][t]??""}
+ }
+ ;
+ Vt(l5t,"PVPReadyPopup"),Kt(l5t,"_instance");
+ let u5t=l5t;
+ const d5t=class extends qO{
+ constructor(){
+ let t;
+ super(),Kt(this,"bg"),Kt(this,"icons"),Kt(this,"posList",[0,1,2,3,4,640]),Kt(this,"pvos",[]),this.bg=new He(QA.getTexture("UI_Ekkorr","blackRect")),this.bg.alpha=.1,this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icons=[];
+ for(let i=0;
+ i<5;
+ ++i)t=new Hzt,t.setMode(z2.HERO_PVP),t.scale=.9,t.x=30+i*t.width,this.addChild(t),this.icons.push(t),this.posList[i]=t.x;
+ this.posList.push(640)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ let i;
+ this.pvos=t;
+ const s=this.pvos.length;
+ for(let e=0;
+ e<this.icons.length;
+ ++e)i=this.icons[e],e<s?(i.setDataWith(e,this.pvos[e].vo),i.visible=!0,i.hideLevel(),-1==this.pvos[e].vo.kindNum?i.hidePlusIcon():i.setNumber(this.pvos[e].count)):i.visible=!1}
+ onClick(t,i){
+ this.pvos.length;
+ let s=-1;
+ for(let e=0;
+ e<this.icons.length;
+ ++e)if(t>this.posList[e]&&t<this.posList[e+1]){
+ s=e;
+ break}
+ -1!=s&&s<this.pvos.length&&g5t.getInstance().addHero(this.pvos[s].vo)}
+ }
+ ;
+ Vt(d5t,"PvPHeroSelectItemRenderer");
+ let f5t=d5t;
+ const p5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"btnClose",new kKt),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20)),Kt(this,"myIconBtns"),Kt(this,"lblOwn",new JD("보유",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"filterIcons"),Kt(this,"list"),Kt(this,"myTeam"),Kt(this,"arrKindNums",[]),Kt(this,"arrTransList",[]),Kt(this,"allHeroList",[]),Kt(this,"allHeroObj",new Map),Kt(this,"_selectedIndex",0),Kt(this,"newMyTeamList"),Kt(this,"orgMyTeamList"),Kt(this,"_selectedTribes",[1,2,3,4]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
+ ),this.addChild(this.bg),this.bg.width=640,this.bg.height=750-Lni.getInstance().height,this.lblTitle.text=SG.getText("GAME_76","무한 랭킹전"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.myIconBtns=[];
+ let t,i=this.lblTitle.x+20,s=this.lblTitle.y+this.lblTitle.height+20;
+ for(let e=0;
+ e<10;
+ ++e){
+ const t=new Hzt;
+ t.scale=.9,t.x=i+e%5*t.width,t.y=s+Math.floor(e/5)*t.height,t.onClick=this.onClickMyHero.bind(this),this.addChild(t),this.myIconBtns.push(t)}
+ this.lblOwn.x=i,this.lblOwn.y=260,this.addChild(this.lblOwn),this.y=VA.safeHeight-this.bg.height-Lni.getInstance().height,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.hide.bind(this),this.addChild(this.btnClose),this.filterIcons=[];
+ for(let e=0;
+ e<4;
+ ++e)t=new czt(e),t.scale=.8,this.addChild(t),this.filterIcons.push(t),t.onClick=this.onFilterIconClick.bind(this);
+ this.list=new KO(f5t,630,500),this.addChild(this.list),this.updateLayout(),this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ this.list.x=5,this.list.y=this.lblOwn.y+this.lblOwn.height+5,this.list.setListHeight(this.bg.height-this.list.y-15);
+ let t,i=this.lblOwn.y+.5*this.lblOwn.height-5,s=this.bg.width+.5*this.filterIcons[0].width-50;
+ for(let e=this.filterIcons.length-1;
+ e>-1;
+ --e)t=this.filterIcons[e],t.x=s-t.width-1,t.y=i,s=t.x}
+ updateLanguage(){
+ this.lblTitle.text=SG.getText("팀편성","팀편성"),this.lblOwn.text=SG.getText("COMMON_11","보유")}
+ setData(t,i){
+ this.myTeam=t,this.orgMyTeamList=t?t.split("|"):[],this._selectedTribes=[1,2,3,4],this.filterIcons.forEach(t=>{
+ t.selected=!0}
+ ),this.arrKindNums=[],this.arrTransList=[],this.parseTeamData(this.myTeam,this.arrKindNums,this.arrTransList),this.updateHeroIcons(),this.updateList(),this.selectedIndex=i,this.updateLanguage(),this.updateLayout()}
+ updateHeroIcons(){
+ let t,i,s=this.arrKindNums.length;
+ for(let e=0;
+ e<10;
+ ++e)t=this.myIconBtns[e],t.selected=!1,i=bx.getVO(),e<s?(i.kindNum=this.arrKindNums[e],i.trans=this.arrTransList[e],i.level=Math.floor(ML.maxWave/100),t.setDataWith(e,i),t.setAlphaToFrame(1)):(i.kindNum=-1,t.setDataWith(e,i),t.setAlphaToFrame(.3))}
+ parseTeamData(t,i,s){
+ if(i.length=0,s.length=0,t)for(const e of t.split("|")){
+ const[t,n]=e.split("-").map(Number);
+ i.push(t),s.push(n)}
+ }
+ getAllHeroList(){
+ let t;
+ this.allHeroList=[],this.allHeroObj.clear();
+ let i,s=wx.getInstance().list.length;
+ for(let e=0;
+ e<s;
+ e++){
+ t=wx.getInstance().list[e];
+ let i=`${
+ t.kindNum}
+ -${
+ t.trans}
+ `,s=this.allHeroObj.get(i);
+ s?s.count++:(s=new w5t,s.vo.kindNum=t.kindNum,s.vo.trans=t.trans,s.vo.level=Math.floor(ML.maxWave/100),s.count=1,this.allHeroList.push(s),this.allHeroObj.set(i,s))}
+ s=wx.getInstance().ownedUnitList.length;
+ for(let e=0;
+ e<s;
+ e++){
+ i=wx.getInstance().ownedUnitList[e];
+ for(let t=0;
+ t<4;
+ t++){
+ let s=0==t?i.count:i.trans[t-1];
+ if(s>0){
+ let e=`${
+ i.kindNum}
+ -${
+ t}
+ `,n=this.allHeroObj.get(e);
+ n?n.count+=s:(n=new w5t,n.vo.kindNum=i.kindNum,n.vo.trans=t,n.vo.level=Math.floor(ML.maxWave/100),n.count=s,this.allHeroList.push(n),this.allHeroObj.set(e,n))}
+ }
+ }
+ }
+ updateList(){
+ let t=[];
+ this.getAllHeroList();
+ let i=this.arrKindNums.length;
+ for(let e=0;
+ e<i;
+ e++){
+ let t=`${
+ this.arrKindNums[e]}
+ -${
+ this.arrTransList[e]}
+ `,i=this.allHeroObj.get(t);
+ i&&i.count--}
+ i=this.allHeroList.length;
+ for(let e=0;
+ e<i;
+ e++){
+ let i=this.allHeroList[e];
+ 0!=this._selectedTribes.includes(i.vo.tribe)&&(i.count<1||t.push(i))}
+ t.sort((t,i)=>t.vo.enhance!==i.vo.enhance?i.vo.enhance-t.vo.enhance:t.vo.level!==i.vo.level?i.vo.level-t.vo.level:t.vo.grade!==i.vo.grade?i.vo.grade-t.vo.grade:t.vo.tribe-i.vo.tribe);
+ let s=new w5t;
+ s.vo.kindNum=-1,t.unshift(s),this.list.dataProvider=QO.chunkArray(t,5)}
+ set selectedIndex(t){
+ this.myIconBtns.forEach(t=>{
+ t.selected=!1}
+ ),t>=9?t=9:t>this.arrKindNums.length&&(t=this.arrKindNums.length),this._selectedIndex=t,t>=0&&(this.myIconBtns[t].selected=!0)}
+ get selectedIndex(){
+ return this._selectedIndex}
+ onClickMyHero(t){
+ this.selectedIndex!=t?-1!=this.selectedIndex?this.selectedIndex!=t&&(this.selectedIndex<this.arrKindNums.length&&t<this.arrKindNums.length&&([this.arrKindNums[this.selectedIndex],this.arrKindNums[t]]=[this.arrKindNums[t],this.arrKindNums[this.selectedIndex]],[this.arrTransList[this.selectedIndex],this.arrTransList[t]]=[this.arrTransList[t],this.arrTransList[this.selectedIndex]],this.updateHeroIcons()),this.selectedIndex=t):this.selectedIndex=t:this.selectedIndex=-1}
+ addHero(t){
+ -1!=this.selectedIndex&&(-1==t.kindNum?this.selectedIndex<this.arrKindNums.length&&(this.arrKindNums.splice(this.selectedIndex,1),this.arrTransList.splice(this.selectedIndex,1)):this.selectedIndex<this.arrKindNums.length?(this.arrKindNums[this.selectedIndex]=t.kindNum,this.arrTransList[this.selectedIndex]=t.trans):this.arrKindNums.length<10&&(this.arrKindNums.push(t.kindNum),this.arrTransList.push(t.trans)),this.updateHeroIcons(),this.updateList(),-1==t.kindNum?this.selectedIndex=this.selectedIndex:this.selectedIndex++)}
+ teamChanged(){
+ if(null==this.orgMyTeamList)return!1;
+ this.newMyTeamList=[];
+ for(let i=0;
+ i<this.arrKindNums.length;
+ i++)this.newMyTeamList.push(this.arrKindNums[i]+"-"+this.arrTransList[i]);
+ const t=this.orgMyTeamList.length;
+ if(t!=this.newMyTeamList.length)return!0;
+ for(let i=0;
+ i<t;
+ i++)if(this.orgMyTeamList[i]!=this.newMyTeamList[i])return!0;
+ return!1}
+ getMyTeamStr(){
+ return this.newMyTeamList.join("|")}
+ onFilterIconClick(t,i){
+ this._selectedTribes.length=0;
+ const s=this.filterIcons.length;
+ for(let e=0;
+ e<s;
+ ++e)this.filterIcons[e].selected&&this._selectedTribes.push(e+1);
+ this.updateList()}
+ show(){
+ NU.getInstance().addChild(this)}
+ async hide(t=!0){
+ if(t&&this.teamChanged()){
+ if(0==this.arrKindNums.length){
+ const t=SG.getText("병사를 배치해야 합니다.","병사를 배치해야 합니다.");
+ return void wG.getInstance().show(t)}
+ const t=await rD.getInstance().pvp.updateTeam(this.getMyTeamStr(),!0);
+ if(!1===t.success)return void wG.getInstance().showError(t);
+ u5t.getInstance().pvpInfo.team=t.body,u5t.getInstance().updateMyTeam()}
+ u5t.getInstance().addResourceInfo(),null!=this.parent&&this.parent.removeChild(this)}
+ onAdded(){
+ this.addResourceInfo()}
+ addResourceInfo(){
+ this.addChild(kF.getInstance()),this.addChild(Jqt.getInstance())}
+ onRemoved(){
+ kF.ensureMounted(Zqt.getInstance())}
+ }
+ ;
+ Vt(p5t,"PVPHeroSelectPopup"),Kt(p5t,"_instance");
+ let g5t=p5t;
+ const m5t=class{
+ constructor(){
+ Kt(this,"vo",bx.getVO()),Kt(this,"count",0)}
+ }
+ ;
+ Vt(m5t,"PvPUnitVO");
+ let w5t=m5t;
+ const v5t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblResult",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblPoint",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblType",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg);
+ const t=.5*(this.bg.height-this.lblResult.height);
+ this.lblResult.wordWrap=!0,this.lblResult.wordWrapWidth=100,this.lblResult.align="center",this.lblResult.x=35,this.lblResult.y=t,this.addChild(this.lblResult),this.lblPoint.x=140,this.lblPoint.y=t,this.addChild(this.lblPoint),this.lblType.x=240,this.lblType.y=t,this.addChild(this.lblType),this.lblName.x=360,this.lblName.y=t,this.addChild(this.lblName)}
+ setData(t){
+ this.data=t,t.win?(this.lblResult.text=SG.getText("COMMON_380","승리"),this.lblResult.textColor=cD.COLOR_DEEP_SKYBLUE):(this.lblResult.text=SG.getText("COMMON_381","패배"),this.lblResult.textColor=cD.COLOR_RED),this.lblResult.x=5+.5*(100-this.lblResult.width),this.lblResult.y=.5*(this.bg.height-this.lblResult.height);
+ const i=t.gainPoint>=0?"+":"";
+ this.lblPoint.text=`${
+ i}
+ ${
+ t.gainPoint}
+ `,this.lblPoint.textColor=t.gainPoint>=0?cD.COLOR_YELLOW:cD.COLOR_RED,this.lblType.text=t.attack?SG.getText("COMMON_382","공격"):SG.getText("COMMON_383","방어"),this.lblName.text=t.name||""}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(v5t,"PVPHistoryItemRenderer");
+ let b5t=v5t;
+ const _5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"lblTitle",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblHdrResult",new JD("승패",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrPoint",new JD("점수",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrType",new JD("공/방",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrName",new JD("상대",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"list"),Kt(this,"lblEmpty",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.lblTitle.y=5,this.addChild(this.lblTitle),this.lblHdrResult.align="center",this.lblHdrResult.x=35,this.lblHdrResult.y=35,this.addChild(this.lblHdrResult),this.lblHdrPoint.x=145,this.lblHdrPoint.y=35,this.addChild(this.lblHdrPoint),this.lblHdrType.x=235,this.lblHdrType.y=35,this.addChild(this.lblHdrType),this.lblHdrName.x=365,this.lblHdrName.y=35,this.addChild(this.lblHdrName),cD.setLabelWrapWidth(this.lblHdrResult,100),cD.setLabelWrapWidth(this.lblHdrPoint,140),cD.setLabelWrapWidth(this.lblHdrType,120),cD.setLabelWrapWidth(this.lblHdrName,230);
+ const t=B5t.getInstance().listHeight-35-10;
+ this.list=new KO(b5t,620,t-40),this.list.x=0,this.addChild(this.list),this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty),this.updateLanguage(),this.updateLayout()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ updateLayout(){
+ this.lblTitle.x=.5*(620-this.lblTitle.width);
+ let t=0;
+ const i=[this.lblHdrResult,this.lblHdrPoint,this.lblHdrType,this.lblHdrName],s=i.length;
+ for(let n=0;
+ n<s;
+ ++n)t=Math.max(t,i[n].height);
+ this.list.y=i[0].y+t+5,this.lblHdrResult.x=5+.5*(100-this.lblHdrResult.width),this.lblHdrPoint.x=140+.5*(30-this.lblHdrPoint.width),this.lblHdrType.x=240+.5*(60-this.lblHdrType.width);
+ const e=B5t.getInstance().listHeight-this.list.y;
+ this.list.setListHeight(e)}
+ setData(){
+ this.loadHistory(),this.updateLanguage(),this.updateLayout()}
+ async loadHistory(){
+ const t=await rD.getInstance().pvp.getBattleHistory(!0);
+ if(!1===t.success)return void wG.getInstance().showError(t);
+ const i=t.body||[];
+ 0===i.length?(this.list.dataProvider=[],this.lblEmpty.visible=!0):(this.lblEmpty.visible=!1,this.list.dataProvider=i)}
+ updateLanguage(){
+ this.lblTitle.text=SG.getText("GAME_110","전투기록"),this.lblHdrResult.text=SG.getText("GAME_116","승패"),this.lblHdrPoint.text=SG.getText("COMMON_37","점수"),this.lblHdrType.text=SG.getText("GAME_112","공/방"),this.lblHdrName.text=SG.getText("GAME_113","상대"),this.lblEmpty.text=SG.getText("GAME_111","전투 기록이 없습니다."),this.lblEmpty.x=.5*(620-this.lblEmpty.width)}
+ }
+ ;
+ Vt(_5t,"PVPHistorySubView"),Kt(_5t,"instance");
+ let y5t=_5t;
+ const M5t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblEpisode",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblName",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblPoint",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblRecord",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg);
+ const t=.5*(this.bg.height-this.lblEpisode.height);
+ this.lblEpisode.x=45,this.lblEpisode.y=t,this.addChild(this.lblEpisode),this.lblName.x=115,this.lblName.y=t,this.addChild(this.lblName),this.lblPoint.x=360,this.lblPoint.y=t,this.addChild(this.lblPoint),this.lblRecord.x=500,this.lblRecord.y=t,this.addChild(this.lblRecord),cD.setLabelWrapWidth(this.lblRecord,this.bg.x+this.bg.width-this.lblRecord.x)}
+ setData(t){
+ this.data=t,this.lblEpisode.text=SG.getValueReplace("GAME_95","##",t.episode,`${
+ t.episode}
+ 회`),this.lblEpisode.textColor=cD.COLOR_YELLOW,this.lblName.text=t.name||"",this.lblPoint.text=`${
+ t.point.toLocaleString()}
+ `,this.lblRecord.text=SG.getValueReplaceMulti("GAME_96",["##","@@"],[t.total,t.win],`${
+ t.total}
+ 전 ${
+ t.win}
+ 승`),this.lblRecord.y=.5*(this.bg.height-this.lblRecord.height)}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(M5t,"PVPHOFItemRenderer");
+ let E5t=M5t;
+ const A5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"lblTitle",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblHdrEpisode",new JD("회차",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrName",new JD("닉네임",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrPoint",new JD("점수",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrRecord",new JD("전적",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"currentPage",0),Kt(this,"totalHOFs",0),Kt(this,"btnPrevPage"),Kt(this,"btnNextPage"),Kt(this,"lblPage"),Kt(this,"list"),Kt(this,"loadEpisode",0),Kt(this,"mapDataList",new Map),Kt(this,"dataList"),this.lblTitle.y=5,this.addChild(this.lblTitle),this.lblHdrEpisode.x=25,this.lblHdrEpisode.y=35,this.addChild(this.lblHdrEpisode),this.lblHdrName.x=115,this.lblHdrName.y=35,this.addChild(this.lblHdrName),this.lblHdrPoint.x=365,this.lblHdrPoint.y=35,this.addChild(this.lblHdrPoint),this.lblHdrRecord.x=505,this.lblHdrRecord.y=35,this.addChild(this.lblHdrRecord),cD.setLabelWrapWidth(this.lblHdrEpisode,90),cD.setLabelWrapWidth(this.lblHdrName,210),cD.setLabelWrapWidth(this.lblHdrPoint,140),cD.setLabelWrapWidth(this.lblHdrRecord,150),this.btnPrevPage=new M2t("left"),this.btnPrevPage.onClick=()=>{
+ this.gotoPage(this.currentPage-1)}
+ ,this.addChild(this.btnPrevPage),this.lblPage=new JD("1/1",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.addChild(this.lblPage),this.btnNextPage=new M2t("right"),this.btnNextPage.onClick=()=>{
+ this.gotoPage(this.currentPage+1)}
+ ,this.addChild(this.btnNextPage),this.list=new KO(E5t,620,470),this.list.x=0,this.addChild(this.list),this.updateLanguage(),this.updateLayout()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ gotoPage(i){
+ const s=this.totalHOFs,e=Math.max(1,Math.ceil(s/t.PAGE_SIZE)),n=Math.max(0,Math.min(i,e-1));
+ n!==this.currentPage&&(this.currentPage=n,this.setData())}
+ setPageInfo(t,i){
+ const s=i>1;
+ if(this.btnPrevPage.visible=s,this.btnNextPage.visible=s,this.lblPage.visible=s,!s)return;
+ this.lblPage.text=`${
+ t+1}
+  / ${
+ i}
+ `;
+ const e=this.lblTitle.y+.5*this.lblTitle.height;
+ this.btnPrevPage.x=this.list.x,this.btnPrevPage.y=e-.5*this.btnPrevPage.height,this.lblPage.x=this.btnPrevPage.x+this.btnPrevPage.width+8,this.lblPage.y=e-.5*this.lblPage.height,this.btnNextPage.x=this.lblPage.x+this.lblPage.width+8,this.btnNextPage.y=e-.5*this.btnNextPage.height,this.btnPrevPage.alpha=t<=0?.7:1,this.btnNextPage.alpha=t>=i-1?.7:1}
+ updateLayout(){
+ this.lblTitle.x=.5*(620-this.lblTitle.width);
+ let t=0;
+ const i=[this.lblHdrEpisode,this.lblHdrName,this.lblHdrPoint,this.lblHdrRecord],s=i.length;
+ for(let n=0;
+ n<s;
+ ++n)t=Math.max(t,i[n].height);
+ this.list.y=i[0].y+t+5,this.lblHdrEpisode.x=50+.5*(20-this.lblHdrEpisode.width),this.lblHdrPoint.x=360+.5*(40-this.lblHdrPoint.width),this.lblHdrRecord.x=500+.5*(50-this.lblHdrRecord.width);
+ const e=B5t.getInstance().listHeight-this.list.y;
+ this.list.setListHeight(e)}
+ async setData(i=!1){
+ c5t.getInstance().pvpInfo&&this.loadEpisode!=Number(c5t.getInstance().pvpInfo.episode)&&this.mapDataList.clear(),!i&&this.mapDataList.get(this.currentPage)||await this.loadHOF(),this.dataList=this.mapDataList.get(this.currentPage)??[],this.list.dataProvider=this.dataList,this.list.scrollTo(0),this.updateLanguage(),this.updateLayout();
+ const s=Math.max(1,Math.ceil(this.totalHOFs/t.PAGE_SIZE));
+ this.setPageInfo(this.currentPage,s)}
+ async loadHOF(){
+ const t=await rD.getInstance().pvp.getHOF(this.currentPage+1,!0);
+ !1!==t.success?(0==this.currentPage&&(this.loadEpisode=Number(c5t.getInstance().pvpInfo.episode)??0),this.totalHOFs=t.body.total??0,this.mapDataList.set(this.currentPage,t.body.list||[])):wG.getInstance().showError(t)}
+ updateLanguage(){
+ this.lblTitle.text=SG.getText("GAME_109","명예의 전당"),this.lblHdrEpisode.text=SG.getText("GAME_114","회차"),this.lblHdrName.text=SG.getText("COMMON_58","닉네임"),this.lblHdrPoint.text=SG.getText("COMMON_37","점수"),this.lblHdrRecord.text=SG.getText("GAME_115","전적")}
+ }
+ ;
+ Vt(A5t,"PVPHOFSubView"),Kt(A5t,"instance"),Kt(A5t,"PAGE_SIZE",20);
+ let S5t=A5t;
+ const T5t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblRank",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblRecord",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblPoint",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),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)}
+ setData(t){
+ this.data=t,this.lblRank.text=t.rank?`${
+ t.rank}
+ `:"-",this.lblName.text=t.name,this.lblRecord.text=`${
+ t.win}
+ W / ${
+ t.total-t.win}
+ L`,this.lblPoint.text=`${
+ t.point.toLocaleString()}
+ `,this.lblRecord.x=427.5-.5*this.lblRecord.width,this.lblPoint.x=this.bg.width-47.5-.5*this.lblPoint.width,t.name===ML.name?(this.lblName.textColor=cD.COLOR_YELLOW,this.lblRank.textColor=cD.COLOR_YELLOW):(this.lblName.textColor=16777215,this.lblRank.textColor=16777215)}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(T5t,"PVPRankItemRenderer");
+ let C5t=T5t;
+ const I5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"lblTitle",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblHdrResult",new JD("승패",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrPoint",new JD("점수",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrType",new JD("공/방",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrName",new JD("상대",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"rankList"),Kt(this,"lblMyRank",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"myRankItem"),this.lblHdrResult.x=40,this.lblHdrResult.y=5,this.addChild(this.lblHdrResult),this.lblHdrPoint.x=112,this.lblHdrPoint.y=5,this.addChild(this.lblHdrPoint),this.lblHdrType.x=410,this.lblHdrType.y=5,this.addChild(this.lblHdrType),this.lblHdrName.x=545,this.lblHdrName.y=5,this.addChild(this.lblHdrName),cD.setLabelWrapWidth(this.lblHdrResult,100),cD.setLabelWrapWidth(this.lblHdrPoint,140),cD.setLabelWrapWidth(this.lblHdrType,120),cD.setLabelWrapWidth(this.lblHdrName,230);
+ const t=B5t.getInstance().listHeight-5-10-57;
+ this.rankList=new KO(C5t,620,t),this.rankList.x=0,this.rankList.y=0,this.addChild(this.rankList),this.lblMyRank.x=5,this.lblMyRank.y=515,this.myRankItem=new C5t,this.myRankItem.x=.5*(620-this.myRankItem.width)-5,this.myRankItem.y=this.rankList.y+this.rankList.height+5,this.addChild(this.myRankItem)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ setData(){
+ this.loadRank(),this.updateLanguage(),this.updateLayout()}
+ updateLayout(){
+ let t=0;
+ const i=[this.lblHdrResult,this.lblHdrPoint,this.lblHdrType,this.lblHdrName],s=i.length;
+ for(let n=0;
+ n<s;
+ ++n)t=Math.max(t,i[n].height);
+ this.rankList.y=i[0].y+t+5,this.lblHdrResult.x=45+.5*(20-this.lblHdrResult.width),this.lblHdrType.x=410+.5*(30-this.lblHdrType.width),this.lblHdrName.x=545+.5*(30-this.lblHdrName.width);
+ const e=B5t.getInstance().listHeight-t-10-57;
+ this.rankList.setListHeight(e),this.myRankItem.y=this.rankList.y+this.rankList.height-10}
+ updateLanguage(){
+ this.lblHdrResult.text=SG.getText("COMMON_20","랭킹"),this.lblHdrPoint.text=SG.getText("COMMON_58","닉네임"),this.lblHdrType.text=SG.getText("GAME_115","전적"),this.lblHdrName.text=SG.getText("COMMON_37","점수")}
+ async loadRank(){
+ await rD.getInstance().pvp.getInfo(!0);
+ const t=await rD.getInstance().pvp.getRank(!0);
+ if(!1===t.success)return void wG.getInstance().showError(t);
+ const{
+ rankList:i,myRankInfo:s}
+ =t.body;
+ if(this.rankList.dataProvider=i||[],s){
+ const t=SG.getText("COMMON_374","내 순위"),i=SG.getValueReplace("GAME_97","##",s.rank,`${
+ s.rank}
+ 위`);
+ this.lblMyRank.text=`${
+ t}
+ : ${
+ i}
+  | ${
+ s.point.toLocaleString()}
+  pt | ${
+ s.win}
+ W / ${
+ s.total-s.win}
+ L`,this.myRankItem.setData(s)}
+ else this.lblMyRank.text=SG.getText("GAME_100","전적 없음"),this.myRankItem.setData({
+ name:ML.name,win:0,total:0,point:0,rank:null}
+ )}
+ }
+ ;
+ Vt(I5t,"PVPRankSubView"),Kt(I5t,"instance");
+ let k5t=I5t;
+ const O5t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblRank",new JD("",cD.COLOR_BRIGHT_ORANGE,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"iconGem"),Kt(this,"lblGem",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"iconMedal"),Kt(this,"lblMedal",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=610,this.bg.height=48,this.bg.x=5,this.addChild(this.bg);
+ const t=.5*(this.bg.height-this.lblRank.height);
+ this.lblRank.x=20,this.lblRank.y=t,this.addChild(this.lblRank),this.iconGem=new He(QA.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=22,this.iconGem.height=22,this.iconGem.x=234,this.iconGem.y=.5*(this.bg.height-22),this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+28,this.lblGem.y=t,this.addChild(this.lblGem),this.iconMedal=new He(QA.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconMedal.width=22,this.iconMedal.height=22,this.iconMedal.x=420,this.iconMedal.y=.5*(this.bg.height-22),this.addChild(this.iconMedal),this.lblMedal.x=this.iconMedal.x+28,this.lblMedal.y=t,this.addChild(this.lblMedal)}
+ setData(t){
+ this.data=t,this.lblRank.text=this.getRankTexts(t),this.lblGem.text=String(t.gem),this.lblMedal.text=String(t.honorCoin),this.lblRank.x=10+.5*(80-this.lblRank.width)}
+ getRankTexts(t){
+ let i="";
+ return"FIXED_RANK"==t.type?i=1==t.rank?SG.getValueReplace("GAME_97","##",1,"1위"):3==t.rank?SG.getValueReplaceMulti("GAME_98",["##","@@"],[2,3],"2~3위"):SG.getValueReplaceMulti("GAME_98",["##","@@"],[4,10],"4~10위"):10==t.rank?i=SG.getValueReplace("GAME_99","##",10,"상위 10%"):30==t.rank?i=SG.getValueReplace("GAME_99","##",30,"상위 30%"):50==t.rank?i=SG.getValueReplace("GAME_99","##",50,"상위 50%"):70==t.rank?i=SG.getValueReplace("GAME_99","##",70,"상위 70%"):100==t.rank&&(i=SG.getValueReplace("GAME_99","##",100,"상위 100%")),i}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(O5t,"PVPRewardItemRenderer");
+ let x5t=O5t;
+ const R5t=class t{
+ constructor(){
+ Kt(this,"leagueRewards",{
+ }
+ ),Kt(this,"initialized",!1)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ if(null!=t&&(this.leagueRewards={
+ }
+ ,t))for(let i=0;
+ i<t.length;
+ i++){
+ t[i];
+ for(const i of t)this.leagueRewards[i.gradeName]=i.rewards;
+ this.initialized=!0}
+ }
+ }
+ ;
+ Vt(R5t,"PvPRewardDataManager"),Kt(R5t,"instance");
+ let N5t=R5t;
+ const P5t=["C","B","A","S"],D5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"lblRulesTitle",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"ruleLines",[]),Kt(this,"lblLeagueTitle",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrRank",new JD("등수",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrGem",new JD("보석",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHdrMedal",new JD("명예코인",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"list"),Kt(this,"leagueTabs",[]),Kt(this,"currentLeague","S"),Kt(this,"rules",["무한랭킹전은 4일 단위로 진행됩니다.","4개 등급(S, A, B, C 리그)으로 구분됩니다.","매일 정산 시 상위 50%는 상위 등급으로 승급합니다.","4일째 S-리그 우승자는 명예의 전당에 등록됩니다."]),this.addChild(this.lblRulesTitle);
+ const t=this.rules.length;
+ for(let n=0;
+ n<t;
+ ++n){
+ const t=new JD("",13421772,cD.DEFAULT_DESC_FONT_OPTION_16);
+ t.x=15,this.addChild(t),this.ruleLines.push(t),cD.setLabelWrapWidth(t,640-2*t.x)}
+ this.addChild(this.lblLeagueTitle),this.lblHdrRank.x=25,this.addChild(this.lblHdrRank),this.lblHdrGem.x=250,this.addChild(this.lblHdrGem),this.lblHdrMedal.x=425,this.addChild(this.lblHdrMedal),this.list=new KO(x5t,620,310),this.list.x=0,this.addChild(this.list);
+ let i=3;
+ const s=P5t.length;
+ for(let n=0;
+ n<s;
+ ++n){
+ const t=new gzt(`${
+ P5t[n]}
+  리그`,145);
+ t.width=152,t.x=i,t.onClick=()=>this.selectLeague(P5t[n]),this.addChild(t),this.leagueTabs.push(t),i+=155}
+ this.updateLanguage(),this.updateLayout();
+ const e=B5t.getInstance().listHeight-this.list.y-this.leagueTabs[0].height-20;
+ this.list.setListHeight(e)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ updateLayout(){
+ let t=5;
+ const i=this.ruleLines.length;
+ for(let o=0;
+ o<i;
+ ++o)this.ruleLines[o].y=t,t+=this.ruleLines[o].height;
+ const s=t+12;
+ this.lblLeagueTitle.y=s;
+ const e=s+28;
+ this.lblHdrRank.y=e,this.lblHdrGem.y=e,this.lblHdrMedal.y=e,this.list.y=e+25;
+ const n=B5t.getInstance().listHeight-this.list.y-(this.leagueTabs[0].height+20);
+ this.list.setListHeight(n);
+ const h=this.list.y+this.list.height+10,r=P5t.length;
+ for(let o=0;
+ o<r;
+ ++o)this.leagueTabs[o].y=h}
+ async setData(){
+ if(0==N5t.getInstance().initialized){
+ let t=await MD.getInstance().getBook(_D.PVP_RANK_REWARD);
+ N5t.getInstance().setBookData(t)}
+ this.selectLeague("S"),this.updateLanguage(),this.updateLayout()}
+ selectLeague(t){
+ this.currentLeague=t;
+ const i=P5t.indexOf(t);
+ for(let e=0;
+ e<this.leagueTabs.length;
+ e++)this.leagueTabs[e].selected=e===i;
+ this.lblLeagueTitle.text=SG.getValueReplace("GAME_137","##",t,`${
+ t}
+  리그 보상`),this.lblLeagueTitle.x=.5*(620-this.lblLeagueTitle.width);
+ const s=N5t.getInstance().leagueRewards[t]||[];
+ this.list.dataProvider=s}
+ getRankTexts(){
+ return[SG.getValueReplace("GAME_97","##",1,"1위"),SG.getValueReplaceMulti("GAME_98",["##","@@"],[2,3],"2~3위"),SG.getValueReplaceMulti("GAME_98",["##","@@"],[4,10],"4~10위"),SG.getValueReplace("GAME_99","##",10,"상위 10%"),SG.getValueReplace("GAME_99","##",30,"상위 30%"),SG.getValueReplace("GAME_99","##",50,"상위 50%"),SG.getValueReplace("GAME_99","##",70,"상위 70%")]}
+ updateLanguage(){
+ const t=["무한랭킹전은 4일 단위로 진행됩니다.","4개 등급(S, A, B, C 리그)으로 구분됩니다.","매일 정산 시 상위 50%는 상위 등급으로 승급합니다.","4일째 S-리그 우승자는 명예의 전당에 등록됩니다."],i=["GAME_131","GAME_132","GAME_133","GAME_134"],s=t.length;
+ for(let n=0;
+ n<s;
+ ++n)this.ruleLines[n].text=SG.getText(i[n],t[n]);
+ this.lblHdrRank.text=SG.getText("COMMON_388","등수"),this.lblHdrGem.text=SG.getText("COMMON_350","보석"),this.lblHdrMedal.text=SG.getText("GAME_88","명예코인");
+ const e=this.leagueTabs.length;
+ for(let n=0;
+ n<e;
+ ++n)this.leagueTabs[n].text=SG.getValueReplace("GAME_138","##",P5t[n],`${
+ P5t[n]}
+  리그`)}
+ }
+ ;
+ Vt(D5t,"PVPRewardSubView"),Kt(D5t,"instance");
+ let L5t=D5t;
+ const G5t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"btnClose",new kKt),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"tapBattle",new gzt("대전",120)),Kt(this,"tapRank",new gzt("랭킹",120)),Kt(this,"tapHistory",new gzt("기록",120)),Kt(this,"tapHOF",new gzt("전당",120)),Kt(this,"tapReward",new gzt("보상",120)),Kt(this,"tabs"),Kt(this,"_currentSubView",null),Kt(this,"subViewY",0),this.tabs=[this.tapBattle,this.tapRank,this.tapHistory,this.tapHOF,this.tapReward],this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
+ ),this.addChild(this.bg),this.bg.width=640,this.y=Math.min(VA.safeHeight-750,VA.viewMainY),this.bg.height=VA.safeHeight-this.y-Lni.getInstance().height,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.onCloseBtnClick.bind(this),this.addChild(this.btnClose),this.lblTitle.text=SG.getText("GAME_76","무한 랭킹전"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.updateLayout(),this.tapBattle.onClick=()=>this.selectTab(0),this.tapRank.onClick=()=>this.selectTab(1),this.tapHistory.onClick=()=>this.selectTab(2),this.tapHOF.onClick=()=>this.selectTab(3),this.tapReward.onClick=()=>this.selectTab(4),this.subViewY=this.tapBattle.y+this.tapBattle.height+5,this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get height(){
+ return this.bg.height}
+ get listHeight(){
+ return this.height-this.subViewY}
+ updateLayout(){
+ let t=5;
+ for(const i of this.tabs)i.width=124,i.x=t,i.y=85,this.addChild(i),t+=i.width+2}
+ updateLanguage(){
+ let t=SG.getText("GAME_76","무한 랭킹전");
+ const i=c5t.getInstance().pvpInfo;
+ i&&(t+=" ( "+SG.getText("GAME_276","제 ##회 @@일차").replace("##",i.episode.toString()).replace("@@",i.round.toString())+" ) ",t+=` [ ${
+ SG.getText("GAME_138","## 리그").replace("##",this.getGradeText(i.userPvp.grade))}
+  ]`),this.lblTitle.text=t,this.tapBattle.text=SG.getText("GAME_101","대전"),this.tapRank.text=SG.getText("COMMON_20","랭킹"),this.tapHistory.text=SG.getText("COMMON_39","기록"),this.tapHOF.text=SG.getText("GAME_108","전당"),this.tapReward.text=SG.getText("COMMON_22","보상")}
+ updateTitle(t){
+ this.lblTitle.text=t}
+ getGradeText(t){
+ return["","C","B","A","S"][t]??""}
+ onCloseBtnClick(){
+ Tei.getInstance().unregisterListItemsGetter("PvP"),i3t.getInstance().registerMissionGuide(),this.hide()}
+ setSubView(t){
+ this._currentSubView!==t&&(null!=this._currentSubView&&this.removeChild(this._currentSubView),this._currentSubView=t,null!=this._currentSubView&&(this._currentSubView.x=10,this._currentSubView.y=this.subViewY,this.addChild(this._currentSubView)))}
+ selectTab(t){
+ for(let i=0;
+ i<this.tabs.length;
+ i++)this.tabs[i].selected=i===t;
+ switch(t){
+ case 0:c5t.getInstance().setData(),this.setSubView(c5t.getInstance());
+ break;
+ case 1:k5t.getInstance().setData(),this.setSubView(k5t.getInstance());
+ break;
+ case 2:y5t.getInstance().setData(),this.setSubView(y5t.getInstance());
+ break;
+ case 3:S5t.getInstance().setData(),this.setSubView(S5t.getInstance());
+ break;
+ case 4:L5t.getInstance().setData(),this.setSubView(L5t.getInstance())}
+ }
+ show(){
+ NU.getInstance().addChild(this),this.selectTab(0),this.updateLanguage(),this.updateLayout()}
+ hide(){
+ null!=this.parent&&this.parent.removeChild(this)}
+ onAdded(){
+ Zqt.getInstance().visible=!1,this.addResourceInfo()}
+ onRemoved(){
+ Zqt.getInstance().visible=!0,Zqt.getInstance().addChild(kF.getInstance()),Zqt.getInstance().addChild(Jqt.getInstance())}
+ addResourceInfo(){
+ this.addChild(kF.getInstance()),this.addChild(Jqt.getInstance()),this.addChild(this.btnClose)}
+ hideAllPvPPopups(){
+ g5t.getInstance().hide(!1),u5t.getInstance().hide(),this.hide(),Zqt.getInstance().visible=!0,Zqt.getInstance().addChild(kF.getInstance()),Zqt.getInstance().addChild(Jqt.getInstance())}
+ async endBattle(t){
+ c5t.getInstance().endBattle(t)}
+ onBackButton(){
+ return!!(this.btnClose&&this.btnClose.parent&&this.btnClose.visible)&&(this.onCloseBtnClick(),!0)}
+ }
+ ;
+ Vt(G5t,"PVPBattlePopup"),Kt(G5t,"_instance");
+ let B5t=G5t;
+ var U5t=(t=>(t[t.DUNGEON=1]="DUNGEON",t[t.INFINITE_RANKING=2]="INFINITE_RANKING",t[t.DAILY_RANKING=3]="DAILY_RANKING",t[t.CHALLENGE_TOWER=4]="CHALLENGE_TOWER",t))(U5t||{
+ }
+ );
+ const F5t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblDesc",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"icon"),Kt(this,"lastTitle",""),Kt(this,"lastDesc",""),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Ekkorr","Battle_1")),this.icon.x=2,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblTitle.x=135,this.lblTitle.y=15,this.addChild(this.lblTitle),this.lblDesc.x=this.lblTitle.x,this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+5,this.addChild(this.lblDesc)}
+ setData(t){
+ this.data=t,this.refreshTexts(),this.icon.texture=QA.getTexture("UI_Ekkorr",`Battle_${
+ t.type}
+ `)}
+ refreshTimer(){
+ this.data&&this.refreshTexts()}
+ refreshTexts(){
+ const t=this.data,i=SG.getText(t.nameLangId,t.name);
+ let s=i,e="";
+ const n=oVt.getInstance();
+ if(t.isComingSoon)e="coming soon";
+ else if(n.has())switch(t.type){
+ case 1:{
+ const t=n.getDungeon();
+ t&&(e=`${
+ SG.getText("GAME_559","티켓")}
+  ${
+ t.ticket}
+ /${
+ t.maxTicket}
+ ${
+ this.formatTicketCountdownMinutes(t.ticket,t.maxTicket,t.ticketTime,t.ticketRechargeMs)}
+ `);
+ break}
+ case 2:{
+ const t=n.getPvp();
+ if(t){
+ const n=this.getPvpGradeText(t.grade);
+ n&&(s=`${
+ i}
+  ( ${
+ SG.getValueReplace("GAME_138","##",n,n+"리그")}
+  )`);
+ const h=t.ticketTime?new Date(t.ticketTime).getTime():0;
+ e=`${
+ SG.getText("GAME_559","티켓")}
+  ${
+ t.ticket}
+ /${
+ t.maxTicket}
+ ${
+ this.formatTicketCountdownMinutes(t.ticket,t.maxTicket,h,t.ticketRechargeMs)}
+ `}
+ break}
+ case 3:{
+ const t=n.getDailyRanking();
+ t&&(s=`${
+ i}
+  ( ${
+ t.joined?SG.getText("COMMON_370","참여"):SG.getText("GAME_560","미참여")}
+  )`,e=`${
+ SG.getText("COMMON_29","남은시간")}
+  : ${
+ this.formatRemainUntilUtcMidnight()}
+ `);
+ break}
+ case 4:{
+ const t=n.getTower();
+ if(t){
+ s=`${
+ i}
+  ( ${
+ SG.getValueReplace("GAME_561","##",t.seasonNumber,t.seasonNumber+"회차")}
+  : ${
+ t.currentFloor}
+ F )`;
+ const n=this.formatTicketCountdownMs(t.ticket,t.maxTicket,t.ticketTime,t.ticketRechargeMs),h=this.formatRemainMs(t.seasonEndTime-tx.time);
+ e=`${
+ SG.getText("GAME_559","티켓")}
+  ${
+ t.ticket}
+ /${
+ t.maxTicket}
+ ${
+ n}
+    ${
+ SG.getText("COMMON_29","남은시간")}
+  : ${
+ h}
+ `}
+ break}
+ }
+ else e=SG.getText(t.descLangId,t.desc);
+ s!==this.lastTitle&&(this.lastTitle=s,this.lblTitle.text=s),e!==this.lastDesc&&(this.lastDesc=e,this.lblDesc.text=e)}
+ formatTicketCountdownMinutes(t,i,s,e){
+ if(t>=i)return"";
+ if(!s||!e)return"";
+ const n=e-(tx.time-s);
+ if(n<=0)return"";
+ const h=Math.ceil(n/6e4);
+ return`  ( ${
+ String(h).padStart(2,"0")}
+ M )`}
+ formatTicketCountdownMs(t,i,s,e){
+ if(t>=i)return"";
+ if(!s||!e)return"";
+ const n=e-(tx.time-s);
+ if(n<=0)return"";
+ const h=Math.floor(n/1e3);
+ return`  ( ${
+ String(Math.floor(h/60)).padStart(2,"0")}
+ :${
+ String(h%60).padStart(2,"0")}
+  )`}
+ getPvpGradeText(t){
+ return["","C","B","A","S"][t]??""}
+ formatRemainUntilUtcMidnight(){
+ const t=new Date(tx.time),i=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+1);
+ return this.formatRemainMs(i-tx.time)}
+ formatRemainMs(t){
+ return t<=0?"00M":wU.displayTimeAsDHHMM(Math.floor(t/1e3))}
+ onClick(t,i){
+ if(this.data.isComingSoon)u2.getInstance().showMessage("coming soon");
+ else switch(this.data.type){
+ case 1:F0t.getInstance().setData(),e3t.getInstance().currentSubView=F0t.getInstance();
+ break;
+ case 2:B5t.getInstance().show();
+ break;
+ case 3:s2t.getInstance().setData(),e3t.getInstance().currentSubView=s2t.getInstance();
+ break;
+ case 4:m0t.getInstance().setData(),e3t.getInstance().currentSubView=m0t.getInstance()}
+ }
+ }
+ ;
+ Vt(F5t,"BattleItemRenderer");
+ let H5t=F5t;
+ const W5t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"heroIcon",new Y2),Kt(this,"lblMessage",new JD("",16768324,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblMessage2",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnConfirm",new kU("UI_CLOSE_BTN","","확인",.7,200,70)),this.title=SG.getText("GAME_179","영웅 뽑기 결과"),this.heroIcon.setMode(z2.HERO_LIST),this.contentContainer.addChild(this.heroIcon),this.contentContainer.addChild(this.lblMessage),this.lblMessage2.textColor=16777215,this.contentContainer.addChild(this.lblMessage2),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.RED,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm),this.updateLayout()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ updateLayout(){
+ const t=.5*this.width;
+ this.heroIcon.x=t-.5*this.heroIcon.width,this.heroIcon.y=90,this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=this.heroIcon.y+this.heroIcon.height+20,this.lblMessage2.x=t-.5*this.lblMessage2.width,this.lblMessage2.y=this.lblMessage.y+this.lblMessage.height+5,this.btnConfirm.x=t-.5*this.btnConfirm.width,this.btnConfirm.y=this.lblMessage2.y+this.lblMessage2.height+30,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ showResult(t,i){
+ this.title=SG.getText("GAME_179","영웅 뽑기 결과");
+ const s=wx.getInstance().getBookVO(t);
+ if(!s)return;
+ const e=new bx;
+ e.kindNum=t,e.level=1,e.enhance=0,e.trans=0,this.heroIcon.setData(e);
+ const n=SG.getText(s.getNameKey(),s.name);
+ this.lblMessage.text=SG.getValueReplace("GAME_180","##",n,`${
+ s.name}
+  영웅을 획득하였습니다.`),this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage2.text=-1==i?SG.getText("GAME_301","[내 영웅]으로 이동했습니다."):SG.getText("GAME_300","슬롯에 추가되었습니다."),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
+ }
+ ;
+ Vt(W5t,"HeroGachaResultPopup"),Kt(W5t,"instance");
+ let $5t=W5t;
+ const j5t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"treasureIcon",new hXt),Kt(this,"lblMessage",new JD("",16768324,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblMessage2",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnConfirm",new kU("UI_CLOSE_BTN","","확인",.7,200,70)),this.title=SG.getText("GAME_183","유물 뽑기 결과"),this.contentContainer.addChild(this.treasureIcon),this.contentContainer.addChild(this.lblMessage),this.lblMessage2.textColor=16777215,this.contentContainer.addChild(this.lblMessage2),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.RED,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm),this.updateLayout()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ updateLayout(){
+ const t=.5*this.width;
+ this.treasureIcon.x=t-.5*this.treasureIcon.width,this.treasureIcon.y=90,this.lblMessage.x=t-.5*this.lblMessage.width,this.lblMessage.y=this.treasureIcon.y+this.treasureIcon.height+20,this.lblMessage2.x=t-.5*this.lblMessage2.width,this.lblMessage2.y=this.lblMessage.y+this.lblMessage.height+5,this.btnConfirm.x=t-.5*this.btnConfirm.width,this.btnConfirm.y=this.lblMessage2.y+this.lblMessage2.height+30,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ showResult(t,i,s){
+ this.title=SG.getText("GAME_183","유물 뽑기 결과");
+ const e=Hx.getInstance().getBookDataByKindNum(t);
+ if(!e)return;
+ const n=new $x;
+ n.kindNum=t,n.grade=e.grade,n.enhance=0,this.treasureIcon.setVO(n);
+ const h=SG.getText(e.getNameKey(),e.name);
+ let r;
+ this.lblMessage.text=SG.getValueReplace("GAME_185","##",h,`${
+ h}
+  유물을 뽑았습니다!`),this.lblMessage.x=.5*(this.width-this.lblMessage.width),r=s.length>i.length?SG.getText("GAME_300","슬롯에 추가되었습니다."):SG.getText("GAME_302","[내유물]로 이동했습니다."),this.lblMessage2.text=r,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
+ }
+ ;
+ Vt(j5t,"TreasureGachaResultPopup"),Kt(j5t,"instance");
+ let V5t=j5t;
+ const K5t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblHonorCoin",new $B("PVP_COIN_ON","0",cD.COLOR_PURPLE_PINK,cD.DEFAULT_FONT_OPTION_18)),this.closeBtn.visible=!0,this.closeBtn.interactive=!0,this.closeBtn.on("pointertap",this.onBack,this),this.lblHonorCoin.text=String(ML.honorCoin),this.lblHonorCoin.y=.5*(this.bg.height-this.lblHonorCoin.height),this.addChild(this.lblHonorCoin),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.lblHonorCoin.x=this.closeBtn.x-this.lblHonorCoin.width-10}
+ setData(){
+ this.lblHonorCoin.text=String(ML.honorCoin),this.updateLanguage()}
+ onBack(){
+ i3t.getInstance().setData(),e3t.getInstance().currentSubView=i3t.getInstance()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_87","명예상점")),this.updateLayout()}
+ }
+ ;
+ Vt(K5t,"HonorShopSubMenu"),Kt(K5t,"instance");
+ let z5t=K5t;
+ const q5t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","UI_COIN_Big"))),Kt(this,"btnBuy",new VB("PVP_COIN_ON","5000")),Kt(this,"requestPending",!1),Kt(this,"requestPending2",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.x=5,this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon.x=27,this.icon.y=.4*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblName.x=135,this.lblName.y=.4*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.btnBuy.lbl.iconScale=.8,this.btnBuy.color=VB.BROWN,this.btnBuy.height=55,this.btnBuy.width=130,this.btnBuy.x=this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.on("pointerdown",this.onBuy,this),this.bg.eventMode="static",this.bg.cursor="pointer",this.bg.on("pointerdown",this.onShowGuide,this),cD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x-5)}
+ async onBuy(){
+ if(this.data.locked){
+ const t=u2.getInstance();
+ return t.showMessage(SG.getText("GAME_564","1성부터 5성 유물을 모두 구매해야, 6성 유물을 구매할 수 있습니다.")),void(t.y=VA.viewMainY+60)}
+ if(ML.honorCoin<this.data.cost)wG.getInstance().show(SG.getText("GAME_194","명예코인이 부족합니다."));
+ else if(1==this.data.kindNum){
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=await rD.getInstance().treasure.buyTreasureWithHonorCoin(!0);
+ if(!1===t.success)return this.setRequestPending(!1),"TREASURE_ALL_6STAR_OWNED"==t.error?void wG.getInstance().show(SG.getText("GAME_526","모든 유물을 뽑아서, 더이상 뽑을 유물이 없습니다.")):void wG.getInstance().showError(t);
+ const i=Hx.getInstance().equipedKindNums;
+ ML.setUserInfo(t.body),L3t.invalidateCachedTransInfo(),kF.getInstance().updateAll();
+ const s=Hx.getInstance().equipedKindNums,e=t.body.addedTreasureKindNum;
+ e&&V5t.getInstance().showResult(e,i,s),Z5t.getInstance().setData(),z5t.getInstance().setData(),this.setRequestPending(!1),wVt.getInstance().getStatus()}
+ else if(2==this.data.kindNum){
+ if(1==this.requestPending2)return;
+ this.setRequestPending2(!0);
+ const t=await rD.getInstance().hero.buyHeroWithHonorCoin(!0);
+ if(!1===t.success)return this.setRequestPending2(!1),void wG.getInstance().showError(t);
+ ML.setUserInfo(t.body),kF.getInstance().updateAll();
+ const i=t.body.addedHeroId;
+ if(-1!==i){
+ const t=wx.getInstance().getVOWithId(i);
+ t&&jhi.getInstance().hireHero(t)}
+ const s=t.body.addedHeroKindNum;
+ s&&$5t.getInstance().showResult(s,i),Z5t.getInstance().setData(),z5t.getInstance().setData(),this.setRequestPending2(!1),wVt.getInstance().getStatus()}
+ }
+ setRequestPending(t){
+ this.requestPending=t}
+ setRequestPending2(t){
+ this.requestPending2=t}
+ setData(t){
+ this.data=t,this.lblName.text=t.name,this.lblName.y=.4*(this.bg.height-this.lblName.height),t.icon&&(this.icon.texture=QA.getTexture("UI_Ekkorr",t.icon)),this.btnBuy.text=t.cost.toString()}
+ onShowGuide(){
+ this.data&&(1===this.data.kindNum?oXt.getInstance().showGuide():2===this.data.kindNum&&NYt.getInstance().showGuide())}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(q5t,"HonorShopItemRenderer");
+ let Y5t=q5t;
+ const X5t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),this.list=new KO(Y5t,630,VA.listHeight),this.list.x=5,this.list.y=z5t.getInstance().height,this.addChild(this.list),this.addChild(z5t.getInstance())}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setData(){
+ z5t.getInstance().setData();
+ const t=[],i=AL.getInstance().getClientData("HONOR_SHOP_TREASURE_6_ACTIVE"),s=new Date(i),e=new Date,n=Hx.getInstance(),h=n.equipedList.length+n.ownedList.length,r=n.bookList.filter(t=>t.grade<=5).length,o=n.allPurchased||r>0&&h>=r;
+ i&&e>=s&&t.push({
+ kindNum:1,icon:"Icon_Relic_6",name:`${
+ SG.getValueReplace("GAME_184","##",6,"6성 유물 뽑기")}
+ `,cost:5e3,locked:!o}
+ ),t.push({
+ kindNum:2,icon:"Icon_Hero_5",name:`${
+ SG.getValueReplace("GAME_181","##",5,"5성 병사 뽑기")}
+ `,cost:4400}
+ ),this.list.dataProvider=t}
+ get className(){
+ return"HonorShopSubView"}
+ updateLanguage(){
+ this.setData(),z5t.getInstance().updateLanguage()}
+ updateHonorCoin(){
+ z5t.getInstance().setData()}
+ }
+ ;
+ Vt(X5t,"HonorShopSubView"),Kt(X5t,"instance");
+ let J5t=X5t;
+ const Q5t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblHonorCoin",new $B("PVP_COIN_ON","0",cD.COLOR_PURPLE_PINK,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"btnShop",new zWt("명예상점",110)),this.btnShop.width=110,this.btnShop.height=45,this.btnShop.y=.5*(this.bg.height-this.btnShop.height),this.addChild(this.btnShop),this.btnShop.on("pointertap",this.onShop,this),this.lblHonorCoin.text=String(ML.honorCoin),this.lblHonorCoin.y=.5*(this.bg.height-this.lblHonorCoin.height),this.addChild(this.lblHonorCoin),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.btnShop.x=640-this.btnShop.width-6,this.lblHonorCoin.x=this.btnShop.x-this.lblHonorCoin.width-10}
+ onShop(){
+ J5t.getInstance().setData(),e3t.getInstance().currentSubView=J5t.getInstance()}
+ setData(){
+ this.lblHonorCoin.text=String(ML.honorCoin),this.updateLayout()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_70","전투")),this.btnShop.text=SG.getText("GAME_87","명예상점"),this.updateLayout()}
+ }
+ ;
+ Vt(Q5t,"BattleSubMenu"),Kt(Q5t,"instance");
+ let Z5t=Q5t;
+ const t3t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"listData",[]),Kt(this,"frameCount",0),Kt(this,"rechargeRefreshCooldown",0),this.list=new KO(H5t,630,VA.listHeight),this.list.x=5,this.list.y=Z5t.getInstance().height,this.addChild(this.list),this.addChild(Z5t.getInstance()),this.listData.push({
+ type:U5t.DUNGEON,name:"던전",desc:"던전에 도전하여 유물재료를 획득하세요",nameLangId:"GAME_74",descLangId:"GAME_75"}
+ ),this.listData.push({
+ type:U5t.INFINITE_RANKING,name:"무한 랭킹전",desc:"끝없는 전투에서 최고 기록에 도전하세요",nameLangId:"GAME_76",descLangId:"GAME_77"}
+ ),this.listData.push({
+ type:U5t.DAILY_RANKING,name:"일일 랭킹전",desc:"오늘의 랭킹 순위를 겨루세요",nameLangId:"GAME_78",descLangId:"GAME_79"}
+ ),this.listData.push({
+ type:U5t.CHALLENGE_TOWER,name:"도전의 탑",desc:"끝없이 올라가는 도전의 탑을 공략하세요.",nameLangId:"GAME_80",descLangId:"GAME_81"}
+ ),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ Tei.getInstance().unregisterListItemsGetter("Battle")}
+ registerMissionGuide(){
+ 1!=Hjt.getInstance().isAllCompleted()&&Tei.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"Battle")}
+ async setData(){
+ this.registerMissionGuide(),Z5t.getInstance().setData(),this.list.dataProvider=this.listData,LM.getInstance().remove(this.onFrame,this),LM.getInstance().add(this.onFrame,this);
+ const i=oVt.getInstance();
+ if(i.isStale(t.SUMMARY_TTL_MS))try{
+ const t=await rD.getInstance().battle.getSummary(!1);
+ (null==t?void 0:t.success)&&t.body&&(i.setSummary(t.body),this.refreshItems())}
+ catch(Xst){
+ }
+ else this.refreshItems()}
+ refreshItems(){
+ const t=this.list.getItemList();
+ for(const i of t)i&&"function"==typeof i.refreshTimer&&i.refreshTimer()}
+ onFrame(){
+ var t,i;
+ if(null==(null==(i=null==(t=this.parent)?void 0:t.parent)?void 0:i.parent))return void LM.getInstance().remove(this.onFrame,this);
+ if(this.frameCount++<30)return;
+ this.frameCount=0;
+ const s=oVt.getInstance();
+ s.has()&&(this.refreshItems(),(this.shouldRefetchForRecharge(s)||this.shouldRefetchForDailyRollover(s))&&tx.time>this.rechargeRefreshCooldown&&(this.rechargeRefreshCooldown=tx.time+1e4,this.refetchSummary()))}
+ shouldRefetchForDailyRollover(t){
+ const i=t.getDailyRanking();
+ if(!i||!i.date)return!1;
+ const s=new Date(tx.time),e=`${
+ s.getUTCFullYear()}
+ -${
+ String(s.getUTCMonth()+1).padStart(2,"0")}
+ -${
+ String(s.getUTCDate()).padStart(2,"0")}
+ `;
+ return i.date!==e}
+ shouldRefetchForRecharge(t){
+ const i=tx.time,s=t.getDungeon();
+ if(s&&s.ticket<s.maxTicket&&s.ticketRechargeMs>0&&i-s.ticketTime>=s.ticketRechargeMs)return!0;
+ const e=t.getPvp();
+ if(e&&e.ticket<e.maxTicket&&e.ticketRechargeMs>0&&e.ticketTime&&i-new Date(e.ticketTime).getTime()>=e.ticketRechargeMs)return!0;
+ const n=t.getTower();
+ return!!(n&&n.ticket<n.maxTicket&&n.ticketRechargeMs>0&&i-n.ticketTime>=n.ticketRechargeMs)}
+ async refetchSummary(){
+ try{
+ const t=await rD.getInstance().battle.getSummary(!1);
+ (null==t?void 0:t.success)&&t.body&&(oVt.getInstance().setSummary(t.body),this.refreshItems())}
+ catch(Xst){
+ }
+ }
+ updateHonorCoin(){
+ Z5t.getInstance().setData()}
+ }
+ ;
+ Vt(t3t,"BattleSubView"),Kt(t3t,"instance"),Kt(t3t,"SUMMARY_TTL_MS",3e5);
+ let i3t=t3t;
+ const s3t=class t extends uzt{
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ constructor(){
+ super(),this.currentSubView=i3t.getInstance()}
+ setData(){
+ i3t.getInstance().setData(),this.currentSubView=i3t.getInstance()}
+ get className(){
+ return"BattleView"}
+ }
+ ;
+ Vt(s3t,"BattleView"),Kt(s3t,"instance");
+ let e3t=s3t;
+ const n3t=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),Kt(this,"btnGoDungeon"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.btnGoDungeon=new zWt("던전 바로가기",200),this.btnGoDungeon.height=45,this.contentContainer.addChild(this.btnGoDungeon),this.btnGoDungeon.on("pointertap",this.onGoDungeon,this),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_391","유물 안내");
+ const t=[`1. ${
+ SG.getText("GAME_392","[유물]은 [던전] 재료를 이용해서 구매하거나 업그레이드 할 수 있습니다.")}
+ `,`2. ${
+ SG.getText("GAME_393","[던전]은 [전투-던전] 메뉴를 통해 접근할 수 있습니다.")}
+ `,`3. ${
+ SG.getText("GAME_394","모든 [유물]은 오직 1개씩만 보유할 수 있습니다. 중복으로 보유할 수 없습니다.")}
+ `,`4. ${
+ SG.getText("GAME_395","[유물]을 장착해제 하면, 강화레벨이 0으로 초기화 되고, 강화레벨에 들어간 던전재료는 모두 돌려받습니다.")}
+ `,`5. ${
+ SG.getText("GAME_396","낮은 등급의 유물을 구매하면, [상점]에 높은 등급의 유물이 등장합니다. 높은 등급의 유물을 얻으려면, 낮은 등급의 유물들을 모두 구매하세요.")}
+ `,`6. ${
+ SG.getText("GAME_397","[상점]에는 1성부터 5성까지의 유물만 등장합니다. 모든 유물을 다 구매하면, [명예상점]에서 6성 유물을 구매할 수 있게 됩니다.")}
+ `];
+ this.lblGuide.text=t.join("\n\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.btnGoDungeon.text=SG.getText("GAME_398","던전 바로가기"),this.btnGoDungeon.x=.5*(this.width-this.btnGoDungeon.width),this.btnGoDungeon.y=this.lblGuide.y+this.lblGuide.height+15,this.height=this.btnGoDungeon.y+this.btnGoDungeon.height+30,await this.loadImage(),super.show()}
+ onGoDungeon(){
+ this.hide();
+ const t=Lni.getInstance();
+ Zqt.getInstance().setExpandedMode(!1),e3t.getInstance().setData(),Zqt.getInstance().currentView=e3t.getInstance(),Ujt.currentIndex=4;
+ for(let i=0;
+ i<6;
+ i++)t.getMenu(i).selected=4===i;
+ Lni.getInstance().setMenuSelected(4),F0t.getInstance().setData(),e3t.getInstance().currentSubView=F0t.getInstance()}
+ getDefaultPositionY(){
+ return.45*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(n3t,"TreasureGuidePopup"),Kt(n3t,"_instance");
+ let h3t=n3t;
+ const r3t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"onConfirmed",null),Kt(this,"lblQuestion",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblCost",new $B("UI_GEM","0",16768256,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnCancel",new kU("","","취소",.8,150,70)),Kt(this,"btnConfirm",new kU("UI_GEM","200","확인",.8,180,70)),this.contentContainer.addChild(this.lblQuestion,this.lblCost,this.btnCancel,this.btnConfirm),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.outSideClickHide=!0}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ showConfirm(t,i){
+ this.onConfirmed=i,this.title=SG.getText("GAME_242","유물 슬롯 확장"),this.lblQuestion.text=SG.getText("GAME_243","유물 슬롯을 추가하시겠습니까? "),this.lblCost.text=`${
+ t.toLocaleString()}
+ `,this.btnConfirm.iconText=String(t),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
+ onConfirmClick(){
+ this.hide(),this.onConfirmed&&(this.onConfirmed(),this.onConfirmed=null)}
+ updateLayout(){
+ const t=.5*this.width;
+ this.lblQuestion.x=t-.5*this.lblQuestion.width,this.lblQuestion.y=90,this.lblCost.x=t-.5*this.lblCost.width,this.lblCost.y=this.lblQuestion.y+this.lblQuestion.height+25;
+ const i=this.lblCost.y+this.lblCost.height+40,s=this.btnConfirm.width+16+this.btnCancel.width;
+ this.btnConfirm.x=t-.5*s,this.btnConfirm.y=i,this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+16,this.btnCancel.y=i,this.height=i+this.btnConfirm.height+50}
+ }
+ ;
+ Vt(r3t,"TreasureSlotExpandPopup"),Kt(r3t,"instance");
+ let o3t=r3t;
+ const a3t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"buffInfo1",new wXt),Kt(this,"buffInfo2",new wXt),Kt(this,"btnBuy",new CXt("Core1","0","Core1","")),Kt(this,"icon",new hXt),Kt(this,"mainContainer",new Ge),Kt(this,"requestPending",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideEnhance(),this.icon.hideFrame(),this.icon.x=15,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=12,this.mainContainer.addChild(this.lblName),this.buffInfo1.x=135,this.buffInfo1.y=44,this.mainContainer.addChild(this.buffInfo1),this.buffInfo2.x=315,this.buffInfo2.y=44,this.mainContainer.addChild(this.buffInfo2),this.btnBuy.topIconScale=.7,this.btnBuy.bottomIconScale=.7,this.btnBuy.color=CXt.BROWN,this.btnBuy.height=60,this.btnBuy.width=120,this.btnBuy.x=this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.mainContainer.addChild(this.btnBuy),this.btnBuy.on("pointertap",this.onBuy,this),this.addChild(this.mainContainer)}
+ getNonZeroCores(t){
+ const i=[];
+ for(let s=0;
+ s<t.length;
+ s++)t[s]>0&&i.push({
+ idx:s,cost:t[s]}
+ );
+ return i.sort((t,i)=>i.cost-t.cost),i}
+ setCoreButton(t,i){
+ const s=this.getNonZeroCores(i);
+ s.length>=2?(t.topIcon=`Core${
+ s[0].idx+1}
+ `,t.topText=VD.displayLargeNumberAsAlphabet(s[0].cost),t.bottomIcon=`Core${
+ s[1].idx+1}
+ `,t.bottomText=VD.displayLargeNumberAsAlphabet(s[1].cost)):1===s.length?(t.topIcon=`Core${
+ s[0].idx+1}
+ `,t.topText=VD.displayLargeNumberAsAlphabet(s[0].cost),t.bottomText=""):(t.topText="",t.bottomText="")}
+ async onBuy(t){
+ const i=this.data.bookVO,s=i.openCost,e=Hx.getInstance().getCores();
+ for(let r=0;
+ r<4;
+ r++)if(s[r]>e[r])return void u2.getInstance().showMessage(SG.getText("GAME_155","유물재료가 부족합니다."));
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ let n=await rD.getInstance().treasure.buy(i.kindNum);
+ if(0==n.success)return this.setRequestPending(!1),void wG.getInstance().showError(n);
+ const h=Hx.getInstance().equipedKindNums;
+ ML.setUserInfo(n.body),Hx.getInstance().setData(n.body.treasure,n.body.dungeon),L3t.invalidateCachedTransInfo(),Hx.getInstance().equipedKindNums.length>h.length?u2.getInstance().showMessage(SG.getText("GAME_300","슬롯에 추가되었습니다.")):u2.getInstance().showMessage(SG.getText("GAME_302","[내유물]로 이동했습니다.")),kF.getInstance().updateAll(),f3t.getInstance().setData(),this.setRequestPending(!1),wVt.getInstance().getStatus()}
+ setRequestPending(t){
+ this.requestPending=t}
+ setData(t){
+ this.data=t;
+ const i=t.bookVO;
+ this.icon.setVO(i),this.lblName.text=SG.getText(i.getNameKey(),i.name),this.buffInfo1.setVO(i,1),i.skillCode2?(this.buffInfo2.visible=!0,this.buffInfo2.setVO(i,2)):this.buffInfo2.visible=!1,this.setCoreButton(this.btnBuy,i.openCost),this.updateCache()}
+ updateCache(){
+ }
+ clearCache(){
+ }
+ onClick(t,i){
+ if(t>=this.btnBuy.x-10)return;
+ const s=this.data.bookVO;
+ HXt.getInstance().showInBook(s.kindNum,WXt.shop)}
+ }
+ ;
+ Vt(a3t,"TreasureShopItemRenderer");
+ let c3t=a3t;
+ const l3t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblTime",new JD("04:00",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblCost",new $B("UI_GEM","100",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnRefresh",new zWt("새로고침",110)),Kt(this,"btnClose",new kKt),Kt(this,"cnt",0),Kt(this,"duration",3600),Kt(this,"lastUpdateTime",0),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.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.onClick=()=>{
+ this.onRefresh()}
+ ,this.btnClose.onClick=()=>{
+ w3t.getInstance().updateLanguage(),DXt.getInstance().currentSubView=w3t.getInstance()}
+ ,this.lastUpdateTime=Date.now(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ 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}
+ onAdded(){
+ this.lastUpdateTime=Hx.getInstance().lastBuyRefreshTime,LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ getRemainingRefreshTime(){
+ let t=this.duration-.001*(tx.time-this.lastUpdateTime);
+ return t<=0&&(t=0),t}
+ onFrame(){
+ if(this.cnt-- >0)return;
+ this.cnt=5;
+ const t=this.getRemainingRefreshTime();
+ this.updateCostLabel(t),this.lblTime.text=wU.displayTimeAsMMSS(t),this.updateLayout()}
+ updateCostLabel(t){
+ if(Hx.getInstance().allPurchased)return this.lblCost.text="-",this.lblCost.textColor=cD.COLOR_GRAY,this.btnRefresh.hideRedDot(),void(this.btnRefresh.activated=!1);
+ if(this.btnRefresh.activated=!0,t>0)this.lblCost.text=String(100),this.lblCost.textColor=cD.DEFAULT_COLOR,this.btnRefresh.hideRedDot();
+ else{
+ this.lblCost.text="FREE",this.lblCost.textColor=cD.COLOR_DEEP_SKYBLUE,this.btnRefresh.showRedDot();
+ const t=5-Math.floor(.5*this.btnRefresh.width),i=-Math.floor(.5*this.btnRefresh.height)-7;
+ this.btnRefresh.updateRedDotPos(t,i)}
+ }
+ async onRefresh(){
+ if(!Hx.getInstance().allPurchased)return this.getRemainingRefreshTime()>0?(b$t.getInstance().show(SG.getValueReplace("GAME_210","##",100,"보석 100개를 사용하고, 유물목록을 새로 갱신하겠습니다.")+"\n("+SG.getValueReplace("GAME_54","##",60,"60분마다 무료로 목록을 갱신할 수 있습니다.")+")",()=>this.onRefreshTreasures(!0)),void(b$t.getInstance().y=480)):void this.onRefreshTreasures(!1)}
+ async onRefreshTreasures(t){
+ if(Hx.getInstance().allPurchased)return;
+ let i=await rD.getInstance().treasure.refreshBuyableTreasureList(t);
+ 0!=i.success?(ML.setUserInfo(i.body),f3t.getInstance().setData(),kF.getInstance().updateAll(),this.lastUpdateTime=Hx.getInstance().lastBuyRefreshTime):wG.getInstance().showError(i)}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_154","유물 상점")),this.btnRefresh.text=SG.getText("COMMON_60","새로고침");
+ const t=this.getRemainingRefreshTime();
+ this.updateCostLabel(t),this.lblTime.text=wU.displayTimeAsMMSS(t),this.updateLayout()}
+ }
+ ;
+ Vt(l3t,"TreasureShopSubMenu"),Kt(l3t,"instance");
+ let u3t=l3t;
+ const d3t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"lblEmpty",new JD("구매 가능한 유물이 없습니다.",10066329,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),this.list=new d5(c3t,630,VA.listHeight),this.list.x=5,this.list.y=u3t.getInstance().height,this.lblEmpty.align="center",this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.list),this.addChild(this.lblEmpty),this.addChild(u3t.getInstance()),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ }
+ setData(){
+ Tei.getInstance().registerListItemsGetter(()=>this.list.getItemList(),"TreasureShop"),u3t.getInstance().updateLanguage();
+ const t=Hx.getInstance();
+ let i=[];
+ const s=Math.min(t.buyableCount,5);
+ for(let e=0;
+ e<s;
+ e++){
+ const s=t.buyableList[e],n=t.getBookDataByKindNum(s.kindNum);
+ n&&i.push({
+ slotId:s.slotId,bookVO:n}
+ )}
+ if(this.list.dataProvider=i,0===i.length){
+ this.lblEmpty.visible=!0,t.allPurchased?this.lblEmpty.text=SG.getText("GAME_156","모든 유물을 구매했습니다.")+"\n"+SG.getText("GAME_157","명예상점에서 유물을 구매하세요."):this.lblEmpty.text=SG.getText("GAME_158","구매 가능한 유물이 없습니다.");
+ const i=320;
+ this.lblEmpty.x=i-.5*this.lblEmpty.width}
+ else this.lblEmpty.visible=!1}
+ get className(){
+ return"TreasureShopSubView"}
+ updateLanguage(){
+ this.lblEmpty.text=SG.getText("GAME_158","구매 가능한 유물이 없습니다."),this.setData(),u3t.getInstance().updateLanguage()}
+ }
+ ;
+ Vt(d3t,"TreasureShopSubView"),Kt(d3t,"instance");
+ let f3t=d3t;
+ const p3t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblMaxCapacity",new $B("menu_icon_04_on","0/10",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnShop",new zWt("상점",110)),Kt(this,"btnMyTreasure",new zWt("내유물",110)),Kt(this,"btnPreset",new zWt("프리셋",90)),Kt(this,"btnTrans",new zWt("초월",110)),Kt(this,"btnGuide"),Kt(this,"btnSlotAdd"),Kt(this,"requestPending",!1),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnShop.width=110,this.btnShop.height=45,this.btnShop.y=.5*(this.bg.height-this.btnShop.height),this.addChild(this.btnShop),this.btnMyTreasure.width=110,this.btnMyTreasure.height=45,this.btnMyTreasure.y=.5*(this.bg.height-this.btnMyTreasure.height),this.addChild(this.btnMyTreasure),this.btnPreset.width=90,this.btnPreset.height=45,this.btnPreset.y=.5*(this.bg.height-this.btnPreset.height),this.addChild(this.btnPreset),this.btnTrans.width=110,this.btnTrans.height=45,this.btnTrans.y=.5*(this.bg.height-this.btnTrans.height),this.addChild(this.btnTrans),this.layoutRightButtons(),this.btnShop.on("pointertap",this.onShop,this),this.btnMyTreasure.on("pointertap",this.onMyTreasure,this),this.btnPreset.on("pointertap",this.onPreset,this),this.btnTrans.on("pointertap",this.onTrans,this),this.btnSlotAdd=new MB("UI_Ekkorr","Btn_Plus"),this.btnSlotAdd.y=this.lblMaxCapacity.y+.5*(this.lblMaxCapacity.height-this.btnSlotAdd.height),this.addChild(this.btnSlotAdd),this.btnSlotAdd.onClick=this.onSlotAddBtnClick.bind(this),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ h3t.getInstance().showGuide()}
+ ),Tei.getInstance().registerSubMenuButtonGetter(t=>"btnShop"===t&&this.btnShop.visible?{
+ parent:this,btn:{
+ x:this.btnShop.x,y:this.btnShop.y,width:this.btnShop.width,height:this.btnShop.height}
+ }
+ :null),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.layoutRightButtons(),this.btnSlotAdd.x=this.lblMaxCapacity.x+this.lblMaxCapacity.width+5,this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
+ layoutRightButtons(){
+ this.btnShop.x=640-this.btnShop.width-6,this.btnMyTreasure.x=this.btnShop.x-this.btnMyTreasure.width-2,this.btnTrans.x=this.btnMyTreasure.x-this.btnTrans.width-2;
+ const t=this.btnTrans.visible?this.btnTrans.x:this.btnMyTreasure.x;
+ this.btnPreset.x=t-this.btnPreset.width-2}
+ update(){
+ const t=Hx.getInstance(),i=t.maxSlots,s=t.equipedKindNums.length;
+ this.lblMaxCapacity.text=`${
+ s}
+ /${
+ i}
+ `;
+ const e=AL.getInstance().getTreasureMaxSlots();
+ this.btnSlotAdd.visible=i<e,this.btnPreset.visible=t.presetUnlocked;
+ const n=Vt(t=>5===t.grade||6===t.grade,"isTransTarget"),h=t.equipedList.filter(n).length+t.ownedList.filter(n).length;
+ this.btnTrans.visible=h>=20,this.layoutRightButtons()}
+ setData(){
+ this.update()}
+ onShop(){
+ f3t.getInstance().setData(),DXt.getInstance().currentSubView=f3t.getInstance()}
+ onMyTreasure(){
+ UXt.getInstance().setData(),UXt.getInstance().list.showTopItem(),DXt.getInstance().currentSubView=UXt.getInstance()}
+ onPreset(){
+ DXt.getInstance().currentSubView!==w3t.getInstance()&&(w3t.getInstance().setData(),DXt.getInstance().currentSubView=w3t.getInstance()),w3t.getInstance().togglePresetBar()}
+ onTrans(){
+ L3t.getInstance().setData(),DXt.getInstance().currentSubView=L3t.getInstance()}
+ async onSlotAddBtnClick(){
+ let t=AL.getInstance().getClientData("TREASURE_SLOT_EXPAND_COSTS");
+ t||(t="150|300|500|700|1000|1000|1000|1000|1000|1000");
+ const i=Hx.getInstance().maxSlots-AL.getInstance().getTreasureInitialSlots();
+ if(i<0)return void u2.getInstance().showMessage(SG.getText("GAME_212","슬롯을 확장할 수 없습니다."));
+ const s=t.split("|").map(Number);
+ ML.gem<s[i]?u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다.")):o3t.getInstance().showConfirm(s[i],()=>{
+ this.executeExpandSlot()}
+ )}
+ async executeExpandSlot(){
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ let t=await rD.getInstance().treasure.buyTreasureSlot();
+ if(0==t.success)return this.setRequestPending(!1),void wG.getInstance().showError(t);
+ ML.setUserInfo(t.body),kF.getInstance().updateGem(),w3t.getInstance().setData(),this.setRequestPending(!1)}
+ setRequestPending(t){
+ this.requestPending=t}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_4","유물")),this.btnShop.text=SG.getText("COMMON_356","상점"),this.btnMyTreasure.text=SG.getText("GAME_82","내유물"),this.btnPreset.text=SG.getText("GAME_742","프리셋"),this.btnTrans.text=SG.getText("GAME_820","초월"),this.updateLayout()}
+ }
+ ;
+ Vt(p3t,"TreasureSubMenu"),Kt(p3t,"instance");
+ let g3t=p3t;
+ const m3t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"lblEmpty",new JD("보유한 유물이 없습니다.",10066329,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"presetBar"),Kt(this,"listBaseY",0),Kt(this,"listBaseHeight",0),this.listBaseY=g3t.getInstance().height,this.listBaseHeight=VA.listHeight,this.list=new d5(jXt,630,this.listBaseHeight),this.list.x=5,this.list.y=this.listBaseY,this.lblEmpty.x=220,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.list),this.addChild(this.lblEmpty),this.addChild(g3t.getInstance()),this.presetBar=new SXt,this.presetBar.x=5,this.presetBar.y=g3t.getInstance().height+4,this.presetBar.visible=!1,this.presetBar.onApplied=()=>{
+ this.setData()}
+ ,this.addChild(this.presetBar),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ jXt.cleanup(),this.setMultiLevel(!1)}
+ setPresetBarVisible(t){
+ this.presetBar.visible=t,t&&this.presetBar.update();
+ const i=this.presetBar.barHeight+8;
+ t?(this.list.y=this.listBaseY+i,this.list.setListHeight(this.listBaseHeight-i),this.lblEmpty.y=200+i):(this.list.y=this.listBaseY,this.list.setListHeight(this.listBaseHeight),this.lblEmpty.y=200)}
+ togglePresetBar(){
+ this.setPresetBarVisible(!this.presetBar.visible)}
+ get isPresetBarVisible(){
+ return this.presetBar.visible}
+ setMultiLevel(t){
+ const i=this.list.getItemList();
+ for(const s of i)t?s.showMultiLevel():s.hideMultiLevel()}
+ setData(){
+ g3t.getInstance().setData(),g3t.getInstance().updateLanguage(),this.presetBar.visible&&this.presetBar.update();
+ const t=[...Hx.getInstance().equipedList];
+ t.sort((t,i)=>{
+ const s=Yx.getInstance(),e=s.getSetsByTreasureKindNum(t.kindNum),n=s.getSetsByTreasureKindNum(i.kindNum),h=0==e.length;
+ if(h!=(0==n.length))return h?1:-1;
+ if(t.grade!=i.grade)return i.grade-t.grade;
+ const r=e.length>0?e[0].kindNum:0,o=n.length>0?n[0].kindNum:0;
+ return r!=o?o-r:i.sortId-t.sortId}
+ );
+ const i=this.list.getDataLen();
+ if(this.list.dataProvider=t,i>t.length){
+ const t=Math.floor(Math.abs(this.list.getContainerY())/80+1);
+ this.list.scrollTo(t)}
+ this.lblEmpty.text=SG.getText("GAME_90","보유한 유물이 없습니다."),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.lblEmpty.visible=0===t.length,this.setMultiLevel(!1)}
+ get className(){
+ return"TreasureSubView"}
+ updateLanguage(){
+ this.lblEmpty.text=SG.getText("GAME_90","보유한 유물이 없습니다."),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.setData()}
+ }
+ ;
+ Vt(m3t,"TreasureSubView"),Kt(m3t,"instance");
+ let w3t=m3t;
+ const v3t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"btnClose",new kKt),Kt(this,"btnGuide"),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.btnClose.onClick=()=>{
+ w3t.getInstance().updateLanguage(),DXt.getInstance().currentSubView=w3t.getInstance()}
+ ,this.addChild(this.btnClose),this.lblTitle.y=12,this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ yXt.getInstance().showGuide()}
+ ),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_1167","유물 초월")),this.updateLayout()}
+ }
+ ;
+ Vt(v3t,"TreasureTransSubMenu"),Kt(v3t,"instance");
+ let b3t=v3t;
+ const _3t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17)),Kt(this,"lblMessage2",new JD("",cD.COLOR_YELLOW,cD.DEFAULT_FONT_OPTION_17)),Kt(this,"btnConfirm",new kU("UI_GEM","0",SG.getText("GAME_67","진화"),.8,200,70)),Kt(this,"onConfirm",null),this.title="",this.outSideClickHide=!0,this.lblMessage2.visible=!1,this.contentContainer.addChild(this.lblMessage,this.lblMessage2,this.btnConfirm),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.onClick=this.onCancelClick.bind(this),cD.setLabelWrapWidth(this.lblMessage,this.width-60),cD.setLabelWrapWidth(this.lblMessage2,this.width-60)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showWith(t,i,s,e=1){
+ this.onConfirm=s,this.lblMessage.text=SG.getValueReplace("GAME_854","##",t,`${
+ t}
+  영웅을 진화하시겠습니까?`),e>1?(this.lblMessage2.text=`${
+ t}
+  x ${
+ e}
+ `,this.lblMessage2.visible=!0):this.lblMessage2.visible=!1,this.btnConfirm.text=SG.getText("GAME_67","진화"),this.btnConfirm.iconText=String(i*e),this.updateLayout(),super.show()}
+ onConfirmClick(){
+ const t=this.onConfirm;
+ this.onConfirm=null,this.hide(),t&&t()}
+ onCancelClick(){
+ this.onConfirm=null,this.hide()}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=90;
+ let t=this.lblMessage.y+this.lblMessage.height+30;
+ this.lblMessage2.visible&&(this.lblMessage2.x=.5*(this.width-this.lblMessage2.width),this.lblMessage2.y=this.lblMessage.y+this.lblMessage.height+15,t=this.lblMessage2.y+this.lblMessage2.height+30),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ onBackButton(){
+ return this.onCancelClick(),!0}
+ }
+ ;
+ Vt(_3t,"EvolveMaterialConfirmPopup"),Kt(_3t,"_instance");
+ let y3t=_3t;
+ const M3t=Object.freeze(Object.defineProperty({
+ __proto__:null,EvolveMaterialConfirmPopup:y3t}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),E3t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17)),Kt(this,"materialContainer",new Ge),Kt(this,"materialIcons",[]),Kt(this,"materialCountLabels",[]),Kt(this,"materialCostLabels",[]),Kt(this,"btnCancel",new kU("UI_CLOSE_BTN","","취소",.7,160,70)),Kt(this,"btnTrans",new kU("PVP_COIN_ON","100","초월",1,200,70)),Kt(this,"grade",-1),Kt(this,"trans",-1),Kt(this,"preEvolKindNums",[]),Kt(this,"preEvolCounts",[]),Kt(this,"totalCost",0),Kt(this,"requestPending",!1),Kt(this,"onEvolved",null),this.width=600,this.lblMessage.y=90,cD.setLabelWrapWidth(this.lblMessage,this.width-60);
+ for(let t=0;
+ t<5;
+ t++){
+ const t=new Y2;
+ t.setMode(z2.BOOK),t.scale.set(.8),this.materialIcons.push(t);
+ const i=new JD("0/1",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ this.materialCountLabels.push(i);
+ const s=new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18);
+ this.materialCostLabels.push(s)}
+ this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.showIconLabel=!0,this.btnTrans.showTextLabel=!0,this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=this.onTransClick.bind(this),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.btnCancel.color=kU.RED,this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.onClick=()=>this.hide(),this.contentContainer.addChild(this.lblMessage,this.materialContainer,this.btnCancel,this.btnTrans),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.materialContainer.x=.5*(this.width-this.materialContainer.width),this.materialContainer.y=this.lblMessage.y+this.lblMessage.height+30;
+ const t=this.btnCancel.width+16+this.btnTrans.width,i=this.materialContainer.y+this.materialContainer.height+30;
+ this.btnCancel.x=.5*(this.width-t),this.btnCancel.y=i,this.btnTrans.x=this.btnCancel.x+this.btnCancel.width+16,this.btnTrans.y=i,this.height=i+this.btnTrans.height+50}
+ setData(t,i,s){
+ this.grade=t,this.trans=i,this.lblMessage.text=SG.getText("GAME_1237","재료 영웅을 진화시켜 초월 재료로 바로 사용할 수 있습니다.")+"\n"+SG.getText("GAME_1238","영웅을 진화한 후에 초월하시겠습니까?"),this.preEvolKindNums.length=0,this.preEvolCounts.length=0,this.materialContainer.removeChildren(),this.totalCost=0;
+ const e=wx.getInstance();
+ let n=0;
+ const h=this.materialIcons.length;
+ for(let c=0;
+ c<h;
+ ++c){
+ const t=s[c],i=e.getBookVO(t);
+ if(!t||t<1||!i)continue;
+ const h=this.materialIcons[n];
+ h.setDataWithKindNum(t);
+ const r=1,o=e.getOwnedUnitCount(t,0),a=this.materialCountLabels[n];
+ a.text=`${
+ o}
+ /${
+ r}
+ `,this.preEvolKindNums.push(t),this.preEvolCounts.push(o);
+ const l=Mqt[i.grade]??0,u=this.materialCostLabels[n],d=l*r;
+ u.text=`${
+ d}
+ `,this.totalCost+=d,h.x=113*n,h.y=0,a.x=h.x+.5*(80-a.width)+5,a.y=70,u.x=a.x+.5*(a.width-u.width)-5,u.y=a.y+a.height,this.materialContainer.addChild(h),this.materialContainer.addChild(a),this.materialContainer.addChild(u),n++}
+ const r=cXt.getInstance();
+ this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.iconText=String(r.getTransCost(t,i));
+ const o=5===t,a=QA.getTexture("UI_Ekkorr",o?"UI_GEM":"PVP_COIN_ON");
+ this.btnTrans.iconLabel.texture=a,this.btnTrans.iconLabel.iconScale=o?.9:1,this.updateLayout()}
+ async onTransClick(){
+ if(ML.gem<this.totalCost)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."),300);
+ if(this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=[];
+ for(let s=0;
+ s<this.preEvolKindNums.length;
+ ++s)t.push(`${
+ this.preEvolKindNums[s]}
+ -1`);
+ const i=await rD.getInstance().hero.evolveOwned(t.join("|"),!0);
+ if(!1===i.success)return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),kF.getInstance().updateAll(),this.setRequestPending(!1),this.hide(),this.onEvolved&&(this.onEvolved(),this.onEvolved=null)}
+ setRequestPending(t){
+ this.requestPending=t}
+ }
+ ;
+ Vt(E3t,"TreasureTransMatMultiEvolvePopup"),Kt(E3t,"_instance");
+ let A3t=E3t;
+ const S3t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17)),Kt(this,"btnCancel",new kU("UI_CLOSE_BTN","","취소",.7,160,70)),Kt(this,"btnConfirm",new kU("UI_GEM","100","재료변경",.8,180,70)),Kt(this,"onConfirm",null),this.title="",this.lblMessage.y=90,this.lblMessage.text=SG.getText("GAME_1233","재료를 변경하시겠습니까?"),cD.setLabelWrapWidth(this.lblMessage,this.width-60),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.btnCancel.color=kU.RED,this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.onClick=this.onCancelClick.bind(this),this.btnConfirm.text=SG.getText("GAME_1154","재료변경"),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.contentContainer.addChild(this.lblMessage,this.btnCancel,this.btnConfirm),this.updateLayout()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width);
+ const t=this.btnCancel.width+16+this.btnConfirm.width,i=this.lblMessage.y+this.lblMessage.height+30;
+ this.btnCancel.x=.5*(this.width-t),this.btnCancel.y=i,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=i,this.height=i+this.btnConfirm.height+50}
+ setData(t,i,s){
+ this.onConfirm=s,this.lblMessage.text=SG.getText("GAME_1233","재료를 변경하시겠습니까?");
+ const e=5===t,n=QA.getTexture("UI_Ekkorr",e?"UI_GEM":"PVP_COIN_ON"),h=cXt.getInstance();
+ this.btnConfirm.iconLabel.texture=n,this.btnConfirm.iconText=String(h.getMatChangeCost(t,i)),this.updateLayout()}
+ onCancelClick(){
+ this.onConfirm=null,this.hide()}
+ onConfirmClick(){
+ const t=this.onConfirm;
+ this.onConfirm=null,this.hide(),t&&t()}
+ }
+ ;
+ Vt(S3t,"TreasureTransMatChangeConfirmPopup"),Kt(S3t,"instance");
+ let T3t=S3t;
+ const C3t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"ticketHonorCoin",1e3),Kt(this,"lblMessage"),Kt(this,"infoContainer"),Kt(this,"infoBg"),Kt(this,"ticketImg"),Kt(this,"ticketLbl"),Kt(this,"lblHonorCoin"),Kt(this,"ticketLblOwned"),Kt(this,"btnContainer"),Kt(this,"btnAll"),Kt(this,"btnNum5"),Kt(this,"btnNum1"),Kt(this,"btnConfirm",new eG("확인")),Kt(this,"btnCancel",new CWt("취소")),Kt(this,"grade",6),Kt(this,"count",1),Kt(this,"requestPending",!1),this.title="유물 초월권 교환",this.lblMessage=new JD("유물 초월권을 명예코인으로 교환하시겠습니까?",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17),this.lblMessage.y=90,cD.setLabelWrapWidth(this.lblMessage,this.width-60),this.infoContainer=new Ge,this.infoBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.infoBg.alpha=.6,this.infoBg.width=430,this.infoContainer.addChild(this.infoBg);
+ const t=cD.DEFAULT_FONT_OPTION_18;
+ t.fill=cD.COLOR_WHITE,t.fontSize=21,this.ticketLbl=new JD("x 1 =",t.fill,t),this.ticketLbl.y=.5*(this.infoBg.height-this.ticketLbl.height)-1,this.infoContainer.addChild(this.ticketLbl),this.ticketImg=new He(QA.getTexture("UI_Ekkorr","Ticket_TreasureTrans6")),this.ticketImg.y=.5*(this.infoBg.height-this.ticketImg.height)+1,this.infoContainer.addChild(this.ticketImg);
+ const i=cD.DEFAULT_FONT_OPTION_18;
+ i.fill=cD.COLOR_PURPLE_PINK,i.fontSize=21,this.lblHonorCoin=new $B("PVP_COIN_ON","0",i.fill,i),this.lblHonorCoin.y=.5*(this.infoBg.height-this.lblHonorCoin.height),this.infoContainer.addChild(this.lblHonorCoin);
+ const s=cD.DEFAULT_FONT_OPTION_18;
+ s.fill=cD.COLOR_WHITE,s.fontWeight="normal",this.ticketLblOwned=new JD("(보유개수 : 0)",s.fill,s),this.btnContainer=new Ge,this.btnAll=new O3t("전체"),this.btnAll.onClick=()=>{
+ this.onAllBtnClick()}
+ ,this.btnContainer.addChild(this.btnAll),this.btnNum5=new O3t("5개"),this.btnNum5.onClick=()=>{
+ this.onNum5BtnClick()}
+ ,this.btnNum5.x=this.btnAll.x+this.btnAll.width+10,this.btnContainer.addChild(this.btnNum5),this.btnNum1=new O3t("1개"),this.btnNum1.onClick=()=>{
+ this.onNum1BtnClick()}
+ ,this.btnNum1.x=this.btnNum5.x+this.btnNum5.width+10,this.btnContainer.addChild(this.btnNum1),this.contentContainer.addChild(this.lblMessage,this.infoContainer,this.ticketLblOwned,this.btnContainer,this.btnConfirm,this.btnCancel),this.btnConfirm.height=this.btnCancel.height=60,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.btnClose.onClick=this.onCancelClick.bind(this),this.updateLayout()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.infoContainer.x=.5*(this.width-this.infoContainer.width),this.infoContainer.y=this.lblMessage.y+this.lblMessage.height+30,this.ticketLblOwned.x=.5*(this.width-this.ticketLblOwned.width),this.ticketLblOwned.y=this.infoContainer.y+this.infoContainer.height+10,this.btnContainer.x=.5*(this.width-this.btnContainer.width),this.btnContainer.y=this.ticketLblOwned.y+this.ticketLblOwned.height+20,this.btnCancel.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+20,this.btnConfirm.y=this.btnContainer.y+this.btnContainer.height+30,this.btnCancel.y=this.btnConfirm.y,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ setData(t){
+ this.grade=t,this.count=1;
+ let i=parseInt(AL.getInstance().getClientData("TREASURE_TRANS_TICKET_HONOR_COIN"));
+ isNaN(i)&&(i=1e3),this.ticketHonorCoin=i,this.title=SG.getValueReplace("GAME_1234","##",t,`${
+ t}
+ 성 유물 초월권 교환`),this.lblMessage.text=SG.getValueReplace("GAME_1235","##",t,`${
+ t}
+ 성 유물 초월권을 명예코인으로 교환하시겠습니까?`),this.btnAll.text=SG.getText("GAME_69","전체"),this.btnNum5.text=SG.getValueReplace("COMMON_394","##",5,"5개"),this.btnNum1.text=SG.getValueReplace("COMMON_394","##",1,"1개"),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.update(),this.setButtonSelect(2),this.updateLayout()}
+ onAllBtnClick(){
+ const t=$Vt.getInstance().getTreasureTransTicket(this.grade);
+ this.count=t,this.update(),this.setButtonSelect(0)}
+ onNum5BtnClick(){
+ this.count=5,this.update(),this.setButtonSelect(1)}
+ onNum1BtnClick(){
+ this.count=1,this.update(),this.setButtonSelect(2)}
+ update(){
+ const t=$Vt.getInstance().getTreasureTransTicket(this.grade);
+ this.ticketLbl.text=`x  ${
+ this.count}
+   =`,this.lblHonorCoin.text=String(this.count*this.ticketHonorCoin),this.ticketLbl.x=.5*(this.infoBg.width-this.ticketLbl.width)-10,this.ticketImg.x=this.ticketLbl.x-this.ticketImg.width-20,this.lblHonorCoin.x=this.ticketLbl.x+this.ticketLbl.width+20,this.ticketLblOwned.text=`(${
+ SG.getText("COMMON_12","보유개수")}
+  : ${
+ t}
+ )`,this.ticketLblOwned.x=.5*(this.width-this.ticketLblOwned.width),this.btnAll.activated=t>0,this.btnNum5.activated=!(t<5),this.btnNum1.activated=!(t<1)}
+ setButtonSelect(t){
+ const i=[this.btnAll,this.btnNum5,this.btnNum1];
+ for(let s=0;
+ s<i.length;
+ ++s)i[s].selected=s===t}
+ onCancelClick(){
+ this.hide()}
+ async onConfirmClick(){
+ if(this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=[{
+ grade:this.grade,amount:this.count}
+ ],i=await rD.getInstance().user.sellTransTicket(t,!0);
+ if(!1===i.success)return this.setRequestPending(!1),void("INSUFFICIENT_TICKET"==i.error?wG.getInstance().show(SG.getValueReplace("GAME_1232","##",this.grade,`${
+ this.grade}
+ 성 유물 초월권이 없습니다.`)):wG.getInstance().showError(i));
+ ML.setUserInfo(i.body),$Vt.getInstance().setData(i.body.transTicket),kF.getInstance().updateHonor(),P3t.getInstance().onSellTransTicket(),this.setRequestPending(!1),this.hide()}
+ setRequestPending(t){
+ this.requestPending=t}
+ }
+ ;
+ Vt(C3t,"TreasureTransTicketExchangePopup"),Kt(C3t,"instance");
+ let I3t=C3t;
+ const k3t=class extends Kzt{
+ constructor(t){
+ super(t),Kt(this,"selectedDot"),Kt(this,"_selected",!1),this.setTexture({
+ texture:QA.getTexture("UI_Ekkorr","UI_ROUND_BTN_BG"),leftWidth:15,topHeight:20,rightWidth:15,bottomHeight:15}
+ ),this.width=120,this.height=50,this.outlineText=!0;
+ const i=this.lbl.getStyle();
+ i.stroke={
+ color:"#a05d06",width:4,join:"round"}
+ ,this.lbl.setStyle(i),this.deactivatedTextColor=16777215,this.selectedDot=new He(QA.getTexture("UI_Ekkorr","whiteCircle")),this.selectedDot.visible=!1,this.selectedDot.tint=11036429,this.selectedDot.scale=.25,this.selectedDot.x=10,this.selectedDot.y=10,this.container.addChild(this.selectedDot),this._selected=!0,this.selected=!1}
+ set activated(t){
+ if(t==this._activated)return;
+ this._activated=t;
+ const i=this.lbl.getStyle();
+ this._activated?(this.setTexture({
+ texture:QA.getTexture("UI_Ekkorr","UI_ROUND_BTN_BG"),leftWidth:15,topHeight:20,rightWidth:15,bottomHeight:15}
+ ),i.stroke={
+ color:"#a05d06",width:4,join:"round"}
+ ):(this.setTexture({
+ texture:QA.getTexture("UI_Ekkorr","UI_ROUND_BTN_BG_Gray"),leftWidth:15,topHeight:20,rightWidth:15,bottomHeight:15}
+ ),i.stroke={
+ color:"#666666",width:4,join:"round"}
+ ,this.selected=!1),this.lbl.setStyle(i),this.updateTextColor()}
+ get selected(){
+ return this._selected}
+ set selected(t){
+ t!=this._selected&&(this._selected=t,this._selected?(this.selectedDot.visible=!0,this.activatedTextColor=16776960):(this.selectedDot.visible=!1,this.activatedTextColor=16777215))}
+ }
+ ;
+ Vt(k3t,"TreasureTransTicketNumButton");
+ let O3t=k3t;
+ const x3t=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblHonorCoin",new $B("PVP_COIN_ON","0",cD.COLOR_PURPLE_PINK,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"btnClose",new kKt),Kt(this,"btnChange"),Kt(this,"btnTicket"),Kt(this,"grade",5),Kt(this,"trans",1),this.lblTitle.y=2,this.lblHonorCoin.x=this.lblTitle.x,this.lblHonorCoin.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblHonorCoin),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.btnClose.onClick=()=>{
+ this.clickCloseBtn()}
+ ,this.addChild(this.btnClose),this.btnChange=new VB("Icon_TransMat_Change","",.9),this.btnChange.width=100,this.btnChange.color=VB.BROWN,this.btnChange.lbl.x+=3,this.btnChange.x=this.btnClose.x-this.btnChange.width-5,this.btnChange.y=.5*(this.bg.height-this.btnChange.height),this.btnChange.onClick=this.onChangeClick.bind(this),this.addChild(this.btnChange),this.btnTicket=new VB("Icon_TreasureTicket6_Change","",.8),this.btnTicket.visible=!1,this.btnTicket.width=110,this.btnTicket.color=VB.BROWN,this.btnTicket.lbl.x+=3,this.btnTicket.x=this.btnChange.x-this.btnTicket.width-3,this.btnTicket.y=.5*(this.bg.height-this.btnTicket.height),this.btnTicket.onClick=this.onTicketClick.bind(this),this.addChild(this.btnTicket)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onChangeClick(){
+ T3t.getInstance().setData(this.grade,this.trans,()=>{
+ P3t.getInstance().onChangeClick()}
+ ),T3t.getInstance().show()}
+ onTicketClick(){
+ 0!=$Vt.getInstance().getTreasureTransTicket(this.grade)?(I3t.getInstance().setData(this.grade),I3t.getInstance().show()):u2.getInstance().showMessage(SG.getValueReplace("GAME_1232","##",this.grade,`${
+ this.grade}
+ 성 유물 초월권이 없습니다.`))}
+ setData(t,i){
+ if(this.grade=t,this.trans=i,this.setTitle(SG.getValueReplace("GAME_1151","##",t,`${
+ t}
+ ★ 유물 초월`)),this.updateHonorCoin(),this.btnTicket.visible=!1,(6===t||7===t)&&1==i&&AL.getInstance().isTreasureTranscendTicket()){
+ this.btnTicket.visible=!0;
+ const i=QA.getTexture("UI_Ekkorr",7===t?"Icon_TreasureTicket7_Change":"Icon_TreasureTicket6_Change");
+ this.btnTicket.lbl.texture=i}
+ }
+ updateHonorCoin(){
+ this.lblHonorCoin.text=String(ML.honorCoin)}
+ updateLanguage(){
+ }
+ clickCloseBtn(){
+ L3t.getInstance().setData(!1),DXt.getInstance().currentSubView=L3t.getInstance()}
+ }
+ ;
+ Vt(x3t,"TreasureTransDetailSubMenu"),Kt(x3t,"instance");
+ let R3t=x3t;
+ const N3t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"slotContainer",new Ge),Kt(this,"slotIcons",[]),Kt(this,"slotCountLabels",[]),Kt(this,"lblDesc",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"btnTrans",new kU("UI_GEM","300","초월",1,200,70)),Kt(this,"btnTransTicket",new kU("Ticket_TreasureTrans6_s","0/1","초월",1,200,70)),Kt(this,"grade",5),Kt(this,"trans",1),Kt(this,"dailyAvailable",!1),Kt(this,"materialNum",0),Kt(this,"materialSatisfied",[]),Kt(this,"requestPending",!1),Kt(this,"onTransTicketDataBind"),this.addChild(this.lblDesc,this.slotContainer,this.btnTrans,this.btnTransTicket);
+ for(let t=0;
+ t<5;
+ t++){
+ const i=new Y2;
+ i.mode=z2.BOOK,i.scale.set(.85),i.eventMode="static",i.cursor="pointer";
+ const s=t;
+ i.on("pointertap",()=>{
+ this.onMaterialIconClick(s)}
+ ),this.slotIcons.push(i);
+ const e=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ this.slotCountLabels.push(e)}
+ this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=()=>this.onTransClick(),this.btnTransTicket.visible=!1,this.btnTransTicket.color=kU.GREEN,this.btnTransTicket.onClick=()=>this.onTransTicketClick(),this.addChild(R3t.getInstance()),cD.setLabelWrapWidth(this.lblDesc,580)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ get className(){
+ return"TreasureTransDetailView"}
+ setData(t,i,s){
+ this.grade=t,this.trans=i,this.dailyAvailable=s,R3t.getInstance().setData(t,i),this.lblDesc.text=SG.getText("GAME_1153","재료 영웅 3기를 소비하여 보유 유물 중 1개를 무작위로 초월합니다.");
+ const e=5===t,n=QA.getTexture("UI_Ekkorr",e?"UI_GEM":"PVP_COIN_ON"),h=cXt.getInstance();
+ this.btnTrans.iconLabel.texture=n,this.btnTrans.iconLabel.iconScale=e?.9:1,this.btnTrans.iconText=String(h.getTransCost(t,i)),this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.activated=!0,this.isAllOwnedTranscend(this.grade,this.trans)||!this.dailyAvailable?this.btnTrans.color=kU.GRAY:this.btnTrans.color=kU.GREEN,this.btnTransTicket.visible=!1,6!==t&&7!==t||1!==i||!AL.getInstance().isTreasureTranscendTicket()||(this.btnTransTicket.visible=!0,this.updateTransTicketBtn()),this.setTransTicketData(this.btnTransTicket.visible),this.refreshSlots(),this.updateLayout()}
+ updateTransTicketBtn(){
+ if(!this.btnTransTicket.visible)return;
+ const t=QA.getTexture("UI_Ekkorr",7===this.grade?"Ticket_TreasureTrans7_s":"Ticket_TreasureTrans6_s");
+ this.btnTransTicket.iconLabel.texture=t;
+ const i=this.getTransTicket();
+ this.btnTransTicket.iconText=`${
+ i}
+ /1`,this.btnTransTicket.text=SG.getText("GAME_820","초월");
+ let s=!0;
+ !this.isAllOwnedTranscend(this.grade,this.trans)&&this.dailyAvailable||(s=!1),s&&(s=this.isTransTicketActivated()),this.btnTransTicket.activated=!0,this.btnTransTicket.color=s?kU.GREEN:kU.GRAY}
+ refreshSlots(){
+ const t=cXt.getInstance().getTransMaterials(this.grade,this.trans);
+ this.materialNum=t.length,this.slotContainer.removeChildren(),this.materialSatisfied.length=0;
+ const i=t.length;
+ for(let s=0;
+ s<i;
+ s++){
+ const i=t[s]??0,e=this.slotIcons[s],n=this.slotCountLabels[s];
+ if(i>0){
+ e.setDataWithKindNum(i),this.slotContainer.addChild(e);
+ const t=wx.getInstance().ownedUnitList.find(t=>t.kindNum===i),s=(null==t?void 0:t.count)??0,h=s>=1;
+ this.materialSatisfied.push(!!h),n.text=`${
+ s}
+  / 1`,n.textColor=h?cD.DEFAULT_COLOR:16737894,this.slotContainer.addChild(n)}
+ else this.materialSatisfied.push(!1)}
+ }
+ updateLayout(){
+ const t=.5*this.width;
+ this.lblDesc.x=t-.5*this.lblDesc.width,this.lblDesc.y=100;
+ const i=this.materialNum,s=10*(6-this.materialNum),e=t-.5*(120*i+s*(i-1)),n=this.lblDesc.y+this.lblDesc.height+20;
+ for(let o=0;
+ o<i;
+ o++){
+ const t=this.slotIcons[o],i=this.slotCountLabels[o];
+ t.x=e+o*(120+s),t.y=n,i.x=t.x+.5*(120-i.width)-8,i.y=t.y+75}
+ const h=n+75+60;
+ let r=this.btnTrans.width;
+ this.btnTransTicket.visible&&(r=this.btnTrans.width+16+this.btnTransTicket.width),this.btnTrans.x=t-.5*r,this.btnTrans.y=h,this.btnTransTicket.x=this.btnTrans.x+this.btnTrans.width+16,this.btnTransTicket.y=h}
+ async onChangeClick(){
+ if(this.isAllOwnedTranscend(this.grade,this.trans))return void this.showAllOwnedTranscendMessage(this.grade,this.trans);
+ const t=cXt.getInstance(),i=t.getMatChangeCost(this.grade,this.trans);
+ if(5===this.grade){
+ if(ML.gem<i)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."))}
+ else if(ML.honorCoin<i)return void u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다."));
+ const s=await rD.getInstance().treasure.changeTransMaterials(this.grade,this.trans);
+ !1!==(null==s?void 0:s.success)?(ML.setUserInfo(s.body),t.setData(s.body.transInfo),kF.getInstance().updateAll(),this.refreshSlots(),this.updateLayout(),this.grade>5&&R3t.getInstance().updateHonorCoin(),L3t.getInstance().refresh()):wG.getInstance().showError(s)}
+ getTransTicket(){
+ return $Vt.getInstance().getTreasureTransTicket(this.grade)}
+ isTransTicketActivated(){
+ return this.getTransTicket()>0}
+ onTransTicketClick(){
+ this.requestPending||(this.isAllOwnedTranscend(this.grade,this.trans)?this.showAllOwnedTranscendMessage(this.grade,this.trans):this.dailyAvailable?this.isTransTicketActivated()?this.runTranscend(!0):u2.getInstance().showMessage(SG.getValueReplace("GAME_1232","##",this.grade,`${
+ this.grade}
+ 성 유물 초월권이 없습니다.`)):u2.getInstance().showMessage(SG.getText("GAME_1244","일일 초월 가능 횟수에 도달하였습니다.")))}
+ async onTransClick(){
+ if(this.requestPending)return;
+ if(this.isAllOwnedTranscend(this.grade,this.trans))return void this.showAllOwnedTranscendMessage(this.grade,this.trans);
+ if(!this.dailyAvailable)return void u2.getInstance().showMessage(SG.getText("GAME_1244","일일 초월 가능 횟수에 도달하였습니다."));
+ const t=cXt.getInstance(),i=t.getTransCost(this.grade,this.trans),s=5===this.grade;
+ let e=!0;
+ const n=t.getTransMaterials(this.grade,this.trans);
+ for(let h=0;
+ h<n.length;
+ ++h)if(n[h]&&n[h]>0&&!this.materialSatisfied[h]){
+ e=!1;
+ break}
+ if(!e){
+ const t=[];
+ for(let i=0;
+ i<n.length;
+ ++i)n[i]&&n[i]>0&&(this.materialSatisfied[i]||t.push(n[i]));
+ let s=!0;
+ const e=[];
+ for(let i=0;
+ i<t.length;
+ ++i){
+ const n=wx.getInstance(),h=t[i],r=n.bookList.find(t=>t.evolKindNum===h);
+ r?n.getOwnedUnitCount(r.kindNum,0)<1?s=!1:e.push(r.kindNum):n.getOwnedUnitCount(t[i],0)<1?s=!1:e.push(t[i])}
+ if(s){
+ if(ML.gem<i)return s=!1,void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."))}
+ else if(ML.honorCoin<i)return s=!1,void u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다."));
+ if(s){
+ const t=A3t.getInstance();
+ t.onEvolved=()=>{
+ this.onTransMatMultiEvolve()}
+ ,t.setData(this.grade,this.trans,e),t.show()}
+ else u2.getInstance().showMessage(SG.getText("GAME_830","재료 영웅이 부족합니다"));
+ return}
+ if(s){
+ if(ML.gem<i)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."))}
+ else if(ML.honorCoin<i)return void u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다."));
+ this.runTranscend(!1)}
+ onTransMatMultiEvolve(){
+ $zt.getInstance().validateTeam(),this.refreshSlots();
+ const t=cXt.getInstance().getTransCost(this.grade,this.trans);
+ if(5===this.grade){
+ if(ML.gem<t)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."))}
+ else if(ML.honorCoin<t)return void u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다."));
+ this.runTranscend(!1)}
+ async runTranscend(t=!1){
+ if(this.requestPending)return;
+ this.setRequestPending(!0);
+ const i=await rD.getInstance().treasure.transTreasure(this.grade,this.trans,t);
+ if(!1===(null==i?void 0:i.success))return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),Hx.getInstance().setData(i.body.treasure,i.body.dungeon),cXt.getInstance().setData(i.body.transInfo),kF.getInstance().updateAll();
+ const s=i.body.transedKindNum;
+ s&&L3t.getInstance().showResultFlowAfterTrans(s,this.grade,this.trans),this.goBack(),this.setRequestPending(!1)}
+ setRequestPending(t){
+ this.requestPending=t}
+ async onMaterialIconClick(t){
+ const i=cXt.getInstance().getTransMaterials(this.grade,this.trans)[t];
+ if(!i||i<=0)return;
+ const s=wx.getInstance(),e=s.getBookVO(i),n=e?SG.getText(e.getNameKey(),e.name):"";
+ if(s.getOwnedUnitCount(i,0)>=1)return;
+ const h=s.bookList.find(t=>t.evolKindNum===i),r=h?s.getOwnedUnitCount(h.kindNum,0):0;
+ if(h&&r>=1){
+ const t=Mqt[h.grade]??0;
+ return void y3t.getInstance().showWith(n,t,()=>{
+ this.evolveMaterialPreHero(h.kindNum)}
+ )}
+ h?u2.getInstance().showMessage(SG.getValueReplace("GAME_832","##",n,`${
+ n}
+ 으로 진화할 수 있는 영웅이 없습니다.`)):u2.getInstance().showMessage(SG.getValueReplace("GAME_831","##",n,`${
+ n}
+ 을 보유하고 있지 않습니다.`))}
+ async evolveMaterialPreHero(t){
+ const i=wx.getInstance().getBookVO(t);
+ if(!i)return;
+ const s=Mqt[i.grade]??0;
+ if(ML.gem<s)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ const e=await rD.getInstance().hero.evolveOwned(`${
+ t}
+ -1`,!0);
+ e&&!1!==e.success?(ML.setUserInfo(e.body),kF.getInstance().updateAll(),this.refreshSlots(),this.updateLayout()):wG.getInstance().showError(e)}
+ isAllOwnedTranscend(t,i){
+ const s=Hx.getInstance(),e=[...s.equipedList,...s.ownedList].filter(i=>i&&i.grade===t);
+ return 0!==e.length&&e.every(t=>(t.trans||0)>0)}
+ showAllOwnedTranscendMessage(t,i){
+ u2.getInstance().showMessage(SG.getValueReplace("GAME_1157","##",t,`보유한 ${
+ t}
+ 성 유물을 모두 초월하였습니다.`))}
+ goBack(){
+ R3t.getInstance().clickCloseBtn()}
+ onSellTransTicket(){
+ R3t.getInstance().updateHonorCoin();
+ const t=cXt.getInstance();
+ this.btnTrans.iconText=String(t.getTransCost(this.grade,this.trans)),this.updateTransTicketBtn()}
+ setTransTicketData(t){
+ cS.getInstance().removeEventListener("TransTicketData",this.onTransTicketDataBind),t&&(this.onTransTicketDataBind=this.onTransTicketData.bind(this),cS.getInstance().addEventListener("TransTicketData",this.onTransTicketDataBind))}
+ onTransTicketData(t){
+ this.updateTransTicketBtn()}
+ }
+ ;
+ Vt(N3t,"TreasureTransDetailView"),Kt(N3t,"instance");
+ let P3t=N3t;
+ const D3t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"pendingResultShown",!1),Kt(this,"lastFetchUtcDay",-1),this.list=new d5(fXt,630,VA.listHeight),this.list.x=5,this.list.y=b3t.getInstance().height,this.addChild(this.list),this.addChild(b3t.getInstance())}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ static invalidateCachedTransInfo(){
+ this.instance&&this.instance.invalidateCache()}
+ async setData(i=!0){
+ b3t.getInstance().updateLanguage(),this.pendingResultShown=!1;
+ const s=cXt.getInstance(),e=this.getCurrentUtcDay(),n=s.getData();
+ let h;
+ if(n&&this.lastFetchUtcDay===e)h=n;
+ else{
+ const t=await rD.getInstance().treasure.getTransMaterials(!1);
+ if(!1===(null==t?void 0:t.success))return void(this.list.dataProvider=[]);
+ h=t.body,s.setData(t.body),this.lastFetchUtcDay=e}
+ this.list.dataProvider=[{
+ grade:5,owned:h.grade5OwnedCount,trans:h.grade5TransCount,threshold:t.TRANS_OWN_THRESHOLD,dailyAvailable:h.grade5Available}
+ ,{
+ grade:6,owned:h.grade6OwnedCount,trans:h.grade6TransCount,threshold:t.TRANS_OWN_THRESHOLD,dailyAvailable:h.grade6Available}
+ ],i&&this.restorePendingResultIfAny(h)}
+ async refresh(){
+ this.invalidateCache(),await this.setData()}
+ invalidateCache(){
+ this.lastFetchUtcDay=-1,cXt.getInstance().setData(null)}
+ getCurrentUtcDay(){
+ const t=new Date(pN.serverTime);
+ return 1e4*t.getUTCFullYear()+100*(t.getUTCMonth()+1)+t.getUTCDate()}
+ restorePendingResultIfAny(t){
+ if(this.pendingResultShown)return;
+ const i=null==t?void 0:t.pendingTransKindNum,s=null==t?void 0:t.pendingTransGrade,e=(null==t?void 0:t.pendingTransTrans)??1;
+ i&&s&&(this.pendingResultShown=!0,!(null==t?void 0:t.pendingTransChanged)&&this.hasOtherUntransedCandidate(s,i)?this.showChoosePopup(i,s,e):this.showFinalPopup(i))}
+ hasOtherUntransedCandidate(t,i){
+ const s=Hx.getInstance();
+ return[...s.equipedList,...s.ownedList].some(s=>s&&s.grade===t&&0===(s.trans||0)&&s.kindNum!==i)}
+ showResultFlowAfterTrans(t,i,s){
+ const e=new uXt(i,t,1),n=this.hasOtherUntransedCandidate(i,t);
+ e.onComplete=()=>{
+ n?this.showChoosePopup(t,i,s):this.showFinalPopup(t)}
+ }
+ showChoosePopup(t,i,s){
+ bXt.getInstance().showChoose(t,1,()=>this.onChangeRequested(i,s),()=>this.onSelectRequested(),()=>{
+ }
+ )}
+ showFinalPopup(t){
+ bXt.getInstance().showFinal(t,1,()=>this.onSelectRequested())}
+ async onChangeRequested(t,i){
+ var s;
+ const e=cXt.getInstance(),n=await rD.getInstance().treasure.changeTransResult();
+ if(!1===(null==n?void 0:n.success)){
+ wG.getInstance().showError(n);
+ const t=(null==(s=null==n?void 0:n.body)?void 0:s.transInfo)??e.getData();
+ return void((null==t?void 0:t.pendingTransKindNum)&&(null==t?void 0:t.pendingTransGrade)&&(t.pendingTransChanged?this.showFinalPopup(t.pendingTransKindNum):this.showChoosePopup(t.pendingTransKindNum,t.pendingTransGrade,t.pendingTransTrans??1)))}
+ ML.setUserInfo(n.body),Hx.getInstance().setData(n.body.treasure,n.body.dungeon),n.body.transInfo&&e.setData(n.body.transInfo),kF.getInstance().updateAll();
+ const h=n.body.transedKindNum;
+ new uXt(t,h,1).onComplete=()=>{
+ this.showFinalPopup(h)}
+ }
+ async onSelectRequested(){
+ const t=cXt.getInstance(),i=await rD.getInstance().treasure.confirmTransResult();
+ if(!1===(null==i?void 0:i.success))return void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),Hx.getInstance().setData(i.body.treasure,i.body.dungeon),i.body.transInfo&&t.setData(i.body.transInfo),kF.getInstance().updateAll();
+ const s=i.body.transedKindNum;
+ if(s){
+ const t=Hx.getInstance().getBookDataByKindNum(s);
+ if(t){
+ const i=SG.getText(t.getNameKey(),t.name);
+ u2.getInstance().showMessage(SG.getValueReplace("GAME_1156","##",i,`[${
+ i}
+ ] 이(가) 초월되었습니다!`))}
+ }
+ this.refresh()}
+ goDetailView(t,i,s){
+ P3t.getInstance().setData(t,i,s),DXt.getInstance().currentSubView=P3t.getInstance()}
+ }
+ ;
+ Vt(D3t,"TreasureTransSubView"),Kt(D3t,"instance"),Kt(D3t,"TRANS_OWN_THRESHOLD",20);
+ let L3t=D3t;
PetSelectGuidePopup 7 hunks, 8779 statements
- super(),zt(this,"lblDesc"),zt(this,"list"),zt(this,"btnConfirm"),this.outSideClickHide=!0,this.title=AG.getText("GAME_769","영웅 선택권");
+ super(),Kt(this,"lblDesc"),Kt(this,"list"),Kt(this,"btnConfirm"),Kt(this,"onConfirm",null),this.outSideClickHide=!0,this.title=SG.getText("GAME_858","펫 선택권");
- t.fill=aD.COLOR_WHITE,this.lblDesc=new YD(AG.getText("GAME_836","영웅 선택권에서 선택 가능한 영웅 목록입니다.")+"\n"+AG.getText("GAME_837","영웅 선택권은 인벤토리에서 사용할 수 있습니다."),t.fill,t),this.lblDesc.y=80,this.addChild(this.lblDesc);
- const i=this.width-60;
+ t.fill=cD.COLOR_WHITE,this.lblDesc=new JD(SG.getText("GAME_859","펫 선택권에서 선택 가능한 펫 목록입니다.")+"\n"+SG.getText("GAME_860","펫 선택권은 인벤토리에서 사용할 수 있습니다."),t.fill,t),this.lblDesc.y=80,this.addChild(this.lblDesc);
+ const i=this.width-55;
- const s=[...i.targetKindNums],e=vx.getInstance();
+ const s=[...i.targetKindNums],e=[...i.targetAmounts];
+ if(e.length<s.length)for(let d=e.length;
+ d<s.length;
+ ++d)e.push(1);
+ const n=cx.getInstance();
- --l)n=e.getBookVO(s[l]),n||s.splice(l,1);
- this.title=AG.getText("GAME_769","영웅 선택권"),this.lblDesc.text=AG.getText("GAME_836","영웅 선택권에서 선택 가능한 영웅 목록입니다.")+"\n"+AG.getText("GAME_837","영웅 선택권은 인벤토리에서 사용할 수 있습니다."),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.list.y=this.lblDesc.y+this.lblDesc.height+20;
- let h=ZI.chunkArray(s,5);
- this.list.dataProvider=h,this.list.scrollTo(0);
+ --d)h=n.getBookVO(s[d]),h||(s.splice(d,1),e.splice(d,1));
+ this.title=SG.getText("GAME_858","펫 선택권"),this.lblDesc.text=SG.getText("GAME_859","펫 선택권에서 선택 가능한 펫 목록입니다.")+"\n"+SG.getText("GAME_860","펫 선택권은 인벤토리에서 사용할 수 있습니다."),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.list.y=this.lblDesc.y+this.lblDesc.height+20;
+ let r=[];
+ const o=s.length;
+ for(let d=0;
+ d<o;
+ ++d){
+ const t=d<e.length?e[d]:1;
+ r.push({
+ kindNum:s[d],amount:t}
+ )}
+ r=QO.chunkArray(r,7),this.list.dataProvider=r,this.list.scrollTo(0);
- let c=s.length<5?o.actualWidth:this.list.getListWidth();
+ let u=s.length<7?c.actualWidth:this.list.getListWidth();
+ show(t="",i=null,s=null){
+ super.show(t,i,s),this.onConfirm=i}
+ hide(){
+ super.hide();
+ let t=this.onConfirm;
+ this.onConfirm=null,null!==t&&t()}
- Kt(x1t,"HeroSelectGuidePopup"),zt(x1t,"_instance");
+ Vt(m$t,"PetSelectGuidePopup"),Kt(m$t,"_instance");
+ let w$t=m$t;
+ const v$t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17)),Kt(this,"btnConfirm",new eG("확인")),Kt(this,"btnCancel",new CWt("취소")),Kt(this,"onConfirm",null),Kt(this,"onCancel",null),Kt(this,"checkBox",null),Kt(this,"lblCheckbox",null),Kt(this,"checkboxVisible",!1),Kt(this,"textAlignCenter",!1),this.title="",this.lblMessage.y=90,this.contentContainer.addChild(this.lblMessage,this.btnConfirm,this.btnCancel),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.btnClose.onClick=this.onCancelClick.bind(this),cD.setLabelWrapWidth(this.lblMessage,this.width-60)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide();
+ let t=this.onConfirm;
+ this.onConfirm=null,null!==t&&t()}
+ onCancelClick(){
+ this.hide();
+ let t=this.onCancel;
+ this.onCancel=null,null!==t&&t()}
+ setCheckbox(t){
+ this.checkBox||(this.checkBox=new DWt,this.lblCheckbox=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17),this.lblCheckbox.eventMode="static",this.lblCheckbox.cursor="pointer",this.lblCheckbox.on("pointertap",()=>{
+ this.checkBox&&(this.checkBox.selected=!this.checkBox.selected)}
+ ),this.contentContainer.addChild(this.checkBox,this.lblCheckbox)),this.lblCheckbox.text=t,this.checkBox.selected=!1,this.checkboxVisible=!0}
+ get isCheckboxChecked(){
+ var t;
+ return!!(null==(t=this.checkBox)?void 0:t.selected)}
+ show(t,i=null,s=null){
+ this.onConfirm=i,this.onCancel=s,this.lblMessage.text=t,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
+ hide(){
+ super.hide(),this.title="",this.textAlignCenter=!1,this.checkboxVisible=!1,this.checkBox&&(this.checkBox.visible=!1),this.lblCheckbox&&(this.lblCheckbox.visible=!1)}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width);
+ let t=this.lblMessage.y+this.lblMessage.height+30;
+ if(this.checkboxVisible&&this.checkBox&&this.lblCheckbox){
+ this.checkBox.visible=!0,this.lblCheckbox.visible=!0;
+ const i=this.checkBox.width+10+this.lblCheckbox.width,s=.5*(this.width-i),e=this.lblMessage.y+this.lblMessage.height+20;
+ this.checkBox.x=s,this.checkBox.y=e,this.lblCheckbox.x=s+this.checkBox.width+10,this.lblCheckbox.y=e+.5*(this.checkBox.height-this.lblCheckbox.height),t=e+this.checkBox.height+24}
+ if(this.btnConfirm.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnConfirm.y=t,this.btnCancel.y=this.btnConfirm.y,this.height=this.btnConfirm.y+this.btnConfirm.height+40,this.textAlignCenter){
+ let t=this.lblMessage.getStyle();
+ t.align="center",this.lblMessage.setStyle(t)}
+ else{
+ let t=this.lblMessage.getStyle();
+ t.align="left",this.lblMessage.setStyle(t)}
+ }
+ getDefaultPositionY(){
+ return.3*VA.stageHeight}
+ onBackButton(){
+ return this.onCancelClick(),!0}
+ }
+ ;
+ Vt(v$t,"CommonConfirmPopup"),Kt(v$t,"_instance");
+ let b$t=v$t;
+ const _$t=Object.freeze(Object.defineProperty({
+ __proto__:null,CommonConfirmPopup:b$t}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ ));
+ var y$t,M$t,E$t=(t=>(t.EMPTY="",t.UNKNOWN="UNKNOWN",t.VERIFIED="VERIFIED",t.SUPERVISED="SUPERVISED",t.SUPERVISED_APPROVAL_PENDING="SUPERVISED_APPROVAL_PENDING",t.SUPERVISED_APPROVAL_DENIED="SUPERVISED_APPROVAL_DENIED",t.SHARED="SHARED",t.DECLINED="DECLINED",t.UNSUPPORTED="UNSUPPORTED",t))(E$t||{
+ }
+ );
+ (M$t=y$t||(y$t={
+ }
+ )).Unimplemented="UNIMPLEMENTED",M$t.Unavailable="UNAVAILABLE";
+ const A$t=class extends Error{
+ constructor(t,i,s){
+ super(t),this.message=t,this.code=i,this.data=s}
+ }
+ ;
+ Vt(A$t,"CapacitorException");
+ let S$t=A$t;
+ const T$t=Vt(t=>{
+ var i,s;
+ return(null==t?void 0:t.androidBridge)?"android":(null===(s=null===(i=null==t?void 0:t.webkit)||void 0===i?void 0:i.messageHandlers)||void 0===s?void 0:s.bridge)?"ios":"web"}
+ ,"getPlatformId"),C$t=Vt(t=>{
+ const i=t.CapacitorCustomPlatform||null,s=t.Capacitor||{
+ }
+ ,e=s.Plugins=s.Plugins||{
+ }
+ ,n=Vt(()=>null!==i?i.name:T$t(t),"getPlatform"),h=Vt(()=>"web"!==n(),"isNativePlatform"),r=Vt(t=>{
+ const i=c.get(t);
+ return!!(null==i?void 0:i.platforms.has(n()))||!!o(t)}
+ ,"isPluginAvailable"),o=Vt(t=>{
+ var i;
+ return null===(i=s.PluginHeaders)||void 0===i?void 0:i.find(i=>i.name===t)}
+ ,"getPluginHeader"),a=Vt(i=>t.console.error(i),"handleError"),c=new Map,l=Vt((t,h={
+ }
+ )=>{
+ const r=c.get(t);
+ if(r)return r.proxy;
+ const a=n(),l=o(t);
+ let u;
+ const d=Vt(async()=>(!u&&a in h?u=u="function"==typeof h[a]?await h[a]():h[a]:null!==i&&!u&&"web"in h&&(u=u="function"==typeof h.web?await h.web():h.web),u),"loadPluginImplementation"),f=Vt((i,e)=>{
+ var n,h;
+ if(!l){
+ if(i)return null===(h=i[e])||void 0===h?void 0:h.bind(i);
+ throw new S$t(`"${
+ t}
+ " plugin is not implemented on ${
+ a}
+ `,y$t.Unimplemented)}
+ {
+ const h=null==l?void 0:l.methods.find(t=>e===t.name);
+ if(h)return"promise"===h.rtype?i=>s.nativePromise(t,e.toString(),i):(i,n)=>s.nativeCallback(t,e.toString(),i,n);
+ if(i)return null===(n=i[e])||void 0===n?void 0:n.bind(i)}
+ }
+ ,"createPluginMethod"),p=Vt(i=>{
+ let s;
+ const e=Vt((...e)=>{
+ const n=d().then(n=>{
+ const h=f(n,i);
+ if(h){
+ const t=h(...e);
+ return s=null==t?void 0:t.remove,t}
+ throw new S$t(`"${
+ t}
+ .${
+ i}
+ ()" is not implemented on ${
+ a}
+ `,y$t.Unimplemented)}
+ );
+ return"addListener"===i&&(n.remove=async()=>s()),n}
+ ,"wrapper");
+ return e.toString=()=>`${
+ i.toString()}
+ () {
+  [capacitor code] }
+ `,Object.defineProperty(e,"name",{
+ value:i,writable:!1,configurable:!1}
+ ),e}
+ ,"createPluginMethodWrapper"),g=p("addListener"),m=p("removeListener"),w=Vt((t,i)=>{
+ const s=g({
+ eventName:t}
+ ,i),e=Vt(async()=>{
+ const e=await s;
+ m({
+ eventName:t,callbackId:e}
+ ,i)}
+ ,"remove"),n=new Promise(t=>s.then(()=>t({
+ remove:e}
+ )));
+ return n.remove=async()=>{
+ await e()}
+ ,n}
+ ,"addListenerNative"),v=new Proxy({
+ }
+ ,{
+ get(t,i){
+ switch(i){
+ case"$$typeof":return;
+ case"toJSON":return()=>({
+ }
+ );
+ case"addListener":return l?w:g;
+ case"removeListener":return m;
+ default:return p(i)}
+ }
+ }
+ );
+ return e[t]=v,c.set(t,{
+ name:t,proxy:v,platforms:new Set([...Object.keys(h),...l?[a]:[]])}
+ ),v}
+ ,"registerPlugin");
+ return s.convertFileSrc||(s.convertFileSrc=t=>t),s.getPlatform=n,s.handleError=a,s.isNativePlatform=h,s.isPluginAvailable=r,s.registerPlugin=l,s.Exception=S$t,s.DEBUG=!!s.DEBUG,s.isLoggingEnabled=!!s.isLoggingEnabled,s}
+ ,"createCapacitor"),I$t=Vt(t=>t.Capacitor=C$t(t),"initCapacitorGlobal")("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{
+ }
+ ),k$t=I$t.registerPlugin,O$t=class{
+ constructor(){
+ this.listeners={
+ }
+ ,this.retainedEventArguments={
+ }
+ ,this.windowListeners={
+ }
+ }
+ addListener(t,i){
+ let s=!1;
+ this.listeners[t]||(this.listeners[t]=[],s=!0),this.listeners[t].push(i);
+ const e=this.windowListeners[t];
+ e&&!e.registered&&this.addWindowListener(e),s&&this.sendRetainedArgumentsForEvent(t);
+ const n=Vt(async()=>this.removeListener(t,i),"remove");
+ return Promise.resolve({
+ remove:n}
+ )}
+ async removeAllListeners(){
+ this.listeners={
+ }
+ ;
+ for(const t in this.windowListeners)this.removeWindowListener(this.windowListeners[t]);
+ this.windowListeners={
+ }
+ }
+ notifyListeners(t,i,s){
+ const e=this.listeners[t];
+ if(e)e.forEach(t=>t(i));
+ else if(s){
+ let s=this.retainedEventArguments[t];
+ s||(s=[]),s.push(i),this.retainedEventArguments[t]=s}
+ }
+ hasListeners(t){
+ var i;
+ return!!(null===(i=this.listeners[t])||void 0===i?void 0:i.length)}
+ registerWindowListener(t,i){
+ this.windowListeners[i]={
+ registered:!1,windowEventName:t,pluginEventName:i,handler:Vt(t=>{
+ this.notifyListeners(i,t)}
+ ,"handler")}
+ }
+ unimplemented(t="not implemented"){
+ return new I$t.Exception(t,y$t.Unimplemented)}
+ unavailable(t="not available"){
+ return new I$t.Exception(t,y$t.Unavailable)}
+ async removeListener(t,i){
+ const s=this.listeners[t];
+ if(!s)return;
+ const e=s.indexOf(i);
+ this.listeners[t].splice(e,1),this.listeners[t].length||this.removeWindowListener(this.windowListeners[t])}
+ addWindowListener(t){
+ window.addEventListener(t.windowEventName,t.handler),t.registered=!0}
+ removeWindowListener(t){
+ t&&(window.removeEventListener(t.windowEventName,t.handler),t.registered=!1)}
+ sendRetainedArgumentsForEvent(t){
+ const i=this.retainedEventArguments[t];
+ i&&(delete this.retainedEventArguments[t],i.forEach(i=>{
+ this.notifyListeners(t,i)}
+ ))}
+ }
+ ;
+ Vt(O$t,"WebPlugin");
+ let x$t=O$t;
+ const R$t=Vt(t=>encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),"encode$1"),N$t=Vt(t=>t.replace(/(%[\dA-F]{
+ 2}
+ )+/gi,decodeURIComponent),"decode"),P$t=class extends x$t{
+ async getCookies(){
+ const t=document.cookie,i={
+ }
+ ;
+ return t.split(";
+ ").forEach(t=>{
+ if(t.length<=0)return;
+ let[s,e]=t.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");
+ s=N$t(s).trim(),e=N$t(e).trim(),i[s]=e}
+ ),i}
+ async setCookie(t){
+ try{
+ const i=R$t(t.key),s=R$t(t.value),e=t.expires?`;
+  expires=${
+ t.expires.replace("expires=","")}
+ `:"",n=(t.path||"/").replace("path=",""),h=null!=t.url&&t.url.length>0?`domain=${
+ t.url}
+ `:"";
+ document.cookie=`${
+ i}
+ =${
+ s||""}
+ ${
+ e}
+ ;
+  path=${
+ n}
+ ;
+  ${
+ h}
+ ;
+ `}
+ catch(i){
+ return Promise.reject(i)}
+ }
+ async deleteCookie(t){
+ try{
+ document.cookie=`${
+ t.key}
+ =;
+  Max-Age=0`}
+ catch(i){
+ return Promise.reject(i)}
+ }
+ async clearCookies(){
+ try{
+ const t=document.cookie.split(";
+ ")||[];
+ for(const i of t)document.cookie=i.replace(/^ +/,"").replace(/=.*/,`=;
+ expires=${
+ (new Date).toUTCString()}
+ ;
+ path=/`)}
+ catch(t){
+ return Promise.reject(t)}
+ }
+ async clearAllCookies(){
+ try{
+ await this.clearCookies()}
+ catch(t){
+ return Promise.reject(t)}
+ }
+ }
+ ;
+ Vt(P$t,"CapacitorCookiesPluginWeb");
+ let D$t=P$t;
+ k$t("CapacitorCookies",{
+ web:Vt(()=>new D$t,"web")}
+ );
+ const L$t=Vt(async t=>new Promise((i,s)=>{
+ const e=new FileReader;
+ e.onload=()=>{
+ const t=e.result;
+ i(t.indexOf(",")>=0?t.split(",")[1]:t)}
+ ,e.onerror=t=>s(t),e.readAsDataURL(t)}
+ ),"readBlobAsBase64"),G$t=Vt((t={
+ }
+ )=>{
+ const i=Object.keys(t);
+ return Object.keys(t).map(t=>t.toLocaleLowerCase()).reduce((s,e,n)=>(s[e]=t[i[n]],s),{
+ }
+ )}
+ ,"normalizeHttpHeaders"),B$t=Vt((t,i=!0)=>t?Object.entries(t).reduce((t,s)=>{
+ const[e,n]=s;
+ let h,r;
+ return Array.isArray(n)?(r="",n.forEach(t=>{
+ h=i?encodeURIComponent(t):t,r+=`${
+ e}
+ =${
+ h}
+ &`}
+ ),r.slice(0,-1)):(h=i?encodeURIComponent(n):n,r=`${
+ e}
+ =${
+ h}
+ `),`${
+ t}
+ &${
+ r}
+ `}
+ ,"").substr(1):null,"buildUrlParams"),U$t=Vt((t,i={
+ }
+ )=>{
+ const s=Object.assign({
+ method:t.method||"GET",headers:t.headers}
+ ,i),e=G$t(t.headers)["content-type"]||"";
+ if("string"==typeof t.data)s.body=t.data;
+ else if(e.includes("application/x-www-form-urlencoded")){
+ const i=new URLSearchParams;
+ for(const[s,e]of Object.entries(t.data||{
+ }
+ ))i.set(s,e);
+ s.body=i.toString()}
+ else if(e.includes("multipart/form-data")||t.data instanceof FormData){
+ const i=new FormData;
+ if(t.data instanceof FormData)t.data.forEach((t,s)=>{
+ i.append(s,t)}
+ );
+ else for(const s of Object.keys(t.data))i.append(s,t.data[s]);
+ s.body=i;
+ const e=new Headers(s.headers);
+ e.delete("content-type"),s.headers=e}
+ else(e.includes("application/json")||"object"==typeof t.data)&&(s.body=JSON.stringify(t.data));
+ return s}
+ ,"buildRequestInit"),F$t=class extends x$t{
+ async request(t){
+ const i=U$t(t,t.webFetchExtra),s=B$t(t.params,t.shouldEncodeUrlParams),e=s?`${
+ t.url}
+ ?${
+ s}
+ `:t.url,n=await fetch(e,i),h=n.headers.get("content-type")||"";
+ let r,o,{
+ responseType:a="text"}
+ =n.ok?t:{
+ }
+ ;
+ switch(h.includes("application/json")&&(a="json"),a){
+ case"arraybuffer":case"blob":o=await n.blob(),r=await L$t(o);
+ break;
+ case"json":r=await n.json();
+ break;
+ default:r=await n.text()}
+ const c={
+ }
+ ;
+ return n.headers.forEach((t,i)=>{
+ c[i]=t}
+ ),{
+ data:r,headers:c,status:n.status,url:n.url}
+ }
+ async get(t){
+ return this.request(Object.assign(Object.assign({
+ }
+ ,t),{
+ method:"GET"}
+ ))}
+ async post(t){
+ return this.request(Object.assign(Object.assign({
+ }
+ ,t),{
+ method:"POST"}
+ ))}
+ async put(t){
+ return this.request(Object.assign(Object.assign({
+ }
+ ,t),{
+ method:"PUT"}
+ ))}
+ async patch(t){
+ return this.request(Object.assign(Object.assign({
+ }
+ ,t),{
+ method:"PATCH"}
+ ))}
+ async delete(t){
+ return this.request(Object.assign(Object.assign({
+ }
+ ,t),{
+ method:"DELETE"}
+ ))}
+ }
+ ;
+ Vt(F$t,"CapacitorHttpPluginWeb");
+ let H$t=F$t;
+ var W$t,$$t,j$t,V$t;
+ k$t("CapacitorHttp",{
+ web:Vt(()=>new H$t,"web")}
+ ),($$t=W$t||(W$t={
+ }
+ )).Dark="DARK",$$t.Light="LIGHT",$$t.Default="DEFAULT",(V$t=j$t||(j$t={
+ }
+ )).StatusBar="StatusBar",V$t.NavigationBar="NavigationBar";
+ const K$t=class extends x$t{
+ async setStyle(){
+ this.unavailable("not available for web")}
+ async setAnimation(){
+ this.unavailable("not available for web")}
+ async show(){
+ this.unavailable("not available for web")}
+ async hide(){
+ this.unavailable("not available for web")}
+ }
+ ;
+ Vt(K$t,"SystemBarsPluginWeb");
+ let z$t=K$t;
+ k$t("SystemBars",{
+ web:Vt(()=>new z$t,"web")}
+ );
+ const q$t=Object.freeze(Object.defineProperty({
+ __proto__:null,Capacitor:I$t,CapacitorException:S$t,get ExceptionCode(){
+ return y$t}
+ ,get SystemBarType(){
+ return j$t}
+ ,get SystemBarsStyle(){
+ return W$t}
+ ,WebPlugin:x$t,buildRequestInit:U$t,registerPlugin:k$t}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Y$t=k$t("PlayAgeSignals"),X$t=class t{
+ constructor(){
+ Kt(this,"ageLower",-1),Kt(this,"ageUpper",-1),Kt(this,"userStatus",null),Kt(this,"ageRangeResult",null),Kt(this,"errorMessage",null),Kt(this,"requestAgeRangeCallback",null)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ async requestAgeRange(t){
+ this.requestAgeRangeCallback=t,this.ageLower=-1,this.ageUpper=-1,this.ageRangeResult=null;
+ try{
+ const t=await Y$t.check();
+ if(this.ageRangeResult=t,this.debug("Play Age Signals API - success"),this.debug(t),this.addExtras("_requestAgeRange_result",JSON.stringify(t)),1==t.status){
+ const i=parseInt(String(t.ageLower));
+ 0==isNaN(i)&&(this.ageLower=i);
+ const s=parseInt(String(t.ageUpper));
+ 0==isNaN(s)&&(this.ageUpper=s),null==t.userStatus?this.userStatus=E$t.VERIFIED:""==t.userStatus?this.userStatus=E$t.UNKNOWN:this.userStatus=t.userStatus,this.onRequestAgeRangeCallback(!0)}
+ else t.errorMessage.toLowerCase().includes("not yet implemented")?(this.userStatus=E$t.VERIFIED,this.errorMessage=null,this.onRequestAgeRangeCallback(!0)):(this.userStatus=E$t.UNKNOWN,this.errorMessage=this.getMessageFromErrorCode(t.errorCode,t.errorMessage),this.onRequestAgeRangeCallback(!1))}
+ catch(i){
+ this.debug("Play Age Signals API - fail"),this.debug(i),this.addExtras("_requestAgeRange_error",JSON.stringify(i)),this.onRequestAgeRangeCallback(!1)}
+ }
+ checkApproved(t){
+ return this.debug(""),this.debug("AgeRangeObjectAOS, checkApproved()"),this.debug(" -> this.userStatus : "+this.userStatus),this.debug(" -> this.ageUpper : "+this.ageUpper),this.debug(" -> ageUpperLimit : "+t),this.addExtras("_checkApproved_userStatus",""+this.userStatus),this.addExtras("_checkApproved_ageUpper",""+this.ageUpper),this.addExtras("_checkApproved_ageUpperLimit",""+t),null==this.userStatus?{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (N)"}
+ :this.userStatus==E$t.UNKNOWN?{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (U)"}
+ :this.userStatus==E$t.VERIFIED||this.userStatus!=E$t.SUPERVISED_APPROVAL_DENIED&&this.userStatus!=E$t.SUPERVISED_APPROVAL_PENDING||this.ageUpper>t?{
+ approved:!0,errorMessage:""}
+ :{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_23","이 기능은 보호자 승인 전까지 이용할 수 없습니다.")}
+ }
+ async isEligibleForAgeFeatures(){
+ return null}
+ getMessageFromErrorCode(t,i){
+ let s=SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
+ switch(t){
+ case"API_NOT_AVAILABLE":s=SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (NA)";
+ break;
+ case"PLAY_STORE_NOT_FOUND":s=SG.getText("AGE_RANGE_14","이 기기에서 Play 스토어를 찾을 수 없습니다. 설치 또는 활성화 후 다시 시도해 주세요.");
+ break;
+ case"NETWORK_ERROR":s=SG.getText("AGE_RANGE_15","네트워크 연결에 문제가 있습니다. 인터넷 상태를 확인해 주세요.");
+ break;
+ case"PLAY_SERVICES_NOT_FOUND":s=SG.getText("AGE_RANGE_16","Google Play 서비스가 없거나 사용할 수 없습니다. 설치 및 활성화 여부를 확인해 주세요.");
+ break;
+ case"CANNOT_BIND_TO_SERVICE":s=SG.getText("AGE_RANGE_17","Play 스토어 서비스에 연결할 수 없습니다. Play 스토어 앱 업데이트 후 다시 시도해 주세요.");
+ break;
+ case"PLAY_STORE_VERSION_OUTDATED":s=SG.getText("AGE_RANGE_18","Play 스토어 앱 버전이 오래되었습니다. 최신 버전으로 업데이트해 주세요.");
+ break;
+ case"PLAY_SERVICES_VERSION_OUTDATED":s=SG.getText("AGE_RANGE_19","Google Play 서비스 버전이 오래되었거나 지원되지 않습니다. 업데이트해 주세요.");
+ break;
+ case"CLIENT_TRANSIENT_ERROR":s=SG.getText("AGE_RANGE_20","일시적인 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.");
+ break;
+ case"APP_NOT_OWNED":s=SG.getText("AGE_RANGE_21","이 앱은 Google Play에서 설치되지 않았습니다. Google Play에서 정식 버전을 설치해 주세요.");
+ break;
+ case"INTERNAL_ERROR":s=SG.getText("AGE_RANGE_22","알 수 없는 오류가 발생했습니다.(IE) 다시 시도해 주세요. 계속 발생한다면 고객센터에 문의해 주세요.");
+ break;
+ case"SDK_VERSION_OUTDATED":s=SG.getText("AGE_RANGE_22","알 수 없는 오류가 발생했습니다.(SVO) 다시 시도해 주세요. 계속 발생한다면 고객센터에 문의해 주세요.")}
+ return CL.getInstance().development&&(s+="\n"+i),s}
+ onRequestAgeRangeCallback(t){
+ const i=this.requestAgeRangeCallback;
+ this.requestAgeRangeCallback=null,i&&i(t)}
+ addExtras(t,i){
+ mN.addExtraParams(t,i)}
+ debug(t){
+ CL.getInstance().development}
+ }
+ ;
+ Vt(X$t,"AgeRangeObjectAOS"),Kt(X$t,"instance");
+ let J$t=X$t;
+ const Q$t=k$t("DeclaredAgeRangePlugin"),Z$t=class t{
+ constructor(){
+ Kt(this,"ageLower",-1),Kt(this,"ageUpper",-1),Kt(this,"userStatus",null),Kt(this,"ageRangeResult",null),Kt(this,"errorMessage",null),Kt(this,"requestAgeRangeCallback",null)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ async requestAgeRange(t){
+ this.requestAgeRangeCallback=t,this.ageRangeResult=null,this.ageLower=-1,this.ageUpper=-1;
+ let i=!0;
+ const s=AL.getInstance().getClientData("AGE_RANGE_IGNORE_ELIGIBLE_IOS");
+ if(s&&"Y"==s&&(i=!1),i)try{
+ const t=await Q$t.isEligibleForAgeFeatures();
+ if(this.debug("Declared Age Range API / isEligibleForAgeFeatures - success"),this.debug(t),this.addExtras("_isEligibleForAgeFeatures_result",JSON.stringify(t)),t&&"status"in t&&"eligible"in t&&1==t.status&&0==t.eligible)return this.userStatus=E$t.VERIFIED,void this.onRequestAgeRangeCallback(!0)}
+ catch(e){
+ this.debug("Declared Age Range API / isEligibleForAgeFeatures - error"),this.debug(JSON.stringify(e)),this.addExtras("_isEligibleForAgeFeatures_error",JSON.stringify(e))}
+ try{
+ let t=[13,16,18],i=AL.getInstance().getClientData("AGE_RANGE_AGE_GATE_IOS");
+ i&&(t=QO.convertToNumber(i.split("|")));
+ const s=await Q$t.requestAgeRange({
+ ageGates:t}
+ );
+ if(this.ageRangeResult=s,this.debug("Declared Age Range API / requestAgeRange - success"),this.debug(s),this.addExtras("_requestAgeRange_result",JSON.stringify(s)),1==s.status){
+ const t=parseInt(String(s.lowerBound));
+ 0==isNaN(t)&&(this.ageLower=t);
+ const i=parseInt(String(s.upperBound));
+ 0==isNaN(i)&&(this.ageUpper=i),null==s.userStatus||""==s.userStatus?this.userStatus=E$t.UNKNOWN:this.userStatus=s.userStatus.toUpperCase(),this.onRequestAgeRangeCallback(!0)}
+ else s.errorMessage.toLowerCase().includes("not yet implemented")?(this.userStatus=E$t.VERIFIED,this.errorMessage=null,this.onRequestAgeRangeCallback(!0)):(this.userStatus=E$t.UNKNOWN,this.errorMessage=this.getMessageFromErrorCode(s.errorCode,s.errorMessage),this.onRequestAgeRangeCallback(!1))}
+ catch(e){
+ this.debug("Declared Age Range API / requestAgeRange - error"),this.debug(e),this.addExtras("_requestAgeRange_error",JSON.stringify(e)),this.onRequestAgeRangeCallback(!1)}
+ }
+ checkApproved(t){
+ return this.debug(""),this.debug("AgeRangeObjectIOS, checkApproved()"),this.debug(" -> this.userStatus : "+this.userStatus),this.debug(" -> this.ageUpper : "+this.ageUpper),this.debug(" -> ageUpperLimit : "+t),this.addExtras("_checkApproved_userStatus",""+this.userStatus),this.addExtras("_checkApproved_ageUpper",""+this.ageUpper),this.addExtras("_checkApproved_ageUpperLimit",""+t),null==this.userStatus?{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (N)"}
+ :this.userStatus==E$t.UNKNOWN?{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (U)"}
+ :this.userStatus==E$t.UNSUPPORTED?{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (U2)"}
+ :this.userStatus==E$t.VERIFIED?{
+ approved:!0,errorMessage:""}
+ :this.userStatus==E$t.DECLINED?{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_9","연령 정보 제공에 동의하지 않아 일부 기능이 제한됩니다.")}
+ :this.ageUpper>t?{
+ approved:!0,errorMessage:""}
+ :{
+ approved:!1,errorMessage:SG.getText("AGE_RANGE_6","연령 기준에 따라 이 기능의 이용이 제한됩니다.")}
+ }
+ async isEligibleForAgeFeatures(){
+ this.debug(""),this.debug("AgeRangeObjectIOS, isEligibleForAgeFeatures()");
+ try{
+ const t=await Q$t.isEligibleForAgeFeatures();
+ return this.debug("AgeRangeObjectIOS, isEligibleForAgeFeatures() - success"),this.debug(t),t}
+ catch(t){
+ this.debug("AgeRangeObjectIOS, isEligibleForAgeFeatures() - error"),this.debug(t)}
+ return null}
+ getMessageFromErrorCode(t,i){
+ let s=SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
+ return"NOT_AVAILABLE"===t&&(s=SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (NA)"),CL.getInstance().development&&(s+="\n"+i),s}
+ onRequestAgeRangeCallback(t){
+ const i=this.requestAgeRangeCallback;
+ this.requestAgeRangeCallback=null,i&&i(t)}
+ addExtras(t,i){
+ mN.addExtraParams(t,i)}
+ debug(t){
+ CL.getInstance().development}
+ }
+ ;
+ Vt(Z$t,"AgeRangeObjectIOS"),Kt(Z$t,"instance");
+ let tjt=Z$t;
+ const ijt=class t{
+ constructor(){
+ Kt(this,"_activated",!0),Kt(this,"_ageRangeYn","Y"),Kt(this,"_ageRangeStartDate",null),Kt(this,"_ageUpperLimit",15)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get activated(){
+ return this._activated}
+ setConfig(t){
+ this.debug(""),this.debug("AgeRangeManager, setConfig()"),this.debug(t);
+ const i=AL.getInstance();
+ if("capacitor"!=i.envPlatform)return void(this._activated=!1);
+ if(!t)return;
+ if(this.debug(t),i.isGoogleClientKr()){
+ if("AGE_RANGE_YN_AOS_KR"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_AOS_KR,"N"==this._ageRangeYn))return void(this._activated=!1)}
+ else if(i.isGoogleClient()){
+ if("AGE_RANGE_YN_AOS_GB"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_AOS_GB,"N"==this._ageRangeYn))return void(this._activated=!1)}
+ else if(i.isAppleClientKr()){
+ if("AGE_RANGE_YN_IOS_KR"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_IOS_KR,"N"==this._ageRangeYn))return void(this._activated=!1)}
+ else if(i.isAppleClient()&&"AGE_RANGE_YN_IOS_GB"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_IOS_GB,"N"==this._ageRangeYn))return void(this._activated=!1);
+ let s="2026-03-01T00:00:00.000Z";
+ i.isGoogleClientKr()||i.isAppleClientKr()?"AGE_RANGE_START_DATE_KR"in t&&(s=t.AGE_RANGE_START_DATE_KR):"AGE_RANGE_START_DATE_GB"in t&&(s=t.AGE_RANGE_START_DATE_GB);
+ try{
+ this._ageRangeStartDate=new Date(s),pN.serverTime<this._ageRangeStartDate.getTime()?this._activated=!1:this._activated=!0}
+ catch(n){
+ this._activated=!1}
+ let e=15;
+ "AGE_RANGE_UPPER_LIMIT"in t&&(e=parseInt(t.AGE_RANGE_UPPER_LIMIT),isNaN(e)&&(e=15)),this._ageUpperLimit=e}
+ updateConfig(){
+ this.debug(""),this.debug("AgeRangeManager, updateConfig()"),this.debug(" -> this._ageRangeStartDate : "+this._ageRangeStartDate),this.debug(" -> 1 > this._activated : "+this._activated),this.debug(" -> UserInfoManager.regDate : "+ML.regTime),null!=this._ageRangeStartDate&&(this._activated&&new Date(ML.regTime).getTime()<this._ageRangeStartDate.getTime()&&(this._activated=!1),this.debug(" -> 2 > this._activated : "+this._activated),this.debug(""))}
+ getObject(){
+ const t=AL.getInstance();
+ return t.isAppleClientKr()||t.isAppleClient()?tjt.getInstance():t.isGoogleClientKr()||t.isGoogleClient()?J$t.getInstance():null}
+ checkApproved(){
+ if(this.debug(""),this.debug("AgeRangeManager, checkApproved()"),this.debug(" -> this._activated : "+this._activated),this.debug(" -> this._ageRangeYn : "+this._ageRangeYn),this.debug(" -> this._ageRangeStartDate : "+this._ageRangeStartDate),this.debug(" -> this._ageUpperLimit : "+this._ageUpperLimit),this.debug(""),0==this._activated)return{
+ approved:!0,errorMessage:""}
+ ;
+ const t=this.getObject();
+ return t?t.checkApproved(this._ageUpperLimit):{
+ approved:!0,errorMessage:""}
+ }
+ requestAgeRange(t){
+ if(this.debug(""),this.debug("AgeRangeManager, requestAgeRange()"),this.debug(" -> this._activated : "+this._activated),0==this._activated)return this.debug("AgeRangeManager, requestAgeRange() - 1"),void(null!=t&&t(!1));
+ const i=this.getObject();
+ i?(this.debug("AgeRangeManager, requestAgeRange() - 2"),i.requestAgeRange(t)):(this.debug("AgeRangeManager, requestAgeRange() - 3"),null!=t&&t(!1))}
+ async isEligibleForAgeFeatures(){
+ if(this.debug(""),this.debug("AgeRangeManager, isEligibleForAgeFeatures()"),this.debug(" -> this._activated : "+this._activated),0==this._activated)return this.debug("AgeRangeManager, isEligibleForAgeFeatures() - 1"),null;
+ const t=this.getObject();
+ return t?(this.debug("AgeRangeManager, isEligibleForAgeFeatures() - 2"),await t.isEligibleForAgeFeatures()):(this.debug("AgeRangeManager, isEligibleForAgeFeatures() - 3"),null)}
+ debug(t){
+ CL.getInstance().development}
+ }
+ ;
+ Vt(ijt,"AgeRangeManager"),Kt(ijt,"_instance");
+ let sjt=ijt;
+ const ejt=class t extends tN{
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ constructor(){
+ super(),this.sp.x=.5*-this.sp.width,this.sp.y=.5*-this.sp.height}
+ getTextures(){
+ return QA.getTextures("Loading","loading_circle_elf_60f_")}
+ }
+ ;
+ Vt(ejt,"PaymentLoadingEffect2"),Kt(ejt,"_instance");
+ let njt=ejt;
+ const hjt=class t{
+ constructor(){
+ Kt(this,"_productId",-1)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ get productId(){
+ return this._productId}
+ async buyProduct(t){
+ const i=t5.getInstance().getByProductId(t);
+ if(!i)return;
+ let s="",e="";
+ const n=ML.currentServer,h=AL.getInstance();
+ if(h.isGoogleClient()||h.isAppleClient()?2==n&&(s=SG.getText("COMMON_546","[오늘도 환생 2] 국내 버전에서 결제를 이용해 주세요."),e=h.isGoogleClient()?h.getGoogleKrLink():h.getAppleKrLink()):(h.isGoogleClientKr()||h.isAppleClientKr())&&3==n&&(s=SG.getText("COMMON_545","[Endless Frontier 2] 글로벌 버전에서 결제를 이용해 주세요."),e=h.isGoogleClientKr()?h.getGoogleGbLink():h.getAppleGbLink()),s){
+ const t=e5.getInstance();
+ return t.hideCloseBtn(),void t.show(s,()=>{
+ e&&window.open(e,"_blank")}
+ )}
+ if(i.usdPrice>=90)try{
+ const t=sjt.getInstance().checkApproved();
+ if(0==t.approved)return void wG.getInstance().show(t.errorMessage)}
+ catch(r){
+ const t=SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
+ return void wG.getInstance().show(t)}
+ if(-1==this._productId){
+ njt.getInstance().show(),this._productId=t;
+ try{
+ const s=UL();
+ if(0==s.supportsPurchase())return void(await this.testBuyProduct(t));
+ if(0==i.price)return void(await this.buyFreeProduct(t));
+ let e=s.platformType;
+ if("capacitor"==e){
+ const{
+ Capacitor:t}
+ =await Xt(async()=>{
+ const{
+ Capacitor:t}
+ =await Promise.resolve().then(()=>q$t);
+ return{
+ Capacitor:t}
+ }
+ ,void 0);
+ "ios"===t.getPlatform()?e="apple":"android"===t.getPlatform()&&(e="google")}
+ const n=t5.getInstance().getStoreProductIdByProductId(this._productId);
+ await rD.getInstance().shop.paymentAttempt(this._productId,e,n);
+ const h="toss"===s.platformType?i.sku:String(i.productId);
+ if(!h)return void this.onPaymentCancel();
+ const o=await s.purchase(h,i.price);
+ if(!o.success){
+ if(this.onPaymentCancel(),"USER_CANCELED"!==o.error){
+ let t=SG.getText("COMMON_109","결제 중 오류가 발생했습니다.");
+ o.error&&(t+=`\n(${
+ o.error}
+ )`),wG.getInstance().show(t)}
+ return}
+ this.trackPurchase(t);
+ const a=this._productId;
+ let c;
+ try{
+ c=structuredClone(i)}
+ catch(r){
+ c=JSON.parse(JSON.stringify(i))}
+ if(this.onPaymentCancel(),o.serverData){
+ const t=o.serverData;
+ ML.setUserInfo(t,!1),kF.getInstance().updateAll(),t.products&&t5.getInstance().setAvailProducts(t.products)}
+ const l=t5.getInstance().getRewardMessage(o.rewardTypes);
+ wG.getInstance().show(l),cS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ productId:a,productVo:c}
+ );
+ let u=!1;
+ for(const t of c.rewards)"instant"==t.type&&"petTicket"==t.subType&&(u=!0);
+ u&&this.updatePetTicket()}
+ catch(r){
+ this.onPaymentCancel(),wG.getInstance().show((null==r?void 0:r.message)||"결제 오류")}
+ }
+ else wG.getInstance().show(SG.getText("COMMON_112","진행중인 결제가 완료된 후에 시도해 주세요."))}
+ async trackPurchase(t){
+ const i=t5.getInstance().getByProductId(t);
+ if(!i)return;
+ const s=AL.getInstance();
+ if("capacitor"==s.envPlatform){
+ const{
+ appsFlyer:n,withTimeoutAf:h}
+ =await Xt(async()=>{
+ const{
+ appsFlyer:t,withTimeoutAf:i}
+ =await Promise.resolve().then(()=>$ui);
+ return{
+ appsFlyer:t,withTimeoutAf:i}
+ }
+ ,void 0),r=s.getTimeoutMilliSeconds();
+ try{
+ let s=i.usdPrice;
+ 0==s&&(s=t5.getInstance().getUsdPriceByKrwPrice(i.price)),await h(n.trackPurchase(String(t),i.usdPrice,"USD"),"af_in_app_purchase",r)}
+ catch(e){
+ }
+ const{
+ AnalyticsManager:o}
+ =await Xt(async()=>{
+ const{
+ AnalyticsManager:t}
+ =await Promise.resolve().then(()=>Yui);
+ return{
+ AnalyticsManager:t}
+ }
+ ,void 0);
+ o.getInstance().trackPurchase(i.productId,i.usdPrice,"USD")}
+ }
+ async buyFreeProduct(t){
+ try{
+ const i=await rD.getInstance().shop.confirmFreePayment(t);
+ this.onBuyProductComplete(t,i)}
+ catch(i){
+ this.onPaymentCancel(),wG.getInstance().show((null==i?void 0:i.message)||"테스트 구매 오류")}
+ }
+ async testBuyProduct(t){
+ try{
+ const i=await rD.getInstance().shop.testBuyProduct(t);
+ this.onBuyProductComplete(t,i)}
+ catch(i){
+ this.onPaymentCancel(),wG.getInstance().show((null==i?void 0:i.message)||"테스트 구매 오류")}
+ }
+ onBuyProductComplete(t,i){
+ var s;
+ try{
+ const n=t,h=t5.getInstance().getByProductId(t);
+ let r;
+ try{
+ r=structuredClone(h)}
+ catch(e){
+ r=JSON.parse(JSON.stringify(h))}
+ if(this.onPaymentCancel(),!(null==i?void 0:i.success))return void wG.getInstance().showError(i);
+ i.body&&(ML.setUserInfo(i.body,!1),kF.getInstance().updateAll(),i.body.products&&t5.getInstance().setAvailProducts(i.body.products));
+ const o=t5.getInstance().getRewardMessage(null==(s=i.body)?void 0:s.rewardTypes);
+ wG.getInstance().show(o),cS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ productId:n,productVo:r}
+ );
+ let a=!1;
+ for(const t of r.rewards)"instant"==t.type&&"petTicket"==t.subType&&(a=!0);
+ a&&this.updatePetTicket()}
+ catch(e){
+ this.onPaymentCancel(),wG.getInstance().show((null==e?void 0:e.message)||"테스트 구매 오류")}
+ }
+ onPaymentCancel(){
+ this._productId=-1,njt.getInstance().hide()}
+ async updatePetTicket(){
+ const{
+ SpiritLandDataManager:t}
+ =await Xt(async()=>{
+ const{
+ SpiritLandDataManager:t}
+ =await Promise.resolve().then(()=>_L);
+ return{
+ SpiritLandDataManager:t}
+ }
+ ,void 0);
+ t.getInstance().isDataLoaded=!1}
+ }
+ ;
+ Vt(hjt,"InAppPurchaseManager"),Kt(hjt,"instance");
+ let rjt=hjt;
+ const ojt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"lbl"),Kt(this,"line"),Kt(this,"icon2"),Kt(this,"lbl2"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
+ ),this.bg.width=530,this.bg.height=100,this.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Ekkorr","UNIT_NPC_2")),this.icon.scale=.7,this.icon.x=10,this.icon.y=10,this.addChild(this.icon);
+ const t=cD.DEFAULT_FONT_OPTION_17;
+ t.fill=cD.DEFAULT_COLOR,t.fontWeight="normal",this.lbl=new JD("",t.fill,t),this.lbl.x=this.icon.x+this.icon.width+10,this.lbl.y=20,this.addChild(this.lbl),cD.setLabelWrapWidth(this.lbl,this.bg.width-this.lbl.x-10),this.line=new He(QA.getTexture("UI_Ekkorr","blackRect")),this.line.width=this.bg.width-40,this.line.height=1,this.line.x=.5*(this.bg.width-this.line.width),this.addChild(this.line),this.icon2=new He(QA.getTexture("UI_Ekkorr","UNIT_NPC_1")),this.icon2.scale=this.icon.scale,this.icon2.x=this.icon.x,this.icon2.y=this.icon.y,this.addChild(this.icon2),this.lbl2=new JD("",t.fill,t),this.lbl2.x=this.lbl.x,this.lbl2.y=this.lbl.y,this.addChild(this.lbl2),cD.setLabelWrapWidth(this.lbl2,this.bg.width-this.lbl2.x-10)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(){
+ const t=Vt((t,i)=>SG.getText(t,i),"_t"),i=Vt((t,i,s)=>SG.getValueReplace(t,"##",i,s),"_tv"),s=[`# ${
+ t("GAME_916","전문 비서 (이오스)")}
+ `,`  - ${
+ i("GAME_917",4,"영웅 모집 : 1시간마다 4명")}
+ `,`  - ${
+ t("GAME_918","영웅 슬롯 :")}
+  96`,`  - ${
+ i("GAME_919","15~30","자원 : 1시간마다 15~30개의 보석과 명예코인 획득")}
+ `];
+ this.lbl.text=s.join("\n");
+ const e=[`# ${
+ t("GAME_915","일반 비서 (로라)")}
+ `,`  - ${
+ i("GAME_917",2,"영웅 모집 : 1시간마다 2명")}
+ `,`  - ${
+ t("GAME_918","영웅 슬롯 :")}
+  24`,`  - ${
+ i("GAME_919","7~15","자원 : 1시간마다 7~15개의 보석과 명예코인 획득")}
+ `];
+ this.lbl2.text=e.join("\n"),this.line.y=this.lbl.y+this.lbl.height+20,this.icon2.y=this.lbl2.y=this.line.y+20;
+ const n=Math.max(this.lbl2.y+this.lbl2.height+this.lbl.y,this.icon2.y+this.icon2.height+this.icon.y);
+ this.bg.height=n}
+ }
+ ;
+ Vt(ojt,"ShopGuideSecretary");
+ let ajt=ojt;
+ const cjt=class extends cG{
+ constructor(){
+ super(),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblDesc",new JD("",13421772,cD.DEFAULT_DESC_FONT_OPTION_16)),Kt(this,"lblRewardsTitle",new JD("",16750848,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"rewardContainer",new Ge),Kt(this,"rewardPool",[]),Kt(this,"activeCount",0),Kt(this,"btnBuy"),Kt(this,"btnRedGem"),Kt(this,"guideSecretary"),Kt(this,"inventoryContainer"),Kt(this,"inventoryBg"),Kt(this,"inventoryItems",[]),Kt(this,"inventoryLabel"),Kt(this,"inventoryLabelIcon"),Kt(this,"inventoryIcon"),Kt(this,"data",null),Kt(this,"purchasing",!1),Kt(this,"requestPending",!1),this.outSideClickHide=!0;
+ for(let i=0;
+ i<5;
+ i++){
+ const t=new r5;
+ t.visible=!1,this.rewardPool.push(t),this.rewardContainer.addChild(t)}
+ this.contentContainer.addChild(this.lblName,this.lblDesc,this.lblRewardsTitle,this.rewardContainer),cD.setLabelWrapWidth(this.lblDesc,this.width-60),this.btnBuy=new zWt("구매",120),this.btnBuy.visible=!1,this.btnBuy.color=ZL.BROWN,this.btnBuy.height=55,this.btnBuy.width=120,this.addChild(this.btnBuy),this.btnBuy.onClick=this.onBuyClick.bind(this),this.btnRedGem=new VB("UI_RED_GEM_ICON","0"),this.btnRedGem.visible=!1,this.btnRedGem.color=ZL.BROWN,this.btnRedGem.height=this.btnBuy.height,this.btnRedGem.width=this.btnBuy.width,this.addChild(this.btnRedGem),this.btnRedGem.onClick=this.onRedGemClick.bind(this),this.inventoryContainer=new Ge,this.inventoryContainer.visible=!1,this.contentContainer.addChild(this.inventoryContainer),this.inventoryBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.inventoryBg.width=this.width-60,this.inventoryContainer.addChild(this.inventoryBg),this.inventoryLabelIcon=new He(QA.getTexture("UI_Ekkorr","Icon_alarm_check_green")),this.inventoryContainer.addChild(this.inventoryLabelIcon);
+ const t=cD.DEFAULT_FONT_OPTION_17;
+ t.fill=12966763,t.fontWeight="normal",this.inventoryLabel=new JD("아래 아이템은 우편 수령 후 인벤토리에 보관됩니다.",t.fill,t),this.inventoryLabel.x=this.inventoryLabelIcon.width+5,this.inventoryContainer.addChild(this.inventoryLabel),cD.setLabelWrapWidth(this.inventoryLabel,this.inventoryBg.width-this.inventoryLabel.x-10),this.inventoryIcon=new He(QA.getTexture("UI_Ekkorr","Inventory_Icon_Bag")),this.inventoryIcon.x=.5*(110-this.inventoryIcon.width),this.inventoryContainer.addChild(this.inventoryIcon)}
+ showProduct(t,i=.45){
+ this.data=null,this.outSideClickHide=!0,this.update(t),this.btnBuy.visible=!1,this.btnRedGem.visible=!1,this.updateLayout(),this.setPositonRatioY(i),super.show()}
+ buyProduct(t,i=.45){
+ this.data=t,this.outSideClickHide=!1,this.update(t);
+ const s=t5.getInstance();
+ this.btnBuy.text=s.getPriceStr(t.productId),this.btnRedGem.text=String(s.getRedGemPrice(t.productId)),this.btnBuy.visible=!0,this.btnRedGem.visible=t.price>0,this.updateLayout(),this.setPositonRatioY(i),super.show()}
+ update(t){
+ const i=SG.getText(`PRODUCT_NAME_${
+ t.id}
+ `,t.name??""),s=Math.max(60,this.width-60);
+ if(cD.setLabelWrapWidth(this.lblName,s),cD.setLabelWrapWidth(this.lblDesc,s),this.title=i,this.lblName.text=i,t.descriptionLangIds){
+ const i=t.descriptionLangIds.split("|").map(t=>SG.getText(t.trim(),""));
+ this.lblDesc.text=i.filter(t=>t).join("\n")||t.descriptions||""}
+ else this.lblDesc.text=(t.descriptions??"").replace(/\\n/g,"\n");
+ const e=(t.rewards??[]).map((t,i,s)=>"instant"===t.type&&"dungeonTicket"===t.subType?{
+ ...t,type:"dungeonTicket"}
+ :"buff"===t.type&&s.length>1?{
+ ...t,type:t.subType}
+ :t).filter(t=>"buff"!==t.type&&"bonusGem"!==t.type&&"pass"!==t.type);
+ this.buildRewards(e);
+ const n=e.length>0;
+ this.lblRewardsTitle.visible=!1,this.rewardContainer.visible=n,t.productId==Q2.Secretary||t.productId==Q2.Secretary_Day30?(this.guideSecretary||(this.guideSecretary=new ajt,this.addChild(this.guideSecretary)),this.guideSecretary.setData(),this.guideSecretary.visible=!0):this.guideSecretary&&(this.guideSecretary.visible=!1),this.updateInventoryContainer(t)}
+ updateInventoryContainer(t){
+ const i=(t.rewards??[]).filter(t=>"ticket"===t.type);
+ if(0==i.length)return void(this.inventoryContainer.visible=!1);
+ let s;
+ this.inventoryLabel.text=SG.getText("GAME_1249","아래 아이템은 우편 수령 후 인벤토리에 보관됩니다."),this.inventoryBg.y=Math.max(this.inventoryLabelIcon.height,this.inventoryLabel.height+this.inventoryLabel.y)+5,this.inventoryIcon.y=this.inventoryBg.y+.5*(this.inventoryBg.height-this.inventoryIcon.height),this.inventoryContainer.children.length>4&&this.inventoryContainer.removeChildren(4);
+ let e=150,n=this.inventoryBg.y+12;
+ const h=i.length;
+ for(let r=0;
+ r<h;
+ ++r)r<this.inventoryItems.length?s=this.inventoryItems[r]:(s=new r5,s.scale=.85,this.inventoryItems.push(s)),s.hideAmount(),s.setDataFrom(i[r]),s.x=e,s.y=n,this.inventoryContainer.addChild(s),e+=s.width+20;
+ this.inventoryContainer.visible=!0}
+ buildRewards(t){
+ for(const e of this.rewardPool)e.visible=!1,this.setItemEvent(e,!1);
+ this.activeCount=Math.min(t.length,this.rewardPool.length);
+ for(let e=0;
+ e<this.activeCount;
+ e++){
+ const i=this.rewardPool[e];
+ i.setDataFrom(t[e]),i.visible=!0,this.setItemEvent(i,!0)}
+ let i=0;
+ for(let e=0;
+ e<this.activeCount;
+ e++)i+=this.rewardPool[e].width;
+ i+=10*Math.max(0,this.activeCount-1);
+ let s=.5*(this.width-i);
+ for(let e=0;
+ e<this.activeCount;
+ e++)this.rewardPool[e].x=s,s+=this.rewardPool[e].width+10}
+ updateLayout(){
+ this.lblName.x=Math.max(30,.5*(this.width-this.lblName.width)),this.lblName.y=80,this.lblDesc.x=Math.max(30,.5*(this.width-this.lblDesc.width)),this.lblDesc.y=this.lblName.y+this.lblName.height+12,this.rewardContainer.y=this.lblDesc.y+this.lblDesc.height+20,this.btnRedGem.visible?(this.btnRedGem.x=.5*(this.width-this.btnRedGem.width-this.btnBuy.width-20),this.btnBuy.x=this.btnRedGem.x+this.btnRedGem.width+20):this.btnBuy.x=.5*(this.width-this.btnBuy.width);
+ const t=this.activeCount>0?this.rewardPool[0].height:0;
+ let i=this.rewardContainer.y+t+45;
+ this.guideSecretary&&this.guideSecretary.visible&&(this.guideSecretary.x=.5*(this.width-this.guideSecretary.width),this.guideSecretary.y=this.lblDesc.y+this.lblDesc.height+20,i+=this.guideSecretary.height),this.btnBuy.visible&&(this.btnBuy.y=i,this.btnRedGem.y=i,i+=this.btnBuy.height+40),this.inventoryContainer&&this.inventoryContainer.visible&&(this.inventoryContainer.x=.5*(this.width-this.inventoryContainer.width),this.inventoryContainer.y=i,i+=this.inventoryContainer.height+30),this.height=i}
+ async onBuyClick(){
+ try{
+ if(!this.data)return;
+ if(this.purchasing)return;
+ this.purchasing=!0,await rjt.getInstance().buyProduct(this.data.productId),this.purchasing=!1}
+ catch(Xst){
+ this.purchasing=!1}
+ finally{
+ this.hide()}
+ }
+ async onRedGemClick(){
+ if(!this.data)return;
+ const t=t5.getInstance(),i=t.getRedGemPrice(this.data.productId);
+ if(ML.redGem<i)return void wG.getInstance().show(SG.getText("GAME_952","붉은 보석이 부족합니다."));
+ const s=SG.getValueReplace("GAME_950","##",t.getRedGemPrice(this.data.productId),"붉은 보석 ##개를 소모하여 상품을 구매하시겠습니까?"),e=b$t.getInstance();
+ e.setPositonRatioY(.45),e.show(s,this.onRedGemConfirm.bind(this))}
+ async onRedGemConfirm(){
+ var t;
+ if(!this.data)return;
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ let i=await rD.getInstance().shop.confirmRedGemPayment(this.data.productId,!0);
+ if(0==i.success)return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ this.hide(),this.setRequestPending(!1);
+ const s=this.data.productId,e=t5.getInstance().getByProductId(s);
+ let n;
+ try{
+ n=structuredClone(e)}
+ catch(o){
+ n=JSON.parse(JSON.stringify(e))}
+ i.body&&(ML.setUserInfo(i.body,!1),i.body.products&&t5.getInstance().setAvailProducts(i.body.products));
+ const h=t5.getInstance().getRewardMessage(null==(t=i.body)?void 0:t.rewardTypes);
+ wG.getInstance().show(h),cS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ productId:s,productVo:n}
+ );
+ let r=!1;
+ for(const a of n.rewards)"instant"==a.type&&"petTicket"==a.subType&&(r=!0);
+ r&&this.updatePetTicket(),rjt.getInstance().trackPurchase(s)}
+ async updatePetTicket(){
+ const{
+ SpiritLandDataManager:t}
+ =await Xt(async()=>{
+ const{
+ SpiritLandDataManager:t}
+ =await Promise.resolve().then(()=>_L);
+ return{
+ SpiritLandDataManager:t}
+ }
+ ,void 0);
+ t.getInstance().isDataLoaded=!1}
+ setRequestPending(t){
+ this.requestPending=t}
+ setItemEvent(t,i){
+ t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
+ onItemTap(t){
+ const i=t.target;
+ if(!i)return;
+ if(i.type==n5.ticket&&i.subType==n5.petSelect&&w$t.getInstance().setData(i.kindNum))return void w$t.getInstance().show();
+ let s="";
+ if(i.type==n5.ticket&&i.subType==n5.heroGacha?s=SG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.heroSelect?s=SG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.treasureGacha?s=SG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.petSelect?s=SG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i.type!=n5.trans||i.subType!=n5.hero&&i.subType!=n5.treasure?i.type==n5.runeTicket&&(s=SG.getText("GAME_1502","레이드 상점에서 크리스탈을 랜덤하게 획득할 수 있습니다.")):s=SG.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다."),s){
+ const t=l5.getInstance();
+ t.text=s;
+ let e=this.rewardContainer.x+i.x+.5*(i.width-t.width);
+ e+t.width>this.width&&(e=this.width-t.width);
+ let n=this.rewardContainer.y+i.y-t.height;
+ t.show(this,e,n)}
+ }
+ }
+ ;
+ Vt(cjt,"BaseShopProductPopup");
+ let ljt=cjt;
+ const ujt=class t extends ljt{
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ constructor(){
+ super()}
+ }
+ ;
+ Vt(ujt,"ShopProductPopup"),Kt(ujt,"_instance");
+ let djt=ujt;
+ const fjt=k$t("AppleStoreKit"),pjt=class{
+ static async canMakePurchases(){
+ try{
+ return(await fjt.canMakePurchases()).allowed}
+ catch(t){
+ return!1}
+ }
+ static async getProducts(t){
+ try{
+ return(await fjt.getProducts({
+ productIds:t}
+ )).products}
+ catch(i){
+ return[]}
+ }
+ static async purchase(t){
+ try{
+ return await fjt.purchase({
+ productId:t}
+ )}
+ catch(i){
+ const t=(null==i?void 0:i.message)||(null==i?void 0:i.errorMessage)||"";
+ return t.toLowerCase().includes("cancelled")||t.toLowerCase().includes("canceled")?{
+ success:!1,error:"USER_CANCELED"}
+ :{
+ success:!1,error:t||"Purchase failed"}
+ }
+ }
+ static async finishTransaction(t){
+ try{
+ return(await fjt.finishTransaction({
+ transactionId:t}
+ )).finished}
+ catch(i){
+ return!1}
+ }
+ static async getPendingTransactions(){
+ try{
+ return(await fjt.getPendingTransactions()).transactions}
+ catch(t){
+ return[]}
+ }
+ static async restorePurchases(){
+ try{
+ return(await fjt.restorePurchases()).purchases}
+ catch(t){
+ return[]}
+ }
+ }
+ ;
+ Vt(pjt,"AppleStoreKitManager");
+ let gjt=pjt;
+ const mjt=k$t("GooglePlayBilling"),wjt=class{
+ static async getProducts(t){
+ try{
+ return(await mjt.getProducts({
+ productIds:t}
+ )).products}
+ catch(i){
+ return[]}
+ }
+ static async purchase(t){
+ try{
+ return await mjt.purchase({
+ productId:t}
+ )}
+ catch(i){
+ return{
+ success:!1,error:(null==i?void 0:i.message)||"Purchase failed"}
+ }
+ }
+ static async restorePurchases(){
+ try{
+ return(await mjt.restorePurchases()).purchases}
+ catch(t){
+ return[]}
+ }
+ static async getSubscriptions(t){
+ try{
+ return(await mjt.getSubscriptions({
+ productIds:t}
+ )).products}
+ catch(i){
+ return[]}
+ }
+ static async purchaseSubscription(t,i,s){
+ try{
+ return await mjt.purchaseSubscription({
+ productId:t,offerToken:i,basePlanId:s}
+ )}
+ catch(e){
+ return{
+ success:!1,error:(null==e?void 0:e.message)||"Subscription purchase failed"}
+ }
+ }
+ static async restoreSubscriptions(){
+ try{
+ return(await mjt.restoreSubscriptions()).subscriptions}
+ catch(t){
+ return[]}
+ }
+ }
+ ;
+ Vt(wjt,"GooglePlayBillingManager");
+ let vjt=wjt;
+ const bjt=class t{
+ constructor(){
+ Kt(this,"_busy",!1)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get busy(){
+ return this._busy}
+ async hasActiveSubscription(){
+ var t;
+ try{
+ const i=await rD.getInstance().subscription.getMy(!1);
+ return!!(null==i?void 0:i.success)&&((null==(t=i.body)?void 0:t.subscriptions)??[]).some(t=>!0===(null==t?void 0:t.isActive))}
+ catch(Xst){
+ return!1}
+ }
+ async logPaymentAttempt(t,i,s){
+ try{
+ await rD.getInstance().shop.paymentAttempt(t,i,s)}
+ catch(Xst){
+ }
+ }
+ async buyGoogleSubscription(t,i,s){
+ var e,n;
+ if(this._busy)wG.getInstance().show(SG.getText("COMMON_491","진행중인 결제가 있습니다."));
+ else if(await this.hasActiveSubscription())wG.getInstance().show(SG.getText("COMMON_492","이미 구독중입니다."));
+ else{
+ this._busy=!0,njt.getInstance().show();
+ try{
+ await this.logPaymentAttempt(t,"google",i);
+ const h=await vjt.purchaseSubscription(i);
+ if(!h.success||!h.purchaseToken)return void("USER_CANCELED"===h.error||wG.getInstance().show(h.error||SG.getText("COMMON_495","구독 결제 실패")));
+ const{
+ ServerStatusManager:r}
+ =await Xt(async()=>{
+ const{
+ ServerStatusManager:t}
+ =await Promise.resolve().then(()=>kL);
+ return{
+ ServerStatusManager:t}
+ }
+ ,void 0);
+ if(r.getInstance().development){
+ const t=AL.getInstance().getClientData("IN_APP_SHOP_PENDING_TEST");
+ if(t&&"Y"==t)return}
+ const o=await rD.getInstance().subscription.confirmGoogle(t,i,h.purchaseToken,0);
+ if(!o.success)return void wG.getInstance().showError(o);
+ (null==(e=o.body)?void 0:e.user)&&(ML.setUserData(o.body.user),kF.getInstance().updateAll());
+ const a=AL.getInstance();
+ let c=SG.getText("COMMON_493","구독이 활성화되었습니다.")+"\n\n"+SG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
+ a.isGoogleClient()||a.isGoogleClientKr()?c+="\n"+SG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):c+="\n"+SG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다."),wG.getInstance().show(c),(null==(n=o.body)?void 0:n.products)&&t5.getInstance().setAvailProducts(o.body.products),s&&s()}
+ catch(h){
+ wG.getInstance().show((null==h?void 0:h.message)||SG.getText("COMMON_494","구독 결제 오류"))}
+ finally{
+ this._busy=!1,njt.getInstance().hide()}
+ }
+ }
+ async buyAppleSubscription(t,i,s){
+ var e,n,h;
+ if(this._busy)wG.getInstance().show(SG.getText("COMMON_491","진행중인 결제가 있습니다."));
+ else if(await this.hasActiveSubscription())wG.getInstance().show(SG.getText("COMMON_492","이미 구독중입니다."));
+ else{
+ this._busy=!0,njt.getInstance().show();
+ try{
+ await this.logPaymentAttempt(t,"apple",i);
+ const r=await gjt.purchase(i);
+ if(!r.success||!r.receipt)return void("USER_CANCELED"===r.error||wG.getInstance().show(r.error||SG.getText("COMMON_495","구독 결제 실패")));
+ const{
+ ServerStatusManager:o}
+ =await Xt(async()=>{
+ const{
+ ServerStatusManager:t}
+ =await Promise.resolve().then(()=>kL);
+ return{
+ ServerStatusManager:t}
+ }
+ ,void 0);
+ if(o.getInstance().development){
+ const t=AL.getInstance().getClientData("IN_APP_SHOP_PENDING_TEST");
+ if(t&&"Y"==t)return}
+ const a=await rD.getInstance().subscription.confirmApple(t,r.receipt,0);
+ if(!a.success)return void wG.getInstance().showError(a);
+ (null==(e=a.body)?void 0:e.user)&&(ML.setUserData(a.body.user),kF.getInstance().updateAll());
+ const c=(null==(n=a.body)?void 0:n.transactionId)||r.transactionId;
+ c&&await gjt.finishTransaction(c);
+ const l=AL.getInstance();
+ let u=SG.getText("COMMON_493","구독이 활성화되었습니다.")+"\n\n"+SG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
+ l.isGoogleClient()||l.isGoogleClientKr()?u+="\n"+SG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):u+="\n"+SG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다."),wG.getInstance().show(u),(null==(h=a.body)?void 0:h.products)&&t5.getInstance().setAvailProducts(a.body.products),s&&s()}
+ catch(r){
+ wG.getInstance().show((null==r?void 0:r.message)||SG.getText("COMMON_494","구독 결제 오류"))}
+ finally{
+ this._busy=!1,njt.getInstance().hide()}
+ }
+ }
+ }
+ ;
+ Vt(bjt,"SubscriptionPurchaseManager"),Kt(bjt,"_instance");
+ let _jt=bjt;
+ const yjt=class extends iG{
+ constructor(t,i=150,s=30){
+ super(t,i,s),Kt(this,"redRedGemIcon"),Kt(this,"redRedGemLabel"),this.color=ZL.BROWN,this.redRedGemIcon=new He(QA.getTexture("UI_Ekkorr","UI_RED_GEM_ICON")),this.redRedGemIcon.y=1,this.container.addChild(this.redRedGemIcon);
+ const e=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ e.fill=cD.DEFAULT_COLOR,this.redRedGemLabel=new JD("0",e.fill,e),this.redRedGemLabel.y=1,this.container.addChild(this.redRedGemLabel)}
+ setData(t,i){
+ this.text=t,i?(this.lbl.y=-this.lbl.height-1,this.redRedGemLabel.text=`(      ${
+ i}
+  )`,this.redRedGemLabel.x=.5*-this.redRedGemLabel.width,this.redRedGemIcon.x=this.redRedGemLabel.x+7,this.redRedGemIcon.visible=!0,this.redRedGemLabel.visible=!0):(this.redRedGemIcon.visible=!1,this.redRedGemLabel.visible=!1)}
+ updateTextColor(){
+ super.updateTextColor(),this.redRedGemLabel&&(1==this._activated?(this.redRedGemIcon.alpha=1,this.redRedGemLabel.textColor=this._activatedTextColor):(this.redRedGemIcon.alpha=.7,this.redRedGemLabel.textColor=this._deactivatedTextColor))}
+ }
+ ;
+ Vt(yjt,"ShopBuyButton");
+ let Mjt=yjt;
+ const Ejt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","UI_SHOP_GEM"))),Kt(this,"limitedBadge",new He(QA.getTexture("UI_Ekkorr","Shop_Limited"))),Kt(this,"lblName"),Kt(this,"lblDesc"),Kt(this,"rewardContainer",new Ge),Kt(this,"rewardItems",[]),Kt(this,"btnBuy"),Kt(this,"purchasing",!1),Kt(this,"toolTipShowed",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.x=5,this.bg.width=630,this.bg.height=100,this.addChild(this.bg),this.icon.scale.set(1),this.icon.x=25,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.limitedBadge.scale.set(.8),this.limitedBadge.x=this.icon.x-5,this.limitedBadge.y=this.icon.y+5,this.limitedBadge.visible=!1,this.addChild(this.limitedBadge);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ t.fill=cD.DEFAULT_COLOR,this.lblName=new JD("",t.fill,t),this.lblName.x=140,this.lblName.y=15,this.addChild(this.lblName);
+ const i=cD.DEFAULT_DESC_FONT_OPTION_16;
+ i.fill=13421772,this.lblDesc=new JD("",i.fill,i),this.lblDesc.x=140,this.lblDesc.y=45,this.addChild(this.lblDesc),this.rewardContainer.x=140,this.rewardContainer.y=42,this.addChild(this.rewardContainer);
+ for(let s=0;
+ s<5;
+ s++){
+ const t=new r5;
+ t.scale.set(.7),t.visible=!1,this.rewardItems.push(t),this.rewardContainer.addChild(t)}
+ this.btnBuy=new Mjt("구매",120),this.btnBuy.height=55,this.btnBuy.width=120,this.btnBuy.x=this.bg.width-this.btnBuy.width-6,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.onClick=this.onBuyClick.bind(this),cD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x),cD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x)}
+ async onBuyClick(){
+ try{
+ if(!this.data)return;
+ if(this.purchasing)return;
+ if(this.purchasing=!0,this.isSubscriptionRow(this.data)){
+ if(ML.isAssistantPremium)return this.purchasing=!1,void this.showSubscriptionGuide();
+ await this.buySubscription()}
+ else{
+ if(this.data.productId==Q2.Secretary_Day30&&ML.isAssistantPremium){
+ let t=SG.getText("GAME_1240","전문비서 고용중입니다.")+"\n"+SG.getText("GAME_1241","전문비서 고용이 만료된 후에 다시 이용하실 수 있습니다.");
+ return void wG.getInstance().show(t)}
+ "N"==t5.getInstance().nextMarketYn?await rjt.getInstance().buyProduct(this.data.productId):djt.getInstance().buyProduct(this.data)}
+ this.purchasing=!1}
+ catch(Xst){
+ this.purchasing=!1}
+ }
+ isSubscriptionRow(t){
+ const i=null==t?void 0:t.rewards;
+ return!!Array.isArray(i)&&i.some(t=>"yes"===(null==t?void 0:t.subscribe))}
+ async buySubscription(){
+ const t=this.data,i=t5.getInstance().getStoreProductIdByProductId(this.data.productId);
+ if(!i)return;
+ const s=AL.getInstance();
+ let e="",n="";
+ const h=ML.currentServer;
+ if(s.isGoogleClient()||s.isAppleClient()?2==h&&(e=SG.getText("COMMON_546","[오늘도 환생 2] 국내 버전에서 결제를 이용해 주세요."),n=s.isGoogleClient()?s.getGoogleKrLink():s.getAppleKrLink()):(s.isGoogleClientKr()||s.isAppleClientKr())&&3==h&&(e=SG.getText("COMMON_545","[Endless Frontier 2] 글로벌 버전에서 결제를 이용해 주세요."),n=s.isGoogleClientKr()?s.getGoogleGbLink():s.getAppleGbLink()),e){
+ const t=e5.getInstance();
+ return t.hideCloseBtn(),void t.show(e,()=>{
+ n&&window.open(n,"_blank")}
+ )}
+ const r="1.5.29";
+ if("capacitor"==s.envPlatform&&zA.isAppBundleVersionLessThan(r))return void wG.getInstance().show(SG.getText("COMMON_497","최신 버전으로 업데이트 후에 이용해 주세요.")+`\n${
+ SG.getText("COMMON_500","최신 버전")}
+  : ${
+ r}
+ `,()=>{
+ const t=AL.getInstance().getStoreLink();
+ t&&window.open(t,"_blank")}
+ );
+ let o;
+ try{
+ o=structuredClone(t)}
+ catch(u){
+ o=JSON.parse(JSON.stringify(t))}
+ const a=Vt(async()=>{
+ cS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ productId:o.productId,productVo:o}
+ )}
+ ,"onSubscriptionSuccess"),{
+ Capacitor:c}
+ =await Xt(async()=>{
+ const{
+ Capacitor:t}
+ =await Promise.resolve().then(()=>q$t);
+ return{
+ Capacitor:t}
+ }
+ ,void 0),l=_jt.getInstance();
+ "ios"===c.getPlatform()?await l.buyAppleSubscription(this.data.productId,i,a):await l.buyGoogleSubscription(this.data.productId,i,a)}
+ setData(t){
+ this.data=t,this.toolTipShowed=!1;
+ const i=t5.getInstance();
+ let s=SG.getText(`PRODUCT_NAME_${
+ t.id}
+ `,t.name??"");
+ CL.getInstance().development&&(s=`${
+ t.id}
+ . `+s),this.lblName.text=s;
+ const e=this.hasDescription(t),n={
+ gem:0,honorCoin:1,hammer:2,dungeonTicket:3,hero:4,petTicket:5,ticket:6,pet:7,trans:8,runeTicket:9,ads:1e3,speed:1001,assistant:1002}
+ ,h=(t.rewards??[]).map((t,i,s)=>"instant"!==t.type||"dungeonTicket"!==t.subType&&"petTicket"!==t.subType?"buff"===t.type&&s.length>1?{
+ ...t,type:t.subType}
+ :t:{
+ ...t,type:t.subType}
+ ).filter(t=>t.type in n).sort((t,i)=>n[t.type]-n[i.type]),r=h.length>0;
+ r?this.showRewardMode(h,t.productId):e?this.showDescMode(t):(this.lblDesc.visible=!1,this.rewardContainer.visible=!1),this.lblName.y=r?20-.5*this.lblName.height:e?22-.5*this.lblName.height:.5*(this.bg.height-this.lblName.height),this.icon.texture=QA.getTexture("UI_Ekkorr",t.iconNames),this.limitedBadge.visible=2===t.sub&&t.maxPurchase>0;
+ let o=70,a=i.getPriceStr(t.productId),c=t.price>0?i.getRedGemPrice(t.productId).toString():"";
+ this.isSubscriptionRow(t)?(o=55,c="",ML.isAssistantPremium&&(a=SG.getText("COMMON_547","구독중"))):t.productId==Q2.Secretary_Day30&&ML.isAssistantPremium&&(o=55,c="",a=SG.getText("GAME_1239","고용중")),this.btnBuy.height=o,this.btnBuy.setData(a,c),this.btnBuy.x=this.bg.width-this.btnBuy.width-6,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height)}
+ hasDescription(t){
+ return!!t.descriptionLangIds||!(!t.descriptions||""===t.descriptions.trim())}
+ showDescMode(t){
+ if(this.lblDesc.visible=!0,this.rewardContainer.visible=!1,t.descriptionLangIds){
+ const i=t.descriptionLangIds.split("|").map(t=>SG.getText(t.trim(),""));
+ this.lblDesc.text=i.filter(t=>t).join("\n")||t.descriptions||""}
+ else this.lblDesc.text=(t.descriptions??"").replace(/\\n/g,"\n");
+ let i=45;
+ i+this.lblDesc.height>this.bg.y+this.bg.height-3&&(i=this.bg.y+this.bg.height-3-this.lblDesc.height),this.lblDesc.y=i}
+ showRewardMode(t,i=-1){
+ this.lblDesc.visible=!1,this.rewardContainer.visible=!0;
+ const s=Math.min(t.length,5);
+ let e=0;
+ for(let n=0;
+ n<5;
+ n++){
+ const i=this.rewardItems[n];
+ n<s?(i.setDataFrom(t[n]),i.visible=!0,i.x=e,e+=i.width*i.scale.x+5,this.setItemEvent(i,!0)):i.visible=!1}
+ }
+ onClick(t,i){
+ this.data&&(t>=this.btnBuy.x||this.toolTipShowed||djt.getInstance().showProduct(this.data))}
+ get height(){
+ return this.bg.height+2}
+ setDataAndLayout(t){
+ t&&(this.setData(t),this.bg.x=0,this.bg.y=0,this.btnBuy.x=this.bg.width-this.btnBuy.width-15,cD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x),cD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x))}
+ setItemEvent(t,i){
+ t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
+ onItemTap(t){
+ this.toolTipShowed=!1;
+ const i=t.target;
+ if(!i)return;
+ if(i.type==n5.ticket&&i.subType==n5.petSelect&&w$t.getInstance().setData(i.kindNum))return this.toolTipShowed=!0,void w$t.getInstance().show("",()=>{
+ this.toolTipShowed=!1}
+ );
+ let s="";
+ if(i.type==n5.ticket&&i.subType==n5.heroGacha?s=SG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.heroSelect?s=SG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.treasureGacha?s=SG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.petSelect?s=SG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i.type!=n5.trans||i.subType!=n5.hero&&i.subType!=n5.treasure?i.type==n5.runeTicket&&(s=SG.getText("GAME_1502","레이드 상점에서 크리스탈을 랜덤하게 획득할 수 있습니다.")):s=SG.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다."),s){
+ this.toolTipShowed=!0;
+ const t=l5.getInstance();
+ t.text=s;
+ let e=this.rewardContainer.x+i.x-20;
+ e+t.width+7>this.bg.x+this.bg.width&&(e=this.bg.x+this.bg.width-t.width-7);
+ let n=i.y-i.height;
+ n<7&&(n=7),t.show(this,e,n,()=>{
+ this.toolTipShowed=!1}
+ )}
+ }
+ showSubscriptionGuide(){
+ const t=AL.getInstance();
+ let i=SG.getText("GAME_1240","전문비서 고용중입니다.")+"\n"+SG.getText("GAME_1241","전문비서 고용이 만료된 후에 다시 이용하실 수 있습니다.")+"\n\n"+SG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
+ t.isGoogleClient()||t.isGoogleClientKr()?i+="\n"+SG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):(t.isAppleClient()||t.isAppleClientKr())&&(i+="\n"+SG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다."));
+ const s=e5.getInstance();
+ s.title=SG.getText("COMMON_4","알림"),s.show(i)}
+ }
+ ;
+ Vt(Ejt,"ShopPayItemRenderer");
+ let Ajt=Ejt;
+ const Sjt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblContent"),Kt(this,"lblAutoTitle"),Kt(this,"btnAutoToggle"),Kt(this,"lblEventTitle"),Kt(this,"lblEventDesc"),Kt(this,"petIconContainer"),Kt(this,"secretaryContainer"),Kt(this,"secretaryBg"),Kt(this,"secretaryItemContainer"),Kt(this,"secretaryItem"),Kt(this,"secretaryItem2"),Kt(this,"onPaymentSuccessBind"),this.outSideClickHide=!0,this.width=t.POPUP_WIDTH,this.lblContent=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),this.lblContent.align="left",cD.setLabelWrapWidth(this.lblContent,t.POPUP_WIDTH-60),this.contentContainer.addChild(this.lblContent),this.lblAutoTitle=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),this.lblAutoTitle.align="left",this.contentContainer.addChild(this.lblAutoTitle),this.btnAutoToggle=new ZL("ON"),this.btnAutoToggle.width=80,this.btnAutoToggle.height=37,this.btnAutoToggle.onClick=()=>this.onToggleAutoClick(),this.contentContainer.addChild(this.btnAutoToggle),this.lblEventTitle=new JD("",t.EVENT_BLUE,cD.DEFAULT_FONT_OPTION_16),this.lblEventTitle.align="left",this.lblEventTitle.textColor=t.EVENT_BLUE,cD.setLabelWrapWidth(this.lblEventTitle,t.POPUP_WIDTH-60),this.contentContainer.addChild(this.lblEventTitle),this.lblEventDesc=new JD("",t.EVENT_BLUE,cD.DEFAULT_FONT_OPTION_16),this.lblEventDesc.visible=!1,this.petIconContainer=new Ge,this.contentContainer.addChild(this.petIconContainer),this.secretaryContainer=new Ge,this.secretaryContainer.visible=!1,this.secretaryContainer.y=this.height+5,this.addChild(this.secretaryContainer),this.secretaryBg=new He(QA.getTexture("UI_Ekkorr","whiteRect")),this.secretaryBg.tint=6839879,this.secretaryBg.width=this.width,this.secretaryContainer.addChild(this.secretaryBg),this.secretaryItemContainer=new Ge,this.secretaryItemContainer.x=3,this.secretaryItemContainer.y=3,this.secretaryContainer.addChild(this.secretaryItemContainer),this.secretaryItem=new Ajt,this.secretaryItem.visible=!1,this.secretaryItemContainer.addChild(this.secretaryItem),this.secretaryItem2=new Ajt,this.secretaryItem2.visible=!1,this.secretaryItemContainer.addChild(this.secretaryItem2)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ var t;
+ const i=Vt((t,i)=>SG.getText(t,i),"_t"),s=Vt((t,i,s)=>SG.getValueReplace(t,"##",i,s),"_tv");
+ this.title=i("GAME_914","비서 가이드");
+ const e=[`# ${
+ i("GAME_915","일반 비서 (로라)")}
+ `,`  - ${
+ s("GAME_917",2,"영웅 모집 : 1시간마다 2명")}
+ `,`  - ${
+ i("GAME_918","영웅 슬롯 :")}
+  24`,`  - ${
+ s("GAME_919","7~15","자원 : 1시간마다 7~15개의 보석과 명예코인 획득")}
+ `,"",`# ${
+ i("GAME_916","전문 비서 (이오스)")}
+ `,`  - ${
+ s("GAME_917",4,"영웅 모집 : 1시간마다 4명")}
+ `,`  - ${
+ i("GAME_918","영웅 슬롯 :")}
+  96`,`  - ${
+ s("GAME_919","15~30","자원 : 1시간마다 15~30개의 보석과 명예코인 획득")}
+ `];
+ this.lblContent.text=e.join("\n"),this.lblContent.x=40,this.lblContent.y=80;
+ let n=this.lblContent.y+this.lblContent.height+20;
+ this.lblAutoTitle.text=i("COMMON_483","자동"),this.lblAutoTitle.x=40,this.lblAutoTitle.y=n+Math.max(0,.5*(this.btnAutoToggle.height-this.lblAutoTitle.height)),this.btnAutoToggle.x=this.lblAutoTitle.x+this.lblAutoTitle.width+10,this.btnAutoToggle.y=n,this.refreshAutoToggleUI(),n+=this.btnAutoToggle.height+18;
+ const h=null==(t=Gjt.getInstance().peek())?void 0:t.petEvent,r=null!=h&&h.kindNums.length>0;
+ r&&(n=this.layoutEventSection(h,n)),this.lblEventTitle.visible=r,this.petIconContainer.visible=r,r||this.petIconContainer.removeChildren(),this.height=n+40,this.updateShopItem(),await this.loadImage(),super.show()}
+ async updateShopItem(){
+ await t5.getInstance().getAvailProducts(3,!1);
+ const t=[],i=t5.getInstance().getByProductId(Q2.Secretary);
+ i?(this.secretaryItem.setDataAndLayout(i),this.secretaryItem.visible=!0,t.push(this.secretaryItem)):this.secretaryItem.visible=!1;
+ const s=t5.getInstance().getByProductId(Q2.Secretary_Day30);
+ if(s?(this.secretaryItem2.setDataAndLayout(s),this.secretaryItem2.visible=!0,t.push(this.secretaryItem2)):this.secretaryItem2.visible=!1,i||s){
+ this.setPaymentSuccess(!0);
+ for(let i=0;
+ i<t.length;
+ ++i)t[i].y=i*t[i].height;
+ this.secretaryItemContainer.width=this.secretaryBg.width-6,this.secretaryItemContainer.scale.y=this.secretaryItemContainer.scale.x,this.secretaryBg.height=this.secretaryItemContainer.height+2*this.secretaryItemContainer.y,this.secretaryContainer.y=this.height+5,this.secretaryContainer.visible=!0}
+ else this.setPaymentSuccess(!1),this.secretaryContainer.visible=!1}
+ layoutEventSection(i,s){
+ const e=Vt((t,i)=>SG.getText(t,i),"_t"),n=Vt((t,i,s)=>SG.getValueReplace(t,"##",i,s),"_tv"),h=e("GAME_928","비서가 아래 펫 조각을 랜덤하게 가져옵니다."),r=n("GAME_929",i.basicDailyCount,`하루 ${
+ i.basicDailyCount}
+  조각 ( 고급비서는 2배 )`);
+ this.lblEventTitle.text=[`# ${
+ e("GAME_927","이벤트 진행중")}
+ `,`  - ${
+ h}
+ `,`  - ${
+ r}
+ `].join("\n"),this.lblEventTitle.x=40,this.lblEventTitle.y=s;
+ let o=this.lblEventTitle.y+this.lblEventTitle.height+10;
+ this.petIconContainer.removeChildren();
+ let a=0,c=0;
+ for(const l of i.kindNums){
+ const i=new J2;
+ i.setInactive(l),i.x=a,i.y=0,this.petIconContainer.addChild(i),a+=i.width+t.PET_ICON_GAP,i.height>c&&(c=i.height)}
+ return this.petIconContainer.x=40,this.petIconContainer.y=o,o+=c,o}
+ onToggleAutoClick(){
+ const t=!Pjt.isAutoEnabled();
+ Pjt.setAutoEnabled(t),this.refreshAutoToggleUI()}
+ refreshAutoToggleUI(){
+ const t=Pjt.isAutoEnabled();
+ this.btnAutoToggle.text=t?"ON":"OFF",this.btnAutoToggle.color=t?ZL.GREEN:ZL.BROWN}
+ getDefaultPositionY(){
+ return.47*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ getPopupBounds(){
+ return this.getBounds()}
+ setPaymentSuccess(t){
+ cS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),cS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
+ onPaymentSuccess(t){
+ let i=-1;
+ t&&t.detail&&"productId"in t.detail&&(i=t.detail.productId),i!==Q2.Secretary&&i!==Q2.Secretary_Day30||this.secretaryContainer.visible&&this.updateShopItem()}
+ }
+ ;
+ Vt(Sjt,"SecretaryGuidePopup"),Kt(Sjt,"_instance"),Kt(Sjt,"POPUP_WIDTH",580),Kt(Sjt,"EVENT_BLUE",7124735),Kt(Sjt,"PET_ICON_GAP",13);
+ let Tjt=Sjt;
+ const Cjt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblHeader",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblFooter",new JD("",cD.COLOR_GRAY,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"btnConfirm",new kU("","","확인",.8,180,60)),Kt(this,"secretaryImg",(()=>{
+ const t=new He(QA.getTexture("UI_Ekkorr","UNIT_NPC_1"));
+ return t.scale.set(.7/.6),t}
+ )()),Kt(this,"btnGuide",new MB("UI_Ekkorr","UI_Alarm")),Kt(this,"list"),Kt(this,"petPieceContainer",new Ge),Kt(this,"petPieceContainerWidth",0),Kt(this,"rewardContainer",new Ge),Kt(this,"gemIcon",new He(QA.getTexture("UI_Ekkorr","UI_SHOP_GEM"))),Kt(this,"gemLabel",new JD("",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"honorIcon",new He(QA.getTexture("UI_Ekkorr","UI_COIN_Big"))),Kt(this,"honorLabel",new JD("",cD.COLOR_PURPLE_PINK,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"hammerIcon",new He(QA.getTexture("UI_Ekkorr","Icon_Hammer_01"))),Kt(this,"hammerLabel",new JD("",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"runeTicketIcon",new He(QA.getTexture("UI_Ekkorr","RuneTicket"))),Kt(this,"runeTicketLabel",new JD("",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"grantedGem",0),Kt(this,"grantedHonor",0),Kt(this,"grantedHammer",0),Kt(this,"grantedRuneTicket",0),Kt(this,"grantedPetPieces",{
+ }
+ ),Kt(this,"onConfirm",null),Kt(this,"state","INTRO"),Kt(this,"revealAfterHide",!1),Kt(this,"revealQueue",[]),Kt(this,"kindGrade",new Map),Kt(this,"grantedTotal",0),Kt(this,"rowCount",0),this.width=t.POPUP_WIDTH,this.title=SG.getText("GAME_857","비서"),this.lblHeader.align="left",this.lblFooter.align="left",cD.setLabelWrapWidth(this.lblHeader,this.width-60),cD.setLabelWrapWidth(this.lblFooter,this.width-60),Ojt.LIST_WIDTH=t.LIST_WIDTH,this.list=new KO(Ojt,t.LIST_WIDTH,t.LIST_MAX_HEIGHT,4),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.gemIcon.scale.set(.5),this.honorIcon.scale.set(.5),this.hammerIcon.height>0&&this.hammerIcon.scale.set(this.gemIcon.height/this.hammerIcon.height*.6),this.runeTicketIcon.height>0&&this.runeTicketIcon.scale.set(this.gemIcon.height/this.runeTicketIcon.height*.8),this.rewardContainer.addChild(this.gemIcon,this.gemLabel,this.honorIcon,this.honorLabel,this.hammerIcon,this.hammerLabel,this.runeTicketIcon,this.runeTicketLabel),this.rewardContainer.visible=!1,this.btnGuide.x=t.POPUP_WIDTH-this.btnGuide.width-23,this.btnGuide.y=63,this.btnGuide.on("pointertap",()=>{
+ Tjt.getInstance().showGuide()}
+ ),this.petPieceContainer.visible=!1,this.contentContainer.addChild(this.btnGuide,this.lblHeader,this.secretaryImg,this.list,this.rewardContainer,this.petPieceContainer,this.lblFooter,this.btnConfirm)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showResult(t,i=0,s=0,e="basic",n={
+ }
+ ,h=0,r=0,o=null,a=!1){
+ var c;
+ this.onConfirm=o,this.grantedGem=i,this.grantedHonor=s,this.grantedHammer=h,this.grantedRuneTicket=r,this.grantedPetPieces=n||{
+ }
+ ,this.applyTierTexture(e);
+ const l=wx.getInstance(),u=[];
+ let d=0;
+ this.kindGrade.clear();
+ for(const g of Object.keys(t)){
+ const i=Number(g),s=Number(t[i]??0);
+ s>0&&(u.push({
+ kindNum:i,count:s}
+ ),d+=s,this.kindGrade.set(i,(null==(c=l.getBookVO(i))?void 0:c.grade)??1))}
+ u.sort((t,i)=>{
+ const s=l.getBookVO(t.kindNum),e=l.getBookVO(i.kindNum),n=(null==s?void 0:s.grade)??-1,h=(null==e?void 0:e.grade)??-1;
+ if(n!==h)return h-n;
+ const r=(null==s?void 0:s.tribe)??99,o=(null==e?void 0:e.tribe)??99;
+ return r!==o?r-o:t.kindNum-i.kindNum}
+ ),this.grantedTotal=d,this.revealQueue=[];
+ for(const g of u)for(let t=0;
+ t<g.count;
+ t++)this.revealQueue.push(g.kindNum);
+ this.shuffleInPlace(this.revealQueue);
+ const f=Ojt.COLS,p=[];
+ for(let g=0;
+ g<u.length;
+ g+=f)p.push(u.slice(g,g+f));
+ this.rowCount=p.length,this.list.dataProvider=p,this.list.showTopItem(),this.btnClose.visible=!1,this.outSideClickHide=!1,a?(this.enterIntroState(),super.show()):(this.state="TRANSITIONING",this.startRevealOverlay())}
+ applyTierTexture(t){
+ const i="premium"===t?"UNIT_NPC_2":"UNIT_NPC_1";
+ this.secretaryImg.texture=QA.getTexture("UI_Ekkorr",i)}
+ buildPetPieceContainer(){
+ var t;
+ const i=this.petPieceContainer;
+ for(const h of[...i.children])i.removeChild(h),null==(t=h.destroy)||t.call(h,{
+ children:!0}
+ );
+ const s=Object.entries(this.grantedPetPieces||{
+ }
+ ).map(([t,i])=>({
+ kindNum:Number(t),count:Number(i)}
+ )).filter(t=>t.count>0).sort((t,i)=>t.kindNum-i.kindNum);
+ if(0===s.length)return this.petPieceContainerWidth=0,void(i.visible=!1);
+ let e=0,n=0;
+ for(let h=0;
+ h<s.length;
+ h++){
+ const t=s[h],r=new J2;
+ r.setInactive(t.kindNum);
+ const o=new JD(`×${
+ t.count}
+ `,cD.COLOR_WHITE,cD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ o.textColor=cD.COLOR_WHITE,r.x=e,r.y=0,o.x=r.x+r.width-o.width-2,o.y=r.y+r.height-o.height-2,e+=r.width,n=Math.max(n,r.height),h<s.length-1&&(e+=18),i.addChild(r,o)}
+ this.petPieceContainerWidth=e,i.visible=!0}
+ enterIntroState(){
+ this.state="INTRO",this.lblHeader.text=SG.getValueReplace("GAME_855","##",String(this.grantedTotal),`성주님,\n${
+ this.grantedTotal}
+ 명의 영웅을 모집했습니다.\n어떤 영웅이 왔는지 확인해볼까요?`),this.lblFooter.visible=!1,this.list.visible=!1,this.rewardContainer.visible=!1,this.petPieceContainer.visible=!1,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnClose.visible=!1,this.updateLayout()}
+ enterDoneState(){
+ this.state="DONE",this.lblHeader.text=SG.getValueReplace("GAME_856","##",String(this.grantedTotal),`비서가 ${
+ this.grantedTotal}
+ 명의 영웅을 모집했습니다.`);
+ const t=`- ${
+ SG.getText("GAME_862","비서는 1시간마다 2명씩 영웅을 모아옵니다. (최대 24명)")}
+ `,i=`- ${
+ SG.getText("GAME_863","환생 또는 재접속 시 4시간이 지났다면, 비서가 자동으로 찾아옵니다.")}
+ `,s=`- ${
+ SG.getText("GAME_766","획득한 영웅은 병영에 추가됩니다.")}
+ `;
+ this.lblFooter.text=`${
+ t}
+ \n${
+ i}
+ \n${
+ s}
+ `,this.lblFooter.visible=!0,this.list.visible=!0,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnClose.visible=!1;
+ const e=this.grantedGem>0||this.grantedHonor>0||this.grantedHammer>0||this.grantedRuneTicket>0;
+ this.rewardContainer.visible=e,e&&(this.gemIcon.visible=this.grantedGem>0,this.gemLabel.visible=this.grantedGem>0,this.honorIcon.visible=this.grantedHonor>0,this.honorLabel.visible=this.grantedHonor>0,this.hammerIcon.visible=this.grantedHammer>0,this.hammerLabel.visible=this.grantedHammer>0,this.runeTicketIcon.visible=this.grantedRuneTicket>0,this.runeTicketLabel.visible=this.grantedRuneTicket>0,this.gemLabel.text=`${
+ this.grantedGem}
+ `,this.honorLabel.text=`${
+ this.grantedHonor}
+ `,this.hammerLabel.text=`${
+ this.grantedHammer}
+ `,this.runeTicketLabel.text=`${
+ this.grantedRuneTicket}
+ `),this.buildPetPieceContainer(),this.updateLayout()}
+ startRevealOverlay(){
+ const t=new Rjt(this.revealQueue,this.kindGrade,this.grantedGem,this.grantedHonor,this.grantedPetPieces,this.grantedHammer,this.grantedRuneTicket,()=>{
+ this.enterDoneState(),super.show()}
+ );
+ VA.stage.addChild(t)}
+ updateLayout(){
+ let i=70;
+ this.secretaryImg.x=.5*(this.width-this.secretaryImg.width)+25,this.secretaryImg.y=i,i+=this.secretaryImg.height+12,this.lblHeader.x=.5*(this.width-this.lblHeader.width),this.lblHeader.y=i,i+=this.lblHeader.height+12;
+ const s=Ojt.ROW_HEIGHT,e=this.list.getYSpace(),n=Math.min(t.LIST_MAX_HEIGHT,Math.max(s,this.rowCount*(s+e)));
+ if(this.list.setListHeight(n,!1),this.list.x=t.LIST_X,this.list.y=i,this.list.visible&&(i+=n+12),this.rewardContainer.visible){
+ const t=36,s=6,e=[{
+ icon:this.gemIcon,label:this.gemLabel}
+ ,{
+ icon:this.honorIcon,label:this.honorLabel}
+ ,{
+ icon:this.hammerIcon,label:this.hammerLabel}
+ ,{
+ icon:this.runeTicketIcon,label:this.runeTicketLabel}
+ ].filter(t=>t.icon.visible),n=Vt(t=>t.icon.width+s+t.label.width,"groupW"),h=e.reduce((t,i)=>t+n(i),0)+Math.max(0,e.length-1)*t,r=i,o=Math.max(28,...e.map(t=>t.icon.height));
+ let a=.5*(this.width-h);
+ for(const i of e)i.icon.x=a,i.icon.y=r+.5*(o-i.icon.height),a+=i.icon.width+s,i.label.x=a,i.label.y=r+.5*(o-i.label.height),a+=i.label.width+t;
+ this.rewardContainer.x=0,this.rewardContainer.y=0,i+=o+12}
+ if(this.petPieceContainer.visible){
+ this.petPieceContainer.x=.5*(this.width-this.petPieceContainerWidth),this.petPieceContainer.y=i;
+ let t=0;
+ for(const i of this.petPieceContainer.children)t=Math.max(t,i.height||0);
+ i+=(t||60)+12}
+ this.lblFooter.visible?(this.lblFooter.x=.5*(this.width-this.lblFooter.width),this.lblFooter.y=i,i+=this.lblFooter.height+18):i+=6,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=i,i+=this.btnConfirm.height+25,this.height=i+18}
+ onConfirmClick(){
+ if("INTRO"===this.state)this.state="TRANSITIONING",this.revealAfterHide=!0,super.hide();
+ else{
+ this.hide();
+ const t=this.onConfirm;
+ this.onConfirm=null,t&&t()}
+ }
+ onHideMotionComplete(){
+ super.onHideMotionComplete(),this.revealAfterHide&&(this.revealAfterHide=!1,this.startRevealOverlay())}
+ getDefaultPositionY(){
+ return.5*VA.stageHeight}
+ shuffleInPlace(t){
+ for(let i=t.length-1;
+ i>0;
+ i--){
+ const s=Math.floor(Math.random()*(i+1)),e=t[i];
+ t[i]=t[s],t[s]=e}
+ }
+ }
+ ;
+ Vt(Cjt,"SecretaryPopup"),Kt(Cjt,"_instance"),Kt(Cjt,"POPUP_WIDTH",580),Kt(Cjt,"LIST_X",20),Kt(Cjt,"LIST_WIDTH",Cjt.POPUP_WIDTH-2*Cjt.LIST_X),Kt(Cjt,"LIST_MAX_HEIGHT",460);
+ let Ijt=Cjt;
+ const kjt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"icons",[]);
+ const i=new jO(t.LIST_WIDTH,t.ROW_HEIGHT,0);
+ i.alpha=0,this.addChild(i);
+ for(let s=0;
+ s<t.COLS;
+ s++){
+ const i=new Y2;
+ i.setMode(z2.BOOK),i.scale.set(t.ICON_SCALE),i.visible=!1,this.icons.push(i),this.addChild(i)}
+ }
+ setData(i){
+ const s=i.length,e=this.icons[0].width,n=this.icons[0].height,h=t.COLS*e+(t.COLS-1)*t.H_GAP;
+ let r=.5*(t.LIST_WIDTH-h);
+ const o=.5*(t.ROW_HEIGHT-n);
+ for(let a=0;
+ a<t.COLS;
+ a++){
+ const n=this.icons[a];
+ if(a<s){
+ const s=i[a];
+ n.setDataWithKindNum(s.kindNum),n.setCountText(`x${
+ s.count}
+ `),n.x=r,n.y=o,n.visible=!0,r+=e+t.H_GAP}
+ else n.visible=!1}
+ }
+ }
+ ;
+ Vt(kjt,"SecretaryHeroRow"),Kt(kjt,"LIST_WIDTH",540),Kt(kjt,"COLS",5),Kt(kjt,"ICON_SCALE",.64),Kt(kjt,"H_GAP",10),Kt(kjt,"ROW_HEIGHT",64);
+ let Ojt=kjt;
+ const xjt=class t extends Ge{
+ constructor(t,i,s,e,n,h,r,o){
+ super(),Kt(this,"bg"),Kt(this,"gridContainer"),Kt(this,"queue"),Kt(this,"kindGrade"),Kt(this,"grantedGem"),Kt(this,"grantedHonor"),Kt(this,"grantedPetPieces"),Kt(this,"grantedHammer"),Kt(this,"grantedRuneTicket"),Kt(this,"onCompleteCb"),Kt(this,"queueIdx",0),Kt(this,"timer",0),Kt(this,"done",!1),Kt(this,"placedIcons",[]),Kt(this,"activePlaceholders",new Set),Kt(this,"cellW",0),Kt(this,"cellH",0),Kt(this,"startX",0),Kt(this,"startY",0),Kt(this,"iconScale",.7),Kt(this,"iconNativeW",0),Kt(this,"iconNativeH",0),Kt(this,"rewardContainer",null),Kt(this,"rewardsRevealed",!1),Kt(this,"allRevealed",!1),this.queue=t.slice(),this.kindGrade=i,this.grantedGem=s,this.grantedHonor=e,this.grantedPetPieces=n||{
+ }
+ ,this.grantedHammer=h,this.grantedRuneTicket=r,this.onCompleteCb=o;
+ const a=VA.stageWidth||640,c=VA.stageHeight||1200;
+ this.bg=new jO(a,c,0),this.bg.alpha=0,this.addChild(this.bg),this.gridContainer=new Ge,this.addChild(this.gridContainer),this.eventMode="static",this.bg.eventMode="static",this.bg.on("pointertap",()=>this.onTap()),this.computeLayout(a,c),FO.to(this.bg,{
+ alpha:.75,duration:.18,ease:"power2.out",onComplete:Vt(()=>this.processNext(),"onComplete")}
+ )}
+ computeLayout(i,s){
+ const e=new Y2;
+ e.setMode(z2.BOOK),this.queue.length>0&&e.setDataWithKindNum(this.queue[0]),this.iconNativeW=e.width,this.iconNativeH=e.height,e.destroy({
+ children:!0}
+ );
+ const n=this.queue.length,h=t.COLS,r=Math.max(1,Math.ceil(n/h)),o=t.GAP,a=i-2*t.PAD_X,c=s-t.PAD_TOP-t.PAD_BOTTOM-t.RESERVED_REWARD_H,l=(a-o*(h-1))/(h*this.iconNativeW),u=(c-o*(r-1))/(r*this.iconNativeH);
+ let d=Math.min(l,u,.9);
+ d=Math.max(d,.32),d*=.9,this.iconScale=d;
+ const f=this.iconNativeW*d,p=this.iconNativeH*d;
+ this.cellW=f+o,this.cellH=p+o;
+ const g=h*f+(h-1)*o,m=r*p+(r-1)*o;
+ this.startX=.5*(i-g),this.startY=t.PAD_TOP+Math.max(0,.5*(c-m))}
+ gridPositionAt(i){
+ const s=i%t.COLS,e=Math.floor(i/t.COLS);
+ return{
+ x:this.startX+s*this.cellW,y:this.startY+e*this.cellH}
+ }
+ spawnIcon(t,i){
+ const s=new Y2;
+ s.setMode(z2.BOOK),s.setDataWithKindNum(i),s.pivot.set(.5*this.iconNativeW,.5*this.iconNativeH),s.scale.set(this.iconScale);
+ const e=this.gridPositionAt(t),n=this.iconNativeW*this.iconScale,h=this.iconNativeH*this.iconScale;
+ return s.x=e.x+.5*n,s.y=e.y+.5*h,s.alpha=0,s.visible=!1,this.gridContainer.addChild(s),this.placedIcons.push(s),s}
+ spawnPlaceholder(t){
+ const i=this.iconNativeW*this.iconScale,s=this.iconNativeH*this.iconScale,e=.16*i,n=new Lf;
+ return n.poly([0,0,i-e,0,i,.5*s,i-e,s,0,s]),n.fill(16777215),n.pivot.set(.5*i,.5*s),n.x=t.x,n.y=t.y,this.gridContainer.addChild(n),this.activePlaceholders.add(n),n}
+ removePlaceholder(t){
+ this.activePlaceholders.delete(t),FO.killTweensOf(t),t.parent&&t.parent.removeChild(t)}
+ onTap(){
+ this.done||(this.allRevealed?this.finish():this.skip())}
+ processNext(){
+ if(this.done)return;
+ if(this.queueIdx>=this.queue.length)return void(this.rewardsRevealed?this.allRevealed=!0:this.startRevealRewards());
+ const t=this.queue[this.queueIdx],i=this.kindGrade.get(t)??1,s=this.spawnIcon(this.queueIdx,t);
+ let e;
+ this.queueIdx++,i>=5?(this.revealHigh(s),e=620):(this.revealLow(s),e=55),this.timer=window.setTimeout(()=>{
+ this.timer=0,this.processNext()}
+ ,e)}
+ revealLow(t){
+ this.popIcon(t,!1)}
+ revealHigh(t){
+ const i=this.spawnPlaceholder(t),s=i.x,e=FO.timeline({
+ onComplete:Vt(()=>{
+ this.removePlaceholder(i),this.flashAtIcon(t),this.popIcon(t,!0)}
+ ,"onComplete")}
+ );
+ e.to(i,{
+ x:s+6,duration:.05,ease:"none",repeat:9,yoyo:!0}
+ ),e.set(i,{
+ x:s}
+ )}
+ popIcon(t,i){
+ const s=this.iconScale;
+ t.visible=!0,t.alpha=0;
+ const e=i?1.55:1.3,n=i?.12:.09,h=FO.timeline();
+ h.to(t,{
+ alpha:1,duration:.05,ease:"power2.out"}
+ ),h.fromTo(t.scale,{
+ x:s*e,y:s*e}
+ ,{
+ x:s,y:s,duration:n,ease:i?"back.out(2.2)":"back.out(1.7)"}
+ ,"<")}
+ flashAtIcon(t){
+ const i=this.iconNativeW*this.iconScale*1.15,s=this.iconNativeH*this.iconScale*1.15,e=.16*i,n=new Lf;
+ n.poly([0,0,i-e,0,i,.5*s,i-e,s,0,s]),n.fill(16777215),n.pivot.set(.5*i,.5*s),n.x=t.x,n.y=t.y,n.alpha=0,this.gridContainer.addChild(n);
+ const h=FO.timeline({
+ onComplete:Vt(()=>{
+ n.parent&&n.parent.removeChild(n)}
+ ,"onComplete")}
+ );
+ h.to(n,{
+ alpha:.9,duration:.05,ease:"power2.out"}
+ ),h.to(n,{
+ alpha:0,duration:.22,ease:"power2.out"}
+ )}
+ startRevealRewards(){
+ if(this.rewardsRevealed=!0,!(this.grantedGem>0||this.grantedHonor>0||this.grantedHammer>0||this.grantedRuneTicket>0||Object.values(this.grantedPetPieces||{
+ }
+ ).some(t=>Number(t)>0)))return void(this.allRevealed=!0);
+ this.rewardContainer=this.buildRewardContainer(),this.gridContainer.addChild(this.rewardContainer);
+ const t=this.rewardContainer;
+ t.alpha=0,t.scale.set(.6);
+ const i=FO.timeline({
+ onComplete:Vt(()=>{
+ this.allRevealed=!0}
+ ,"onComplete")}
+ );
+ i.to(t,{
+ alpha:1,duration:.18,ease:"power2.out"}
+ ),i.to(t.scale,{
+ x:1,y:1,duration:.28,ease:"back.out(1.8)"}
+ ,"<")}
+ buildRewardContainer(){
+ var i,s;
+ const e=new Ge,n=[];
+ if(this.grantedGem>0){
+ const t=new He(QA.getTexture("UI_Ekkorr","UI_SHOP_GEM"));
+ t.scale.set(.7),n.push({
+ icon:t,label:new JD(String(this.grantedGem),cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18)}
+ )}
+ if(this.grantedHonor>0){
+ const t=new He(QA.getTexture("UI_Ekkorr","UI_COIN_Big"));
+ t.scale.set(.7),n.push({
+ icon:t,label:new JD(String(this.grantedHonor),cD.COLOR_PURPLE_PINK,cD.DEFAULT_FONT_OPTION_18)}
+ )}
+ if(this.grantedHammer>0){
+ const t=new He(QA.getTexture("UI_Ekkorr","Icon_Hammer_01")),s=null==(i=n[0])?void 0:i.icon.height;
+ s&&t.height>0?t.scale.set(s/t.height*.6):t.scale.set(.42),n.push({
+ icon:t,label:new JD(String(this.grantedHammer),cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_18)}
+ )}
+ if(this.grantedRuneTicket>0){
+ const t=new He(QA.getTexture("UI_Ekkorr","RuneTicket")),i=null==(s=n[0])?void 0:s.icon.height;
+ i&&t.height>0?t.scale.set(i/t.height*.8):t.scale.set(.8*.7),n.push({
+ icon:t,label:new JD(String(this.grantedRuneTicket),cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_18)}
+ )}
+ const h=Vt(t=>t.icon.width+8+t.label.width,"groupW"),r=n.reduce((t,i)=>t+h(i),0)+36*Math.max(0,n.length-1),o=Math.max(28,...n.map(t=>Math.max(t.icon.height,t.label.height)));
+ let a=.5*-r;
+ for(const t of n)t.icon.x=a,t.icon.y=.5*(o-t.icon.height),a+=t.icon.width+8,t.label.x=a,t.label.y=.5*(o-t.label.height),a+=t.label.width+36,e.addChild(t.icon,t.label);
+ const c=Object.entries(this.grantedPetPieces||{
+ }
+ ).map(([t,i])=>({
+ kindNum:Number(t),count:Number(i)}
+ )).filter(t=>t.count>0).sort((t,i)=>t.kindNum-i.kindNum);
+ let l=0;
+ if(c.length>0){
+ const t=22,i=[];
+ let s=0;
+ for(let e=0;
+ e<c.length;
+ e++){
+ const n=c[e],h=new J2;
+ h.setInactive(n.kindNum);
+ const r=new JD(`×${
+ n.count}
+ `,cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_18);
+ i.push({
+ icon:h,label:r}
+ ),s+=h.width,e<c.length-1&&(s+=t),l=Math.max(l,h.height)}
+ const n=o+12;
+ let h=.5*-s;
+ for(let r=0;
+ r<i.length;
+ r++){
+ const{
+ icon:s,label:o}
+ =i[r];
+ s.x=h,s.y=n+.5*(l-s.height),o.x=s.x+s.width-o.width-2,o.y=s.y+s.height-o.height-2,h+=s.width,r<i.length-1&&(h+=t),e.addChild(s,o)}
+ }
+ const u=VA.stageWidth||640,d=Math.max(1,Math.ceil(this.queue.length/t.COLS)),f=this.startY+d*this.iconNativeH*this.iconScale+(d-1)*t.GAP;
+ return e.x=.5*u,e.y=f+24,e}
+ forceShowRewards(){
+ if(!this.rewardsRevealed||this.rewardContainer){
+ if(!this.rewardsRevealed){
+ if(this.rewardsRevealed=!0,!(this.grantedGem>0||this.grantedHonor>0||this.grantedHammer>0||this.grantedRuneTicket>0||Object.values(this.grantedPetPieces||{
+ }
+ ).some(t=>Number(t)>0)))return;
+ this.rewardContainer=this.buildRewardContainer(),this.gridContainer.addChild(this.rewardContainer)}
+ this.rewardContainer&&(FO.killTweensOf(this.rewardContainer),FO.killTweensOf(this.rewardContainer.scale),this.rewardContainer.alpha=1,this.rewardContainer.scale.set(1))}
+ }
+ skip(){
+ if(!this.done){
+ this.timer&&(clearTimeout(this.timer),this.timer=0);
+ for(const t of Array.from(this.activePlaceholders))this.removePlaceholder(t);
+ for(const t of this.placedIcons)FO.killTweensOf(t),FO.killTweensOf(t.scale),t.visible=!0,t.alpha=1,t.scale.set(this.iconScale);
+ for(;
+ this.queueIdx<this.queue.length;
+ ){
+ const t=this.queue[this.queueIdx],i=this.spawnIcon(this.queueIdx,t);
+ i.visible=!0,i.alpha=1,i.scale.set(this.iconScale),this.queueIdx++}
+ this.forceShowRewards(),this.allRevealed=!0}
+ }
+ finish(){
+ this.done||(this.done=!0,this.timer&&(clearTimeout(this.timer),this.timer=0),window.setTimeout(()=>{
+ FO.to(this,{
+ alpha:0,duration:.25,ease:"power2.out",onComplete:Vt(()=>{
+ this.cleanup(),this.onCompleteCb()}
+ ,"onComplete")}
+ )}
+ ,400))}
+ cleanup(){
+ FO.killTweensOf(this),FO.killTweensOf(this.bg);
+ for(const t of Array.from(this.activePlaceholders))this.removePlaceholder(t);
+ for(const t of this.placedIcons)FO.killTweensOf(t),FO.killTweensOf(t.scale);
+ this.rewardContainer&&(FO.killTweensOf(this.rewardContainer),FO.killTweensOf(this.rewardContainer.scale)),this.parent&&this.parent.removeChild(this)}
+ }
+ ;
+ Vt(xjt,"SecretaryRevealOverlay"),Kt(xjt,"COLS",6),Kt(xjt,"GAP",6),Kt(xjt,"PAD_X",24),Kt(xjt,"PAD_TOP",80),Kt(xjt,"PAD_BOTTOM",80),Kt(xjt,"RESERVED_REWARD_H",200);
+ let Rjt=xjt;
+ const Njt=class t{
+ constructor(){
+ Kt(this,"timerId",0),Kt(this,"busy",!1)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ static loadFromStorage(){
+ return t._loadPromise||(t._loadPromise=(async()=>{
+ try{
+ const i=await $A.getSecretaryAutoEnabled();
+ t._cachedAutoEnabled=!1!==i}
+ catch{
+ t._cachedAutoEnabled=!0}
+ }
+ )()),t._loadPromise}
+ static isAutoEnabled(){
+ return t._cachedAutoEnabled}
+ static setAutoEnabled(i){
+ t._cachedAutoEnabled=i,$A.setSecretaryAutoEnabled(i).catch(()=>{
+ }
+ ),i||t.getInstance().cancel()}
+ async armOnLogin(){
+ await t.loadFromStorage(),t.isAutoEnabled()&&this.schedule(t.DELAY_LOGIN_MS)}
+ async armOnRebirth(){
+ await t.loadFromStorage(),t.isAutoEnabled()&&this.schedule(t.DELAY_REBIRTH_MS)}
+ cancel(){
+ this.timerId&&(clearTimeout(this.timerId),this.timerId=0)}
+ schedule(t){
+ this.cancel(),this.timerId=window.setTimeout(()=>{
+ this.timerId=0,this.tryShow()}
+ ,t)}
+ isBlockedByContext(){
+ return!jni.getInstance().isIdleBattleActive()||!!xL.getInstance().hasPopup||NU.getInstance().children.length>0}
+ async tryShow(){
+ var i,s,e,n,h,r,o,a,c,l,u,d,f,p,g,m,w,v,b,_;
+ if(!this.busy)if(this.isBlockedByContext())this.schedule(t.RETRY_BLOCKED_MS);
+ else if(!(ML.maxWave<t.UNLOCK_MAX_WAVE)){
+ this.busy=!0;
+ try{
+ const t=await rD.getInstance().assistant.getState(!1);
+ if(!t.success)return;
+ const y=null==(s=null==(i=t.body)?void 0:i.assistant)?void 0:s.nextClaimAt;
+ if("number"!=typeof y)return;
+ if(tx.time<y)return;
+ if(xL.getInstance().hasPopup)return;
+ const M=await rD.getInstance().assistant.claim();
+ if(!M.success)return;
+ (null==(e=M.body)?void 0:e.user)&&(ML.setUserData(M.body.user),kF.getInstance().updateAll()),(null==(n=M.body)?void 0:n.hero)&&wx.getInstance().setData(M.body.hero),(null==(h=M.body)?void 0:h.pet)&&cx.getInstance().setData(M.body.pet),Gjt.getInstance().updateFromAssistantBody(null==(r=M.body)?void 0:r.assistant);
+ const E=(null==(a=null==(o=M.body)?void 0:o.claim)?void 0:a.granted)??{
+ }
+ ;
+ if(0===Object.keys(E).length)return;
+ if(xL.getInstance().hasPopup)return;
+ const A=(null==(l=null==(c=M.body)?void 0:c.claim)?void 0:l.gem)??0,S=(null==(d=null==(u=M.body)?void 0:u.claim)?void 0:d.honorCoin)??0,T=(null==(p=null==(f=M.body)?void 0:f.claim)?void 0:p.petPieces)??{
+ }
+ ,C=(null==(m=null==(g=M.body)?void 0:g.claim)?void 0:m.hammer)??0;
+ C>0&&jG.getInstance().isStatusLoaded&&(jG.getInstance().status.hammerCount+=C);
+ const I=(null==(v=null==(w=M.body)?void 0:w.claim)?void 0:v.runeTicket)??0,k="premium"===(null==(_=null==(b=M.body)?void 0:b.assistant)?void 0:_.tier)?"premium":"basic";
+ Ijt.getInstance().showResult(E,A,S,k,T,C,I,null,!0),cS.getInstance().dispatchCustomEvent("AssistantClaim")}
+ finally{
+ this.busy=!1}
+ }
+ }
+ }
+ ;
+ Vt(Njt,"SecretaryAutoTrigger"),Kt(Njt,"_instance"),Kt(Njt,"DELAY_LOGIN_MS",6e4),Kt(Njt,"DELAY_REBIRTH_MS",3e4),Kt(Njt,"UNLOCK_MAX_WAVE",100),Kt(Njt,"RETRY_BLOCKED_MS",5e3),Kt(Njt,"_cachedAutoEnabled",!0),Kt(Njt,"_loadPromise",null);
+ let Pjt=Njt;
+ const Djt=Object.freeze(Object.defineProperty({
+ __proto__:null,SecretaryAutoTrigger:Pjt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Ljt=class t{
+ constructor(){
+ Kt(this,"cached",null),Kt(this,"inflight",null)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ peek(){
+ return this.cached}
+ async getState(t=!1){
+ return!t&&this.cached?this.cached:(this.inflight||(this.inflight=(async()=>{
+ var t;
+ try{
+ const i=await rD.getInstance().assistant.getState(!1);
+ return(null==i?void 0:i.success)?(this.applyAssistantBody(null==(t=i.body)?void 0:t.assistant),this.cached):this.cached}
+ finally{
+ this.inflight=null}
+ }
+ )()),this.inflight)}
+ updateFromAssistantBody(t){
+ this.applyAssistantBody(t)}
+ invalidate(){
+ this.cached=null}
+ applyAssistantBody(t){
+ if(!t||"object"!=typeof t)return;
+ const i=t,s=this.cached,e="premium"===i.tier?"premium":"basic";
+ let n=(null==s?void 0:s.petEvent)??null;
+ if("petEvent"in i){
+ const t=i.petEvent;
+ if(null===t)n=null;
+ else if(t&&"object"==typeof t){
+ const i=t;
+ n={
+ kindNums:Array.isArray(i.kindNums)?i.kindNums.map(t=>"number"==typeof t?t:0).filter(t=>t>0):[],basicDailyCount:"number"==typeof i.basicDailyCount?i.basicDailyCount:0,premiumDailyCount:"number"==typeof i.premiumDailyCount?i.premiumDailyCount:0}
+ }
+ }
+ this.cached={
+ nextClaimAt:"number"==typeof i.nextClaimAt?i.nextClaimAt:(null==s?void 0:s.nextClaimAt)??0,petEvent:n,tier:e}
+ }
+ async checkClaimable(){
+ if(ML.maxWave<Pjt.UNLOCK_MAX_WAVE)return!1;
+ let t=this.peek();
+ if(t||await this.getState(!1),t=this.peek(),!t)return!1;
+ const i=tx.time;
+ return!(t.nextClaimAt-i>0)}
+ }
+ ;
+ Vt(Ljt,"SecretaryDataManager"),Kt(Ljt,"_instance");
+ let Gjt=Ljt;
+ const Bjt=class{
+ }
+ ;
+ Vt(Bjt,"MenuState"),Kt(Bjt,"currentIndex",0);
+ let Ujt=Bjt;
+ const Fjt=class t{
+ constructor(){
+ Kt(this,"currentMissionId",1),Kt(this,"rewardPending",!1),Kt(this,"missionList",[]),Kt(this,"stepList",[]),Kt(this,"petStep",0)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ if(this.missionList=[],t)for(let i=0;
+ i<t.length;
+ i++){
+ const s=t[i],e=new $jt;
+ e.kindNum=Number(s.kindNum)||0,e.desc=s.desc||"",e.gem=Number(s.gem)||0,e.condition=s.condition||"",e.sortOrder=Number(s.sortOrder)||0,this.missionList.push(e)}
+ }
+ setStepBookData(t){
+ if(this.stepList=[],t)for(let i=0;
+ i<t.length;
+ i++){
+ const s=t[i],e=new Vjt;
+ e.id=Number(s.id)||0,e.step=Number(s.step)||0,e.action=s.action||"",e.target=Number(s.target)??-1,e.param=s.param||"-1",this.stepList.push(e)}
+ }
+ getCurrentMission(){
+ return this.missionList.find(t=>t.kindNum===this.currentMissionId)||null}
+ getCurrentSteps(){
+ return this.stepList.filter(t=>t.id===this.currentMissionId).sort((t,i)=>t.step-i.step)}
+ getSteps(t){
+ return this.stepList.filter(i=>i.id===t).sort((t,i)=>t.step-i.step)}
+ isAllCompleted(){
+ if(0===this.missionList.length)return!0;
+ const t=Math.max(...this.missionList.map(t=>t.kindNum));
+ return this.currentMissionId>t}
+ async loadInfo(){
+ const t=await rD.getInstance().missionGuide.getInfo();
+ t.success&&t.body&&(ML.setUserInfo(t.body),t.body.missionGuide&&(this.currentMissionId=t.body.missionGuide.currentMissionId,this.rewardPending=t.body.missionGuide.rewardPending))}
+ async completeMission(t){
+ const i=await rD.getInstance().missionGuide.complete(t);
+ return!(!i.success||!i.body||(i.body.missionGuide&&(this.currentMissionId=i.body.missionGuide.currentMissionId,this.rewardPending=i.body.missionGuide.rewardPending),0))}
+ async claimReward(t){
+ var i;
+ const s=await rD.getInstance().missionGuide.claim(t);
+ return s.success&&s.body?(ML.setUserInfo(s.body),s.body.missionGuide&&(this.currentMissionId=s.body.missionGuide.currentMissionId,this.rewardPending=s.body.missionGuide.rewardPending),(null==(i=s.body.reward)?void 0:i.gem)||0):0}
+ }
+ ;
+ Vt(Fjt,"MissionGuideDataManager"),Kt(Fjt,"instance"),Kt(Fjt,"KINDNUM_DUNGEON",24),Kt(Fjt,"KINDNUM_PVP",27),Kt(Fjt,"KINDNUM_TOWER",28);
+ let Hjt=Fjt;
+ const Wjt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"desc",""),Kt(this,"gem",0),Kt(this,"condition",""),Kt(this,"sortOrder",0)}
+ getDescKey(){
+ return`MISSION_GUIDE_DESC_${
+ this.kindNum}
+ `}
+ }
+ ;
+ Vt(Wjt,"MissionGuideVO");
+ let $jt=Wjt;
+ const jjt=class{
+ constructor(){
+ Kt(this,"id",0),Kt(this,"step",0),Kt(this,"action",""),Kt(this,"target",-1),Kt(this,"param","-1")}
+ }
+ ;
+ Vt(jjt,"MissionGuideStepVO");
+ let Vjt=jjt;
+ const Kjt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"sp",new He),Kt(this,"count",0),Kt(this,"_height",82*1.2),this.addChild(this.sp)}
+ static async load(){
+ this.ready||(await QA.generateTexture("LevelUp","ktx2",!1),this.textures=QA.getTextures("LevelUp","LevelUp"),this.ready=!0)}
+ static get(){
+ const i=this.pool.length>0?this.pool.pop():new t;
+ return i.visible=!0,i}
+ static release(t){
+ t.visible=!1,t.removeFromParent(),this.pool.push(t)}
+ play(i,s,e){
+ this.x=s,this.y=e,this.scale.set(1.2),this.count=0,this.sp.texture=t.textures[0],LM.getInstance().add(this.onEnter,this),i.addChild(this),zL.getInstance().playSFX(zL.SFX_LEVEL_UP)}
+ onEnter(){
+ this.count++,this.count<t.textures.length?this.sp.texture=t.textures[this.count]:(LM.getInstance().remove(this.onEnter,this),t.release(this))}
+ get height(){
+ return this._height}
+ }
+ ;
+ Vt(Kjt,"ClickEffect"),Kt(Kjt,"pool",[]),Kt(Kjt,"textures"),Kt(Kjt,"ready",!1);
+ let zjt=Kjt;
+ const qjt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"onVisibilityChanged",null),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"lblGem"),Kt(this,"lblDesc"),Kt(this,"lblTitle"),Kt(this,"gem"),Kt(this,"onClaim",null),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.x=20,this.bg.width=380,this.bg.height=60,this.bg.alpha=.3,this.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Ekkorr","UI_SKILL_BASE")),this.icon.x=0,this.icon.y=0,this.addChild(this.icon),this.gem=new He(QA.getTexture("UI_Ekkorr","UI_GEM")),this.gem.x=this.icon.x+.5*(this.icon.width-this.gem.width),this.gem.y=this.icon.y+.28*(this.icon.height-this.gem.height),this.addChild(this.gem),this.lblGem=new JD("10",52377,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblGem.textColor=cD.COLOR_DEEP_SKYBLUE,this.lblGem.x=.5*(this.icon.width-this.lblGem.width),this.lblGem.y=this.icon.height-this.lblGem.height-12,this.addChild(this.lblGem),this.lblTitle=new JD("[ 미션 - 1 ]",52377,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblTitle.textColor=cD.DEFAULT_COLOR,this.lblTitle.x=this.icon.x+this.icon.width,this.lblTitle.y=9,this.addChild(this.lblTitle),this.lblDesc=new JD("1번 퀘스트 레벨 5 달성",52377,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDesc.textColor=cD.DEFAULT_COLOR,this.lblDesc.x=this.lblTitle.x,this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblDesc),this.activated=!1,super.visible=!1,this.eventMode="static",this.cursor="pointer",this.on("pointertap",this.onClick,this)}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ set visible(t){
+ super.visible!==t&&(super.visible=t,this.onVisibilityChanged&&this.onVisibilityChanged(t))}
+ get visible(){
+ return super.visible}
+ onClick(){
+ Hjt.getInstance().rewardPending&&this.onClaim&&(this.playClaimEffect(),this.onClaim())}
+ playClaimEffect(){
+ zjt.get().play(this,this.icon.x+.5*this.icon.width-50,this.icon.y+.5*this.icon.height-60);
+ const t=this.gem.getGlobalPosition(),i=VA.stage.toLocal(t),s=i.x+.5*this.gem.width-14,e=i.y+.5*this.gem.height-20;
+ Xt(async()=>{
+ const{
+ RewardController:t}
+ =await Promise.resolve().then(()=>Z6t);
+ return{
+ RewardController:t}
+ }
+ ,void 0).then(({
+ RewardController:t}
+ )=>{
+ t.getInstance().getGem(s,e,10,4)}
+ )}
+ setData(t){
+ this.lblGem.text=t.gem.toString(),this.lblGem.x=this.icon.x+.5*(this.icon.width-this.lblGem.width),this.lblTitle.text=`[ ${
+ SG.getText("GAME_409","미션")}
+  ${
+ t.sortOrder}
+  ]`,this.lblDesc.text=SG.getText(t.getDescKey(),t.desc)}
+ set activated(t){
+ 1==t?(this.bg.tint=16777215,this.icon.tint=16777215,this.gem.tint=16777215,this.lblGem.textColor=cD.COLOR_DEEP_SKYBLUE):(this.bg.tint=10066329,this.icon.tint=10066329,this.gem.tint=10066329,this.lblGem.textColor=10066329)}
+ }
+ ;
+ Vt(qjt,"MissionGuide"),Kt(qjt,"instance");
+ let Yjt=qjt;
+ const Xjt=class t{
+ constructor(){
+ Kt(this,"battlePoolMap",{
+ }
+ ),Kt(this,"seasonSetMap",{
+ }
+ ),Kt(this,"rewardMap",{
+ }
+ ),Kt(this,"seasonSetKindNum",0),Kt(this,"seasonNumber",0),Kt(this,"seasonEndTime",0),Kt(this,"currentFloor",0),Kt(this,"floorStars",[]),Kt(this,"ticket",0),Kt(this,"maxTicket",5),Kt(this,"ticketTime",0),Kt(this,"currentBattleFloor",0),Kt(this,"bookLoaded",!1),Kt(this,"seasonRotation",1e6)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBattlePoolData(t){
+ if(this.battlePoolMap={
+ }
+ ,t)for(const i of t){
+ const t=new Zjt;
+ t.kindNum=i.kindNum,t.difficulty=i.difficulty,t.enemyKindNums=i.enemyKindNums||"",t.enemyTrans=i.enemyTrans||"",t.enemyShields=i.enemyShields||"",t.enemyLevels=i.enemyLevels||"",t.tribes=i.tribes,t.gradeMax=i.gradeMax,t.femaleExclude=i.femaleExclude,t.maleExclude=i.maleExclude,t.rangeExclude=i.rangeExclude,t.meleeExclude=i.meleeExclude,t.airExclude=i.airExclude,t.star1=i.star1,t.star2=i.star2,t.star3=i.star3,this.battlePoolMap[t.kindNum]=t}
+ }
+ setSeasonSetData(t){
+ if(this.seasonSetMap={
+ }
+ ,t)for(const i of t){
+ const t=new iVt;
+ t.kindNum=i.kindNum,t.battleIDs=i.battleIDs,this.seasonSetMap[t.kindNum]=t}
+ }
+ setRewardData(t){
+ if(this.rewardMap={
+ }
+ ,t)for(const i of t){
+ const t=new eVt;
+ t.floor=i.floor,t.gem1=i.gem1,t.gem2=i.gem2,t.gem3=i.gem3,t.honor1=i.honor1,t.honor2=i.honor2,t.honor3=i.honor3,this.rewardMap[t.floor]=t}
+ }
+ get seasonIndex(){
+ return(this.seasonNumber-1)%this.seasonRotation+1}
+ setData(t){
+ for(this.seasonSetKindNum=t.seasonSetKindNum,this.seasonNumber=t.seasonNumber||0,this.seasonEndTime=t.seasonEndTime?new Date(t.seasonEndTime).getTime():0,this.currentFloor=t.currentFloor,this.floorStars=t.floorStars||[];
+ this.floorStars.length<30;
+ )this.floorStars.push(0);
+ this.ticket=t.ticket,this.maxTicket=t.maxTicket,this.ticketTime=new Date(t.ticketTime).getTime()+1e3,this.currentBattleFloor=t.currentBattleFloor}
+ getFloorList(){
+ const t=this.seasonSetMap[this.seasonSetKindNum];
+ if(!t)return[];
+ const i=t.battleIDs.split("|").map(Number),s=[],e=Math.min(this.currentFloor+1,30);
+ for(let n=0;
+ n<e;
+ n++){
+ const t=this.battlePoolMap[i[n]];
+ if(!t)continue;
+ const e=new hVt;
+ e.floor=n+1,e.stars=this.floorStars[n]||0,e.battleVO=t,e.reward=this.rewardMap[n+1],e.isCleared=this.floorStars[n]>0,e.isNext=n+1===this.currentFloor+1,s.push(e)}
+ return s}
+ getFloorListReversed(){
+ return this.getFloorList().reverse()}
+ getBattlePool(t){
+ return this.battlePoolMap[t]}
+ buildFloorVO(t){
+ if(t<1||t>30)return null;
+ const i=this.seasonSetMap[this.seasonSetKindNum];
+ if(!i)return null;
+ const s=i.battleIDs.split("|").map(Number),e=t-1;
+ if(e>=s.length)return null;
+ const n=this.battlePoolMap[s[e]];
+ if(!n)return null;
+ const h=new hVt;
+ return h.floor=t,h.stars=this.floorStars[e]||0,h.battleVO=n,h.reward=this.rewardMap[t],h.isCleared=this.floorStars[e]>0,h.isNext=t===this.currentFloor+1,h}
+ getReward(t){
+ return this.rewardMap[t]}
+ }
+ ;
+ Vt(Xjt,"TowerDataManager"),Kt(Xjt,"instance");
+ let Jjt=Xjt;
+ const Qjt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"difficulty",0),Kt(this,"enemyKindNums",""),Kt(this,"enemyTrans",""),Kt(this,"enemyShields",""),Kt(this,"enemyLevels",""),Kt(this,"tribes","0"),Kt(this,"gradeMax",0),Kt(this,"femaleExclude","N"),Kt(this,"maleExclude","N"),Kt(this,"rangeExclude","N"),Kt(this,"meleeExclude","N"),Kt(this,"airExclude","N"),Kt(this,"star1",0),Kt(this,"star2",0),Kt(this,"star3",0)}
+ static parseEnemies(t){
+ const i=new Array(20).fill(null);
+ if(!t||!t.enemyKindNums)return i;
+ const s=String(t.enemyKindNums).split("|"),e=Math.min(s.length,20);
+ for(let n=0;
+ n<e;
+ n++){
+ const t=s[n].trim();
+ if(!t||"0"===t)continue;
+ const e=t.indexOf("-"),h=e>=0?t.substring(0,e):t,r=e>=0?t.substring(e+1):"0",o=Number(h);
+ o>0&&(i[n]={
+ kindNum:o,trans:Number(r)||0}
+ )}
+ return i}
+ static stringifyEnemies(t,i){
+ let s=-1;
+ for(let n=19;
+ n>=0;
+ n--)if((t[n]??-1)>0){
+ s=n;
+ break}
+ if(s<0)return"";
+ const e=[];
+ for(let n=0;
+ n<=s;
+ n++){
+ const s=t[n]??-1;
+ s<=0?e.push("0"):e.push(`${
+ s}
+ -${
+ i[n]??0}
+ `)}
+ return e.join("|")}
+ }
+ ;
+ Vt(Qjt,"TowerBattlePoolVO");
+ let Zjt=Qjt;
+ const tVt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"battleIDs","")}
+ }
+ ;
+ Vt(tVt,"TowerSeasonSetVO");
+ let iVt=tVt;
+ const sVt=class{
+ constructor(){
+ Kt(this,"floor",0),Kt(this,"gem1",0),Kt(this,"gem2",0),Kt(this,"gem3",0),Kt(this,"honor1",0),Kt(this,"honor2",0),Kt(this,"honor3",0)}
+ }
+ ;
+ Vt(sVt,"TowerRewardVO");
+ let eVt=sVt;
+ const nVt=class{
+ constructor(){
+ Kt(this,"floor",0),Kt(this,"stars",0),Kt(this,"battleVO"),Kt(this,"reward"),Kt(this,"isCleared",!1),Kt(this,"isNext",!1)}
+ }
+ ;
+ Vt(nVt,"TowerFloorVO");
+ let hVt=nVt;
+ const rVt=class t{
+ constructor(){
+ Kt(this,"lastFetchTime",0),Kt(this,"hasData",!1),Kt(this,"dungeonRechargeMs",0),Kt(this,"towerRechargeMs",0),Kt(this,"towerSnapshot",null),Kt(this,"pvpSnapshot",null),Kt(this,"dailyRankingSnapshot",null)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ setSummary(t){
+ if(t){
+ if(this.hasData=!0,this.lastFetchTime=tx.time,t.dungeon){
+ this.dungeonRechargeMs=t.dungeon.ticketRechargeMs??0;
+ const i=Nx.getInstance();
+ i.ticket=t.dungeon.ticket??i.ticket,i.maxTicket=t.dungeon.maxTicket??i.maxTicket,t.dungeon.ticketTime&&(i.ticketTime=new Date(t.dungeon.ticketTime).getTime()+1e3)}
+ if(t.tower){
+ this.towerRechargeMs=t.tower.ticketRechargeMs??0;
+ const i=Jjt.getInstance();
+ i.seasonNumber>0&&(i.ticket=t.tower.ticket??i.ticket,i.maxTicket=t.tower.maxTicket??i.maxTicket,t.tower.ticketTime&&(i.ticketTime=new Date(t.tower.ticketTime).getTime()+1e3),void 0!==t.tower.currentFloor&&(i.currentFloor=t.tower.currentFloor),void 0!==t.tower.seasonNumber&&(i.seasonNumber=t.tower.seasonNumber),t.tower.seasonEndTime&&(i.seasonEndTime=new Date(t.tower.seasonEndTime).getTime())),this.towerSnapshot={
+ seasonNumber:t.tower.seasonNumber??0,seasonEndTime:t.tower.seasonEndTime?new Date(t.tower.seasonEndTime).getTime():0,currentFloor:t.tower.currentFloor??0,ticket:t.tower.ticket??0,maxTicket:t.tower.maxTicket??0,ticketTime:t.tower.ticketTime?new Date(t.tower.ticketTime).getTime():0}
+ }
+ this.pvpSnapshot=t.pvp??null,this.dailyRankingSnapshot=t.dailyRanking??null}
+ }
+ has(){
+ return this.hasData}
+ isStale(t){
+ return!this.hasData||tx.time-this.lastFetchTime>=t}
+ getDungeon(){
+ if(!this.hasData)return null;
+ const t=Nx.getInstance();
+ return{
+ ticket:t.ticket,maxTicket:t.maxTicket,ticketTime:t.ticketTime,ticketRechargeMs:this.dungeonRechargeMs}
+ }
+ getTower(){
+ if(!this.hasData)return null;
+ const t=Jjt.getInstance();
+ return t.seasonNumber>0?{
+ seasonNumber:t.seasonNumber,seasonEndTime:t.seasonEndTime,currentFloor:t.currentFloor,ticket:t.ticket,maxTicket:t.maxTicket,ticketTime:t.ticketTime,ticketRechargeMs:this.towerRechargeMs}
+ :this.towerSnapshot?{
+ ...this.towerSnapshot,ticketRechargeMs:this.towerRechargeMs}
+ :null}
+ getPvp(){
+ return this.pvpSnapshot}
+ updatePvpTicket(t,i){
+ this.pvpSnapshot&&(this.pvpSnapshot.ticket=t,void 0!==i&&(this.pvpSnapshot.ticketTime=i))}
+ getDailyRanking(){
+ return this.dailyRankingSnapshot}
+ updateDailyRanking(t,i){
+ this.dailyRankingSnapshot?(this.dailyRankingSnapshot.joined=t,this.dailyRankingSnapshot.score=i):this.dailyRankingSnapshot={
+ joined:t,score:i,date:""}
+ }
+ invalidate(){
+ this.lastFetchTime=0}
+ }
+ ;
+ Vt(rVt,"BattleSummaryManager"),Kt(rVt,"instance");
+ let oVt=rVt;
+ var aVt=(t=>(t.REBIRTH="REBIRTH",t.INFINITE_RANK="INFINITE_RANK",t.DUNGEON="DUNGEON",t.SPIRIT_LAND="SPIRIT_LAND",t.DAILY_RANK="DAILY_RANK",t.TOWER="TOWER",t.AD_VIEW="AD_VIEW",t))(aVt||{
+ }
+ );
+ const cVt=class t{
+ constructor(){
+ Kt(this,"baseDate",""),Kt(this,"quests",[]),Kt(this,"milestones",[]),Kt(this,"totalScore",0),Kt(this,"_dirty",!0),Kt(this,"_refreshing",!1)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ setData(t){
+ t&&(this.baseDate=String(t.baseDate??""),this.quests=Array.isArray(t.quests)?t.quests.map(t=>this.toQuestVO(t)):[],this.milestones=Array.isArray(t.milestones)?t.milestones.map(t=>this.toMilestoneVO(t)):[],this.totalScore=Number(t.totalScore??0),this._dirty=!1)}
+ markDirty(){
+ this._dirty=!0,this.refreshInBackground()}
+ async refreshInBackground(){
+ var t;
+ if(!this._refreshing){
+ this._refreshing=!0;
+ try{
+ const i=await rD.getInstance().dailyQuest.getInfo(!1);
+ if(!(null==i?void 0:i.success))return;
+ (null==(t=i.body)?void 0:t.dailyQuest)&&this.setData(i.body.dailyQuest)}
+ catch{
+ }
+ finally{
+ this._refreshing=!1}
+ }
+ }
+ needsRefresh(){
+ return!!this._dirty||!this.baseDate||this.baseDate!==this.getUtc0DateKey()}
+ getUtc0DateKey(){
+ const t=new Date(tx.time);
+ return`${
+ t.getUTCFullYear()}
+ -${
+ (t.getUTCMonth()+1).toString().padStart(2,"0")}
+ -${
+ t.getUTCDate().toString().padStart(2,"0")}
+ `}
+ toQuestVO(t){
+ return{
+ type:t.type,progress:Number(t.progress??0),target:Number(t.target??0),score:Number(t.score??0),reward:t.reward??{
+ }
+ ,claimed:!!t.claimed}
+ }
+ toMilestoneVO(t){
+ return{
+ score:Number(t.score??0),reward:t.reward??{
+ }
+ ,claimed:!!t.claimed,claimable:!!t.claimable}
+ }
+ getQuest(t){
+ return this.quests.find(i=>i.type===t)}
+ getClaimableQuestCount(){
+ let t=0;
+ for(const i of this.quests)!i.claimed&&i.progress>=i.target&&t++;
+ return t}
+ getClaimableMilestoneCount(){
+ let t=0;
+ for(const i of this.milestones)i.claimable&&t++;
+ return t}
+ hasClaimable(){
+ return this.getClaimableQuestCount()+this.getClaimableMilestoneCount()>0}
+ }
+ ;
+ Vt(cVt,"DailyQuestDataManager"),Kt(cVt,"_instance");
+ let lVt=cVt;
+ const uVt=Object.freeze(Object.defineProperty({
+ __proto__:null,DailyQuestDataManager:lVt,DailyQuestType:aVt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),dVt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"main",0),Kt(this,"sub",0),Kt(this,"type",""),Kt(this,"num",0),Kt(this,"gem",0)}
+ getNameKey(){
+ return`ACHIEVEMENT_NAME_${
+ this.main}
+ `}
+ getDescKey(){
+ return`ACHIEVEMENT_DESC_${
+ this.main}
+ `}
+ }
+ ;
+ Vt(dVt,"AchievementVO");
+ let fVt=dVt;
+ const pVt=class{
+ constructor(){
+ Kt(this,"main",0),Kt(this,"type",""),Kt(this,"value",0),Kt(this,"claimedSub",0)}
+ }
+ ;
+ Vt(pVt,"AchievementStatusVO");
+ let gVt=pVt;
+ const mVt=class t{
+ constructor(){
+ Kt(this,"objBook",{
+ }
+ ),Kt(this,"mainArray",[]),Kt(this,"objTypeByMain",{
+ }
+ ),Kt(this,"objMainByType",{
+ }
+ ),Kt(this,"requestPending1",!1),Kt(this,"statusList",[]),Kt(this,"statusObj",{
+ }
+ )}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ if(0==Array.isArray(t))return;
+ const i=t.length;
+ for(let s=0;
+ s<i;
+ ++s){
+ const i=t[s],e=new fVt;
+ e.kindNum=Number(i.kindNum),e.main=Number(i.main),e.sub=Number(i.sub),e.type=i.type.toString(),e.num=Number(i.num),e.gem=Number(i.gem),this.objBook[e.main]||(this.objBook[e.main]=[]),this.objBook[e.main].push(e)}
+ for(const s in this.objBook){
+ const t=Number(s),i=this.objBook[s][0].type;
+ this.mainArray.push(t),this.objTypeByMain[t]=i,this.objMainByType[i]=t}
+ this.mainArray.sort()}
+ getListWithMain(t){
+ return this.objBook[t]}
+ getMainArray(){
+ return this.mainArray}
+ setData(t){
+ }
+ updateAfterClaim(t,i,s){
+ }
+ async getStatus(t=!1){
+ if(this.requestPending1)return;
+ this.requestPending1=!0;
+ const i=await rD.getInstance().achievement.getStatus(t);
+ if(0==i.success)return this.requestPending1=!1,void cS.getInstance().dispatchCustomEvent("AchieveStatus");
+ this.setStatusData(i.body),this.requestPending1=!1,cS.getInstance().dispatchCustomEvent("AchieveStatus")}
+ setStatusData(t){
+ if(!t||!t.list)return;
+ this.statusList.length=0;
+ const i=t.list.length;
+ for(let s=0;
+ s<i;
+ ++s){
+ const i=t.list[s],e=new gVt;
+ e.type=i.type.toString(),e.value=Number(i.value),e.claimedSub=Number(i.claimedSub),e.main=this.objMainByType[e.type],this.statusList.push(e),this.statusObj[e.main]=e}
+ this.statusList.sort((t,i)=>t.main-i.main)}
+ getStatusList(){
+ return this.statusList}
+ getStatusWithMain(t){
+ return this.statusObj[t]}
+ getClaimedAchievements(){
+ const t=[];
+ for(const i of this.statusList)i.claimedSub>0&&t.push({
+ type:i.type,main:i.main}
+ );
+ return t}
+ hasReward(){
+ const t=this.statusList.length;
+ for(let i=0;
+ i<t;
+ ++i)if(1==this.hasRewardWithMain(this.statusList[i].main))return!0;
+ return!1}
+ hasRewardWithMain(t){
+ const i=this.getListWithMain(t);
+ if(!i)return!1;
+ const s=this.getStatusWithMain(t);
+ if(!s)return!1;
+ const e=i[i.length-1];
+ let n;
+ return n=s.claimedSub<e.sub?i[s.claimedSub]:e,!(s.value<n.num||s.claimedSub==n.sub)}
+ }
+ ;
+ Vt(mVt,"AchievementDataManager"),Kt(mVt,"instance");
+ let wVt=mVt;
+ const vVt=Object.freeze(Object.defineProperty({
+ __proto__:null,AchievementDataManager:wVt,AchievementStatusVO:gVt,AchievementVO:fVt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),bVt=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 rD.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,cS.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 rD.getInstance().referral.claimReward(i,!0);
+ if(0==s.success){
+ this.requestPending3=!1,cS.getInstance().dispatchCustomEvent("ReferralStatus");
+ let e=s.errorMessage;
+ const n=s.error;
+ return"INSUFFICIENT_REFERRAL"==n?e=SG.getValueReplaceMulti("GAME_145",["##","@@"],[t.FRIEND_LEVEL,i]):"ALREADY_CLAIMED"==n&&(e=SG.getText("COMMON_276","이미 보상을 받았습니다.")),void wG.getInstance().show(e)}
+ "status"in s.body&&this.setStatusData(s.body.status),this.requestPending3=!1,cS.getInstance().dispatchCustomEvent("ReferralStatus",s)}
+ static hasReward(){
+ return this.claimed<this.qualifiedReferrals}
+ }
+ ;
+ Vt(bVt,"FriendInviteManager"),Kt(bVt,"FRIEND_LEVEL",50),Kt(bVt,"GEM_PER_FRIEND",100),Kt(bVt,"_referralCode",""),Kt(bVt,"requestPending1",!1),Kt(bVt,"requestPending2",!1),Kt(bVt,"_totalReferrals",0),Kt(bVt,"_qualifiedReferrals",0),Kt(bVt,"_claimed",0),Kt(bVt,"rewardList",[]),Kt(bVt,"requestPending3",!1);
+ let _Vt=bVt;
+ var yVt=(t=>(t.GAME="GAME",t.PAYMENT="PAYMENT",t))(yVt||{
+ }
+ );
+ const MVt=class{
+ constructor(){
+ Kt(this,"index",-1),Kt(this,"id"),Kt(this,"gameId"),Kt(this,"title"),Kt(this,"content"),Kt(this,"rewards"),Kt(this,"receivedAt"),Kt(this,"createdAt"),Kt(this,"mailType"),Kt(this,"typeArray"),Kt(this,"subTypeArray"),Kt(this,"amountArray"),Kt(this,"gradeArray"),Kt(this,"kindNumArray"),this.index=-1,this.id=-1,this.gameId="",this.title="",this.content="",this.rewards=[],this.createdAt=null,this.receivedAt=null,this.mailType="",this.typeArray=[],this.subTypeArray=[],this.amountArray=[],this.gradeArray=[],this.kindNumArray=[]}
+ setData(t,i){
+ t&&(this.id=Number(t.id),this.gameId=String(t.gameId),this.title=t.title,this.content=t.content,this.rewards=t.rewards,this.createdAt=t.createdAt,t.receivedAt?this.receivedAt=t.receivedAt:this.receivedAt=null,this.mailType=i,this.typeArray.length=0,this.subTypeArray.length=0,this.amountArray.length=0,this.gradeArray.length=0,this.kindNumArray.length=0)}
+ get hasReward(){
+ return!(!this.rewards||0==this.rewards.length)&&Object.values(this.rewards).some(t=>!!t&&("number"==typeof t?t>0:!!t))}
+ get hasClaimableReward(){
+ return this.hasReward&&null==this.receivedAt}
+ get isDeletable(){
+ return null!=this.receivedAt}
+ reset(){
+ this.index=-1,this.id=-1,this.gameId="",this.title="",this.content="",this.rewards.length=0,this.createdAt=null,this.receivedAt=null,this.mailType="",this.typeArray.length=0,this.subTypeArray.length=0,this.amountArray.length=0,this.gradeArray.length=0,this.kindNumArray.length=0}
+ }
+ ;
+ Vt(MVt,"MailVO");
+ let EVt=MVt;
+ const AVt=class{
+ static async getMailList(t=1){
+ let i=await rD.getInstance().mail.list(t,this.pageSize);
+ 0!=i.success?t>this.page?this.setData(i.body,!0):this.setData(i.body):cS.getInstance().dispatchCustomEvent("MailUpdate")}
+ static setData(t,i=!1){
+ let s,e,n,h;
+ if(t.mailList){
+ const r=t.mailList;
+ for(0==i?(h=[...this.gameList],this.gameList.length=0):h=[],e=r.length,s=0;
+ s<e;
+ ++s){
+ r[s].content=this.filterContent(r[s].content);
+ const t=Number(r[s].id),i=h.findIndex(i=>i.id===t);
+ -1===i?n=this.getMailEmptyVO():(n=h.splice(i,1)[0],n.reset()),n.setData(r[s],yVt.GAME),this.gameList.push(n),this.gameMailMap[n.id]=n}
+ this.addListPool(h)}
+ if(t.paymentMailList){
+ const r=t.paymentMailList;
+ for(0==i?(h=[...this.paymentList],this.paymentList.length=0):h=[],e=r.length,s=0;
+ s<e;
+ ++s){
+ r[s].content=this.filterContent(r[s].content);
+ const t=Number(r[s].id),i=h.findIndex(i=>i.id===t);
+ -1===i?n=this.getMailEmptyVO():(n=h.splice(i,1)[0],n.reset()),n.setData(r[s],yVt.PAYMENT),this.paymentList.push(n),this.paymentMailMap[n.id]=n,n.index=this.paymentList.length}
+ this.addListPool(h)}
+ "mailTotal"in t&&(this.mailsTotal=Number(t.mailTotal)),"mailTotalPages"in t&&(this.mailTotalPages=Number(t.mailTotalPages)),"paymentTotal"in t&&(this.paymentMailsTotal=Number(t.paymentTotal)),"paymentTotalPages"in t&&(this.paymentTotalPages=Number(t.paymentTotalPages)),this.updatePage(),this.updateNeeded=!1,cS.getInstance().dispatchCustomEvent("MailUpdate"),this.log()}
+ static filterContent(t){
+ return t.replace(/\r\n/g,"\n")}
+ static onMailDeleteAndUpdate(t){
+ t==yVt.PAYMENT?(this.paymentMailsTotal>0&&this.paymentMailsTotal--,this.paymentTotalPages=Math.floor((this.paymentMailsTotal-1)/this.pageSize)+1):(this.mailsTotal>0&&this.mailsTotal--,this.mailTotalPages=Math.floor((this.mailsTotal-1)/this.pageSize)+1),this.updatePage()}
+ static updatePage(){
+ const t=Math.max(this.gameList.length,this.paymentList.length);
+ this.page=Math.floor((t-1)/this.pageSize)+1,this.page<1&&(this.page=1)}
+ static log(){
+ }
+ static getGameMailWithId(t){
+ return this.gameMailMap[t]}
+ static getPaymentMailWithId(t){
+ return this.paymentMailMap[t]}
+ static getMailCount(t){
+ return t==yVt.PAYMENT?this.paymentList.length:this.gameList.length}
+ static getMailTotal(t){
+ return t==yVt.PAYMENT?this.paymentMailsTotal:this.mailsTotal}
+ static getMailTotalPage(t){
+ return t==yVt.PAYMENT?this.paymentTotalPages:this.mailTotalPages}
+ static isAllMailLoaded(t){
+ let i=0,s=0,e=0;
+ return t==yVt.PAYMENT?(i=this.paymentList.length,s=this.paymentMailsTotal,e=this.paymentTotalPages):(i=this.gameList.length,s=this.mailsTotal,e=this.mailTotalPages),!(Math.floor((i-1)/this.pageSize)+1<e||i<s)}
+ static getPage(){
+ return this.page}
+ static getPageSize(){
+ return this.pageSize}
+ static getDisplaySize(){
+ return this.displaySize}
+ static setDisplaySize(t){
+ t>0&&(this.displaySize=t)}
+ static getMailEmptyVO(){
+ if(this.mailPool.length>0){
+ let t=this.mailPool.pop();
+ return t?t.reset():t=new EVt,t}
+ return new EVt}
+ static addPool(t){
+ t&&(t.reset(),this.mailPool.push(t))}
+ static addListPool(t){
+ if(!t)return;
+ let i;
+ const s=t.length;
+ for(let e=0;
+ e<s;
+ ++e)i=t[e],i&&(i.reset(),this.mailPool.push(i))}
+ static removeGameMail(t){
+ const i=this.gameList.findIndex(i=>i.id===t);
+ -1!==i&&(this.gameList.splice(i,1),this.addPool(this.gameMailMap[t]),delete this.gameMailMap[t])}
+ static removePaymentMail(t){
+ const i=this.paymentList.findIndex(i=>i.id===t);
+ -1!==i&&(this.paymentList.splice(i,1),this.addPool(this.paymentMailMap[t]),delete this.paymentMailMap[t])}
+ static get hasDeletableGameMail(){
+ return-1!==this.gameList.findIndex(t=>!0===t.isDeletable)}
+ static get hasDeletablePaymentMail(){
+ return-1!==this.paymentList.findIndex(t=>!0===t.isDeletable)}
+ static get hasDeletableMail(){
+ return this.hasClaimableGameReward||this.hasClaimablePaymentReward}
+ static get hasReceivableGameMail(){
+ let t=this.gameList.findIndex(t=>!0===t.hasClaimableReward);
+ return-1!==t&&(t=this.gameList.findIndex(t=>null===t.receivedAt)),-1!==t}
+ static get hasClaimableReward(){
+ return this.hasClaimableGameReward||this.hasClaimablePaymentReward}
+ static get hasClaimableGameReward(){
+ return this.checkClaimableReward(this.gameList)}
+ static get hasClaimablePaymentReward(){
+ return this.checkClaimableReward(this.paymentList)}
+ static checkClaimableReward(t){
+ const i=t.length;
+ for(let s=0;
+ s<i;
+ ++s)if(t[s].hasClaimableReward)return!0;
+ return!1}
+ }
+ ;
+ Vt(AVt,"MailManager"),Kt(AVt,"updateNeeded",!0),Kt(AVt,"mailPool",[]),Kt(AVt,"gameList",[]),Kt(AVt,"paymentList",[]),Kt(AVt,"gameMailMap",{
+ }
+ ),Kt(AVt,"paymentMailMap",{
+ }
+ ),Kt(AVt,"mailsTotal",0),Kt(AVt,"mailTotalPages",0),Kt(AVt,"paymentMailsTotal",0),Kt(AVt,"paymentTotalPages",0),Kt(AVt,"page",1),Kt(AVt,"pageSize",20),Kt(AVt,"displaySize",8);
+ let SVt=AVt;
+ var TVt=(t=>(t.NOT_PURCHASE="NOT_PURCHASE",t.CREATED="CREATED",t.PENDING="PENDING",t.COMPLETED="COMPLETED",t.FAILED="FAILED",t))(TVt||{
+ }
+ );
+ const CVt=class{
+ constructor(){
+ Kt(this,"id",-1),Kt(this,"productId",-1),Kt(this,"paybackType",""),Kt(this,"paybackValue",-1),Kt(this,"status",""),Kt(this,"paidbackAt",null)}
+ }
+ ;
+ Vt(CVt,"PaybackEventUserVO");
+ let IVt=CVt;
+ const kVt=class{
+ constructor(){
+ Kt(this,"id",-1),Kt(this,"title",""),Kt(this,"description",[]),Kt(this,"startTime",null),Kt(this,"endTime",null),Kt(this,"paybackEndTime",null)}
+ }
+ ;
+ Vt(kVt,"PaybackEventVO");
+ let OVt=kVt;
+ const xVt=class{
+ static get opened(){
+ return!1}
+ static async getPaybackEvent(t,i=!1){
+ let s=await rD.getInstance().payback.getPaybackEvent(t,i);
+ s=this.getTestData(),0!=s.success?(this.setData(s.body),cS.getInstance().dispatchCustomEvent("PaybackEvent")):cS.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",wU.digit(n.getUTCMonth()+1)).replace("DD",wU.digit(n.getUTCDate()));
+ e=`${
+ wU.digit(n.getUTCHours())}
+ :${
+ wU.digit(n.getUTCMinutes())}
+ :${
+ wU.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",wU.digit(e.getUTCMonth()+1)).replace("DD",wU.digit(e.getUTCDate()));
+ n=`${
+ wU.digit(e.getUTCHours())}
+ :${
+ wU.digit(e.getUTCMinutes())}
+ :${
+ wU.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",wU.digit(e.getUTCMonth()+1)).replace("DD",wU.digit(e.getUTCDate()));
+ h=`${
+ wU.digit(e.getUTCHours())}
+ :${
+ wU.digit(e.getUTCMinutes())}
+ :${
+ wU.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 IVt);
+ 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||!(pN.serverTime<t.endTime.getTime())}
+ static isPaybackEnded(){
+ const t=this.paybackEvent;
+ return t.id<0||!t.paybackEndTime||!(pN.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==TVt.CREATED||t.status==TVt.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}
+ }
+ }
+ ;
+ Vt(xVt,"PaybackEventManager"),Kt(xVt,"paybackEvent",new OVt),Kt(xVt,"paybacks",[]);
+ let RVt=xVt;
+ const NVt=class extends Ge{
+ constructor(t=552,i=106,s="Banner"){
+ super(),Kt(this,"banner"),Kt(this,"bannerName",""),Kt(this,"sheetName","Banner"),Kt(this,"_width",552),Kt(this,"_height",106),Kt(this,"_imageWidth",-1),Kt(this,"_imageHeight",-1),Kt(this,"_autoResize",!1),this._width=t,this._height=i,this.sheetName=s,this.banner=new He,this.addChild(this.banner)}
+ get width(){
+ return this._width}
+ get height(){
+ return this._height}
+ get imageWidth(){
+ return this._imageWidth}
+ get imageHeight(){
+ return this._imageHeight}
+ get autoResize(){
+ return this._autoResize}
+ set autoResize(t){
+ t!=this._autoResize&&(this._autoResize=t,this._imageWidth<0||this._imageHeight<0||(this._autoResize?(this.banner.width=this._width,this.banner.height=this._height):(this.banner.width=this._imageWidth,this.banner.height=this._imageHeight)))}
+ async update(t,i=-1,s=-1,e="Banner"){
+ if(t==this.bannerName)return;
+ if(this.bannerName=t,this.sheetName=e,!1===QA.hasSheet(this.sheetName)){
+ const t="ktx2";
+ await QA.generateTexture(this.sheetName,t,!1)}
+ let n=QA.getTexture(this.sheetName,this.bannerName);
+ this.banner.texture=n,this._imageWidth=n.width,this._imageHeight=n.height,this._autoResize?(this.banner.width=this._width,this.banner.height=this._height):(this.banner.width=this._imageWidth,this.banner.height=this._imageHeight)}
+ }
+ ;
+ Vt(NVt,"BannerImage");
+ let PVt=NVt;
+ const DVt=class t extends Ge{
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ constructor(){
+ super()}
+ }
+ ;
+ Vt(DVt,"RewardLayer"),Kt(DVt,"_instance");
+ let LVt=DVt;
+ const GVt=class{
+ static showItemsInHorizontal(t,i=50,s=220){
+ t.forEach((t,e)=>{
+ const n=t.x;
+ t.x>s?t.x=n+i:t.x=n-i,t.alpha=0,FO.killTweensOf(t),FO.to(t,{
+ x:n,alpha:1,duration:.4,delay:(4+2*e)/60,ease:"power2.out",onComplete:Vt(()=>{
+ t.x=n}
+ ,"onComplete")}
+ )}
+ )}
+ static showItemsInVertical(t,i=20,s=.4){
+ t.forEach((t,e)=>{
+ const n=t.y;
+ t.y=n+i,t.alpha=0,FO.killTweensOf(t),FO.to(t,{
+ y:n,alpha:1,duration:s,delay:(4+2*e)/60,ease:"power2.out",onComplete:Vt(()=>{
+ t.y=n}
+ ,"onComplete")}
+ )}
+ )}
+ static hideItemsInVertical(t,i=20,s=.4,e=null){
+ const n=e;
+ t.forEach((t,e)=>{
+ const h=t.y,r=t.alpha;
+ FO.killTweensOf(t),FO.to(t,{
+ y:h+i,alpha:0,duration:s,delay:(4+2*e)/60,ease:"power2.out",onComplete:Vt(()=>{
+ t.y=h,t.alpha=r,n&&n()}
+ ,"onComplete")}
+ )}
+ )}
+ static showItemsInAlpha(t,i=.4,s=null){
+ const e=s;
+ t.forEach((t,s)=>{
+ t.alpha=0,FO.killTweensOf(t),FO.to(t,{
+ alpha:1,duration:i,delay:(4+2*s)/60,ease:"power2.out",onComplete:Vt(()=>{
+ t.alpha=1,e&&e()}
+ ,"onComplete")}
+ )}
+ )}
+ static hideItemsInAlpha(t,i=.4,s=null){
+ const e=s;
+ t.forEach((t,s)=>{
+ t.alpha=1,FO.killTweensOf(t),FO.to(t,{
+ alpha:0,duration:i,delay:(4+2*s)/60,ease:"power2.out",onComplete:Vt(()=>{
+ e&&e()}
+ ,"onComplete")}
+ )}
+ )}
+ }
+ ;
+ Vt(GVt,"GsapUtil");
+ let BVt=GVt;
+ const UVt=class t{
+ constructor(){
+ Kt(this,"requestPending",!1),Kt(this,"obj",{
+ }
+ ),Kt(this,"objByType",{
+ }
+ ),Kt(this,"types",[])}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ async getInventory(t,i=!1){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ let s=await rD.getInstance().user.getInventory(t,i);
+ if(0==s.success)return this.requestPending=!1,void cS.getInstance().dispatchCustomEvent("UserInventory");
+ this.setData(s.body),this.requestPending=!1}
+ setData(t){
+ if(!t||!t.inventory)return;
+ this.obj={
+ }
+ ,this.objByType={
+ }
+ ,this.obj.all=[],this.types[0]="all",this.types.length=1;
+ const i=t.inventory;
+ let s,e,n;
+ const h=i.length;
+ for(let r=0;
+ r<h;
+ ++r){
+ if(s=i[r].type.toString(),e="subType"in i[r]?i[r].subType.toString():"",n="","ticket"==s)switch(e){
+ case"heroGacha":case"heroSelect":n="hero";
+ break;
+ case"pet":case"petSelect":n="pet";
+ break;
+ case"treasureGacha":n="relic"}
+ ""!=n&&(e&&(this.objByType[`${
+ s}
+ _${
+ e}
+ `]=i[r]),i[r].inventoryType=n,this.obj[n]||(this.obj[n]=[]),this.obj[n].push(i[r]),this.obj.all.push(i[r]),this.types.includes(n)||this.types.push(n))}
+ cS.getInstance().dispatchCustomEvent("UserInventory")}
+ getTypes(){
+ return this.types}
+ getListWithType(t){
+ return this.obj[t]}
+ getDataWithTypeAndSubType(t,i){
+ return this.objByType[`${
+ t}
+ _${
+ i}
+ `]}
+ }
+ ;
+ Vt(UVt,"InventoryManager"),Kt(UVt,"instance");
+ let FVt=UVt;
+ var HVt=(t=>(t.all="all",t.hero="hero",t.relic="relic",t.pet="pet",t))(HVt||{
+ }
+ );
+ const WVt=class t{
+ constructor(){
+ Kt(this,"data",{
+ hero5:0,hero7:0,treasure5:0,treasure6:0,treasure7:0,treasure8:0,treasure9:0}
+ )}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setData(t){
+ if(t){
+ for(const i in this.data)i in t&&(this.data[i]=Number(t[i]));
+ cS.getInstance().dispatchCustomEvent("TransTicketData")}
+ }
+ getHeroTransTicket(t=5){
+ const i=`hero${
+ t}
+ `;
+ return i in this.data?this.data[i]:0}
+ getTreasureTransTicket(t=6){
+ const i=`treasure${
+ t}
+ `;
+ return i in this.data?this.data[i]:0}
+ }
+ ;
+ Vt(WVt,"TransTicketManager"),Kt(WVt,"instance");
+ let $Vt=WVt,jVt=null;
+ function VVt(){
+ if(null!==jVt)return jVt;
+ try{
+ const t=new URLSearchParams(window.location.search);
+ jVt="1"===t.get("chatDev")}
+ catch{
+ jVt=!1}
+ return jVt}
+ Vt(VVt,"isChatDevMode"),Vt(function(){
+ return"ef-chat-dev"}
+ ,"getDevChannelName");
+ const KVt="ef.chat.dev.identity.v1",zVt=["블루","레드","옐로우","그린","퍼플","오렌지","실버","골드","아쿠아","코랄"],qVt=["MASTER","SUB_MASTER","ELDER","ELITE","MEMBER"];
+ function YVt(){
+ try{
+ const t=sessionStorage.getItem(KVt);
+ if(t){
+ const i=JSON.parse(t);
+ if(i&&i.uid&&i.name)return i}
+ }
+ catch{
+ }
+ const t=Math.floor(100*Math.random()),i={
+ uid:`dev-${
+ Math.random().toString(36).slice(2,10)}
+ `,name:`${
+ zVt[Math.floor(Math.random()*zVt.length)]}
+ ${
+ t}
+ `,level:20+Math.floor(80*Math.random()),role:qVt[Math.floor(Math.random()*qVt.length)]}
+ ;
+ try{
+ sessionStorage.setItem(KVt,JSON.stringify(i))}
+ catch{
+ }
+ return i}
+ Vt(YVt,"getDevIdentity");
+ const XVt=class{
+ constructor(){
+ Kt(this,"listeners",new Map)}
+ on(t,i){
+ let s=this.listeners.get(t);
+ return s||(s=new Set,this.listeners.set(t,s)),s.add(i),()=>this.off(t,i)}
+ off(t,i){
+ var s;
+ null==(s=this.listeners.get(t))||s.delete(i)}
+ emit(t,i){
+ const s=this.listeners.get(t);
+ if(!s||0===s.size)return;
+ const e=[...s];
+ for(const n of e)try{
+ n(i)}
+ catch(GSi){
+ }
+ }
+ clear(t){
+ null==t?this.listeners.clear():this.listeners.delete(t)}
+ }
+ ;
+ Vt(XVt,"EventBus");
+ let JVt=XVt;
+ const QVt=class{
+ constructor(t=200){
+ Kt(this,"messages",[]),Kt(this,"byId",new Map),Kt(this,"maxSize"),this.maxSize=t}
+ get size(){
+ return this.messages.length}
+ getAll(){
+ return this.messages}
+ get(t){
+ return this.byId.get(t)}
+ has(t){
+ return this.byId.has(t)}
+ append(t){
+ return!this.byId.has(t.id)&&(this.messages.push(t),this.byId.set(t.id,t),this.trimHead(),!0)}
+ prependHistory(t){
+ if(0===t.length)return[];
+ const i=[];
+ for(const s of t)this.byId.has(s.id)||(i.push(s),this.byId.set(s.id,s));
+ return 0===i.length?[]:(this.messages=i.concat(this.messages),i)}
+ update(t,i){
+ const s=this.byId.get(t);
+ if(s)return Object.assign(s,i),s}
+ replaceId(t,i){
+ if(t===i)return this.byId.get(i);
+ const s=this.byId.get(t);
+ return s?(this.byId.delete(t),s.id=i,this.byId.has(i)||this.byId.set(i,s),s):void 0}
+ reset(t=[]){
+ const i=new Map(this.byId);
+ this.messages=[],this.byId.clear();
+ for(const s of t){
+ if(this.byId.has(s.id))continue;
+ const t=i.get(s.id);
+ (null==t?void 0:t.translated)&&(s.translated=t.translated,s.translatedText=t.translatedText,s.originalText=t.originalText),this.messages.push(s),this.byId.set(s.id,s)}
+ this.trimHead()}
+ clear(){
+ this.messages=[],this.byId.clear()}
+ oldestTimestamp(){
+ var t;
+ return null==(t=this.messages[0])?void 0:t.timestamp}
+ trimHead(){
+ if(this.messages.length<=this.maxSize)return;
+ const t=this.messages.length-this.maxSize,i=this.messages.splice(0,t);
+ for(const s of i)this.byId.delete(s.id)}
+ }
+ ;
+ Vt(QVt,"MessageStore");
+ let ZVt=QVt;
+ const tKt=class{
+ constructor(t,i,s,e=200){
+ Kt(this,"roomId"),Kt(this,"kind"),Kt(this,"peerUid"),Kt(this,"peerName"),Kt(this,"store"),Kt(this,"bus"),this.roomId=t,this.kind=i,this.peerUid=s,this.store=new ZVt(e),this.bus=new JVt}
+ receive(t){
+ this.store.append(t)&&this.bus.emit("message:new",t)}
+ prependHistory(t){
+ const i=this.store.prependHistory(t);
+ i.length>0&&this.bus.emit("history:prepended",i)}
+ resetHistory(t=[]){
+ this.store.reset(t),this.bus.emit("history:reset",this.store.getAll())}
+ updateMessage(t,i){
+ const s=this.store.update(t,i);
+ s&&this.bus.emit("message:updated",s)}
+ confirmSend(t,i){
+ const s=this.store.replaceId(t,i);
+ s&&(s.status="sent",s.localId=void 0,this.bus.emit("message:updated",s))}
+ failSend(t){
+ const i=this.store.get(t);
+ i&&(i.status="failed",this.bus.emit("message:updated",i))}
+ notifyConnected(t){
+ this.bus.emit("connected",{
+ latency:t}
+ )}
+ notifyDisconnected(t){
+ this.bus.emit("disconnected",{
+ reason:t}
+ )}
+ getMessages(){
+ return this.store.getAll()}
+ getMessage(t){
+ return this.store.get(t)}
+ oldestTimestamp(){
+ return this.store.oldestTimestamp()}
+ }
+ ;
+ Vt(tKt,"ChatRoom");
+ let iKt=tKt;
+ const sKt=class t{
+ constructor(){
+ Kt(this,"rooms",new Map),Kt(this,"guildRoom"),Kt(this,"globalRoom"),Kt(this,"systemRoom"),Kt(this,"globalBus"),Kt(this,"conversations",[]),Kt(this,"currentChannel",null),this.guildRoom=new iKt(t.GUILD_ROOM_ID,"guild"),this.rooms.set(t.GUILD_ROOM_ID,this.guildRoom),this.globalRoom=new iKt(t.GLOBAL_ROOM_ID,"global"),this.rooms.set(t.GLOBAL_ROOM_ID,this.globalRoom),this.systemRoom=new iKt(t.SYSTEM_ROOM_ID,"system"),this.rooms.set(t.SYSTEM_ROOM_ID,this.systemRoom),this.globalBus=new JVt}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ getGuildRoom(){
+ return this.guildRoom}
+ getGlobalRoom(){
+ return this.globalRoom}
+ getSystemRoom(){
+ return this.systemRoom}
+ getDMRoom(i,s){
+ const e=t.dmRoomId(i);
+ let n=this.rooms.get(e);
+ return n||(n=new iKt(e,"dm",i),this.rooms.set(e,n)),s&&s.length>0&&(n.peerName=s),n}
+ hasDMRoom(i){
+ return this.rooms.has(t.dmRoomId(i))}
+ getRoom(t){
+ return this.rooms.get(t)}
+ getAllRooms(){
+ return Array.from(this.rooms.values())}
+ clearAll(){
+ for(const t of this.rooms.values())t.store.clear();
+ this.conversations=[],this.currentChannel=null}
+ static dmRoomId(t){
+ return`dm:${
+ t}
+ `}
+ dispatchToRoom(t,i){
+ const s=t.store.size;
+ t.receive(i),t.store.size>s&&this.globalBus.emit("room:message",{
+ roomId:t.roomId,kind:t.kind,message:i}
+ )}
+ setConversations(t){
+ this.conversations=t,this.globalBus.emit("conversations:updated",t)}
+ get store(){
+ return this.guildRoom.store}
+ get bus(){
+ return this.guildRoom.bus}
+ receive(t){
+ this.dispatchToRoom(this.guildRoom,t)}
+ prependHistory(t){
+ this.guildRoom.prependHistory(t)}
+ resetHistory(t=[]){
+ this.guildRoom.resetHistory(t)}
+ updateMessage(t,i){
+ this.guildRoom.updateMessage(t,i)}
+ confirmSend(t,i){
+ this.guildRoom.confirmSend(t,i)}
+ failSend(t){
+ this.guildRoom.failSend(t)}
+ notifyConnected(t){
+ this.guildRoom.notifyConnected(t)}
+ notifyDisconnected(t){
+ this.guildRoom.notifyDisconnected(t)}
+ getMessages(){
+ return this.guildRoom.getMessages()}
+ getMessage(t){
+ return this.guildRoom.getMessage(t)}
+ oldestTimestamp(){
+ return this.guildRoom.oldestTimestamp()}
+ }
+ ;
+ Vt(sKt,"ChatService"),Kt(sKt,"_instance",null),Kt(sKt,"GUILD_ROOM_ID","guild"),Kt(sKt,"GLOBAL_ROOM_ID","global"),Kt(sKt,"SYSTEM_ROOM_ID","system");
+ let eKt=sKt;
+ const nKt={
+ level:0,role:""}
+ ,hKt=class{
+ static resolve(t,i){
+ var s;
+ if(""!==t&&t===ML.uid)return{
+ level:Math.floor((ML.maxWave||0)/100),role:String((null==(s=AD.myMembershipVO)?void 0:s.role)??"")}
+ ;
+ if(""!==i){
+ const t=AD.memberList??[];
+ for(const s of t)if(s.userName===i)return{
+ level:Math.floor((s.wave||0)/100),role:String(s.role??"")}
+ }
+ return nKt}
+ }
+ ;
+ Vt(hKt,"UserCache");
+ let rKt=hKt;
+ function oKt(t){
+ const i=t.timestamp instanceof Date?t.timestamp.getTime():Number(new Date(t.timestamp).getTime()),s=String(t.senderId),e=String(t.senderName??""),n=rKt.resolve(s,e),h=Number(t.senderLevel??0);
+ return{
+ id:String(t.id),guildId:String(t.guildId),sender:{
+ uid:s,name:e,level:h>0?h:n.level,role:n.role||String(t.senderRole??""),frame:t.frame}
+ ,content:String(t.content??""),timestamp:Number.isFinite(i)?i:Date.now(),status:"sent",translated:!0===t.translated}
+ }
+ Vt(oKt,"toChatMessage");
+ const aKt=class t{
+ constructor(){
+ Kt(this,"started",!1),Kt(this,"service",eKt.getInstance()),Kt(this,"pendingChannelId",null),Kt(this,"channelSwitchTimer",null),Kt(this,"useLoopback",!1),Kt(this,"devChannel",null),Kt(this,"devIdentity",null),Kt(this,"onMessageRef",Vt(t=>{
+ try{
+ const i=oKt(t);
+ if(this.isMine(i.sender.uid)){
+ const t=this.findMatchingPending(i);
+ if(t&&t.localId)return this.service.confirmSend(t.localId,i.id),void this.service.updateMessage(i.id,{
+ timestamp:i.timestamp,content:i.content}
+ )}
+ this.service.receive(i)}
+ catch(GSi){
+ }
+ }
+ ,"onMessageRef")),Kt(this,"onConnectRef",Vt(()=>{
+ this.service.notifyConnected(),this.seedFromCache(),this.requestConversationList()}
+ ,"onConnectRef")),Kt(this,"onDisconnectRef",Vt(t=>{
+ this.pendingChannelId&&(this.clearPendingChannelSwitch(),this.service.globalBus.emit("global:error",{
+ code:"SWITCH_FAILED"}
+ )),this.service.notifyDisconnected(t)}
+ ,"onDisconnectRef")),Kt(this,"onExtraRef",Vt(t=>{
+ if(t&&"object"==typeof t)try{
+ switch(t.type){
+ case"whisper":this.handleIncomingWhisper(t.data);
+ break;
+ case"whisperHistory":this.handleWhisperHistory(t.data);
+ break;
+ case"conversationList":this.handleConversationList(t.data);
+ break;
+ case"whisperReadAck":break;
+ case"globalChat":this.handleIncomingGlobalChat(t.data);
+ break;
+ case"globalRecentMessages":this.handleGlobalRecentMessages(t.data);
+ break;
+ case"globalChatError":this.handleGlobalChatError(t.data);
+ break;
+ case"channelAssigned":case"channelSwitched":this.handleChannelInfo(t.data,t.type);
+ break;
+ case"channelList":this.service.globalBus.emit("channel:list",t.data);
+ break;
+ case"systemMessage":this.handleSystemMessage(t.data);
+ break;
+ case"systemMessages":this.handleSystemMessages(t.data)}
+ }
+ catch(GSi){
+ }
+ }
+ ,"onExtraRef")),Kt(this,"onHistoryRef",Vt(t=>{
+ const i=t.messages.map(oKt);
+ i.sort((t,i)=>t.timestamp-i.timestamp),this.service.resetHistory(i)}
+ ,"onHistoryRef")),Kt(this,"onDevChannelMessage",Vt(t=>{
+ const i=t.data;
+ if(i&&"chat"===i.type)try{
+ const t={
+ id:String(i.id),guildId:String(i.guildId??"dev"),sender:i.sender,content:String(i.content??""),timestamp:Number(i.timestamp??Date.now()),status:"sent"}
+ ;
+ this.service.receive(t)}
+ catch(GSi){
+ }
+ }
+ ,"onDevChannelMessage"))}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ findMatchingPending(t){
+ const i=this.service.getMessages();
+ for(let s=i.length-1;
+ s>=0;
+ s--){
+ const e=i[s];
+ if("pending"===e.status&&e.localId&&e.sender.uid===t.sender.uid&&e.content===t.content&&!(Math.abs(t.timestamp-e.timestamp)>6e4))return e}
+ }
+ isMine(t){
+ return""!==ML.uid&&t===ML.uid}
+ handleIncomingWhisper(t){
+ if(!t)return;
+ const i=String(t.senderUId??""),s=this.isMine(i)?String(t.recipientUId):i;
+ if(!s)return;
+ const e=this.service.getDMRoom(s),n=this.whisperToChatMessage(t);
+ if(this.isMine(n.sender.uid)){
+ const t=this.findMatchingPendingInRoom(e,n);
+ if(t&&t.localId)return e.confirmSend(t.localId,n.id),void e.updateMessage(n.id,{
+ timestamp:n.timestamp,content:n.content}
+ )}
+ this.service.dispatchToRoom(e,n)}
+ handleWhisperHistory(t){
+ if(!t||!Array.isArray(t.messages))return;
+ const i=String(t.peerUid??"");
+ if(!i)return;
+ const s=this.service.getDMRoom(i),e=t.messages.map(t=>this.whisperToChatMessage(t)).sort((t,i)=>t.timestamp-i.timestamp);
+ 0===s.store.size?s.resetHistory(e):s.prependHistory(e)}
+ handleConversationList(t){
+ if(!Array.isArray(t))return;
+ const i=t.map(t=>{
+ const i=(null==t?void 0:t.last)??{
+ }
+ ,s=String(i.senderUId??""),e=this.isMine(s),n=e?String(i.recipientUId??""):s,h=e;
+ let r=String(h?i.recipientName??"":i.senderName??"");
+ if(!r&&n){
+ const t=this.service.getRoom(eKt.dmRoomId(n));
+ t&&t.peerName&&(r=t.peerName)}
+ return{
+ peerUid:n,peerName:r,lastMessage:String(i.message??""),lastTimestamp:i.createdAt?new Date(i.createdAt).getTime():0,unread:Number((null==t?void 0:t.unread)??0),lastFromMe:h}
+ }
+ );
+ this.service.setConversations(i)}
+ handleIncomingGlobalChat(t){
+ if(!t)return;
+ const i=this.normalizeChannelId(t.channelId);
+ if(this.shouldIgnoreGlobalPayload(i,"globalChat"))return;
+ const s=this.globalRawToChatMessage(t),e=this.service.getGlobalRoom();
+ if(this.isMine(s.sender.uid)){
+ const t=this.findMatchingPendingInRoom(e,s);
+ if(t&&t.localId)return e.confirmSend(t.localId,s.id),void e.updateMessage(s.id,{
+ timestamp:s.timestamp,content:s.content}
+ )}
+ this.service.dispatchToRoom(e,s)}
+ handleGlobalRecentMessages(t){
+ if(!t||!Array.isArray(t.messages))return;
+ const i=this.normalizeChannelId(t.channelId);
+ if(this.shouldIgnoreGlobalPayload(i,"globalRecentMessages"))return;
+ const s=t.messages.map(t=>this.globalRawToChatMessage(t)).sort((t,i)=>t.timestamp-i.timestamp);
+ this.service.getGlobalRoom().resetHistory(s)}
+ handleChannelInfo(t,i){
+ var s;
+ if(!t)return;
+ const e=(null==(s=this.service.currentChannel)?void 0:s.channelId)??"",n={
+ channelId:String(t.channelId??""),memberCount:Number(t.memberCount??0),totalChannels:Number(t.totalChannels??0)}
+ ,h=n.channelId.length>0&&n.channelId!==e;
+ this.service.currentChannel=n,this.service.globalBus.emit("channel:info",n),!this.pendingChannelId||"channelSwitched"!==i&&this.pendingChannelId!==n.channelId||this.clearPendingChannelSwitch(),h&&(this.service.getGlobalRoom().resetHistory([]),this.requestGlobalRecent(50,n.channelId))}
+ handleGlobalChatError(t){
+ const i=String((null==t?void 0:t.code)??"");
+ this.pendingChannelId&&(i.startsWith("SWITCH")||"CHANNEL_FULL"===i)&&this.clearPendingChannelSwitch(),this.service.globalBus.emit("global:error",{
+ code:i,remainMs:Number((null==t?void 0:t.remainMs)??0),minWave:Number((null==t?void 0:t.minWave)??0)}
+ )}
+ normalizeChannelId(t){
+ return String(t??"").trim()}
+ shouldIgnoreGlobalPayload(t,i){
+ var s;
+ const e=(null==(s=this.service.currentChannel)?void 0:s.channelId)??"";
+ return!(!t||!e)&&t!==e}
+ beginChannelSwitch(t){
+ this.clearPendingChannelSwitch(),this.pendingChannelId=t,this.service.globalBus.emit("channel:switching",{
+ channelId:t}
+ ),this.channelSwitchTimer=setTimeout(()=>{
+ this.pendingChannelId===t&&(this.pendingChannelId=null,this.channelSwitchTimer=null,this.service.globalBus.emit("global:error",{
+ code:"SWITCH_TIMEOUT"}
+ ))}
+ ,8e3)}
+ clearPendingChannelSwitch(){
+ this.pendingChannelId=null,null!=this.channelSwitchTimer&&(clearTimeout(this.channelSwitchTimer),this.channelSwitchTimer=null)}
+ globalRawToChatMessage(t){
+ const i=String(t.senderUId??""),s=String(t.senderName??""),e=t.createdAt?new Date(t.createdAt).getTime():Date.now(),n=Number(t.senderLevel??0),h=n>0?n:rKt.resolve(i,s).level;
+ return{
+ id:String(t.id??t._id??""),guildId:"",sender:{
+ uid:i,name:s,level:h,role:""}
+ ,content:String(t.message??""),timestamp:Number.isFinite(e)?e:Date.now(),status:"sent"}
+ }
+ handleSystemMessage(t){
+ if(!t)return;
+ const i=this.systemRawToChatMessage(t);
+ this.service.dispatchToRoom(this.service.getSystemRoom(),i)}
+ handleSystemMessages(t){
+ if(!Array.isArray(t))return;
+ const i=t.map(t=>this.systemRawToChatMessage(t)).sort((t,i)=>t.timestamp-i.timestamp);
+ this.service.getSystemRoom().resetHistory(i)}
+ systemRawToChatMessage(t){
+ const i=t.createdAt?new Date(t.createdAt).getTime():Date.now();
+ return{
+ id:String(t.id??t._id??""),guildId:"",sender:{
+ uid:"system",name:t.title||"공지",level:0,role:""}
+ ,content:String(t.message??""),timestamp:Number.isFinite(i)?i:Date.now(),status:"sent"}
+ }
+ whisperToChatMessage(t){
+ const i=String(t.senderUId??""),s=String(t.senderName??""),e=rKt.resolve(i,s),n=Number(t.senderLevel??0),h=t.createdAt?new Date(t.createdAt).getTime():Number(t.timestamp??Date.now());
+ return{
+ id:String(t.id??t._id??""),guildId:"",sender:{
+ uid:i,name:s,level:n>0?n:e.level,role:e.role,frame:t.frame}
+ ,content:String(t.message??""),timestamp:Number.isFinite(h)?h:Date.now(),status:"sent"}
+ }
+ findMatchingPendingInRoom(t,i){
+ const s=t.getMessages();
+ for(let e=s.length-1;
+ e>=0;
+ e--){
+ const t=s[e];
+ if("pending"===t.status&&t.localId&&t.sender.uid===i.sender.uid&&t.content===i.content&&!(Math.abs(i.timestamp-t.timestamp)>6e4))return t}
+ }
+ async start(){
+ if(VVt())return this.startLoopback();
+ const t=bD.getInstance();
+ if(this.started||(t.onMessage(this.onMessageRef),t.onConnect(this.onConnectRef),t.onDisconnect(this.onDisconnectRef),t.onHistory(this.onHistoryRef),t.onExtraMessage(this.onExtraRef),this.started=!0),t.connected)return this.seedFromCache(),this.requestGlobalRecent(50),!0;
+ try{
+ const i=await t.connect();
+ return i&&this.requestGlobalRecent(50),i}
+ catch(GSi){
+ return!1}
+ }
+ stop(){
+ if(this.useLoopback)return void this.stopLoopback();
+ if(!this.started)return;
+ const t=bD.getInstance();
+ t.offMessage(this.onMessageRef),t.offConnect(this.onConnectRef),t.offDisconnect(this.onDisconnectRef),t.offHistory(this.onHistoryRef),t.offExtraMessage(this.onExtraRef),this.clearPendingChannelSwitch(),this.started=!1}
+ get isConnected(){
+ return this.useLoopback?null!==this.devChannel:bD.getInstance().connected}
+ requestGlobalRecent(t=50,i){
+ var s;
+ if(this.useLoopback)return!1;
+ const e=bD.getInstance();
+ if(!e.connected)return!1;
+ const n=i??(null==(s=this.service.currentChannel)?void 0:s.channelId)??"",h={
+ limit:t}
+ ;
+ return n&&(h.channelId=n),e.sendRaw({
+ type:"getGlobalRecentMessages",data:h}
+ )}
+ get devUser(){
+ return this.devIdentity}
+ async send(t){
+ const i=t.trim();
+ if(0===i.length)return!1;
+ if(this.useLoopback)return this.sendLoopback(i);
+ const s=bD.getInstance();
+ if(!s.connected)return!1;
+ const e=`local-${
+ Date.now()}
+ -${
+ Math.random().toString(36).slice(2,8)}
+ `,n=Date.now(),h=String(ML.uid??""),r=String(ML.name??""),o=rKt.resolve(h,r),a={
+ id:e,localId:e,guildId:String(AD.myGuildId??""),sender:{
+ uid:h,name:r,level:o.level,role:o.role}
+ ,content:i,timestamp:n,status:"pending"}
+ ;
+ this.service.receive(a);
+ let c=!1;
+ try{
+ c=await s.sendMessage(i)}
+ catch(GSi){
+ c=!1}
+ return c?(setTimeout(()=>{
+ const t=this.service.getMessage(e);
+ t&&"pending"===t.status&&this.service.failSend(e)}
+ ,15e3),!0):(this.service.failSend(e),!1)}
+ async retrySend(t){
+ const i=this.service.getMessage(t);
+ if(!i)return!1;
+ if("failed"!==i.status)return!1;
+ if(this.service.updateMessage(t,{
+ status:"pending",timestamp:Date.now()}
+ ),this.useLoopback){
+ if(!this.devChannel||!i.localId)return this.service.failSend(t),!1;
+ const s=Date.now(),e=`dev-${
+ s}
+ -${
+ Math.random().toString(36).slice(2,8)}
+ `;
+ try{
+ return this.devChannel.postMessage({
+ type:"chat",id:e,guildId:i.guildId,sender:i.sender,content:i.content,timestamp:s}
+ ),this.service.confirmSend(i.localId,e),!0}
+ catch{
+ return this.service.failSend(t),!1}
+ }
+ const s=bD.getInstance();
+ if(!s.connected)return this.service.failSend(t),!1;
+ try{
+ if(!(await s.sendMessage(i.content)))return this.service.failSend(t),!1}
+ catch(GSi){
+ return this.service.failSend(t),!1}
+ return setTimeout(()=>{
+ const i=this.service.getMessage(t);
+ i&&"pending"===i.status&&this.service.failSend(t)}
+ ,15e3),!0}
+ async loadOlder(t=20){
+ if(this.useLoopback)return 0;
+ const i=bD.getInstance();
+ if(!i.connected)return 0;
+ const s=this.service.oldestTimestamp(),e=null!=s?new Date(s):void 0;
+ try{
+ const s=await i.loadPreviousMessages({
+ before:e,limit:t}
+ );
+ if(!s.messages||0===s.messages.length)return 0;
+ const n=s.messages.map(oKt).sort((t,i)=>t.timestamp-i.timestamp);
+ return this.service.prependHistory(n),n.length}
+ catch(GSi){
+ return 0}
+ }
+ async sendGlobalMessage(t){
+ const i=t.trim();
+ if(0===i.length)return!1;
+ const s=bD.getInstance();
+ if(!s.connected)return!1;
+ const e=this.service.getGlobalRoom(),n=Date.now(),h=`local-${
+ n}
+ -${
+ Math.random().toString(36).slice(2,8)}
+ `,r=String(ML.uid??""),o=String(ML.name??""),a=rKt.resolve(r,o),c={
+ id:h,localId:h,guildId:"",sender:{
+ uid:r,name:o,level:a.level,role:""}
+ ,content:i,timestamp:n,status:"pending"}
+ ;
+ return this.service.dispatchToRoom(e,c),s.sendRaw({
+ type:"globalMessage",data:{
+ senderName:o,message:i}
+ }
+ )?(setTimeout(()=>{
+ const t=e.getMessage(h);
+ t&&"pending"===t.status&&e.failSend(h)}
+ ,15e3),!0):(e.failSend(h),!1)}
+ switchChannel(t){
+ var i;
+ if(!t)return!1;
+ if((null==(i=this.service.currentChannel)?void 0:i.channelId)===t)return!0;
+ const s=bD.getInstance();
+ return!!s.connected&&(s.sendRaw({
+ type:"switchChannel",data:{
+ channelId:t}
+ }
+ )?(this.beginChannelSwitch(t),!0):(this.service.globalBus.emit("global:error",{
+ code:"SWITCH_FAILED"}
+ ),!1))}
+ requestChannelList(){
+ const t=bD.getInstance();
+ return!!t.connected&&t.sendRaw({
+ type:"getChannelList"}
+ )}
+ async sendWhisper(t,i){
+ const s=i.trim();
+ if(0===s.length)return!1;
+ if(!t||t===ML.uid)return!1;
+ const e=bD.getInstance();
+ if(!e.connected)return!1;
+ const n=this.service.getDMRoom(t),h=Date.now(),r=`local-${
+ h}
+ -${
+ Math.random().toString(36).slice(2,8)}
+ `,o=String(ML.uid??""),a=String(ML.name??""),c=rKt.resolve(o,a),l={
+ id:r,localId:r,guildId:"",sender:{
+ uid:o,name:a,level:c.level,role:c.role}
+ ,content:s,timestamp:h,status:"pending"}
+ ;
+ return this.service.dispatchToRoom(n,l),e.sendRaw({
+ type:"whisper",data:{
+ senderName:a,recipientUId:t,recipientName:n.peerName||"",message:s}
+ }
+ )?(setTimeout(()=>{
+ const t=n.getMessage(r);
+ t&&"pending"===t.status&&n.failSend(r)}
+ ,15e3),!0):(n.failSend(r),!1)}
+ requestWhisperHistory(t,i){
+ const s=bD.getInstance();
+ return!!s.connected&&s.sendRaw({
+ type:"getWhisperHistory",data:{
+ peerUid:t,before:(null==i?void 0:i.before)?i.before.toISOString():void 0,limit:(null==i?void 0:i.limit)??50}
+ }
+ )}
+ requestConversationList(){
+ const t=bD.getInstance();
+ return!!t.connected&&t.sendRaw({
+ type:"getConversationList"}
+ )}
+ requestSystemMessages(t=50){
+ const i=bD.getInstance();
+ return!!i.connected&&i.sendRaw({
+ type:"getSystemMessages",data:{
+ limit:t}
+ }
+ )}
+ markWhisperRead(t){
+ const i=bD.getInstance();
+ return!!i.connected&&i.sendRaw({
+ type:"markWhisperRead",data:{
+ peerUid:t}
+ }
+ )}
+ seedFromCache(){
+ const t=bD.getInstance().getMessages();
+ if(0===t.length)return;
+ const i=t.map(oKt).sort((t,i)=>t.timestamp-i.timestamp);
+ this.service.resetHistory(i)}
+ startLoopback(){
+ if(this.devChannel)return this.service.notifyConnected(),!0;
+ this.useLoopback=!0,this.devIdentity=YVt();
+ try{
+ this.devChannel=new BroadcastChannel("ef-chat-dev")}
+ catch(GSi){
+ return this.useLoopback=!1,!1}
+ return this.devChannel.addEventListener("message",this.onDevChannelMessage),this.service.notifyConnected(),!0}
+ stopLoopback(){
+ this.devChannel&&(this.devChannel.removeEventListener("message",this.onDevChannelMessage),this.devChannel.close(),this.devChannel=null),this.useLoopback=!1,this.devIdentity=null}
+ async sendLoopback(t){
+ if(!this.devChannel||!this.devIdentity)return!1;
+ const i=Date.now(),s=`local-${
+ i}
+ -${
+ Math.random().toString(36).slice(2,8)}
+ `,e=`dev-${
+ i}
+ -${
+ Math.random().toString(36).slice(2,8)}
+ `,n={
+ id:s,localId:s,guildId:"dev",sender:this.devIdentity,content:t,timestamp:i,status:"pending"}
+ ;
+ this.service.receive(n);
+ try{
+ this.devChannel.postMessage({
+ type:"chat",id:e,guildId:"dev",sender:this.devIdentity,content:t,timestamp:i}
+ )}
+ catch(GSi){
+ return this.service.failSend(s),!1}
+ return this.service.confirmSend(s,e),!0}
+ }
+ ;
+ Vt(aKt,"ChatTransport"),Kt(aKt,"_instance",null);
+ let cKt=aKt;
+ const lKt=class t{
+ constructor(){
+ Kt(this,"_initialized",!1),Kt(this,"badWords")}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get initialized(){
+ return this._initialized}
+ async validate(t){
+ if(this._initialized)return this.checkWord(t);
+ let i=YA.getBadWordAssetPath(`badWordList.txt?v=${
+ zA.appVersion}
+ `);
+ const s=await fetch(i);
+ if(!s.ok)return!1;
+ const e=await s.text();
+ return this.badWords=new Set(e.split("\n").map(t=>t.trim().toLowerCase()).filter(Boolean)),this._initialized=!0,this.checkWord(t)}
+ checkWord(t){
+ const i=t.toLowerCase().trim();
+ for(const s of this.badWords)if(i.includes(s))return!1;
+ return!0}
+ filter(t){
+ if(!t)return t;
+ let i,s,e="";
+ const n=t.length;
+ for(let h=0;
+ h<n;
+ ++h)s=!1,i=t.charCodeAt(h),(i>=65&&i<=90||i>=97&&i<=122||i>=48&&i<=57||i>=12593&&i<=12643||i>=44032&&i<=55203||i>=12353&&i<=12438||12447==i||i>=12449&&i<=12543||i>=19968&&i<=40917||i>=63744&&i<=64045||i>=64048&&i<=64109||i>=12549&&i<=12589||i>=3585&&i<=3642||i>=3648&&i<=3673||i>=1040&&i<=1103||i>=7840&&i<=7921||i>=256&&i<=328||i>=330&&i<=383||i>=192&&i<=214||i>=216&&i<=246||i>=248&&i<=255)&&(s=!0),s&&(e+=t.charAt(h));
+ return e}
+ async changeBadWordToAsterisk(t){
+ if(1==await this.validate(t))return t;
+ const i=t.toLowerCase().trim();
+ let s=-1;
+ for(const e of this.badWords)if(s=i.indexOf(e),s>-1){
+ let i=new RegExp(e,"g");
+ t=t.replace(i,"*".repeat(e.length))}
+ return t}
+ }
+ ;
+ Vt(lKt,"BadWordUtil"),Kt(lKt,"_instance");
+ let uKt=lKt;
+ const dKt=[{
+ key:"face",icon:"😀",list:["😀","😁","😂","🤣","😊","😍","🥰","😘","🙂","😉","🤗","🤩","🤔","🤨","😐","😑","😶","🙄","😏","😮","😴","😌","😛","😜","🤪","😝","😒","😔","😪","😫","😤","😠","😡","🤯","😳","🥺","😢","😭","😱","🤭"]}
+ ,{
+ key:"heart",icon:"❤️",list:["❤️","🧡","💛","💚","💙","💜","🖤","🤍","💔","❣️","💕","💞","💓","💗","💖","💘","💝","💟"]}
+ ,{
+ key:"hand",icon:"👍",list:["👍","👎","👏","🙌","🙏","✊","👊","🤛","🤜","🤞","✌️","🤟","🤘","👌","👈","👉","👆","👇","✋","👋","💪","🫡","🤝"]}
+ ,{
+ key:"party",icon:"🎉",list:["🎉","🎊","🎁","🎂","🎈","✨","⭐","🌟","💫","⚡","🔥","💥","💯","🏆","🥇","🥈","🥉","🎯","🎮","🎲"]}
+ ,{
+ key:"battle",icon:"⚔️",list:["⚔️","🗡️","🛡️","🏹","🪓","🔫","💣","👑","💎","💰","🗝️","🔑","⏰","⏳","🧪","🧿","🧙","🧚","🐉","🦄"]}
+ ],fKt=class t{
+ constructor(){
+ Kt(this,"root"),Kt(this,"card"),Kt(this,"listEl"),Kt(this,"statusEl"),Kt(this,"titleEl"),Kt(this,"actionSheetEl"),Kt(this,"actionSheetBackdrop"),Kt(this,"actionSheetContent"),Kt(this,"tabBarEl"),Kt(this,"tabSystemBtn"),Kt(this,"tabGlobalBtn"),Kt(this,"tabGuildBtn"),Kt(this,"tabDMBtn"),Kt(this,"tabDMUnreadBadge"),Kt(this,"tabGuildRedDot"),Kt(this,"tabSystemRedDot"),Kt(this,"tabWhisperRedDot"),Kt(this,"listWrap"),Kt(this,"dmListWrap"),Kt(this,"dmListEl"),Kt(this,"newMsgBadgeEl"),Kt(this,"newMsgBadgeCount",0),Kt(this,"hideTransitionTimer",null),Kt(this,"inputBar"),Kt(this,"emojiPicker"),Kt(this,"textareaEl"),Kt(this,"sendBtnEl"),Kt(this,"emojiBtnEl"),Kt(this,"emojiGridEl"),Kt(this,"emojiCategoryBtns",[]),Kt(this,"emojiPickerOpen",!1),Kt(this,"sending",!1),Kt(this,"roomUnsubs",[]),Kt(this,"globalUnsubs",[]),Kt(this,"rows",new Map),Kt(this,"orderedIds",[]),Kt(this,"viewMode","guild"),Kt(this,"globalCooldownEnd",0),Kt(this,"globalCooldownTimer",null),Kt(this,"activeRoom",eKt.getInstance().getGuildRoom()),Kt(this,"activeDMPeer",null),Kt(this,"channelSwitchBtn"),Kt(this,"channelSwitching",!1),Kt(this,"totalUnread",0),Kt(this,"loadingOlder",!1),Kt(this,"exhaustedOlder",!1),Kt(this,"pendingTranslations",new Set),Kt(this,"translationCache",new Map),Kt(this,"timeTickerId",null),Kt(this,"handleNew",Vt(t=>{
+ const i=this.isNearBottom(),s=this.appendRow(t);
+ s&&this.playMountAnimation(s),i?requestAnimationFrame(()=>this.scrollToBottom()):this.isMine(t)||this.incrementNewMsgBadge()}
+ ,"handleNew")),Kt(this,"handleUpdated",Vt(t=>{
+ var i;
+ const s=this.rows.get(t.id);
+ if(!s)return;
+ s.msg=t;
+ const e=this.orderedIds.indexOf(t.id),n=e>0?this.orderedIds[e-1]:void 0,h=n?null==(i=this.rows.get(n))?void 0:i.msg:void 0;
+ s.hasHeader=!this.shouldGroup(h,t),this.renderRowContent(s)}
+ ,"handleUpdated")),Kt(this,"handleReset",Vt(t=>{
+ this.clearRows();
+ for(const i of t)this.appendRow(i);
+ this.exhaustedOlder=!1,requestAnimationFrame(()=>this.scrollToBottom())}
+ ,"handleReset")),Kt(this,"handlePrepended",Vt(t=>{
+ if(0===t.length)return;
+ const i=this.listEl.scrollHeight,s=this.listEl.scrollTop,e=[...t].sort((t,i)=>t.timestamp-i.timestamp),n=document.createDocumentFragment(),h=[];
+ for(let o=0;
+ o<e.length;
+ o++){
+ const t=e[o],i=0===o?void 0:e[o-1],s=!this.shouldGroup(i,t),r=this.buildRow(t,s);
+ n.appendChild(r.el),h.push(r),this.rows.set(t.id,r)}
+ this.listEl.insertBefore(n,this.listEl.firstChild),this.orderedIds=[...e.map(t=>t.id),...this.orderedIds];
+ const r=this.orderedIds[e.length];
+ if(r){
+ const t=this.rows.get(r),i=h[h.length-1];
+ if(t&&i){
+ const s=!this.shouldGroup(i.msg,t.msg);
+ t.hasHeader!==s&&(t.hasHeader=s,this.renderRowContent(t))}
+ }
+ requestAnimationFrame(()=>{
+ const t=this.listEl.scrollHeight;
+ this.listEl.scrollTop=s+(t-i)}
+ )}
+ ,"handlePrepended")),Kt(this,"onScroll",Vt(()=>{
+ this.loadingOlder||this.exhaustedOlder||this.listEl.scrollTop<=40&&this.tryLoadOlder(),this.newMsgBadgeCount>0&&this.isNearBottom()&&this.hideNewMsgBadge()}
+ ,"onScroll")),Kt(this,"onVisibilityChange",Vt(()=>{
+ document.hidden?this.stopTimeTicker():"none"!==this.root.style.display&&(this.tickTimes(),this.startTimeTicker())}
+ ,"onVisibilityChange")),Kt(this,"onInputKey",Vt(t=>{
+ t.isComposing||"Enter"!==t.key||t.shiftKey||(t.preventDefault(),this.handleSend())}
+ ,"onInputKey")),t.ensureGlobalStyle(),this.root=document.createElement("div"),this.root.dataset.role="chat-overlay",this.root.style.cssText=["position:fixed","inset:0","display:none","flex-direction:column","background:#1f1a1a","color:#f3ece2","z-index:10000","font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif","-webkit-tap-highlight-color:transparent","opacity:0","transform:translateY(12px)","transition:opacity 200ms ease-out, transform 220ms cubic-bezier(0.2,0.8,0.25,1)","padding-top:env(safe-area-inset-top, 0px)","padding-bottom:env(safe-area-inset-bottom, 0px)","padding-left:env(safe-area-inset-left, 0px)","padding-right:env(safe-area-inset-right, 0px)"].join(";
+ "),this.card=document.createElement("div"),this.card.style.cssText=["flex:1","display:flex","flex-direction:column","overflow:hidden","position:relative","background:#1f1a1a"].join(";
+ "),this.root.appendChild(this.card);
+ const i=document.createElement("div");
+ i.style.cssText=["flex:0 0 auto","display:flex","align-items:center","padding:8px 6px","min-height:48px","border-bottom:1px solid #2a2121","background:#241c1c"].join(";
+ ");
+ const s=document.createElement("button");
+ s.type="button",s.style.cssText=["width:44px","height:44px","background:transparent","color:#f3ece2","border:none","font-size:22px","line-height:1","cursor:pointer","padding:0","flex:0 0 auto","display:flex","align-items:center","justify-content:center"].join(";
+ "),s.setAttribute("aria-label","뒤로"),s.innerHTML='<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg>',s.addEventListener("click",()=>{
+ "dm"===this.viewMode?this.setViewMode("dmList"):this.hide()}
+ ),i.appendChild(s);
+ const e=document.createElement("div");
+ e.style.cssText=["flex:1","display:flex","flex-direction:column","align-items:center","justify-content:center","min-width:0","padding:0 4px"].join(";
+ "),this.titleEl=document.createElement("div"),this.titleEl.textContent=SG.getText("GAME_634","길드 채팅"),this.titleEl.style.cssText="font-size:16px;
+  font-weight:700;
+  line-height:1.2;
+ ",e.appendChild(this.titleEl),this.statusEl=document.createElement("div"),this.statusEl.style.cssText="font-size:11px;
+  color:#8a8074;
+  line-height:1.2;
+  margin-top:1px;
+ ",this.statusEl.textContent=SG.getText("COMMON_28","대기중"),e.appendChild(this.statusEl),i.appendChild(e),this.channelSwitchBtn=document.createElement("button"),this.channelSwitchBtn.type="button",this.channelSwitchBtn.setAttribute("aria-label","채널 변경"),this.channelSwitchBtn.textContent=SG.getText("COMMON_5","변경"),this.channelSwitchBtn.style.cssText=["flex:0 0 auto","min-width:44px","height:36px","background:transparent","color:#c9a861","border:1px solid #3a2f2a","border-radius:8px","font-size:12px","font-weight:700","cursor:pointer","padding:0 10px","display:none"].join(";
+ "),this.channelSwitchBtn.addEventListener("click",()=>{
+ this.showChannelPicker()}
+ ),i.appendChild(this.channelSwitchBtn),this.card.appendChild(i),this.tabBarEl=this.buildTabBar(),this.card.appendChild(this.tabBarEl),this.listWrap=document.createElement("div"),this.listWrap.style.cssText=["flex:1","position:relative","display:flex","flex-direction:column","overflow:hidden"].join(";
+ "),this.listEl=document.createElement("div"),this.listEl.className="chat-scroll",this.listEl.style.cssText=["flex:1","overflow-y:auto","padding:8px 12px 12px","display:flex","flex-direction:column","gap:0","touch-action:pan-y","-webkit-overflow-scrolling:touch","overscroll-behavior:contain","font-size:14px"].join(";
+ "),this.listEl.addEventListener("scroll",this.onScroll),this.listWrap.appendChild(this.listEl),this.newMsgBadgeEl=this.buildNewMsgBadge(),this.listWrap.appendChild(this.newMsgBadgeEl),this.card.appendChild(this.listWrap),this.dmListWrap=this.buildDMListView(),this.card.appendChild(this.dmListWrap),this.inputBar=this.buildInputBar(),this.card.appendChild(this.inputBar),this.emojiPicker=this.buildEmojiPicker(),this.card.appendChild(this.emojiPicker),this.actionSheetEl=this.buildNameActionSheet(),this.root.appendChild(this.actionSheetEl),document.body.appendChild(this.root)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ static ensureGlobalStyle(){
+ if(this._globalStyleInjected)return;
+ const t=document.createElement("style");
+ t.id="chat-overlay-style",t.textContent='\n[data-role="chat-overlay"] .chat-scroll::-webkit-scrollbar {
+  width:0;
+  height:0;
+  display:none;
+  }
+ \n[data-role="chat-overlay"] .chat-scroll {
+  scrollbar-width:none;
+  -ms-overflow-style:none;
+  }
+ \n[data-role="chat-overlay"] button {
+  -webkit-tap-highlight-color:transparent;
+  }
+ \n[data-role="chat-overlay"] button:active:not(:disabled) {
+  opacity:0.55;
+  transform:scale(0.96);
+  }
+ \n[data-role="chat-overlay"] button {
+  transition:opacity 120ms ease, transform 120ms ease;
+  }
+ \n[data-role="chat-overlay"] textarea {
+  -webkit-user-select:text;
+  user-select:text;
+  -webkit-touch-callout:default;
+  }
+ \n[data-role="chat-overlay"] textarea::placeholder {
+  color:#6a5f54;
+  }
+ \n',document.head.appendChild(t),this._globalStyleInjected=!0}
+ show(){
+ null!==this.hideTransitionTimer&&(clearTimeout(this.hideTransitionTimer),this.hideTransitionTimer=null),this.updateRedDot(),this.subscribeGlobal(),this.refreshSenderInfoFromCache();
+ const t=AD.hasGuild||VVt();
+ this.tabGuildBtn.style.display=t?"":"none",this.setViewMode(t?"guild":"global"),this.root.style.display="flex",requestAnimationFrame(()=>{
+ this.root.style.opacity="1",this.root.style.transform="translateY(0)",this.scrollToBottom()}
+ ),this.startTimeTicker(),document.addEventListener("visibilitychange",this.onVisibilityChange)}
+ openDMWith(t,i){
+ t&&t!==ML.uid&&(this.show(),this.setViewMode("dm",{
+ uid:t,name:i||t}
+ ))}
+ hide(){
+ this.root.style.opacity="0",this.root.style.transform="translateY(12px)",this.hideTransitionTimer=window.setTimeout(()=>{
+ this.root.style.display="none",this.hideTransitionTimer=null}
+ ,220),this.saveChatInfo(),this.unsubscribeAll(),this.stopTimeTicker(),document.removeEventListener("visibilitychange",this.onVisibilityChange),this.closeEmojiPicker(),this.hideNewMsgBadge(),this.textareaEl&&this.textareaEl.blur()}
+ async saveChatInfo(){
+ await $A.saveGuildChatMessageID(bD.getInstance().recentMessageTimes.join("|")),cS.getInstance().dispatchCustomEvent("GuildInfoUpdate")}
+ subscribeActiveRoom(){
+ for(const i of this.roomUnsubs)i();
+ this.roomUnsubs.length=0;
+ const t=this.activeRoom.bus;
+ this.roomUnsubs.push(t.on("message:new",this.handleNew)),this.roomUnsubs.push(t.on("message:updated",this.handleUpdated)),this.roomUnsubs.push(t.on("history:reset",this.handleReset)),this.roomUnsubs.push(t.on("history:prepended",this.handlePrepended))}
+ subscribeGlobal(){
+ if(this.globalUnsubs.length>0)return;
+ const t=eKt.getInstance(),i=t.getGuildRoom().bus;
+ this.globalUnsubs.push(i.on("connected",()=>{
+ if(VVt()){
+ const t=cKt.getInstance().devUser;
+ if(t)return void this.setStatus(`${
+ t.name}
+  (Lv.${
+ t.level}
+ )`,"#c9a861")}
+ this.setStatus(SG.getText("GAME_635","연결됨"),"#8fd27a")}
+ )),this.globalUnsubs.push(i.on("disconnected",t=>this.setStatus(`${
+ SG.getText("GAME_651","끊김")}
+ ${
+ t.reason?` (${
+ t.reason}
+ )`:""}
+ `,"#d28383"))),this.globalUnsubs.push(t.globalBus.on("room:message",({
+ roomId:i,kind:s,message:e}
+ )=>{
+ if("dm"!==s)return;
+ const n=this.myUid();
+ ""!==n&&e.sender.uid===n||"dm"===this.viewMode&&this.activeRoom.roomId===i||(this.totalUnread+=1,this.updateWhisperTabBadge()),"dmList"===this.viewMode&&(VVt()?t.setConversations(this.buildLocalConversations()):cKt.getInstance().requestConversationList())}
+ )),this.globalUnsubs.push(t.globalBus.on("conversations:updated",t=>{
+ this.totalUnread=t.reduce((t,i)=>t+i.unread,0),this.updateWhisperTabBadge(),"dmList"===this.viewMode&&this.renderConversationList(t)}
+ )),this.globalUnsubs.push(t.globalBus.on("channel:info",t=>{
+ this.setChannelSwitching(!1),"global"===this.viewMode&&(this.statusEl.textContent=this.formatChannelStatus(t),this.channelSwitchBtn.style.display=t.totalChannels>1?"block":"none")}
+ )),this.globalUnsubs.push(t.globalBus.on("channel:switching",({
+ channelId:t}
+ )=>{
+ this.setChannelSwitching(!0,t)}
+ )),this.globalUnsubs.push(t.globalBus.on("global:error",t=>{
+ if("SWITCH_FAILED"!==t.code&&"SWITCH_TIMEOUT"!==t.code&&"SWITCH_COOLDOWN"!==t.code&&"CHANNEL_FULL"!==t.code||this.setChannelSwitching(!1),"COOLDOWN"===t.code&&t.remainMs)this.showGlobalCooldownUI(t.remainMs);
+ else if("WAVE_RESTRICTED"===t.code)this.showCooldownToast(SG.getText("GAME_652","Lv.1 이상부터 채팅 가능합니다"));
+ else if("SWITCH_COOLDOWN"===t.code&&t.remainMs){
+ const i=SG.getValueReplace("GAME_653","##",Math.ceil(t.remainMs/1e3),`${
+ Math.ceil(t.remainMs/1e3)}
+ 초 후 채널 변경 가능`);
+ this.showCooldownToast(i)}
+ else"SWITCH_TIMEOUT"===t.code?this.showCooldownToast(SG.getText("GAME_668","채널 변경 응답이 없습니다.")):"SWITCH_FAILED"===t.code?this.showCooldownToast(SG.getText("COMMON_83","잠시 후에 이용해 주세요.")):"CHANNEL_FULL"===t.code&&this.showCooldownToast(SG.getText("GAME_654","해당 채널이 가득 찼습니다"))}
+ ))}
+ unsubscribeAll(){
+ for(const t of this.roomUnsubs)t();
+ this.roomUnsubs.length=0;
+ for(const t of this.globalUnsubs)t();
+ this.globalUnsubs.length=0}
+ refreshSenderInfoFromCache(){
+ if(!VVt())for(const t of eKt.getInstance().getAllRooms())for(const i of t.getMessages()){
+ const t=rKt.resolve(i.sender.uid,i.sender.name);
+ (t.level>0||""!==t.role)&&(i.sender.level=t.level,""!==t.role&&(i.sender.role=t.role))}
+ }
+ clearRows(){
+ this.listEl.replaceChildren(),this.rows.clear(),this.orderedIds=[]}
+ rebuildAll(){
+ this.clearRows();
+ for(const t of this.activeRoom.getMessages())this.appendRow(t)}
+ appendRow(t){
+ var i;
+ const s=this.orderedIds[this.orderedIds.length-1],e=s?null==(i=this.rows.get(s))?void 0:i.msg:void 0,n=!this.shouldGroup(e,t),h=this.buildRow(t,n);
+ return this.listEl.appendChild(h.el),this.rows.set(t.id,h),this.orderedIds.push(t.id),h}
+ playMountAnimation(t){
+ t.el.style.opacity="0",t.el.style.transform="translateY(6px)",requestAnimationFrame(()=>{
+ t.el.style.opacity="1",t.el.style.transform="translateY(0)"}
+ )}
+ shouldGroup(t,i){
+ return!(!t||t.sender.uid!==i.sender.uid||i.timestamp-t.timestamp>3e5||"failed"===i.status)}
+ buildRow(t,i){
+ const s=document.createElement("div");
+ s.dataset.messageId=t.id;
+ const e={
+ el:s,msg:t,hasHeader:i,timeEl:null}
+ ;
+ return this.applyRowStyle(e),this.renderRowContent(e),e}
+ applyRowStyle(t){
+ const i=this.isMine(t.msg),s="failed"===t.msg.status,e="system"===this.activeRoom.kind,n=t.hasHeader;
+ t.el.style.cssText=[`padding:${
+ n?"6px":"1px"}
+  8px`,"margin-top:"+(n?"8px":"0"),"border-radius:"+(n?"6px 6px 4px 4px":"0 0 4px 4px"),e?"background:rgba(201,168,97,0.08)":s?"background:rgba(210,131,131,0.1)":i?"background:rgba(255,204,102,0.06)":"background:transparent",e?"border-left:2px solid #c9a861":s?"border-left:2px solid #d28383":"border-left:2px solid transparent","display:flex","flex-direction:column","gap:2px","touch-action:pan-y","-webkit-user-select:none","user-select:none","transition:opacity 200ms ease-out, transform 200ms cubic-bezier(0.2,0.8,0.25,1), background 160ms ease"].join(";
+ ")}
+ renderRowContent(t){
+ const{
+ el:i,msg:s,hasHeader:e}
+ =t;
+ this.applyRowStyle(t),i.replaceChildren(),t.timeEl=null;
+ const n=this.isMine(s);
+ if(e){
+ const e=document.createElement("div");
+ e.style.cssText="font-size:12px;
+  color:#a79a8a;
+  display:flex;
+  gap:4px;
+  align-items:baseline;
+ ";
+ const h=document.createElement("span");
+ if(h.style.color=n?"#ffcc66":"#88cfff",h.style.fontWeight="700",h.textContent=s.sender.name,!(n||VVt()||"guild"!==this.viewMode&&"global"!==this.viewMode)&&(h.style.cursor="pointer",h.style.textDecoration="underline",h.style.textDecorationColor="rgba(136,207,255,0.35)",h.style.textUnderlineOffset="2px",h.addEventListener("click",t=>{
+ t.stopPropagation(),this.openNameActionSheet(s)}
+ )),e.appendChild(h),s.sender.level>0){
+ const t=document.createElement("span");
+ t.style.color="#8a8074",t.textContent=` ( Lv. ${
+ s.sender.level}
+  )`,e.appendChild(t)}
+ const r=gKt(s.sender.role);
+ if(r){
+ const t=document.createElement("span");
+ t.style.color="#c9a861",t.textContent=` 🛡${
+ r}
+ `,e.appendChild(t)}
+ const o=document.createElement("span");
+ if(o.style.color="#6a5f54",o.textContent=` · ${
+ mKt(s.timestamp)}
+ `,e.appendChild(o),t.timeEl=o,"failed"===s.status){
+ const t=document.createElement("span");
+ t.style.color="#d28383",t.textContent=SG.getText("GAME_655","전송 실패"),e.appendChild(t);
+ const i=document.createElement("button");
+ i.type="button",i.textContent=SG.getText("GAME_656","재시도"),i.style.cssText=["background:transparent","color:#d28383","border:1px solid #d28383","border-radius:4px","padding:0 6px","font-size:11px","cursor:pointer","margin-left:4px","line-height:1.4"].join(";
+ "),i.addEventListener("click",t=>{
+ t.stopPropagation(),cKt.getInstance().retrySend(s.id)}
+ ),e.appendChild(i)}
+ i.appendChild(e)}
+ const h=document.createElement("div");
+ h.style.cssText=["display:flex","align-items:flex-start","gap:6px"].join(";
+ ");
+ const r=document.createElement("div");
+ r.style.cssText=["flex:1","font-size:14px","line-height:1.4","white-space:pre-wrap","word-break:break-word","pending"===s.status?"opacity:0.55":""].filter(Boolean).join(";
+ ");
+ const o=s.translated&&s.translatedText?s.translatedText:s.content;
+ if(r.textContent=o,h.appendChild(r),!n){
+ const t=document.createElement("button");
+ t.type="button";
+ const i=this.pendingTranslations.has(s.id);
+ t.style.cssText=["flex:0 0 auto","width:28px","height:28px","background:transparent","border:0px solid #3a2f2a","border-radius:4px","padding:0","cursor:pointer","margin-top:1px","display:flex","align-items:center","justify-content:center"].join(";
+ ");
+ const e=Vt(()=>i?'\n            <svg width="16" height="16" viewBox="0 0 24 24">\n              <circle cx="12" cy="12" r="10"\n                stroke="#8a8074"\n                stroke-width="2"\n                fill="none"\n                stroke-dasharray="60"\n                stroke-dashoffset="20">\n                <animateTransform attributeName="transform"\n                  type="rotate"\n                  from="0 12 12"\n                  to="360 12 12"\n                  dur="1s"\n                  repeatCount="indefinite"/>\n              </circle>\n            </svg>\n          ':'\n          <svg width="16" height="16" viewBox="0 0 24 24">\n\n            <g transform="scale(1.3) translate(-2.5, -2.5)">\n\n              \x3c!-- 뒤: 文 박스 --\x3e\n              <rect x="2" y="2" width="14" height="14" rx="3"\n                    fill="#f3f1ec"/>\n\n              \x3c!-- 文 --\x3e\n              <text x="9" y="9"\n                text-anchor="middle"\n                dominant-baseline="middle"\n                font-size="9"\n                font-weight="bold"\n                fill="#5a3825"\n                font-family="sans-serif">\n                文\n              </text>\n\n              \x3c!-- 앞: A 박스 --\x3e\n              <rect x="8" y="8" width="14" height="14" rx="3" fill="#5a3825"/>\n\n              <text x="15" y="15"\n                text-anchor="middle"\n                dominant-baseline="middle"\n                font-size="9"\n                font-weight="bold"\n                fill="#ffffff">\n                A\n              </text>\n\n            </g>\n\n          </svg>\n        ',"getSVG");
+ t.innerHTML=e(),t.disabled=i,t.addEventListener("click",async n=>{
+ n.stopPropagation(),i||(await this.onTranslateClick(s.id),t.innerHTML=e())}
+ ),h.appendChild(t)}
+ i.appendChild(h)}
+ openNameActionSheet(t){
+ const i=t.sender.uid,s=t.sender.name||`상대 ${
+ i.slice(0,6)}
+ `;
+ if(!i)return;
+ this.actionSheetContent.replaceChildren();
+ const e=document.createElement("div");
+ e.style.cssText=["padding:14px 16px 10px","text-align:center","font-size:13px","color:#8a8074","border-bottom:1px solid #2a2121","overflow:hidden","text-overflow:ellipsis","white-space:nowrap"].join(";
+ "),e.textContent=s,this.actionSheetContent.appendChild(e),this.actionSheetContent.appendChild(this.buildActionSheetItem(`💬  ${
+ SG.getText("GAME_639","귓속말 보내기")}
+ `,()=>{
+ this.closeNameActionSheet(),this.openDMWith(i,s)}
+ )),this.actionSheetContent.appendChild(this.buildActionSheetItem(SG.getText("COMMON_2","취소"),()=>this.closeNameActionSheet(),{
+ color:"#6a5f54",borderTop:!0}
+ )),this.actionSheetEl.style.display="flex",requestAnimationFrame(()=>{
+ this.actionSheetBackdrop.style.opacity="1",this.actionSheetContent.style.transform="translateY(0)"}
+ )}
+ closeNameActionSheet(){
+ this.actionSheetBackdrop.style.opacity="0",this.actionSheetContent.style.transform="translateY(100%)",setTimeout(()=>{
+ "0"===this.actionSheetBackdrop.style.opacity&&(this.actionSheetEl.style.display="none")}
+ ,200)}
+ buildNameActionSheet(){
+ const t=document.createElement("div");
+ return t.style.cssText=["position:absolute","inset:0","display:none","flex-direction:column","justify-content:flex-end","z-index:5","touch-action:none"].join(";
+ "),this.actionSheetBackdrop=document.createElement("div"),this.actionSheetBackdrop.style.cssText=["position:absolute","inset:0","background:rgba(0,0,0,0.5)","opacity:0","transition:opacity 180ms ease-out"].join(";
+ "),this.actionSheetBackdrop.addEventListener("click",()=>this.closeNameActionSheet()),t.appendChild(this.actionSheetBackdrop),this.actionSheetContent=document.createElement("div"),this.actionSheetContent.style.cssText=["position:relative","background:#241c1c","border-top-left-radius:16px","border-top-right-radius:16px","padding-bottom:env(safe-area-inset-bottom, 12px)","box-shadow:0 -8px 24px rgba(0,0,0,0.5)","transform:translateY(100%)","transition:transform 220ms cubic-bezier(0.2,0.8,0.25,1)"].join(";
+ "),this.actionSheetContent.addEventListener("click",t=>t.stopPropagation()),t.appendChild(this.actionSheetContent),t}
+ buildActionSheetItem(t,i,s){
+ const e=document.createElement("button");
+ return e.type="button",e.textContent=t,e.style.cssText=["display:block","width:100%","padding:16px","background:transparent",`color:${
+ (null==s?void 0:s.color)??"#f3ece2"}
+ `,"border:none",(null==s?void 0:s.borderTop)?"border-top:1px solid #2a2121":"","font-size:15px","font-weight:600","cursor:pointer","text-align:center"].filter(Boolean).join(";
+ "),e.addEventListener("click",i),e}
+ async onTranslateClick(t){
+ const i=this.activeRoom,s=i.getMessage(t);
+ if(!s)return;
+ if(s.translated)return void i.updateMessage(t,{
+ translated:!1}
+ );
+ const e=this.translationCache.get(s.content);
+ if(e)return void i.updateMessage(t,{
+ translated:!0,translatedText:e}
+ );
+ this.pendingTranslations.add(t);
+ const n=this.rows.get(t);
+ n&&this.renderRowContent(n);
+ try{
+ const e=await bD.getInstance().translateText(s.content);
+ e&&e.length>0&&(this.translationCache.set(s.content,e),i.updateMessage(t,{
+ translated:!0,translatedText:e}
+ ))}
+ catch(GSi){
+ }
+ finally{
+ this.pendingTranslations.delete(t);
+ const i=this.rows.get(t);
+ i&&this.renderRowContent(i)}
+ }
+ async tryLoadOlder(){
+ if(!this.loadingOlder&&!this.exhaustedOlder){
+ this.loadingOlder=!0;
+ try{
+ let t=0;
+ if("dm"===this.activeRoom.kind&&this.activeRoom.peerUid){
+ const i=this.activeRoom.oldestTimestamp(),s=null!=i?new Date(i):void 0,e=this.activeRoom;
+ t=await new Promise(t=>{
+ const i=setTimeout(()=>{
+ n(),t(0)}
+ ,5e3),n=e.bus.on("history:prepended",s=>{
+ clearTimeout(i),n(),t(s.length)}
+ );
+ cKt.getInstance().requestWhisperHistory(e.peerUid,{
+ before:s,limit:20}
+ )}
+ )}
+ else t=await cKt.getInstance().loadOlder(20);
+ 0===t&&(this.exhaustedOlder=!0)}
+ finally{
+ requestAnimationFrame(()=>{
+ this.loadingOlder=!1}
+ )}
+ }
+ }
+ isNearBottom(){
+ const t=this.listEl;
+ return t.scrollHeight-t.scrollTop-t.clientHeight<80}
+ scrollToBottom(){
+ this.listEl.scrollTop=this.listEl.scrollHeight}
+ buildNewMsgBadge(){
+ const t=document.createElement("button");
+ return t.type="button",t.style.cssText=["position:absolute","left:50%","bottom:12px","transform:translate(-50%, 8px)","background:#684f3e","color:#f3ece2","border:none","border-radius:999px","padding:8px 16px","font-size:13px","font-weight:700","cursor:pointer","opacity:0","pointer-events:none","transition:opacity 160ms ease, transform 160ms ease","box-shadow:0 4px 12px rgba(0,0,0,0.4)","z-index:2","white-space:nowrap"].join(";
+ "),t.textContent=`${
+ SG.getText("GAME_659","새 메시지")}
+  ↓`,t.addEventListener("click",()=>{
+ this.hideNewMsgBadge(),this.scrollToBottom()}
+ ),t}
+ incrementNewMsgBadge(){
+ this.newMsgBadgeCount+=1;
+ const t=this.newMsgBadgeCount;
+ this.newMsgBadgeEl.textContent=1===t?`${
+ SG.getText("GAME_659","새 메시지")}
+  ↓`:`${
+ SG.getText("GAME_659","새 메시지")}
+  ${
+ t}
+  ↓`,this.newMsgBadgeEl.style.opacity="1",this.newMsgBadgeEl.style.pointerEvents="auto",this.newMsgBadgeEl.style.transform="translate(-50%, 0)"}
+ hideNewMsgBadge(){
+ 0!==this.newMsgBadgeCount&&(this.newMsgBadgeCount=0,this.newMsgBadgeEl.style.opacity="0",this.newMsgBadgeEl.style.pointerEvents="none",this.newMsgBadgeEl.style.transform="translate(-50%, 8px)")}
+ startTimeTicker(){
+ null===this.timeTickerId&&(document.hidden||(this.timeTickerId=window.setInterval(()=>this.tickTimes(),15e3)))}
+ stopTimeTicker(){
+ null!==this.timeTickerId&&(clearInterval(this.timeTickerId),this.timeTickerId=null)}
+ tickTimes(){
+ const t=Date.now();
+ for(const i of this.rows.values()){
+ if(!i.timeEl)continue;
+ if(t-i.msg.timestamp>864e5)continue;
+ const s=` · ${
+ mKt(i.msg.timestamp)}
+ `;
+ i.timeEl.textContent!==s&&(i.timeEl.textContent=s)}
+ }
+ setStatus(t,i){
+ this.statusEl.textContent=t,this.statusEl.style.color=i}
+ formatChannelStatus(t){
+ const i=SG.getValueReplace("GAME_528","##",t.memberCount,`${
+ t.memberCount}
+ 명`);
+ return`${
+ t.channelId.toUpperCase()}
+  (${
+ i}
+ )`}
+ setChannelSwitching(t,i){
+ if(this.channelSwitching=t,this.channelSwitchBtn.disabled=t,this.channelSwitchBtn.style.opacity=t?"0.55":"1",this.channelSwitchBtn.style.cursor=t?"default":"pointer","global"!==this.viewMode)return;
+ if(t){
+ const t=SG.getText("GAME_667","채널 변경 중...");
+ return this.statusEl.textContent=i?`${
+ i.toUpperCase()}
+  ${
+ t}
+ `:t,void(this.statusEl.style.color="#c9a861")}
+ const s=eKt.getInstance().currentChannel;
+ this.statusEl.textContent=s?this.formatChannelStatus(s):"",this.statusEl.style.color="#8a8074"}
+ isMine(t){
+ if("__me__"===t.sender.uid)return!0;
+ if(VVt()){
+ const i=cKt.getInstance().devUser;
+ return null!==i&&t.sender.uid===i.uid}
+ return""!==ML.uid&&t.sender.uid===ML.uid}
+ buildTabBar(){
+ const t=document.createElement("div");
+ return t.style.cssText=["flex:0 0 auto","display:flex","border-bottom:1px solid #2a2121","background:#1f1a1a"].join(";
+ "),this.tabSystemBtn=this.buildTabButton(SG.getText("GAME_660","시스템"),"system"),this.tabGlobalBtn=this.buildTabButton(SG.getText("COMMON_332","전체"),"global"),this.tabGuildBtn=this.buildTabButton(SG.getText("GAME_411","길드"),"guild"),this.tabDMBtn=this.buildTabButton(SG.getText("GAME_637","귓속말"),"dmList"),this.tabDMUnreadBadge=document.createElement("span"),this.tabDMUnreadBadge.style.cssText=["display:none","margin-left:6px","min-width:18px","height:18px","padding:0 5px","background:#d28383","color:#1f1a1a","border-radius:9px","font-size:11px","font-weight:700","line-height:18px","text-align:center"].join(";
+ "),this.tabDMBtn.appendChild(this.tabDMUnreadBadge),this.tabGuildRedDot=document.createElement("span"),this.tabGuildRedDot.style.cssText=["position:relative","top:-6px","display:none","margin-left:12px","min-width:12px","height:12px","padding:0","background:#d28383","color:#1f1a1a","border-radius:50%","font-size:11px","font-weight:700","line-height:12px","text-align:center"].join(";
+ "),this.tabGuildBtn.appendChild(this.tabGuildRedDot),this.tabSystemRedDot=document.createElement("span"),this.tabSystemRedDot.style.cssText=this.tabGuildRedDot.style.cssText,this.tabSystemBtn.appendChild(this.tabSystemRedDot),this.tabWhisperRedDot=document.createElement("span"),this.tabWhisperRedDot.style.cssText=this.tabGuildRedDot.style.cssText,this.tabDMBtn.appendChild(this.tabWhisperRedDot),t.appendChild(this.tabGuildBtn),t.appendChild(this.tabGlobalBtn),t.appendChild(this.tabSystemBtn),t.appendChild(this.tabDMBtn),t}
+ buildTabButton(t,i){
+ const s=document.createElement("button");
+ return s.type="button",s.textContent=t,s.style.cssText=["flex:1","background:transparent","border:none","color:#8a8074","padding:12px 0","font-size:14px","font-weight:700","cursor:pointer","border-bottom:2px solid transparent","transition:color 120ms ease, border-color 120ms ease"].join(";
+ "),s.addEventListener("click",()=>this.setViewMode(i)),s}
+ updateTabActive(){
+ const t=[this.tabSystemBtn,this.tabGlobalBtn,this.tabGuildBtn,this.tabDMBtn],i={
+ system:this.tabSystemBtn,global:this.tabGlobalBtn,guild:this.tabGuildBtn,dmList:this.tabDMBtn,dm:this.tabDMBtn}
+ [this.viewMode];
+ for(const s of t)s===i?(s.style.color="#f3ece2",s.style.borderBottomColor="#c9a861"):(s.style.color="#8a8074",s.style.borderBottomColor="transparent")}
+ updateWhisperTabBadge(){
+ this.tabDMUnreadBadge&&(this.totalUnread>0?(this.tabDMUnreadBadge.textContent=this.totalUnread>99?"99+":String(this.totalUnread),this.tabDMUnreadBadge.style.display="inline-block",this.tabWhisperRedDot.style.display="none"):this.tabDMUnreadBadge.style.display="none")}
+ updateGuildTabRedDot(){
+ this.tabGuildRedDot&&(1==AD.checkChatGuild()?this.tabGuildRedDot.style.display="inline-block":this.tabGuildRedDot.style.display="none")}
+ updateSystemTabRedDot(){
+ this.tabSystemRedDot&&(1==AD.checkChatSystem()?this.tabSystemRedDot.style.display="inline-block":this.tabSystemRedDot.style.display="none")}
+ updateWhisperTabRedDot(){
+ this.tabWhisperRedDot&&(1==AD.checkChatWhisper()?this.tabWhisperRedDot.style.display="inline-block":this.tabWhisperRedDot.style.display="none")}
+ updateRedDot(){
+ this.updateGuildTabRedDot(),this.updateSystemTabRedDot(),this.updateWhisperTabRedDot()}
+ setViewMode(t,i){
+ this.viewMode=t;
+ const s=eKt.getInstance();
+ if("system"===t)this.activeRoom=s.getSystemRoom(),this.activeDMPeer=null,this.titleEl.textContent=SG.getText("COMMON_18","공지"),this.statusEl.style.display="none";
+ else if("global"===t){
+ this.activeRoom=s.getGlobalRoom(),this.activeDMPeer=null,this.titleEl.textContent=SG.getText("GAME_650","전체 채팅");
+ const t=s.currentChannel;
+ this.statusEl.textContent=t?this.formatChannelStatus(t):"",this.statusEl.style.display="block",this.channelSwitchBtn.style.display=t&&t.totalChannels>1?"block":"none",this.channelSwitchBtn.disabled=this.channelSwitching,VVt()||cKt.getInstance().requestGlobalRecent(50)||this.showCooldownToast(SG.getText("COMMON_83","잠시 후에 이용해 주세요."))}
+ else"guild"===t?(this.activeRoom=s.getGuildRoom(),this.activeDMPeer=null,this.titleEl.textContent=SG.getText("GAME_634","길드 채팅"),this.statusEl.textContent="",this.statusEl.style.display="none"):"dm"===t&&i?(this.activeRoom=s.getDMRoom(i.uid,i.name),this.activeDMPeer=i,this.titleEl.textContent=i.name||SG.getText("GAME_637","귓속말"),this.statusEl.style.display="none"):"dmList"===t&&(this.activeDMPeer=null,this.titleEl.textContent=SG.getText("GAME_637","귓속말"),this.statusEl.style.display="none");
+ const e="system"===t||"global"===t||"guild"===t||"dm"===t,n="global"===t||"guild"===t||"dm"===t;
+ if(this.listWrap.style.display=e?"flex":"none",this.dmListWrap.style.display="dmList"===t?"flex":"none",this.inputBar.style.display=n?"flex":"none",this.emojiPicker.style.display="none",this.emojiPickerOpen=!1,this.tabBarEl.style.display="dm"===t?"none":"flex","global"!==t&&(this.channelSwitchBtn.style.display="none"),this.updateTabActive(),this.clearGlobalCooldownUI(),e)this.exhaustedOlder=!1,this.loadingOlder=!1,this.subscribeActiveRoom(),this.rebuildAll(),requestAnimationFrame(()=>this.scrollToBottom());
+ else if(VVt()){
+ const t=this.buildLocalConversations();
+ s.setConversations(t)}
+ else{
+ const t=s.conversations;
+ t.length>0?this.renderConversationList(t):this.renderConversationList(this.buildLocalConversations()),cKt.getInstance().requestConversationList()}
+ "dm"===t&&i&&(cKt.getInstance().markWhisperRead(i.uid),0===this.activeRoom.store.size&&cKt.getInstance().requestWhisperHistory(i.uid,{
+ limit:50}
+ )),"system"===t&&0===this.activeRoom.store.size&&cKt.getInstance().requestSystemMessages(50)}
+ buildDMListView(){
+ const t=document.createElement("div");
+ return t.style.cssText=["flex:1","display:none","flex-direction:column","overflow:hidden"].join(";
+ "),this.dmListEl=document.createElement("div"),this.dmListEl.className="chat-scroll",this.dmListEl.style.cssText=["flex:1","overflow-y:auto","touch-action:pan-y","-webkit-overflow-scrolling:touch","overscroll-behavior:contain"].join(";
+ "),t.appendChild(this.dmListEl),t}
+ buildLocalConversations(){
+ const t=this.myUid(),i=[];
+ for(const s of eKt.getInstance().getAllRooms()){
+ if("dm"!==s.kind||!s.peerUid)continue;
+ const e=s.getMessages();
+ if(0===e.length)continue;
+ const n=e[e.length-1];
+ let h=s.peerName??"";
+ if(!h)for(let t=e.length-1;
+ t>=0;
+ t--)if(e[t].sender.uid===s.peerUid){
+ h=e[t].sender.name;
+ break}
+ const r=""!==t&&n.sender.uid===t;
+ i.push({
+ peerUid:s.peerUid,peerName:h,lastMessage:n.content,lastTimestamp:n.timestamp,unread:0,lastFromMe:r}
+ )}
+ return i.sort((t,i)=>i.lastTimestamp-t.lastTimestamp),i}
+ myUid(){
+ var t;
+ return VVt()?(null==(t=cKt.getInstance().devUser)?void 0:t.uid)??"":ML.uid??""}
+ renderConversationList(t){
+ if(this.dmListEl.replaceChildren(),0===t.length){
+ const t=document.createElement("div");
+ return t.style.cssText=["padding:40px 20px","text-align:center","color:#6a5f54","font-size:14px"].join(";
+ "),t.textContent=SG.getText("GAME_638","아직 대화가 없습니다."),void this.dmListEl.appendChild(t)}
+ for(const i of t)this.dmListEl.appendChild(this.buildConversationItem(i))}
+ buildConversationItem(t){
+ const i=document.createElement("div");
+ i.style.cssText=["display:flex","align-items:center","gap:12px","padding:12px 14px","border-bottom:1px solid #2a2121","cursor:pointer","transition:background 120ms ease"].join(";
+ "),i.addEventListener("click",()=>{
+ this.setViewMode("dm",{
+ uid:t.peerUid,name:t.peerName}
+ )}
+ ),i.addEventListener("pointerdown",()=>{
+ i.style.background="#2a2121"}
+ );
+ const s=Vt(()=>{
+ i.style.background="transparent"}
+ ,"clearHover");
+ i.addEventListener("pointerup",s),i.addEventListener("pointercancel",s),i.addEventListener("pointerleave",s);
+ const e=document.createElement("div");
+ e.style.cssText=["flex:0 0 auto","width:44px","height:44px","border-radius:50%","background:#3a2f2a","color:#f3ece2","display:flex","align-items:center","justify-content:center","font-size:16px","font-weight:700"].join(";
+ "),e.textContent=(t.peerName||"?").slice(0,1).toUpperCase(),i.appendChild(e);
+ const n=document.createElement("div");
+ n.style.cssText="flex:1;
+  min-width:0;
+  display:flex;
+  flex-direction:column;
+  gap:2px;
+ ";
+ const h=document.createElement("div");
+ h.style.cssText="font-size:14px;
+  font-weight:700;
+  color:#f3ece2;
+  overflow:hidden;
+  text-overflow:ellipsis;
+  white-space:nowrap;
+ ",h.textContent=t.peerName||`${
+ SG.getText("상대","상대")}
+  ${
+ t.peerUid.slice(0,6)}
+ `,n.appendChild(h);
+ const r=document.createElement("div");
+ r.style.cssText="font-size:13px;
+  color:#8a8074;
+  overflow:hidden;
+  text-overflow:ellipsis;
+  white-space:nowrap;
+ ";
+ const o=t.lastFromMe?`${
+ SG.getText("GAME_665","나")}
+ :`:"";
+ r.textContent=o+t.lastMessage,n.appendChild(r),i.appendChild(n);
+ const a=document.createElement("div");
+ a.style.cssText="flex:0 0 auto;
+  display:flex;
+  flex-direction:column;
+  align-items:flex-end;
+  gap:4px;
+ ";
+ const c=document.createElement("div");
+ if(c.style.cssText="font-size:11px;
+  color:#6a5f54;
+ ",c.textContent=t.lastTimestamp?mKt(t.lastTimestamp):"",a.appendChild(c),t.unread>0){
+ const i=document.createElement("div");
+ i.style.cssText=["min-width:20px","height:20px","padding:0 6px","background:#d28383","color:#1f1a1a","border-radius:10px","font-size:11px","font-weight:700","line-height:20px","text-align:center"].join(";
+ "),i.textContent=t.unread>99?"99+":String(t.unread),a.appendChild(i)}
+ return i.appendChild(a),i}
+ buildInputBar(){
+ const t=document.createElement("div");
+ return t.style.cssText=["flex:0 0 auto","display:flex","align-items:flex-end","gap:8px","padding:10px 12px","border-top:1px solid #2a2121","background:#241c1c"].join(";
+ "),this.emojiBtnEl=document.createElement("button"),this.emojiBtnEl.type="button",this.emojiBtnEl.textContent="😊",this.emojiBtnEl.setAttribute("aria-label","이모지"),this.emojiBtnEl.style.cssText=["flex:0 0 auto","width:44px","height:44px","background:transparent","border:none","font-size:24px","cursor:pointer","padding:0","display:flex","align-items:center","justify-content:center","line-height:1"].join(";
+ "),this.emojiBtnEl.addEventListener("click",t=>{
+ t.stopPropagation(),this.toggleEmojiPicker()}
+ ),t.appendChild(this.emojiBtnEl),this.textareaEl=document.createElement("textarea"),this.textareaEl.placeholder=`${
+ SG.getText("GAME_661","메시지 입력")}
+ …`,this.textareaEl.rows=1,this.textareaEl.maxLength=500,this.textareaEl.className="chat-scroll",this.textareaEl.style.cssText=["flex:1","resize:none","background:#2a2121","color:#f3ece2","border:1px solid #3a2f2a","border-radius:22px","padding:10px 14px","font-size:15px","line-height:1.35","font-family:inherit","outline:none","min-height:44px","max-height:120px","overflow-y:auto","touch-action:pan-y","-webkit-appearance:none"].join(";
+ "),this.textareaEl.addEventListener("input",()=>this.autoGrow()),this.textareaEl.addEventListener("keydown",this.onInputKey),t.appendChild(this.textareaEl),this.sendBtnEl=document.createElement("button"),this.sendBtnEl.type="button",this.sendBtnEl.setAttribute("aria-label","전송"),this.sendBtnEl.style.cssText=["flex:0 0 auto","width:44px","height:44px","background:#c9a861","color:#1f1a1a","border:none","border-radius:50%","cursor:pointer","padding:0","display:flex","align-items:center","justify-content:center"].join(";
+ "),this.sendBtnEl.innerHTML='<svg width="22" height="22" viewBox="0 0 24 24" fill="currentColor" stroke="none"><path d="M2 21l21-9L2 3v7l15 2-15 2v7z"/></svg>',this.sendBtnEl.addEventListener("click",()=>{
+ this.handleSend()}
+ ),t.appendChild(this.sendBtnEl),t}
+ autoGrow(){
+ const t=this.textareaEl;
+ t.style.height="auto",t.style.height=Math.min(t.scrollHeight,120)+"px"}
+ async handleSend(){
+ if(this.sending)return;
+ const t=this.textareaEl.value.trim();
+ if(0!==t.length){
+ this.sending=!0,this.sendBtnEl.disabled=!0,this.sendBtnEl.style.opacity="0.6",this.closeEmojiPicker();
+ try{
+ const i=await uKt.getInstance().changeBadWordToAsterisk(t),s=cKt.getInstance();
+ let e=!1;
+ e="global"===this.viewMode?await s.sendGlobalMessage(i):"dm"===this.viewMode&&this.activeDMPeer?await s.sendWhisper(this.activeDMPeer.uid,i):await s.send(i),e&&(this.textareaEl.value="",this.autoGrow())}
+ catch(GSi){
+ }
+ finally{
+ this.sending=!1,this.sendBtnEl.disabled=!1,this.sendBtnEl.style.opacity="1",this.textareaEl.focus()}
+ }
+ }
+ buildEmojiPicker(){
+ const t=document.createElement("div");
+ t.style.cssText=["flex:0 0 auto","width:100%","height:260px","background:#241c1c","border-top:1px solid #2a2121","display:none","flex-direction:column","overflow:hidden"].join(";
+ ");
+ const i=document.createElement("div");
+ return i.style.cssText=["flex:0 0 auto","display:flex","padding:4px","border-bottom:1px solid #2a2121","background:#1a1515"].join(";
+ "),dKt.forEach((t,s)=>{
+ const e=document.createElement("button");
+ e.type="button",e.textContent=t.icon,e.dataset.cat=t.key,e.style.cssText=["flex:1","background:transparent","border:none","font-size:22px","padding:10px 0","cursor:pointer","border-radius:8px","line-height:1"].join(";
+ "),e.addEventListener("click",t=>{
+ t.stopPropagation(),this.selectEmojiCategory(s)}
+ ),i.appendChild(e),this.emojiCategoryBtns.push(e)}
+ ),t.appendChild(i),this.emojiGridEl=document.createElement("div"),this.emojiGridEl.className="chat-scroll",this.emojiGridEl.style.cssText=["flex:1","overflow-y:auto","padding:8px","display:grid","grid-template-columns:repeat(8, 1fr)","gap:2px","touch-action:pan-y","-webkit-overflow-scrolling:touch","overscroll-behavior:contain"].join(";
+ "),t.appendChild(this.emojiGridEl),t.addEventListener("click",t=>t.stopPropagation()),this.selectEmojiCategory(0),t}
+ toggleEmojiPicker(){
+ this.emojiPickerOpen?this.closeEmojiPicker():this.openEmojiPicker()}
+ openEmojiPicker(){
+ this.emojiPicker.style.display="flex",this.emojiPickerOpen=!0}
+ closeEmojiPicker(){
+ this.emojiPicker.style.display="none",this.emojiPickerOpen=!1}
+ selectEmojiCategory(t){
+ this.emojiCategoryBtns.forEach((i,s)=>{
+ i.style.background=s===t?"#3a2f2a":"transparent"}
+ );
+ const i=dKt[t].list;
+ this.emojiGridEl.replaceChildren();
+ for(const s of i){
+ const t=document.createElement("button");
+ t.type="button",t.textContent=s,t.style.cssText=["background:transparent","border:none","font-size:26px","aspect-ratio:1 / 1","cursor:pointer","border-radius:8px","line-height:1","display:flex","align-items:center","justify-content:center"].join(";
+ "),t.addEventListener("click",t=>{
+ t.stopPropagation(),this.insertAtCursor(s)}
+ ),this.emojiGridEl.appendChild(t)}
+ }
+ showGlobalCooldownUI(t){
+ this.globalCooldownEnd=Date.now()+t,this.sendBtnEl.disabled=!0,this.updateCooldownLabel(),null!=this.globalCooldownTimer&&clearInterval(this.globalCooldownTimer),this.globalCooldownTimer=window.setInterval(()=>{
+ this.globalCooldownEnd-Date.now()<=0?this.clearGlobalCooldownUI():this.updateCooldownLabel()}
+ ,500)}
+ updateCooldownLabel(){
+ const t=Math.max(0,this.globalCooldownEnd-Date.now()),i=Math.ceil(t/1e3);
+ this.sendBtnEl.innerHTML=`<span style="font-size:13px;
+ font-weight:700;
+ ">${
+ i}
+ </span>`,this.sendBtnEl.style.opacity="0.5"}
+ clearGlobalCooldownUI(){
+ null!=this.globalCooldownTimer&&(clearInterval(this.globalCooldownTimer),this.globalCooldownTimer=null),this.globalCooldownEnd=0,this.sendBtnEl.disabled=!1,this.sendBtnEl.style.opacity="1",this.sendBtnEl.innerHTML='<svg width="22" height="22" viewBox="0 0 24 24" fill="currentColor" stroke="none"><path d="M2 21l21-9L2 3v7l15 2-15 2v7z"/></svg>'}
+ showChannelPicker(){
+ if(this.channelSwitching)return;
+ const t=eKt.getInstance(),i=t.currentChannel;
+ if(!i)return;
+ let s=!1,e=null,n=null;
+ const h=Vt(()=>{
+ s||(s=!0,null!=e&&(window.clearTimeout(e),e=null),n&&(n(),n=null))}
+ ,"finish");
+ n=t.globalBus.on("channel:list",t=>{
+ if(h(),!t||t.length<=1)return void this.showCooldownToast(SG.getText("GAME_662","다른 채널이 없습니다."));
+ this.actionSheetContent.replaceChildren();
+ const s=document.createElement("div");
+ s.style.cssText="padding:14px 16px 10px;
+  text-align:center;
+  font-size:13px;
+  color:#8a8074;
+  border-bottom:1px solid #2a2121;
+ ",s.textContent=SG.getText("GAME_666","채널 선택"),this.actionSheetContent.appendChild(s);
+ for(const e of t){
+ const t=e.channelId===i.channelId,s=`  ✓ ${
+ SG.getText("GAME_152","현재")}
+ `,n=`${
+ e.channelId.toUpperCase()}
+     ${
+ e.memberCount}
+ /500${
+ t?s:""}
+ `;
+ this.actionSheetContent.appendChild(this.buildActionSheetItem(n,()=>{
+ this.closeNameActionSheet(),t||cKt.getInstance().switchChannel(e.channelId)||this.showCooldownToast(SG.getText("COMMON_83","잠시 후에 이용해 주세요."))}
+ ,{
+ color:t?"#c9a861":"#f3ece2"}
+ ))}
+ this.actionSheetContent.appendChild(this.buildActionSheetItem(SG.getText("COMMON_2","취소"),()=>this.closeNameActionSheet(),{
+ color:"#6a5f54",borderTop:!0}
+ )),this.actionSheetEl.style.display="flex",requestAnimationFrame(()=>{
+ this.actionSheetBackdrop.style.opacity="1",this.actionSheetContent.style.transform="translateY(0)"}
+ )}
+ ),e=window.setTimeout(()=>{
+ h(),this.showCooldownToast(SG.getText("GAME_669","채널 목록을 불러오지 못했습니다."))}
+ ,5e3),cKt.getInstance().requestChannelList()||(h(),this.showCooldownToast(SG.getText("COMMON_83","잠시 후에 이용해 주세요.")))}
+ showCooldownToast(t){
+ const i=document.createElement("div");
+ i.style.cssText=["position:absolute","left:50%","bottom:70px","transform:translateX(-50%)","background:#3a2f2a","color:#f3ece2","padding:8px 16px","border-radius:8px","font-size:13px","white-space:nowrap","z-index:3","opacity:0","transition:opacity 200ms ease"].join(";
+ "),i.textContent=t,this.card.appendChild(i),requestAnimationFrame(()=>{
+ i.style.opacity="1"}
+ ),setTimeout(()=>{
+ i.style.opacity="0",setTimeout(()=>i.remove(),200)}
+ ,2500)}
+ insertAtCursor(t){
+ const i=this.textareaEl,s=i.selectionStart??i.value.length,e=i.selectionEnd??i.value.length,n=i.value.slice(0,s)+t+i.value.slice(e);
+ if(n.length>500)return;
+ i.value=n;
+ const h=s+t.length;
+ i.selectionStart=i.selectionEnd=h,i.focus(),this.autoGrow()}
+ }
+ ;
+ Vt(fKt,"ChatOverlay"),Kt(fKt,"_instance",null),Kt(fKt,"_globalStyleInjected",!1);
+ let pKt=fKt;
+ function gKt(t){
+ return t?t===ND.MEMBER?"":AD.getRoleName(t)??t:""}
+ function mKt(t){
+ const i=Math.max(0,Date.now()-t),s=Math.floor(i/1e3);
+ if(s<5)return SG.getText("GAME_663","방금");
+ if(s<60)return SG.getValueReplace("GAME_664","##",s,`${
+ s}
+ 초 전`);
+ const e=Math.floor(s/60);
+ if(e<60)return SG.getValueReplace("GAME_455","##",e,`${
+ e}
+ 분 전`);
+ const n=Math.floor(e/60);
+ if(n<24)return SG.getValueReplace("GAME_456","##",n,`${
+ n}
+ 시간 전`);
+ const h=Math.floor(n/24);
+ return SG.getValueReplace("GAME_457","##",h,`${
+ h}
+ 일 전`)}
+ Vt(gKt,"getRoleLabel"),Vt(mKt,"formatRelTime");
+ const wKt=class t{
+ constructor(){
+ Kt(this,"list",[])}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ if(this.list=[],t)for(let i=0;
+ i<t.length;
+ i++){
+ const s=t[i],e=new _Kt;
+ e.kindNum=s.kindNum||0,e.desc=s.desc||"",e.useYn=s.useYn||"N",e.startWave=s.startWave||0,this.list.push(e)}
+ }
+ getFilteredMessages(){
+ const t=ML.maxWave,i=this.list.filter(i=>"Y"===i.useYn&&(t>=i.startWave||i.startWave<=1)).map(t=>SG.getText(`TIP_DESC_${
+ t.kindNum}
+ `,t.desc));
+ for(let s=i.length-1;
+ s>0;
+ s--){
+ const t=Math.floor(Math.random()*(s+1));
+ [i[s],i[t]]=[i[t],i[s]]}
+ return i}
+ }
+ ;
+ Vt(wKt,"TipDataManager"),Kt(wKt,"instance");
+ let vKt=wKt;
+ const bKt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"desc",""),Kt(this,"useYn","N"),Kt(this,"startWave",0)}
+ }
+ ;
+ Vt(bKt,"TipVO");
+ let _Kt=bKt;
+ const yKt=[[1,1,1,"성","성은 우리가 지켜야하는 기지입니다","HELP_TITLE_1","HELP_1"],[2,1,2,"성","성이 파괴되면, 환생하여 다시 진행해야 합니다.","HELP_TITLE_1","HELP_2"],[3,1,3,"성","신전에서 생명의 비술을 연구하면, 성이 파괴되어도 이어할 수 있습니다.","HELP_TITLE_1","HELP_4"],[4,1,4,"성","성은 훈장을 사용하여 영구히 유지되는 강화를 진행할 수 있습니다.","HELP_TITLE_1","HELP_3"],[5,2,1,"영웅","영웅은 최전방에서 성을 보호하고 적을 물리치는 아군입니다.","HELP_TITLE_2","HELP_5"],[6,2,2,"영웅","병영에서 배치를 통해 출전시킨 영웅만 전투에 나서게 됩니다. 대기중인 영웅들을 지금 출전시켜 보세요!","HELP_TITLE_2","HELP_6"],[7,2,3,"영웅","배치한 영웅은 드래그를 통해 이동시킬 수 있습니다.","HELP_TITLE_2","HELP_27"],[8,3,1,"퀘스트","퀘스트를 통해 골드를 획득할 수 있습니다.","HELP_TITLE_3","HELP_7"],[9,3,2,"퀘스트","게이지가 찰때마다 골드를 획득합니다.","HELP_TITLE_3","HELP_8"],[10,3,3,"퀘스트","레벨업을 하면, 획득하는 골드가 늘어납니다.","HELP_TITLE_3","HELP_9"],[11,3,4,"퀘스트","다음 단계 퀘스트를 오픈하면, 더 많은 골드를 획득할 수 있습니다.","HELP_TITLE_3","HELP_10"],[12,4,1,"환생","성이 파괴되면, 환생을 해야합니다.","GAME_5","HELP_11"],[13,4,2,"환생","10 wave 이상에서는 언제든 환생을 할 수 있습니다.","HELP_TITLE_4","HELP_12"],[14,4,3,"환생","환생을 하면, ( 훈장 )을 얻게 됩니다.","HELP_TITLE_4","HELP_13"],[15,4,4,"환생","( 훈장 )은 게임에서 가장 중요한 재화로, 영웅과 성을 강화하는데 사용됩니다.","HELP_TITLE_4","HELP_14"],[16,4,5,"환생","높은 웨이브에서 환생할수록 (훈장)을 더 많이 획득할 수 있습니다.","HELP_TITLE_4","HELP_15"],[17,5,1,"기사단","기사단 레벨은 최고 도달 웨이브를 기준으로 산정됩니다. (100 웨이브당 1 레벨)","HELP_TITLE_5","HELP_16"],[18,5,2,"기사단","무한랭킹전/던전 등에서 영웅의 레벨은 기사단 레벨을 기준으로 결정됩니다.","HELP_TITLE_5","HELP_17"],[19,6,1,"영웅 - 사제","사제에게는 ( 신의 은총 )이라는 스킬이 있습니다.","HELP_TITLE_6","HELP_18"],[20,6,2,"영웅 - 사제","( 신의 은총 )은 확률적으로 발동하는데, 2분 동안 게임 속도를 300% 올려줍니다.","HELP_TITLE_6","HELP_19"],[21,6,3,"영웅 - 사제","사제를 여러명 가질수록, (신의 은총) 스킬이 발동할 확률이 높아집니다.","HELP_TITLE_6","HELP_20"],[22,7,1,"영웅 - 페어리","엘프의 비술은 확률적으로 웨이브를 1씩 건너뛰는 스킬을 가지고 있습니다.","HELP_TITLE_7","HELP_21"],[23,7,2,"영웅 - 페어리","페어리는 엘프의 비술 스킬을 가지고 있습니다.","HELP_TITLE_7","HELP_22"],[24,7,3,"영웅 - 페어리","페어리를 많이 보유할수록, 웨이브를 1씩 건너뛰어 빠르게 전진할 수 있습니다.","HELP_TITLE_7","HELP_23"],[25,8,1,"영웅 - 암흑 궁병","암흑 궁병은 환생시, 시작 웨이브를 올려주는 스킬을 가지고 있습니다.","HELP_TITLE_8","HELP_24"],[26,8,2,"영웅 - 암흑 궁병","암흑 궁병을 많이 보유할수록, 환생후 높은 웨이브에서 시작할 수 있습니다.","HELP_TITLE_8","HELP_25"],[27,8,3,"영웅 - 암흑 궁병","( 암흑궁병을 10명 배치하고, 1000층에서 환생하면, 500층에서 시작합니다. )","HELP_TITLE_8","HELP_26"],[28,9,1,"비서","성 - 성채에 위치한 비서는 성장에 도움을 주는 유용한 동료입니다.","GAME_857","HELP_28"],[29,9,2,"비서","비서는 일정 시간마다 영웅과 펫 조각 등 유용한 자원을 수집해옵니다.","GAME_857","HELP_29"],[30,9,3,"비서","고급 비서를 고용하면 수집 효율이 크게 상승합니다","GAME_857","HELP_30"]],MKt=class t{
+ constructor(){
+ Kt(this,"items"),this.items=yKt.map(([t,i,s,e,n,h,r])=>({
+ kindNum:t,main:i,sub:s,title:SG.getText(h,e),desc:SG.getText(r,n)}
+ ))}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ getMainList(){
+ const t=new Set,i=[];
+ for(const s of this.items)t.has(s.main)||(t.add(s.main),i.push(s));
+ return i}
+ getSubsByMain(t){
+ return this.items.filter(i=>i.main===t).sort((t,i)=>t.sub-i.sub)}
+ getIconName(t){
+ return{
+ 1:"Icon_Help_Castle",2:"Icon_Help_Hero",3:"Icon_Help_Quest",4:"Icon_Help_Revive",5:"Icon_Help_Knight",6:"Icon_Help_Prist",7:"Icon_Help_Pairy",8:"Icon_Help_DarkArche",9:"Icon_Help_Secretary"}
+ [t]??`Help_${
+ t}
+ _1`}
+ getImageName(t,i){
+ return`Help_${
+ t}
+ _${
+ i}
+ `}
+ }
+ ;
+ Vt(MKt,"HelpDataManager"),Kt(MKt,"instance",null);
+ let EKt=MKt;
+ const AKt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"top"),Kt(this,"bottom"),Kt(this,"bg"),Kt(this,"bgContainer"),Kt(this,"btnClose",new hG),Kt(this,"txtTitle"),Kt(this,"topOverlap",12),Kt(this,"bottomOverlap",15),Kt(this,"_width",574),Kt(this,"_height",868),Kt(this,"_positionY",-1),Kt(this,"outSideClickHide",!1),Kt(this,"onPointerDownHandler"),this.createBG(),this.onPointerDownHandler=this.onPointerDown.bind(this)}
+ createBG(){
+ this.bgContainer=new Ge,this.addChild(this.bgContainer),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Frame"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.bg.width=this._width,this.bgContainer.addChild(this.bg),this.top=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Base_Title_up"),leftWidth:200,topHeight:54,rightWidth:200,bottomHeight:14}
+ ),this.bgContainer.addChild(this.top),this.bottom=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Base_Title_Down"),leftWidth:200,topHeight:27,rightWidth:200,bottomHeight:16}
+ ),this.bgContainer.addChild(this.bottom),this.bottom.eventMode="none",this.top.x=.5*(this.bg.width-this.top.width),this.bottom.x=.5*(this.bg.width-this.bottom.width),this.bottom.y=this._height-this.bottom.height,this.bg.y=this.top.height-this.topOverlap,this.bg.height=this.bottom.y-this.bg.y+this.bottomOverlap,this.btnClose.x=this.top.x+this.top.width-this.btnClose.width-35,this.btnClose.y=18,this.addChild(this.btnClose),this.btnClose.onClick=this.onCloseBtnClick.bind(this),this.txtTitle=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20),this.txtTitle.x=.5*(this.top.width-this.txtTitle.width),this.txtTitle.y=22,this.addChild(this.txtTitle),cD.setLabelWrapWidth(this.txtTitle,this._width-40)}
+ setTitle(t){
+ this.txtTitle.text=t,this.txtTitle.x=.5*(this.top.width-this.txtTitle.width),this.txtTitle.y=22}
+ show(t="",i=null,s=null){
+ this.pivot.set(this.width/2,this.height/2),this.position.set(320,this.getPositionY()),this.scale.set(.1),FO.to(this.scale,{
+ x:1,y:1,duration:.2,ease:"back.out",onComplete:Vt(()=>{
+ this.onShowMotionComplete()}
+ ,"onComplete")}
+ ),xL.getInstance().addPopup(this)}
+ onShowMotionComplete(){
+ VA.stage.on("pointertap",this.onPointerDownHandler)}
+ hide(){
+ this.parent&&FO.to(this.scale,{
+ x:.8,y:.8,duration:.15,ease:"back.in",onComplete:Vt(()=>{
+ this.onHideMotionComplete()}
+ ,"onComplete")}
+ )}
+ onHideMotionComplete(){
+ this.hideImmediately()}
+ hideImmediately(){
+ xL.getInstance().removePopup(this),VA.stage.off("pointertap",this.onPointerDownHandler),this.resetPostionY()}
+ onCloseBtnClick(){
+ this.hide()}
+ get width(){
+ return this._width}
+ set width(t){
+ t!=this._width&&(this._width=t,this.bg.width=this._width,this.top.width=this._width+20,this.bottom.width=this._width+20,this.top.x=.5*(this._width-this.top.width),this.bottom.x=.5*(this._width-this.bottom.width),this.txtTitle&&(cD.setLabelWrapWidth(this.txtTitle,this._width-40),this.txtTitle.x=.5*(this.top.width-this.txtTitle.width),this.txtTitle.y=22),this.btnClose&&(this.btnClose.x=this.top.x+this.top.width-this.btnClose.width-35))}
+ get height(){
+ return this._height}
+ set height(t){
+ t!=this._height&&(this._height=t,this.bottom.y=this._height-this.bottom.height,this.bg.height=this.bottom.y-this.bg.y+this.bottomOverlap)}
+ getBaseX(){
+ return this.bg.x}
+ getBaseY(){
+ return this.bg.y}
+ getPositionY(){
+ return-1===this._positionY&&(this._positionY=this.getDefaultPositionY()),this._positionY}
+ getDefaultPositionY(){
+ return Math.floor((VA.safeHeight-this.height)*(3/7))+.5*this.height}
+ resetPostionY(){
+ this._positionY=this.getDefaultPositionY()}
+ setPositonRatioY(t){
+ this._positionY=VA.stageHeight*t}
+ onPointerDown(t){
+ 0!=this.outSideClickHide&&(this.getPopupBounds().containsPoint(t.global.x,t.global.y)||this.hide())}
+ getPopupBounds(){
+ return this.bgContainer&&this.bgContainer.parent&&this.bgContainer.visible?this.bgContainer.getBounds():this.getBounds()}
+ onBackButton(){
+ return!!(this.btnClose&&this.btnClose.parent&&this.btnClose.visible)&&(this.onCloseBtnClick(),!0)}
+ }
+ ;
+ Vt(AKt,"BasePopup3");
+ let SKt=AKt;
+ const TKt=class extends SKt{
+ constructor(){
+ super(),this.width=VA.stageWidth-20,this.height=VA.safeHeight-whi.getInstance().height-Lni.getInstance().height}
+ getDefaultPositionY(){
+ return Math.floor(whi.getInstance().height+.5*this._height)}
+ }
+ ;
+ Vt(TKt,"BaseViewPopup");
+ let CKt=TKt;
+ const IKt=class extends n$t{
+ constructor(){
+ super("UI_Close3","UI_Ekkorr"),this.width=45,this.height=45}
+ }
+ ;
+ Vt(IKt,"CommonCloseButton");
+ let kKt=IKt;
+ const OKt=class t extends SKt{
+ constructor(){
+ super(),Kt(this,"paperContainer",new Ge),Kt(this,"paperTop"),Kt(this,"paperMiddle"),Kt(this,"paperBottom"),Kt(this,"imageSprite",new He),Kt(this,"lblDesc",new JD("",3811866,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"btnPrev"),Kt(this,"btnNext"),Kt(this,"btnPrevBg"),Kt(this,"btnNextBg"),Kt(this,"btnPrevIcon"),Kt(this,"btnNextIcon"),Kt(this,"btnCloseCustom",new kKt),Kt(this,"subs",[]),Kt(this,"subIndex",0),Kt(this,"hideBtnClose",!1),Kt(this,"onHideHandler",null),this.width=t.POPUP_WIDTH,this.height=t.POPUP_HEIGHT,this.bg.visible=!1,this.top.visible=!1,this.bottom.visible=!1,this.buildPaperBackground(),this.addChild(this.paperContainer),this.imageSprite.anchor.set(.5,.5),this.addChild(this.imageSprite),this.lblDesc.wordWrap=!0,this.lblDesc.wordWrapWidth=t.DESC_WRAP_WIDTH,this.lblDesc.align="center",this.addChild(this.lblDesc),this.buildNavButtons(),this.addChild(this.btnPrev),this.addChild(this.btnNext),this.btnClose.visible=!1,this.btnCloseCustom.x=t.POPUP_WIDTH-this.btnCloseCustom.width-t.CLOSE_BTN_RIGHT_PAD,this.btnCloseCustom.y=t.CLOSE_BTN_TOP_PAD,this.btnCloseCustom.onClick=()=>this.hide(),this.addChild(this.btnCloseCustom),this.bringFrontFurniture(),this.outSideClickHide=!0}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ buildPaperBackground(){
+ this.paperTop=new He(QA.getTexture("UI_HELP","Help_Page_up")),this.paperMiddle=new TM({
+ texture:QA.getTexture("UI_HELP","Help_Page_middle"),leftWidth:40,topHeight:40,rightWidth:40,bottomHeight:40}
+ ),this.paperMiddle.width=618,this.paperMiddle.height=511,this.paperBottom=new He(QA.getTexture("UI_HELP","Help_Page_down")),this.paperContainer.addChild(this.paperTop),this.paperContainer.addChild(this.paperMiddle),this.paperContainer.addChild(this.paperBottom),this.layoutPaper()}
+ layoutPaper(){
+ const i=t.POPUP_WIDTH,s=t.POPUP_HEIGHT;
+ this.paperTop.x=.5*(i-this.paperTop.width),this.paperMiddle.x=.5*(i-this.paperMiddle.width),this.paperBottom.x=.5*(i-this.paperBottom.width),this.paperTop.y=0,this.paperMiddle.y=this.paperTop.height;
+ const e=s-this.paperTop.height-this.paperBottom.height;
+ e>0&&(this.paperMiddle.height=e),this.paperBottom.y=this.paperMiddle.y+this.paperMiddle.height}
+ buildNavButtons(){
+ this.btnPrev=new Ge,this.btnPrevBg=new He(QA.getTexture("UI_HELP","Btn_Help_01_nor")),this.btnPrevIcon=new He(QA.getTexture("UI_HELP","Icon_Help_Left")),this.btnPrev.addChild(this.btnPrevBg),this.btnPrev.addChild(this.btnPrevIcon),this.btnPrevIcon.x=.5*(this.btnPrevBg.width-this.btnPrevIcon.width),this.btnPrevIcon.y=.5*(this.btnPrevBg.height-this.btnPrevIcon.height),this.btnPrev.eventMode="dynamic",this.btnPrev.cursor="pointer",this.btnPrev.on("pointertap",()=>this.onPrev()),this.btnNext=new Ge,this.btnNextBg=new He(QA.getTexture("UI_HELP","Btn_Help_01_nor")),this.btnNextIcon=new He(QA.getTexture("UI_HELP","Icon_Help_Right")),this.btnNext.addChild(this.btnNextBg),this.btnNext.addChild(this.btnNextIcon),this.btnNextIcon.x=.5*(this.btnNextBg.width-this.btnNextIcon.width),this.btnNextIcon.y=.5*(this.btnNextBg.height-this.btnNextIcon.height),this.btnNext.eventMode="dynamic",this.btnNext.cursor="pointer",this.btnNext.on("pointertap",()=>this.onNext())}
+ bringFrontFurniture(){
+ const t=[this.txtTitle,this.btnCloseCustom];
+ for(const i of t)i&&i.parent===this&&(this.removeChild(i),this.addChild(i))}
+ showWith(t,i=0,s=!1,e=!0){
+ this.hideBtnClose=s,this.btnCloseCustom.visible=!s,this.outSideClickHide=e,this.subs=EKt.getInstance().getSubsByMain(t),i>0&&(this.subs=this.subs.slice(0,i)),this.subIndex=0,this.applyCurrent(),super.show()}
+ onPrev(){
+ this.subIndex<=0?this.hide():(this.subIndex--,this.applyCurrent())}
+ onNext(){
+ 1==this.hideBtnClose&&(this.subIndex==this.subs.length-2?this.btnCloseCustom.visible=!0:this.btnCloseCustom.visible=!1),this.subIndex>=this.subs.length-1?this.hide():(this.subIndex++,this.applyCurrent())}
+ hide(){
+ super.hide(),this.onHideHandler&&this.onHideHandler(),this.onHideHandler=null}
+ applyCurrent(){
+ if(0===this.subs.length)return;
+ const i=this.subs[this.subIndex];
+ this.txtTitle.text=i.title,this.txtTitle.x=.5*(t.POPUP_WIDTH-this.txtTitle.width),this.txtTitle.y=t.TITLE_Y;
+ const s=EKt.getInstance().getImageName(i.main,i.sub);
+ let e=QA.getTexture("UI_HELP",s);
+ e||(e=QA.getTexture("UI_HELP2",s)),this.imageSprite.texture=e;
+ const n=t.IMAGE_AREA_TOP,h=t.IMAGE_AREA_HEIGHT,r=t.POPUP_WIDTH-80,o=e.width||1,a=e.height||1,c=Math.min(r/o,h/a,1);
+ this.imageSprite.scale.set(c),this.imageSprite.x=.5*t.POPUP_WIDTH,this.imageSprite.y=n+.5*h,this.lblDesc.text=i.desc,this.lblDesc.x=.5*(t.POPUP_WIDTH-this.lblDesc.width),this.lblDesc.y=n+h+20;
+ const l=t.POPUP_HEIGHT-this.btnPrevBg.height-t.NAV_BTN_BOTTOM_PAD;
+ this.btnPrev.x=80,this.btnPrev.y=l,this.btnNext.x=t.POPUP_WIDTH-80-this.btnNextBg.width,this.btnNext.y=l,this.btnPrev.alpha=0===this.subIndex?.4:1,this.btnNext.alpha=this.subIndex===this.subs.length-1?.4:1}
+ getPopupBounds(){
+ return this.getBounds()}
+ }
+ ;
+ Vt(OKt,"HelpDetailPopup"),Kt(OKt,"instance",null),Kt(OKt,"POPUP_WIDTH",600),Kt(OKt,"POPUP_HEIGHT",720),Kt(OKt,"IMAGE_AREA_TOP",110),Kt(OKt,"IMAGE_AREA_HEIGHT",360),Kt(OKt,"DESC_WRAP_WIDTH",500),Kt(OKt,"NAV_BTN_BOTTOM_PAD",50),Kt(OKt,"TITLE_Y",40),Kt(OKt,"CLOSE_BTN_RIGHT_PAD",20),Kt(OKt,"CLOSE_BTN_TOP_PAD",18);
+ let xKt=OKt;
+ const RKt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon",new He),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnQuestion"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=t.ITEM_WIDTH,this.bg.height=t.ITEM_HEIGHT,this.addChild(this.bg),this.addChild(this.icon),this.lblTitle.x=t.TITLE_X,this.addChild(this.lblTitle),this.btnQuestion=new He(QA.getTexture("UI_HELP","Btn_Help")),this.addChild(this.btnQuestion)}
+ setData(i){
+ this.data=i;
+ const s=i,e=EKt.getInstance().getIconName(s.main),n=QA.getTexture("UI_HELP",e);
+ this.icon.texture=n;
+ const h=n.width||1,r=n.height||1,o=Math.min(1,t.ICON_MAX_SIZE/Math.max(h,r));
+ this.icon.scale.set(o),this.icon.x=t.ICON_AREA_X+.5*(t.ICON_AREA_W-this.icon.width),this.icon.y=.5*(this.bg.height-this.icon.height),this.lblTitle.text=s.title,this.lblTitle.y=.5*(this.bg.height-this.lblTitle.height),this.btnQuestion.x=this.bg.width-this.btnQuestion.width-t.QUESTION_RIGHT_PAD,this.btnQuestion.y=.5*(this.bg.height-this.btnQuestion.height)}
+ onClick(t,i){
+ if(!this.data)return;
+ const s=this.data;
+ xKt.getInstance().showWith(s.main)}
+ get height(){
+ return t.ITEM_HEIGHT+6}
+ }
+ ;
+ Vt(RKt,"HelpItemRenderer"),Kt(RKt,"ITEM_WIDTH",540),Kt(RKt,"ITEM_HEIGHT",79),Kt(RKt,"ICON_AREA_X",5),Kt(RKt,"ICON_AREA_W",80),Kt(RKt,"TITLE_X",140),Kt(RKt,"QUESTION_RIGHT_PAD",20),Kt(RKt,"ICON_MAX_SIZE",56);
+ let NKt=RKt;
+ const PKt=class t extends CKt{
+ constructor(){
+ super(),Kt(this,"list"),this.height=t.POPUP_HEIGHT,this.initialize()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ initialize(){
+ this.setTitle(SG.getText("HELP_TITLE","HELP"));
+ const t=this.top.height+10,i=this.bottom.height+20,s=this.height-t-i;
+ this.list=new d5(NKt,560,s),this.list.x=.5*(this.bg.width-560)+11,this.list.y=t,this.addChild(this.list),this.outSideClickHide=!0}
+ setData(){
+ this.setTitle(SG.getText("HELP_TITLE","HELP")),this.list.dataProvider=EKt.getInstance().getMainList()}
+ show(){
+ this.setData(),super.show()}
+ getDefaultPositionY(){
+ return Math.floor(.35*(VA.safeHeight-this.height)+.5*this.height)}
+ }
+ ;
+ Vt(PKt,"HelpPopup"),Kt(PKt,"instance",null),Kt(PKt,"POPUP_HEIGHT",920);
+ let DKt=PKt;
+ const LKt=class extends oS{
+ constructor(){
+ super(),Kt(this,"blocker"),Kt(this,"allowRect"),Kt(this,"highlightBorder"),Kt(this,"dimParts",[]),this.createUI()}
+ createUI(){
+ for(let t=0;
+ t<4;
+ t++){
+ const t=new Lf;
+ t.alpha=.5,t.rect(0,0,1,1).fill(0),this.dimParts.push(t),this.addChild(t)}
+ this.blocker=new Lf,this.blocker.rect(0,0,640,VA.stageHeight).fill(0),this.blocker.alpha=0,this.blocker.eventMode="static",this.addChild(this.blocker),this.highlightBorder=new Lf,this.addChild(this.highlightBorder),this.allowRect=new Ri(0,0,0,0),this.setBlockerEnabled(!1)}
+ setClickArea(t,i,s,e){
+ this.allowRect=new Ri(t,i,s,e),this.updateDim(),this.blocker.hitArea={
+ contains:Vt((t,i)=>!this.allowRect.contains(t,i),"contains")}
+ ,this.setBlockerEnabled(!0)}
+ setBlockerEnabled(t){
+ this.blocker.eventMode=t?"static":"none";
+ for(const i of this.dimParts)i.visible=t;
+ this.highlightBorder.visible=t}
+ updateDim(){
+ const t=VA.stageHeight,{
+ x:i,y:s,width:e,height:n}
+ =this.allowRect;
+ this.dimParts[0].clear().rect(0,0,640,s).fill(0),this.dimParts[1].clear().rect(0,s,i,n).fill(0),this.dimParts[2].clear().rect(i+e,s,640-(i+e),n).fill(0),this.dimParts[3].clear().rect(0,s+n,640,t-(s+n)).fill(0),this.highlightBorder.clear().rect(i,s,e,n).stroke({
+ color:16776960,width:3}
+ )}
+ }
+ ;
+ Vt(LKt,"ClickAniLayer");
+ let GKt=LKt;
+ const BKt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"sp"),Kt(this,"textures",[]),this.textures=QA.getTextures("ClickHand","ClickHand"),this.sp=new Wf(this.textures),this.addChild(this.sp),this.eventMode="none"}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ isPlaying(){
+ return!!this.parent}
+ show(t,i,s,e,n=0,h=0){
+ this.x=t,this.y=i,GKt.getInstance().setClickArea(t-.5*s+n,i-.5*e+h,s,e),this.isPlaying()||(this.sp.animationSpeed=.65,this.sp.play(),GKt.getInstance().addChild(this))}
+ hide(){
+ GKt.getInstance().setBlockerEnabled(!1),this.sp.stop(),this.parent&&this.removeFromParent()}
+ }
+ ;
+ Vt(BKt,"ClickAniEffect"),Kt(BKt,"instance");
+ let UKt=BKt;
+ const FKt=class{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"wave",0),Kt(this,"order",0),Kt(this,"position",1),Kt(this,"text",""),Kt(this,"code",""),Kt(this,"maxWave",-1),Kt(this,"repeat",9999)}
+ getTextKey(){
+ return`DIALOGUE_TEXT_${
+ this.kindNum}
+ `}
+ }
+ ;
+ Vt(FKt,"DialogueVO");
+ let HKt=FKt;
+ const WKt=class t{
+ constructor(){
+ Kt(this,"list",[]),Kt(this,"waveMap",new Map),Kt(this,"playCount",{
+ }
+ ),Kt(this,"playCountLoaded",!1)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ if(this.list=[],this.waveMap.clear(),t){
+ for(let i=0;
+ i<t.length;
+ i++){
+ const s=t[i],e=new HKt;
+ e.kindNum=Number(s.kindNum),e.wave=Number(s.wave),e.order=Number(s.order),e.position=Number(s.position)||1,e.text=s.text??"",e.code=s.code??"",e.maxWave=Number(s.maxWave)||-1,e.repeat=Number(s.repeat)||9999,this.list.push(e);
+ let n=this.waveMap.get(e.wave);
+ n||(n=[],this.waveMap.set(e.wave,n)),n.push(e)}
+ for(const t of this.waveMap.values())t.sort((t,i)=>t.order-i.order);
+ this.loadPlayCount()}
+ }
+ async loadPlayCount(){
+ if(this.playCountLoaded)return;
+ const i=await $A.getData(t.LOCAL_KEY);
+ this.playCount=i??{
+ }
+ ,this.playCountLoaded=!0}
+ savePlayCount(){
+ $A.saveData(t.LOCAL_KEY,this.playCount)}
+ async getByWaveAsync(t){
+ return await this.loadPlayCount(),this.getByWave(t)}
+ getByWave(t){
+ const i=this.waveMap.get(t)??[],s=ML.maxWave,e=[];
+ let n=!1;
+ for(const h of i)if(!(h.maxWave>0&&s<h.maxWave)){
+ if(h.repeat<999){
+ const t=this.playCount[h.kindNum]??0;
+ if(t>=h.repeat)continue;
+ this.playCount[h.kindNum]=t+1,n=!0}
+ e.push(h)}
+ return n&&this.savePlayCount(),e}
+ hasDialogue(t){
+ return this.waveMap.has(t)}
+ }
+ ;
+ Vt(WKt,"DialogueDataManager"),Kt(WKt,"instance"),Kt(WKt,"LOCAL_KEY",$A.KEY_DIALOGUE_COUNT);
+ let $Kt=WKt;
+ const jKt=class t extends ljt{
+ constructor(){
+ super(),Kt(this,"image"),Kt(this,"timeContainer"),Kt(this,"timeBg"),Kt(this,"timeIcon"),Kt(this,"timeLbl"),Kt(this,"endTime",-1),Kt(this,"count",0),Kt(this,"onEnterUpdate",Vt(()=>{
+ ++this.count<60||(this.count=0,this.refresh())}
+ ,"onEnterUpdate")),Kt(this,"onPaymentSuccessBind"),this.timeContainer=new Ge,this.addChild(this.timeContainer),this.timeBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Progress_Bar_Bg_LightGreen"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
+ ),this.timeBg.alpha=.5,this.timeBg.width=160,this.timeContainer.addChild(this.timeBg),this.timeIcon=new He(QA.getTexture("UI_Ekkorr","Icon_Time02")),this.timeIcon.x=20,this.timeContainer.addChild(this.timeIcon);
+ const t=cD.DEFAULT_FONT_OPTION_18;
+ t.fill=cD.COLOR_WHITE,t.stroke={
+ color:"#000000",width:3,join:"round"}
+ ,this.timeLbl=new JD("00:00:00",t.fill,t),this.timeLbl.x=this.timeIcon.x+this.timeIcon.width+10,this.timeLbl.y=.5*(this.timeBg.height-this.timeLbl.height),this.timeContainer.addChild(this.timeLbl)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async buyProduct2(t,i){
+ const s=t5.getInstance().getByProductId(t);
+ if(s){
+ if(this.endTime=i,this.refresh(),LM.getInstance().add(this.onEnterUpdate,this),!this.image){
+ this.image=new He,this.addChildAt(this.image,0);
+ const{
+ AssetPathManager:t}
+ =await Xt(async()=>{
+ const{
+ AssetPathManager:t}
+ =await Promise.resolve().then(()=>XA);
+ return{
+ AssetPathManager:t}
+ }
+ ,void 0),{
+ Assets:i}
+ =await Xt(async()=>{
+ const{
+ Assets:t}
+ =await Promise.resolve().then(()=>OM);
+ return{
+ Assets:t}
+ }
+ ,void 0),s=t.getAssetPath("CharShopProduct.png"),e=await i.load(s);
+ this.image.texture=e,this.image.x=.5*(this.width-this.image.width),this.image.y=-this.image.height}
+ this.buyProduct(s,.5),this.setPaymentSuccess(!0)}
+ }
+ refresh(){
+ if(tx.time<this.endTime){
+ this.timeLbl.text=wU.displayTime(.001*(this.endTime-tx.time));
+ const t=this.timeBg.width-2*this.timeIcon.x-this.timeIcon.width;
+ this.timeLbl.x=this.timeIcon.x+this.timeIcon.width+.5*(t-this.timeLbl.width)}
+ else this.hide()}
+ hide(){
+ super.hide(),this.setPaymentSuccess(!1),LM.getInstance().remove(this.onEnterUpdate,this)}
+ updateLayout(){
+ super.updateLayout();
+ const t=this.activeCount>0?this.rewardPool[0].height:0;
+ let i=this.rewardContainer.y+t+30;
+ this.guideSecretary&&this.guideSecretary.visible&&(this.guideSecretary.x=.5*(this.width-this.guideSecretary.width),this.guideSecretary.y=this.lblDesc.y+this.lblDesc.height+20,i+=this.guideSecretary.height),this.timeContainer&&(this.timeContainer.x=.5*(this.width-this.timeContainer.width),this.timeContainer.y=i,i+=this.timeContainer.height+45),this.btnBuy.visible&&(this.btnBuy.y=i,this.btnRedGem.y=i,i+=this.btnBuy.height+40),this.inventoryContainer&&this.inventoryContainer.visible&&(this.inventoryContainer.x=.5*(this.width-this.inventoryContainer.width),this.inventoryContainer.y=i,i+=this.inventoryContainer.height+30),this.height=i}
+ setPaymentSuccess(t){
+ cS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),cS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
+ onPaymentSuccess(t){
+ var i;
+ let s=-1;
+ t&&t.detail&&"productId"in t.detail&&(s=t.detail.productId),s===(null==(i=this.data)?void 0:i.productId)&&this.hide()}
+ }
+ ;
+ Vt(jKt,"ShopProductPopupWithTimer"),Kt(jKt,"_instance");
+ let VKt=jKt;
+ const KKt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"items",[]),Kt(this,"itemPool",[]),Kt(this,"onPaymentSuccessBind")}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ add(t,i){
+ if(-1!==this.items.findIndex(i=>i.productId===t))return;
+ let s;
+ this.itemPool.length>0?(s=this.itemPool.pop(),s.reset()):s=new YKt("Shop_Shortcut_01"),s.setData(t,i),s.onEndTime=()=>{
+ this.onItemEndTime()}
+ ,s.onClick=(t,i)=>{
+ VKt.getInstance().buyProduct2(t,i)}
+ ,this.addChild(s),this.items.push(s),this.items.length>0&&this.setPaymentSuccess(!0),this.alignItems()}
+ alignItems(){
+ let t=0;
+ const i=this.items.length;
+ for(let s=0;
+ s<i;
+ ++s)this.items[s].y=t,t+=this.items[s].height+5}
+ onItemEndTime(){
+ this.update(-1),this.alignItems()}
+ setPaymentSuccess(t){
+ cS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),cS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
+ onPaymentSuccess(t){
+ let i=-1;
+ t&&t.detail&&"productId"in t.detail&&(i=t.detail.productId),-1!==i&&this.update(i)}
+ update(t){
+ const i=this.items.findIndex(i=>i.productId===t);
+ if(-1===i)return;
+ const s=this.items[i];
+ s.reset(),s.removeFromParent(),this.items.splice(i,1),this.itemPool.push(s),0==this.items.length&&this.setPaymentSuccess(!1)}
+ }
+ ;
+ Vt(KKt,"ShopProductGroup"),Kt(KKt,"instance");
+ let zKt=KKt;
+ const qKt=class extends MB{
+ constructor(t,i=1){
+ super("UI_Ekkorr",t,i),Kt(this,"container"),Kt(this,"timeBg"),Kt(this,"timeLbl"),Kt(this,"_productId",-1),Kt(this,"_endTime",-1),Kt(this,"count",0),Kt(this,"onEnterUpdate",Vt(()=>{
+ ++this.count<60||(this.count=0,this.update())}
+ ,"onEnterUpdate")),Kt(this,"onEndTime",null),this.container=new Ge,this.addChild(this.container),this.container.x=this.bg.x,this.container.y=this.bg.y,this.bg.x=0,this.bg.y=0,this.container.addChild(this.bg),this.timeBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Progress_Bar_Bg"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
+ ),this.timeBg.alpha=.7,this.timeBg.width=70,this.timeBg.x=this.bg.x-.5*this.timeBg.width,this.timeBg.y=this.bg.y+.5*this.bg.height-.75*this.timeBg.height,this.container.addChild(this.timeBg);
+ const s=cD.DEFAULT_FONT_OPTION_15;
+ s.fill=cD.COLOR_WHITE,s.stroke={
+ color:"#000000",width:3,join:"round"}
+ ,this.timeLbl=new JD("00:00:00",s.fill,s),this.timeLbl.x=this.timeBg.x+.5*(this.timeBg.width-this.timeLbl.width),this.timeLbl.y=this.timeBg.y+.5*(this.timeBg.height-this.timeLbl.height)-1,this.container.addChild(this.timeLbl)}
+ get productId(){
+ return this._productId}
+ get endTime(){
+ return this._endTime}
+ setData(t,i){
+ this._productId=t,this._endTime=i,this.update(),LM.getInstance().add(this.onEnterUpdate,this)}
+ update(){
+ if(tx.time<this._endTime)this.timeLbl.text=wU.displayTime(.001*(this._endTime-tx.time)),this.timeLbl.x=this.timeBg.x+.5*(this.timeBg.width-this.timeLbl.width);
+ else{
+ const t=this.onEndTime;
+ this.reset(),t&&t()}
+ }
+ reset(){
+ this._endTime=-1,this._productId=-1,this.onEndTime=null,LM.getInstance().remove(this.onEnterUpdate,this)}
+ onDown(){
+ this.container.scale.set(.9*this.iconScale)}
+ onUp(){
+ this.container.scale.set(1*this.iconScale),zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),$L(),this.onClick&&this.onClick(this._productId,this._endTime)}
+ }
+ ;
+ Vt(qKt,"ShopProductItem");
+ let YKt=qKt;
+ var XKt=(t=>(t.ACCOUNT_CREATE="ACCOUNT_CREATE",t))(XKt||{
+ }
+ );
+ const JKt=class t{
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ doAccountCreate(){
+ const t=t5.getInstance(),i=t.getTargetingByType(XKt.ACCOUNT_CREATE);
+ if(!i)return;
+ const s=t.getByProductId(i[0]);
+ if(!s||!s.active)return;
+ let e=new Date(ML.regTime);
+ const n=AL.getInstance().getClientData("PRODUCT_START_TIME_29");
+ if(n){
+ let t=new Date(n);
+ e.getTime()<t.getTime()&&(e=t)}
+ const h=s.targeting.durationMinutes??0;
+ let r=e.getTime()+60*h*1e3;
+ r<tx.time||t.isAvailableForPurchase(s)&&zKt.getInstance().add(s.productId,r)}
+ }
+ ;
+ Vt(JKt,"ShopProductTrigger"),Kt(JKt,"_instance");
+ let QKt=JKt;
+ const ZKt=class extends oS{
+ constructor(){
+ super()}
+ }
+ ;
+ Vt(ZKt,"DialogueLayer");
+ let tzt=ZKt;
+ const izt=Object.freeze(Object.defineProperty({
+ __proto__:null,DialogueLayer:tzt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),szt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"frameLeft"),Kt(this,"frameRight"),Kt(this,"npcIcon"),Kt(this,"lblName"),Kt(this,"lblMessage"),Kt(this,"bg"),Kt(this,"timeCount",0),Kt(this,"isFadingOut",!1),Kt(this,"currentPosition",1),Kt(this,"queue",[]),Kt(this,"textureLoaded",!1),Kt(this,"onCompleteHandler",null),this.eventMode="none",this.bg=new ZD,this.bg.alpha=.6,this.bg.setIndex(7),this.addChild(this.bg),this.frameLeft=new He,this.addChild(this.frameLeft),this.npcIcon=new He,this.addChild(this.npcIcon),this.lblName=new JD("",16768324,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblName),this.lblMessage=new JD("",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_16),this.addChild(this.lblMessage),this.frameRight=new He,this.addChild(this.frameRight)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ static getNpcName(i){
+ if(i.length>=2){
+ const s=i.substring(0,2);
+ if(t.NPC_NAMES[s])return SG.getText(`DIALOGUE_NPC_${
+ s}
+ `,t.NPC_NAMES[s])}
+ const s=i.substring(0,1);
+ return SG.getText(`DIALOGUE_NPC_${
+ s}
+ `,t.NPC_NAMES[s])??""}
+ async showDialogues(i){
+ if(0!==i.length&&zD.getInstance().npcDialogue){
+ if(await this.waitForPopupsClosed(),!this.textureLoaded){
+ const i="ktx2";
+ await QA.generateTexture(t.SHEET,i,!1),this.textureLoaded=!0}
+ this.queue.push(...i),this.timeCount<=0&&this.playNext()}
+ }
+ waitForPopupsClosed(){
+ return new Promise(t=>{
+ if(!xL.getInstance().hasPopup)return void t();
+ const i=Vt(()=>{
+ xL.getInstance().hasPopup||(LM.getInstance().remove(i,this),t())}
+ ,"check");
+ LM.getInstance().add(i,this)}
+ )}
+ async show(i,s,e=360,n=1){
+ if(!this.textureLoaded){
+ const i="ktx2";
+ await QA.generateTexture(t.SHEET,i,!1),this.textureLoaded=!0}
+ this.showCurrent(i,s,e,n)}
+ playNext(){
+ if(0===this.queue.length)return;
+ const i=this.queue.shift(),s=SG.getText(i.getTextKey(),i.text);
+ this.showCurrent(i.code,s,t.DURATION_PER_DIALOGUE,i.position)}
+ showCurrent(i,s,e,n=1){
+ const h=t.SHEET;
+ this.currentPosition=n,this.frameLeft.visible=!1,this.frameRight.visible=!1,this.npcIcon.texture=QA.getTexture(h,i);
+ const r=125/this.npcIcon.texture.height;
+ this.npcIcon.scale.set(r),this.lblName.text=t.getNpcName(i),cD.setLabelWrapWidth(this.lblMessage,480),this.lblMessage.text=s,this.relayout(),this.alpha=0,this.timeCount=e,this.isFadingOut=!1,LM.getInstance().remove(this.onFrame,this),LM.getInstance().add(this.onFrame,this),tzt.getInstance().addChild(this)}
+ relayout(){
+ const i=t.PAD,s=2===this.currentPosition,e=520,n=this.lblMessage.height+2*i+16,h=this.npcIcon.scale.x,r=this.npcIcon.texture.width*h,o=this.npcIcon.texture.height*h;
+ this.bg.width=e,this.bg.height=n,this.bg.x=0,this.bg.y=0;
+ const a=-o;
+ s?(this.npcIcon.scale.x=-Math.abs(h),this.npcIcon.x=e-i,this.npcIcon.y=a,this.lblName.x=this.npcIcon.x-r-this.lblName.width+6,this.lblName.y=-this.lblName.height-4,this.lblMessage.x=.5*(e-this.lblMessage.width),this.lblMessage.y=.5*(n-this.lblMessage.height)):(this.npcIcon.scale.x=Math.abs(h),this.npcIcon.x=i,this.npcIcon.y=a,this.lblName.x=this.npcIcon.x+r-6,this.lblName.y=-this.lblName.height-4,this.lblMessage.x=.5*(e-this.lblMessage.width),this.lblMessage.y=.5*(n-this.lblMessage.height)),this.x=.5*(VA.stageWidth-e),this.y=460}
+ onFrame(){
+ xL.getInstance().hasPopup?this.visible=!1:(this.visible=!0,this.alpha<1&&!this.isFadingOut&&(this.alpha+=1/t.FADE_IN_FRAMES,this.alpha>1&&(this.alpha=1)),this.timeCount<=t.FADE_OUT_FRAMES&&!this.isFadingOut&&(this.isFadingOut=!0),this.isFadingOut&&(this.alpha-=1/t.FADE_OUT_FRAMES,this.alpha<0&&(this.alpha=0)),this.timeCount--,this.timeCount<=0&&(LM.getInstance().remove(this.onFrame,this),this.queue.length>0?this.playNext():(this.parent&&this.parent.removeChild(this),this.onCompleteHandler&&(this.onCompleteHandler(),this.onCompleteHandler=null))))}
+ }
+ ;
+ Vt(szt,"NpcDialogueToast"),Kt(szt,"instance"),Kt(szt,"SHEET","Dialogue"),Kt(szt,"PAD",8),Kt(szt,"NPC_NAMES",{
+ S:"정령",L:"성주",CH:"오크 부족장",SC:"오크 정찰병",CP:"휴먼 기사단장",LI:"리치 사령관",EC:"엘프 지휘관"}
+ ),Kt(szt,"DURATION_PER_DIALOGUE",300),Kt(szt,"FADE_IN_FRAMES",10),Kt(szt,"FADE_OUT_FRAMES",30);
+ let ezt=szt;
+ const nzt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_384","영웅 영입 안내");
+ const t=[`1. ${
+ SG.getText("GAME_385","일반, 진화, 초월 영웅들을 모두 가지고 있을 경우에는, 배치하기 전에 영웅을 먼저 선택해주세요.")}
+ `,`2. ${
+ SG.getText("GAME_386","영웅 아이콘을 오랫동안 꾹 누르고 있으면, 영웅 상세 팝업이 표시됩니다.")}
+ `];
+ this.lblGuide.text=t.join("\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(nzt,"HeroHireGuidePopup"),Kt(nzt,"_instance");
+ let hzt=nzt;
+ const rzt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg",new ZD),Kt(this,"closeBtn",new He(QA.getTexture("UI_Ekkorr","UI_Close3"))),Kt(this,"lblTitle",new JD("Title",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20)),this.bg.setIndex(6),this.bg.width=640,this.bg.height=60,this.bg.y=-1,this.addChild(this.bg),this.closeBtn.width=50,this.closeBtn.height=50,this.closeBtn.visible=!1,this.closeBtn.x=this.bg.width-this.closeBtn.width-5,this.closeBtn.y=.5*(this.bg.height-this.closeBtn.height),this.addChild(this.closeBtn),this.lblTitle.x=10,this.lblTitle.y=10,this.addChild(this.lblTitle)}
+ setTitle(t){
+ this.lblTitle.text=t}
+ get height(){
+ return this.bg.height}
+ updateLanguage(){
+ }
+ }
+ ;
+ Vt(rzt,"BaseSubMenu");
+ let ozt=rzt;
+ const azt=class extends Ge{
+ constructor(t){
+ super(),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"cover"),Kt(this,"container"),Kt(this,"_tribe",0),Kt(this,"_selected",!0),Kt(this,"onClick"),this._tribe=t,this.container=new Ge,this.addChild(this.container),this.bg=new He(QA.getTexture("UI_Ekkorr","Frame_Reward_01")),this.container.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Ekkorr",`TRIBE_${
+ this._tribe}
+ _Icon`)),this.container.addChild(this.icon),this.cover=new He(QA.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.cover.visible=!1,this.container.addChild(this.cover),this.eventMode="dynamic",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this),this.container.pivot.set(.5*this.bg.width,.5*this.bg.height)}
+ get tribe(){
+ return this._tribe}
+ set tribe(t){
+ t!=this._tribe&&(this._tribe=t,this.icon.texture=QA.getTexture("UI_Ekkorr",`TRIBE_${
+ this._tribe}
+ _Icon`))}
+ get selected(){
+ return this._selected}
+ set selected(t){
+ t!=this._selected&&(this._selected=t,this._selected?this.cover.visible=!1:this.cover.visible=!0)}
+ reset(){
+ this._selected=!0,this.cover.visible=!1}
+ onDown(t){
+ this.container.scale=.9}
+ onUp(t){
+ this.container.scale=1}
+ onTap(t){
+ zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),this.selected=!this._selected,this.onClick&&this.onClick(this._tribe,this._selected)}
+ }
+ ;
+ Vt(azt,"HeroTribeFilterIcon");
+ let czt=azt;
+ const lzt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"container",new Ge),Kt(this,"_currentSubView",null),this.addChild(this.container)}
+ get currentSubView(){
+ return this._currentSubView}
+ set currentSubView(t){
+ this._currentSubView!==t&&(null!=this._currentSubView&&this.removeChild(this._currentSubView),this._currentSubView=t,null!=this._currentSubView&&(this.addChild(this._currentSubView),this._currentSubView.x=0))}
+ get className(){
+ return""}
+ updateLanguage(){
+ this._currentSubView&&this._currentSubView.updateLanguage()}
+ }
+ ;
+ Vt(lzt,"BaseView");
+ let uzt=lzt;
+ const dzt=class extends Ge{
+ constructor(){
+ super()}
+ get className(){
+ return""}
+ updateLanguage(){
+ }
+ }
+ ;
+ Vt(dzt,"BaseSubView");
+ let fzt=dzt;
+ const pzt=class t extends ZL{
+ constructor(t,i=120,s=50){
+ super(t),Kt(this,"index",-1),Kt(this,"bg2"),Kt(this,"indicator"),Kt(this,"minWidth",120),Kt(this,"_selected",!0),Kt(this,"padding",50),Kt(this,"_autoResize",!0),Kt(this,"_allowMultiline",!1),this.minWidth=i,this.padding=s,this.container.removeChild(this.bg),this.lbl.textSize=18,this._activatedTextColor=JD.LIGHT_BROWN,this.updateTextColor(),this.bg2=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Base_Tooltip"),leftWidth:9,topHeight:9,rightWidth:9,bottomHeight:10}
+ ),this.bg2.width=101,this.bg2.height=45,this.bg2.x=.5*-this.bg2.width,this.bg2.y=.5*-this.bg2.height,this.container.addChildAt(this.bg2,0),this.indicator=new TM({
+ texture:QA.getTexture("UI_Ekkorr","SelectedBar"),leftWidth:5,topHeight:1,rightWidth:5,bottomHeight:1}
+ ),this.container.addChild(this.indicator),this.container.x=.5*this.bg2.width,this.container.y=.5*this.bg2.height,this.width=100,this.height=44,this._autoResize&&(this.text=t),this.updateHitArea(),this.selected=!1}
+ updateHitArea(){
+ null!=this.bg2&&(this._hitArea.width=this.bg2.width,this._hitArea.height=this.bg2.height,this.hitArea=this._hitArea)}
+ get width(){
+ return this.bg2.width-2*t.TRANSPARENT_BORDER}
+ set width(i){
+ i<this.minWidth&&(i=this.minWidth);
+ const s=t.TRANSPARENT_BORDER;
+ this.bg2.width=i+2*s,this.bg2.x=.5*-this.bg2.width,this.lbl.x=.5*-this.lbl.width,this.container.x=.5*i,this.indicator.width=i-16,this.indicator.x=.5*-this.indicator.width,this.updateHitArea()}
+ set height(i){
+ const s=t.TRANSPARENT_BORDER;
+ this.bg2.height=i+2*s,this.bg2.y=.5*-this.bg2.height,this.lbl.y=.5*-this.lbl.height,this.container.y=.5*i,this.indicator.y=this.bg2.y+this.bg2.height-this.indicator.height-10,this.updateHitArea()}
+ get height(){
+ return this.bg2.height-2*t.TRANSPARENT_BORDER}
+ get selected(){
+ return this._selected}
+ set selected(t){
+ t!=this._selected&&(this._selected=t,1==this._selected?(this.indicator.visible=!0,this.activatedTextColor=cD.COLOR_ORANGE):(this.indicator.visible=!1,this.activatedTextColor=cD.DEFAULT_COLOR))}
+ get autoResize(){
+ return this._autoResize}
+ set autoResize(t){
+ this._autoResize=t}
+ get allowMultiline(){
+ return this._allowMultiline}
+ set allowMultiline(t){
+ this._allowMultiline!==t&&(this._allowMultiline=t,this.lbl.text&&(this.text=this.lbl.text))}
+ applyMultilineLayout(i){
+ const s=Math.max(40,this.width-2*t.MULTILINE_SIDE_PAD);
+ if(this.lbl.setWrapWidth(0),this.lbl.lineHeight=0,this.lbl.text=i,this.lbl.width<=s)return this.lbl.x=.5*-this.lbl.width,void(this.lbl.y=.5*-this.lbl.height);
+ this.lbl.align="center",this.lbl.lineHeight=Math.floor(this.lbl.textSize*t.MULTILINE_LINE_HEIGHT_RATIO)+t.MULTILINE_LINE_HEIGHT_EXTRA,this.lbl.setWrapWidth(s),this.lbl.text=i,this.lbl.x=.5*-this.lbl.width,this.lbl.y=.5*-this.lbl.height+t.MULTILINE_Y_OFFSET}
+ setCompactStyle(t,i){
+ this.lbl.textSize=t,this.padding=i,this._autoResize=!0,this.lbl.setWrapWidth(0),this.text=this.lbl.text}
+ setMultilineMode(t,i,s=16){
+ this._autoResize=!1,this.lbl.textSize=s,this.width=t,this.height=i;
+ const e=Math.max(40,t-10);
+ this.lbl.setWrapWidth(e),this.lbl.align="center",this.lbl.x=.5*-this.lbl.width,this.lbl.y=.5*-this.lbl.height}
+ fitWithinWidth(t,i=50){
+ this._autoResize=!1;
+ const s=this.lbl.text;
+ this.lbl.setWrapWidth(0),this.lbl.textSize=18,this.lbl.text=s,this.width=t,this.height=i;
+ const e=Math.max(40,t-10);
+ if(this.lbl.width<=e)return this.lbl.x=.5*-this.lbl.width,void(this.lbl.y=.5*-this.lbl.height);
+ for(let n=17;
+ n>=12;
+ n--)if(this.lbl.textSize=n,this.lbl.text=s,this.lbl.width<=e)return this.lbl.x=.5*-this.lbl.width,void(this.lbl.y=.5*-this.lbl.height);
+ this.lbl.textSize=12,this.lbl.setWrapWidth(e),this.lbl.align="center",this.lbl.text=s,this.lbl.x=.5*-this.lbl.width,this.lbl.y=.5*-this.lbl.height}
+ set text(t){
+ super.text=t,this._autoResize?this.width=this.lbl.width+this.padding:this._allowMultiline?this.applyMultilineLayout(t):this.lbl.x=.5*-this.lbl.width}
+ updateEventTag(t,i){
+ this.eventTag&&(this.eventTag.scale=.7,this.eventTag.x=this.bg2.x+this.bg2.width-this.eventTag.width+t,this.eventTag.y=this.bg2.y+i)}
+ }
+ ;
+ Vt(pzt,"SubMenuButton"),Kt(pzt,"TRANSPARENT_BORDER",3),Kt(pzt,"MULTILINE_SIDE_PAD",10),Kt(pzt,"MULTILINE_LINE_HEIGHT_RATIO",.85),Kt(pzt,"MULTILINE_LINE_HEIGHT_EXTRA",2),Kt(pzt,"MULTILINE_Y_OFFSET",-2);
+ let gzt=pzt;
+ const mzt=class t{
+ constructor(){
+ Kt(this,"acc",[0])}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t,i){
+ "1"===AL.getInstance().getClientData("MEDAL_ENHANCE_USE_FORMULA")&&i&&i.length>0?this.buildFromSegments(i):this.acc=[0,...String(t[0].medal).split("|").map(Number)]}
+ buildFromSegments(t){
+ const i=[...t].map(t=>({
+ startLevel:Number(t.startLevel??1),exp:Number(t.exp??1),offset:Number(t.offset??0)}
+ )).sort((t,i)=>t.startLevel-i.startLevel),s=wx.HERO_MAX_ENHANCE,e=new Array(s+1);
+ e[0]=0;
+ let n=0;
+ for(let h=1;
+ h<=s;
+ h++){
+ for(;
+ n+1<i.length&&i[n+1].startLevel<=h;
+ )n++;
+ const t=i[n],s=Math.round(Math.pow(t.exp,h/5)+3*h)+t.offset;
+ e[h]=e[h-1]+s}
+ this.acc=e}
+ init(){
+ }
+ getCost(t){
+ return t<1||t>=this.acc.length?0:this.acc[t]-this.acc[t-1]}
+ getTotalCost(t,i){
+ return t>=i?0:(i>=this.acc.length&&(i=this.acc.length-1),t<0&&(t=0),this.acc[i]-this.acc[t])}
+ getMaxAffordableLevel(t,i){
+ let s=t,e=this.acc.length-1;
+ for(;
+ s<e;
+ ){
+ const n=Math.floor((s+e+1)/2);
+ this.acc[n]-this.acc[t]<=i?s=n:e=n-1}
+ return s}
+ getMaxLevel(){
+ return this.acc.length-1}
+ }
+ ;
+ Vt(mzt,"HeroMedalEnhanceManager"),Kt(mzt,"instance");
+ let wzt=mzt;
+ const vzt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"dimOverlay"),Kt(this,"bg"),Kt(this,"btnClose"),Kt(this,"resourceInfoParent",null),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
+ ),this.bg.width=640,this.addChild(this.bg),this.y=Math.min(VA.safeHeight-750,VA.viewMainY),this.bg.height=VA.safeHeight-this.y;
+ const t=VA.stageWidth,i=VA.stageHeight;
+ this.dimOverlay=(new Lf).rect(-t,-i,3*t,3*i).fill({
+ color:0,alpha:.5}
+ ),this.dimOverlay.y=-this.y,this.dimOverlay.eventMode="static",this.addChildAt(this.dimOverlay,0),this.btnClose=new kKt,this.btnClose.x=this.bg.width-this.btnClose.width-2,this.btnClose.y=-this.btnClose.height-1,this.btnClose.onClick=this.onCloseBtnClick.bind(this),this.addChild(this.btnClose),this.on("added",this.onAdded.bind(this)),this.on("removed",this.onRemoved.bind(this))}
+ onAdded(){
+ Zqt.getInstance().visible=!1,this.resourceInfoParent=kF.getInstance().parent,this.addChild(kF.getInstance()),t.refreshDimVisibility()}
+ onRemoved(){
+ Zqt.getInstance().visible=!0,this.resourceInfoParent?(this.resourceInfoParent.addChild(kF.getInstance()),this.resourceInfoParent=null):Zqt.getInstance().addChild(kF.getInstance()),kF.ensureMounted(Zqt.getInstance()),0==NU.getInstance().children.length&&(CYt.getInstance().isTreasureView()||CYt.getInstance().isDungeonSubView()?kF.getInstance().setMode(CF.DUNGEON):kF.getInstance().setMode(CF.NORMAL)),t.refreshDimVisibility()}
+ static refreshDimVisibility(){
+ const i=NU.getInstance();
+ let s=-1;
+ for(let e=0;
+ e<i.children.length;
+ e++){
+ const n=i.children[e];
+ if(n instanceof t&&n.visible){
+ s=e;
+ break}
+ }
+ for(let e=0;
+ e<i.children.length;
+ e++){
+ const n=i.children[e];
+ n instanceof t&&(n.dimOverlay.visible=e===s)}
+ }
+ addResources(){
+ this.addChild(kF.getInstance())}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ get activated(){
+ return!!this.parent}
+ updateLanguage(){
+ }
+ get className(){
+ return""}
+ onCloseBtnClick(){
+ this.hide()}
+ show2(t=null){
+ this.parent||(t||(t=NU.getInstance()),t.addChild(this))}
+ hide(){
+ null!=this.parent&&this.parent.removeChild(this)}
+ onBackButton(){
+ return!!(this.btnClose&&this.btnClose.parent&&this.btnClose.visible)&&(this.onCloseBtnClick(),!0)}
+ }
+ ;
+ Vt(vzt,"BaseDetailViewPopup");
+ let bzt=vzt;
+ const _zt={
+ stun:"Buff_Stun.png",freeze:"Buff_Freeze.png",poison:"Buff_Poison.png",curse:"Buff_Curse.png",silence:"Buff_Silence.png",shock:"Buff_Shock.png",binding:"Buff_Binding.png",blow:"Buff_Blow.png",knockback:"Buff_Knockback.png",charm:"Buff_Charm.png"}
+ ,yzt={
+ stun:"기절",freeze:"냉기",poison:"중독",curse:"저주",silence:"침묵",shock:"감전",binding:"속박",blow:"블로",knockback:"넉백",charm:"현혹"}
+ ,Mzt={
+ stun:"기절 취약",freeze:"냉기 취약",poison:"중독 취약",curse:"저주 취약",silence:"침묵 취약",shock:"감전 취약",binding:"속박 취약",blow:"블로 취약",knockback:"넉백 취약",charm:"현혹 취약",groggy:"무방비"}
+ ,Ezt={
+ stun:"GAME_1398",freeze:"GAME_1399",poison:"GAME_1400",curse:"GAME_1401",silence:"GAME_1402",shock:"GAME_1403",binding:"GAME_1404",blow:"GAME_1405",knockback:"GAME_1406",charm:"GAME_1407",groggy:"GAME_1408"}
+ ,Azt={
+ stun:"GAME_1388",freeze:"GAME_1389",poison:"GAME_1390",curse:"GAME_1391",silence:"GAME_1392",shock:"GAME_1393",binding:"GAME_1394",blow:"GAME_1395",knockback:"GAME_1396",charm:"GAME_1397"}
+ ;
+ function Szt(t){
+ const i=yzt[t]??t,s=Azt[t];
+ return s?SG.getText(s,i):i}
+ function Tzt(t){
+ const i=Mzt[t]??t,s=Ezt[t];
+ return s?SG.getText(s,i):i}
+ Vt(Szt,"getVulnLabel"),Vt(Tzt,"getVulnCalloutText");
+ const Czt={
+ human:"HUMAN_ICON",elf:"ELF_ICON",undead:"UNDEAD_ICON",orc:"ORC_ICON"}
+ ,Izt={
+ human:"인간",elf:"엘프",orc:"오크",undead:"언데드"}
+ ,kzt={
+ human:"GAME_1409",elf:"GAME_1410",orc:"GAME_1411",undead:"GAME_1412"}
+ ;
+ function Ozt(t){
+ const i=Izt[t];
+ if(!i)return"";
+ const s=kzt[t];
+ return s?SG.getText(s,i):i}
+ Vt(Ozt,"getTribeLabel");
+ const xzt={
+ 1:"모래",2:"화염",3:"독",4:"어둠",5:"얼음"}
+ ,Rzt={
+ 1:"GAME_1413",2:"GAME_1414",3:"GAME_1415",4:"GAME_1416",5:"GAME_1417"}
+ ;
+ function Nzt(t){
+ const i=xzt[t];
+ if(!i)return"";
+ const s=Rzt[t];
+ return s?SG.getText(s,i):i}
+ function Pzt(t,i){
+ return t&&i?t.filter(t=>(i[t]??0)>0):[]}
+ function Dzt(t,i,s=18){
+ for(const n of t.removeChildren())n.destroy({
+ children:!0}
+ );
+ if(0===i.length||!QA.hasSheet("UI_RAID"))return!1;
+ let e=0;
+ for(const n of i){
+ if(!_zt[n])continue;
+ const i=new He(QA.getTexture("UI_RAID",_zt[n]));
+ i.width=s,i.height=s,i.x=e,t.addChild(i),e+=s+2}
+ return t.children.length>0}
+ Vt(Nzt,"getResistLabel"),Vt(Pzt,"matchedVulnCc"),Vt(Dzt,"fillVulnCcBadge");
+ const Lzt=class t{
+ constructor(){
+ Kt(this,"kindNum",0),Kt(this,"trans",0),Kt(this,"remaining",0),Kt(this,"total",0)}
+ static getVO(){
+ return t.recycleList.length>0?t.recycleList.pop():new t}
+ static set(t,i,s,e,n){
+ return t.kindNum=i,t.trans=s,t.remaining=e,t.total=n,t}
+ remove(){
+ this.kindNum=0,this.trans=0,this.remaining=0,this.total=0,t.recycleList.push(this)}
+ static removeAll(t){
+ for(const i of t)i.remove();
+ t.length=0}
+ }
+ ;
+ Vt(Lzt,"TowerHeroSelectVO"),Kt(Lzt,"recycleList",[]);
+ let Gzt=Lzt;
+ const Bzt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icons"),Kt(this,"posList",[]),Kt(this,"rowData",[]),Kt(this,"badges",[]),Kt(this,"atkTypeIcons",[]),Kt(this,"ccBadges",[]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=62,this.bg.visible=!1,this.addChild(this.bg),this.icons=[],this.posList=[];
+ for(let t=0;
+ t<7;
+ t++){
+ const i=new Y2;
+ i.scale=.7,i.x=7+t*(i.width+1),i.y=4,this.addChild(i),this.icons.push(i),this.posList.push(i.x);
+ const s=new He;
+ s.width=32,s.height=32,s.x=i.x+i.width-37,s.y=i.y,s.visible=!1,this.addChild(s),this.badges.push(s);
+ const e=new He;
+ e.scale=.8,e.x=i.x+i.width-39,e.y=i.y+i.height-22,e.visible=!1,this.addChild(e),this.atkTypeIcons.push(e);
+ const n=new Ge;
+ n.x=i.x+3,n.y=i.y+3,n.eventMode="none",n.visible=!1,this.addChild(n),this.ccBadges.push(n)}
+ this.posList.push(640)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(i){
+ var s;
+ const e=i;
+ if(e){
+ this.rowData=e;
+ for(let i=0;
+ i<this.icons.length;
+ i++){
+ const n=this.icons[i];
+ if(i<e.length){
+ const h=e[i];
+ if(n.setMode(z2.TOWER),h.kindNum<=0)n.visible=!0,n.alpha=1,n.tint=16777215,n.hideIcon(),n.hideLevel(),n.hideEnhance(),n.setCountText(""),this.badges[i].visible=!1,this.atkTypeIcons[i].visible=!1,this.ccBadges[i].visible=!1;
+ else{
+ n.setDataWithKindNum(h.kindNum,h.trans),n.visible=!0,h.remaining<=0?n.tint=6710886:n.tint=16777215,n.setCountText(`${
+ h.remaining}
+ /${
+ h.total}
+ `),n.lblCount.x=3;
+ const e=null==(s=t.skillCodeMap)?void 0:s.get(h.kindNum);
+ if("medal"===e?(this.badges[i].texture=QA.getTexture("UI_Ekkorr","Icon_Medalbuff_02"),this.badges[i].visible=!0):"startwave"===e?(this.badges[i].texture=QA.getTexture("UI_Ekkorr","Icon_Startwave_02"),this.badges[i].visible=!0):this.badges[i].visible=!1,t.showAttackType&&!this.badges[i].visible){
+ const t=wx.getInstance().getBookVO(h.kindNum);
+ if(t){
+ const s=t.dmgType===ex.MAGICAL?"UI_MAGIC_WAND":"UI_SWORD";
+ this.atkTypeIcons[i].texture=QA.getTexture("UI_Ekkorr",s),this.atkTypeIcons[i].visible=!0}
+ else this.atkTypeIcons[i].visible=!1}
+ else this.atkTypeIcons[i].visible=!1;
+ const r=t.raidVulns;
+ if(r){
+ const t=wx.getInstance().getBookVO(h.kindNum);
+ this.ccBadges[i].visible=Dzt(this.ccBadges[i],Pzt(null==t?void 0:t.raidCc,r))}
+ else this.ccBadges[i].visible=!1}
+ }
+ else n.visible=!1,this.badges[i].visible=!1,this.atkTypeIcons[i].visible=!1,this.ccBadges[i].visible=!1}
+ }
+ }
+ onClick(i,s){
+ let e=-1;
+ for(let t=0;
+ t<this.icons.length;
+ t++)if(i>this.posList[t]&&i<this.posList[t+1]){
+ e=t;
+ break}
+ if(-1!==e&&e<this.rowData.length){
+ const i=this.rowData[e];
+ this.icons[e].visible&&t.onHeroClick&&t.onHeroClick(i.kindNum,i.trans)}
+ }
+ }
+ ;
+ Vt(Bzt,"TowerHeroSelectItemRenderer"),Kt(Bzt,"onHeroClick",null),Kt(Bzt,"skillCodeMap",null),Kt(Bzt,"showAttackType",!1),Kt(Bzt,"raidVulns",null);
+ let Uzt=Bzt;
+ const Fzt=class extends Y2{
+ constructor(){
+ super(),Kt(this,"index",-1),Kt(this,"onClick"),Kt(this,"plus",new He(QA.getTexture("UI_Ekkorr","UI_Plus"))),Kt(this,"check",new He(QA.getTexture("UI_Ekkorr","Base_Check01"))),Kt(this,"atkTypeIcon",new He),Kt(this,"_showAtkType",!1),Kt(this,"_selected",!1),Kt(this,"_activated",!0),this.plus.scale=.8,this.plus.x=.5*(this.bg.width-this.plus.width)-5,this.plus.y=.5*(this.bg.height-this.plus.height)+2,this.addChildAt(this.plus,0),this.check.scale=1.2,this.check.x=.5*(this.bg.width-this.check.width)-5,this.check.y=.5*(this.bg.height-this.check.height),this.addChild(this.check),this.check.visible=!1,this.atkTypeIcon.scale=1.15,this.atkTypeIcon.visible=!1,this.addChild(this.atkTypeIcon),this.eventMode="dynamic",this.on("pointertap",this.onTap,this)}
+ set showAtkType(t){
+ this._showAtkType=t,this.atkTypeIcon.visible=t}
+ get showAtkType(){
+ return this._showAtkType}
+ updateAtkTypeIcon(t){
+ if(!this._showAtkType||!t||t.kindNum<=0)return void(this.atkTypeIcon.visible=!1);
+ const i=t.dmgType===ex.MAGICAL?"UI_MAGIC_WAND":"UI_SWORD";
+ this.atkTypeIcon.texture=QA.getTexture("UI_Ekkorr",i),this.atkTypeIcon.x=this.bg.width-this.atkTypeIcon.width-22,this.atkTypeIcon.y=this.bg.height-this.atkTypeIcon.height-4,this.atkTypeIcon.visible=!0}
+ hidePlusIcon(){
+ this.plus.visible=!1}
+ hideLevel(){
+ this.lblLevel.visible=!1}
+ setNumber(t){
+ this.lblCount.text=t.toString(),this.lblCount.visible=!0}
+ setAlphaToFrame(t){
+ this.bg.alpha=t,this.cover.alpha=t,this.setTransAlpha(t)}
+ set selected(t){
+ this._selected=t,this.check.visible=t,this.plus.visible=!t}
+ get selected(){
+ return this._selected}
+ onTap(t){
+ 0!=this._activated&&(zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),this.onClick&&this.onClick(this.index))}
+ setDataWith(t,i){
+ this.index=t,this.setMode(z2.HERO_PVP),-1==i.kindNum?(this.icon.visible=!1,this.lblLevel.visible=!1,this.lblEnhance.visible=!1,this.lblCount.visible=!1,this.bg.texture=QA.getTexture("UI_Ekkorr","HeroFrame1}
+ "),this.cover.texture=QA.getTexture("UI_Ekkorr","HeroCover1"),this.atkTypeIcon.visible=!1,this.hideTrans()):(this.icon.visible=!0,super.setData(i),this.updateAtkTypeIcon(i))}
+ get activated(){
+ return this._activated}
+ set activated(t){
+ t!=this._activated&&(this._activated=t,this._activated)}
+ }
+ ;
+ Vt(Fzt,"HeroButton");
+ let Hzt=Fzt;
+ const Wzt=class t extends bzt{
+ constructor(){
+ var i;
+ super(),Kt(this,"lblTitle",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblCapacity",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"allyBtns",[]),Kt(this,"battleContainer",new Ge),Kt(this,"btnSave",new ZL("저장")),Kt(this,"heroList"),Kt(this,"selectedSlot",-1),Kt(this,"teamKindNums",[]),Kt(this,"teamTrans",[]),Kt(this,"heroVOs",[]),Kt(this,"onSaved",null),Kt(this,"buffContainer",new Ge),Kt(this,"bgMedal",new TM({
+ texture:QA.getTexture("UI_Ekkorr","Base_Time_Bg_Orange"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
+ )),Kt(this,"bgStartwave",new TM({
+ texture:QA.getTexture("UI_Ekkorr","Base_Time_Bg_Blue"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
+ )),Kt(this,"iconMedal",new He(QA.getTexture("UI_Ekkorr","Icon_Medalbuff_01"))),Kt(this,"iconStartwave",new He(QA.getTexture("UI_Ekkorr","Icon_Startwave_01"))),Kt(this,"lblMedalName",new JD("훈장 버프",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblMedalBuff",new JD("+0%",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblStartwaveName",new JD("시작 웨이브",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblStartwaveBuff",new JD("+0%",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"filterBtns",[]),Kt(this,"filterNorNames",["Btn_All_nor","Btn_Medabuffl_nor","Btn_Startwave_nor"]),Kt(this,"filterActNames",["Btn_All","Btn_Medalbuff","Btn_Startwave"]),Kt(this,"currentFilter",0),this.bg.height=850,this.y=VA.safeHeight-850,this.lblTitle.text=SG.getText("GAME_607","환생팀 편성"),this.lblTitle.x=15,this.lblTitle.y=52,this.addChild(this.lblTitle),this.lblCapacity.y=this.lblTitle.y,this.addChild(this.lblCapacity);
+ const s=this.lblTitle.y+this.lblTitle.height+20;
+ this.battleContainer.y=s,this.addChild(this.battleContainer);
+ for(let u=0;
+ u<t.MAX_ALLIES;
+ u++){
+ const t=u%5,i=Math.floor(u/5),s=new Hzt;
+ s.scale=.65,s.x=85*t,s.y=62*i,s.onClick=this.onClickAllyHero.bind(this),this.battleContainer.addChild(s),this.allyBtns.push(s)}
+ const e=340+((null==(i=this.allyBtns[0])?void 0:i.width)??50);
+ this.battleContainer.x=.5*(this.bg.width-e);
+ const n=s+124+10;
+ this.buffContainer.y=n,this.addChild(this.buffContainer);
+ const h=this.bg.width-15-108,r=h-15-10,o=Math.floor(r/2)-5;
+ this.bgMedal.x=0,this.bgMedal.y=0,this.bgMedal.width=o,this.bgMedal.height=37,this.buffContainer.addChild(this.bgMedal),this.iconMedal.x=this.bgMedal.x+6,this.iconMedal.y=this.bgMedal.y+6.5,this.iconMedal.width=24,this.iconMedal.height=24,this.buffContainer.addChild(this.iconMedal);
+ const a=this.bgMedal.y+9.5-1;
+ this.lblMedalName.x=this.iconMedal.x+25,this.lblMedalName.y=a,this.buffContainer.addChild(this.lblMedalName),this.lblMedalBuff.y=a,this.buffContainer.addChild(this.lblMedalBuff),this.bgStartwave.x=o+10,this.bgStartwave.y=0,this.bgStartwave.width=o,this.bgStartwave.height=37,this.buffContainer.addChild(this.bgStartwave),this.iconStartwave.x=this.bgStartwave.x+6,this.iconStartwave.y=this.bgStartwave.y+6.5,this.iconStartwave.width=24,this.iconStartwave.height=24,this.buffContainer.addChild(this.iconStartwave),this.lblStartwaveName.x=this.iconStartwave.x+25,this.lblStartwaveName.y=a,this.lblStartwaveName.textColor=10079487,this.buffContainer.addChild(this.lblStartwaveName),this.lblStartwaveBuff.y=a,this.lblStartwaveBuff.textColor=10079487,this.buffContainer.addChild(this.lblStartwaveBuff);
+ for(let t=0;
+ t<3;
+ t++){
+ const i=new He(QA.getTexture("UI_Ekkorr",this.filterActNames[t]));
+ i.x=h+36*t,i.y=2.5,i.width=32,i.height=32,i.eventMode="static",i.cursor="pointer";
+ const s=t;
+ i.on("pointerdown",()=>this.onFilterClick(s)),this.buffContainer.addChild(i),this.filterBtns.push(i)}
+ this.buffContainer.x=15,this.updateFilterButtons();
+ const c=n+43,l=this.bg.height-c-90;
+ Uzt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new d5(Uzt,630,l),this.heroList.x=5,this.heroList.y=c,this.addChild(this.heroList),this.btnSave.color=ZL.GREEN,this.btnSave.width=200,this.btnSave.height=45,this.btnSave.x=.5*(this.bg.width-this.btnSave.width),this.btnSave.y=this.bg.height-65,this.btnSave.onClick=this.onSaveClick.bind(this),this.addChild(this.btnSave)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateCapacityPosition(){
+ this.lblCapacity.x=this.bg.width-this.lblCapacity.width-15}
+ onFilterClick(t){
+ this.currentFilter=t,this.updateFilterButtons(),this.updateHeroList()}
+ updateFilterButtons(){
+ for(let t=0;
+ t<this.filterBtns.length;
+ t++){
+ const i=t===this.currentFilter;
+ this.filterBtns[t].texture=QA.getTexture("UI_Ekkorr",i?this.filterActNames[t]:this.filterNorNames[t]),this.filterBtns[t].alpha=i?1:.8}
+ }
+ updateBuffSummary(){
+ const t=kx.getInstance(),i=wx.getInstance(),s=this.teamKindNums.filter(t=>t>0),e=t.calcTotalForKindNums(s,Cx.MedalBuff)+IR.getWaterDragonTeamMedalBonus(s)+i.calcTeamTransMedalBonusPct(this.teamKindNums,this.teamTrans),n=t.calcTotalForKindNums(s,Cx.StartWave),h=IR.applyMoonStartWaveCap(n);
+ this.lblMedalBuff.text=`+${
+ e}
+ %`,this.lblMedalBuff.x=this.bgMedal.x+this.bgMedal.width-this.lblMedalBuff.width-8,this.lblStartwaveBuff.text=`+${
+ h}
+ %`,this.lblStartwaveBuff.x=this.bgStartwave.x+this.bgStartwave.width-this.lblStartwaveBuff.width-8}
+ getHeroSkillCode(t){
+ const i=wx.getInstance().getBookVO(t);
+ if(!i||!i.uniqueSkill)return"";
+ const s=kx.getInstance().getByKindNum(i.uniqueSkill);
+ if(!s||!s.code)return"";
+ const e=s.code.toLowerCase();
+ return"medalbuff"===e?Cx.MedalBuff:e}
+ async setData(){
+ var t;
+ this.lblTitle.text=SG.getText("GAME_607","환생팀 편성"),this.lblMedalName.text=SG.getText("GAME_608","훈장 버프"),this.lblStartwaveName.text=SG.getText("GAME_609","시작 웨이브"),this.btnSave.text=SG.getText("GAME_527","저장");
+ try{
+ const i=await rD.getInstance().user.getReviveTeam(!0);
+ (null==i?void 0:i.success)&&(null==(t=i.body)?void 0:t.team)?this.parseTeam(i.body.team):this.initEmptyTeam()}
+ catch{
+ this.initEmptyTeam()}
+ this.validateTeam(),this.selectedSlot=-1,this.currentFilter=0,this.updateFilterButtons(),this.updateAllyButtons(),this.updateBuffSummary(),this.updateHeroList()}
+ parseTeam(i){
+ this.teamKindNums=new Array(t.MAX_ALLIES).fill(-1),this.teamTrans=new Array(t.MAX_ALLIES).fill(0);
+ const s=i.split("|");
+ for(let e=0;
+ e<Math.min(s.length,t.MAX_ALLIES);
+ e++){
+ const[t,i]=s[e].split("-").map(Number);
+ this.teamKindNums[e]=t>0?t:-1,this.teamTrans[e]=t>0&&i||0}
+ }
+ validateTeam(){
+ if(this.teamKindNums.length<t.MAX_ALLIES)return;
+ const i=this.calcTotalInventory();
+ if(0===i.size)return;
+ const s=new Map;
+ let e=!1;
+ const n=[];
+ for(let h=0;
+ h<t.MAX_ALLIES;
+ h++){
+ const t=this.teamKindNums[h],r=this.teamTrans[h];
+ if(null==t||!Number.isFinite(t)||t<=0)continue;
+ const o=`${
+ t}
+ _${
+ r??0}
+ `,a=s.get(o)||0;
+ a>=(i.get(o)||0)?(this.teamKindNums[h]=-1,this.teamTrans[h]=0,e=!0,n.push(`slot${
+ h}
+ :${
+ o}
+ `)):s.set(o,a+1)}
+ }
+ initEmptyTeam(){
+ this.teamKindNums=new Array(t.MAX_ALLIES).fill(-1),this.teamTrans=new Array(t.MAX_ALLIES).fill(0)}
+ getPlacedCount(){
+ let i=0;
+ for(let s=0;
+ s<t.MAX_ALLIES;
+ s++)this.teamKindNums[s]>0&&i++;
+ return i}
+ updateAllyButtons(){
+ const i=Math.max(1,ML.maxWave/10),s=this.getPlacedCount(),e=s>=t.MAX_ALLIES;
+ this.lblCapacity.text=`${
+ s}
+  / ${
+ t.MAX_ALLIES}
+ `,this.lblCapacity.textColor=e?16729156:16777215,this.updateCapacityPosition();
+ for(let n=0;
+ n<t.MAX_ALLIES;
+ n++){
+ const t=this.allyBtns[n],s=bx.getVO();
+ if(this.teamKindNums[n]>0){
+ t.visible=!0,s.kindNum=this.teamKindNums[n],s.trans=this.teamTrans[n],s.level=i,t.setDataWith(n,s),t.hideLevel(),t.hideEnhance();
+ const e=n===this.selectedSlot;
+ t.setAlphaToFrame(e?1:.85),t.selected=e}
+ else if(e)t.visible=!1,t.selected=!1;
+ else{
+ t.visible=!0,s.kindNum=-1,t.setDataWith(n,s),t.hideBackground();
+ const i=n===this.selectedSlot;
+ t.setAlphaToFrame(i?.9:.4),t.selected=!1}
+ }
+ }
+ calcTotalInventory(){
+ const t=new Map,i=wx.getInstance().list;
+ for(const e of i){
+ if(e.kindNum>=1e4)continue;
+ const i=`${
+ e.kindNum}
+ _${
+ e.trans}
+ `;
+ t.set(i,(t.get(i)||0)+1)}
+ const s=wx.getInstance().ownedUnitList;
+ for(const e of s)if(!(e.kindNum>=1e4)){
+ if(e.count>0){
+ const i=`${
+ e.kindNum}
+ _0`;
+ t.set(i,(t.get(i)||0)+e.count)}
+ for(let i=0;
+ i<3;
+ i++)if(e.trans[i]>0){
+ const s=`${
+ e.kindNum}
+ _${
+ i+1}
+ `;
+ t.set(s,(t.get(s)||0)+e.trans[i])}
+ }
+ return t}
+ updateHeroList(){
+ Gzt.removeAll(this.heroVOs);
+ const i=new Map;
+ for(let h=0;
+ h<t.MAX_ALLIES;
+ h++){
+ if(this.teamKindNums[h]<=0)continue;
+ const t=`${
+ this.teamKindNums[h]}
+ _${
+ this.teamTrans[h]}
+ `;
+ i.set(t,(i.get(t)||0)+1)}
+ const s=this.calcTotalInventory(),e=wx.getInstance();
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),-1,0,0,0));
+ for(const[t,h]of s){
+ const[s,e]=t.split("_"),n=Number(s);
+ if(0!==this.currentFilter){
+ const t=this.getHeroSkillCode(n);
+ if(1===this.currentFilter&&t!==Cx.MedalBuff)continue;
+ if(2===this.currentFilter&&t!==Cx.StartWave)continue}
+ const r=i.get(t)||0;
+ this.heroVOs.push(Gzt.set(Gzt.getVO(),n,Number(e),h-r,h))}
+ this.heroVOs.sort((t,i)=>{
+ if(t.kindNum<=0)return-1;
+ if(i.kindNum<=0)return 1;
+ const s=e.getBookVO(t.kindNum),n=e.getBookVO(i.kindNum);
+ if(!s||!n)return 0;
+ const h=1e12*s.grade-1e9*s.evolStage+1e6*t.trans-s.tribe;
+ return 1e12*n.grade-1e9*n.evolStage+1e6*i.trans-n.tribe-h}
+ );
+ const n=new Map;
+ for(const t of this.heroVOs){
+ if(t.kindNum<=0)continue;
+ const i=this.getHeroSkillCode(t.kindNum);
+ i!==Cx.MedalBuff&&i!==Cx.StartWave||n.set(t.kindNum,i)}
+ Uzt.skillCodeMap=n,this.heroList.dataProvider=QO.chunkArray(this.heroVOs,7)}
+ onClickAllyHero(i){
+ const s=this.teamKindNums[i]<=0,e=this.getPlacedCount()>=t.MAX_ALLIES;
+ s&&e||(this.selectedSlot===i?this.selectedSlot=-1:this.selectedSlot=i,this.updateAllyButtons())}
+ onClickHeroFromList(i,s){
+ if(i<=0){
+ if(this.selectedSlot>=0&&this.teamKindNums[this.selectedSlot]>0){
+ const i=this.selectedSlot;
+ this.teamKindNums[i]=-1,this.teamTrans[i]=0;
+ let s=-1;
+ for(let e=1;
+ e<=t.MAX_ALLIES;
+ e++){
+ const n=(i+e)%t.MAX_ALLIES;
+ if(this.teamKindNums[n]>0){
+ s=n;
+ break}
+ }
+ this.selectedSlot=s}
+ }
+ else{
+ const e=`${
+ i}
+ _${
+ s}
+ `;
+ let n=0;
+ for(let h=0;
+ h<t.MAX_ALLIES;
+ h++)this.teamKindNums[h]===i&&this.teamTrans[h]===s&&n++;
+ if(n>=(this.calcTotalInventory().get(e)||0))return;
+ if(this.selectedSlot>=0){
+ if(!(this.teamKindNums[this.selectedSlot]>0)&&this.getPlacedCount()>=t.MAX_ALLIES)return;
+ this.teamKindNums[this.selectedSlot]=i,this.teamTrans[this.selectedSlot]=s,this.selectedSlot=-1}
+ else{
+ if(this.getPlacedCount()>=t.MAX_ALLIES)return;
+ for(let e=0;
+ e<t.MAX_ALLIES;
+ e++)if(this.teamKindNums[e]<=0){
+ this.teamKindNums[e]=i,this.teamTrans[e]=s;
+ break}
+ }
+ }
+ this.updateAllyButtons(),this.updateBuffSummary(),this.updateHeroList()}
+ buildTeamStr(){
+ const i=[];
+ for(let s=0;
+ s<t.MAX_ALLIES;
+ s++)this.teamKindNums[s]>0?i.push(`${
+ this.teamKindNums[s]}
+ -${
+ this.teamTrans[s]}
+ `):i.push("0-0");
+ return i.join("|")}
+ async onSaveClick(){
+ const t=this.buildTeamStr();
+ try{
+ const i=await rD.getInstance().user.setReviveTeam(t,!0);
+ if(!1===(null==i?void 0:i.success))return void u2.getInstance().showMessage(SG.getText("GAME_616","저장에 실패했습니다."))}
+ catch{
+ return void u2.getInstance().showMessage(SG.getText("GAME_616","저장에 실패했습니다."))}
+ u2.getInstance().showMessage(SG.getText("GAME_617","환생팀이 저장되었습니다.")),this.onSaved&&this.onSaved(),this.hide()}
+ show(){
+ Uzt.showAttackType=!1,Uzt.onHeroClick=this.onClickHeroFromList.bind(this);
+ const t=xL.getInstance();
+ for(const i of t.children)if(i!==this&&"position"in i&&"height"in i){
+ const t=i;
+ if(t.pivot&&t.pivot.y>0){
+ const i=t.position.y-t.pivot.y-100;
+ this.y=Math.max(0,i),this.bg.height=VA.safeHeight-this.y;
+ break}
+ }
+ t.addPopup(this)}
+ hide(){
+ Uzt.skillCodeMap=null,xL.getInstance().removePopup(this)}
+ }
+ ;
+ Vt(Wzt,"ReviveTeamPopup"),Kt(Wzt,"_instance"),Kt(Wzt,"MAX_ALLIES",10);
+ let $zt=Wzt;
+ const jzt=Object.freeze(Object.defineProperty({
+ __proto__:null,ReviveTeamPopup:$zt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Vzt=class t extends Ge{
+ constructor(i){
+ super(),Kt(this,"bg"),Kt(this,"lbl"),Kt(this,"container"),Kt(this,"_width",100),Kt(this,"_minWidth",100),Kt(this,"_height",58),Kt(this,"_textSize",19),Kt(this,"_activated",!0),Kt(this,"_activatedTextColor",16777215),Kt(this,"_deactivatedTextColor",10066329),Kt(this,"_outlineText",!1),Kt(this,"_resizable",!1),Kt(this,"_padding",20),Kt(this,"_color",t.COLOR_SAND_BROWN),Kt(this,"onClick"),Kt(this,"redDot"),this.container=new Ge,this.addChild(this.container),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr",this._color),leftWidth:40,topHeight:27,rightWidth:40,bottomHeight:29}
+ ),this.bg.width=this._width,this.bg.height=this._height,this.container.addChild(this.bg);
+ const s=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ s.fill=cD.COLOR_WHITE,s.fontSize=this._textSize,this.lbl=new JD(i,s.fill,s),this.container.addChild(this.lbl),this.updateLayout(),this.eventMode="dynamic",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this),this.container.pivot.set(.5*this._width,.5*this._height)}
+ updateLayout(){
+ this._resizable?cD.setLabelWrapWidth(this.lbl,5*this._width):cD.setLabelWrapWidth(this.lbl,this._width),this.lbl.x=.5*(this._width-this.lbl.width),this.lbl.y=.5*(this._height-this.lbl.height),this.container.x=.5*this._width,this.container.y=.5*this._height}
+ get width(){
+ return this._width}
+ set width(t){
+ t!=this._width&&(this._resizable&&t<this._minWidth&&(t=this._minWidth),this._width=t,this.bg.width=this._width,this.container.pivot.set(.5*this._width,.5*this._height),this.updateLayout())}
+ get minWidth(){
+ return this._minWidth}
+ set minWidth(t){
+ t!=this._minWidth&&(this._minWidth=t,this._resizable&&this._width<this._minWidth&&(this.width=this._minWidth))}
+ get height(){
+ return this._height}
+ set height(t){
+ t!=this._height&&(this._height=t,this.bg.height=this._height,this.container.pivot.set(.5*this._width,.5*this._height),this.updateLayout())}
+ get text(){
+ return this.lbl.text}
+ set text(t){
+ this.lbl.text=t,this._resizable&&(this.width=this.lbl.width+2*this._padding),this.updateLayout()}
+ get textSize(){
+ return this._textSize}
+ set textSize(t){
+ t!=this._textSize&&(this._textSize=t,this.lbl.textSize=this._textSize,this.updateLayout())}
+ get activated(){
+ return this._activated}
+ set activated(t){
+ t!=this._activated&&(this._activated=t,this._activated,this.updateTextColor())}
+ get activatedTextColor(){
+ return this._activatedTextColor}
+ set activatedTextColor(t){
+ t!=this._activatedTextColor&&(this._activatedTextColor=t,this.updateTextColor())}
+ get deactivatedTextColor(){
+ return this._deactivatedTextColor}
+ set deactivatedTextColor(t){
+ t!=this._deactivatedTextColor&&(this._deactivatedTextColor=t,this.updateTextColor())}
+ updateTextColor(){
+ 1==this._activated?this.lbl.textColor=this._activatedTextColor:this.lbl.textColor=this._deactivatedTextColor}
+ get outlineText(){
+ return this._outlineText}
+ set outlineText(t){
+ if(t==this._outlineText)return;
+ this._outlineText=t;
+ const i=this.lbl.getStyle();
+ this._outlineText?(delete i.stroke,i.stroke={
+ color:"#000000",width:4,join:"round"}
+ ):delete i.stroke,this.lbl.setStyle(i),this.updateLayout()}
+ get resizable(){
+ return this._resizable}
+ set resizable(t){
+ t!=this._resizable&&(this._resizable=t,this.width=this.lbl.width+2*this._padding,this.updateLayout())}
+ getStyle(){
+ return this.lbl.getStyle()}
+ setStyle(t){
+ this.lbl.setStyle(t)}
+ setTexture(t){
+ if(t)try{
+ this.bg.texture=t.texture,this.bg.leftWidth=t.leftWidth,this.bg.topHeight=t.topHeight,this.bg.rightWidth=t.rightWidth,this.bg.bottomHeight=t.bottomHeight}
+ catch(i){
+ }
+ }
+ get color(){
+ return this._color}
+ set color(t){
+ if(t!=this._color){
+ this._color=t;
+ try{
+ this.bg.texture=QA.getTexture("UI_Ekkorr",this._color)}
+ catch(i){
+ }
+ }
+ }
+ onDown(t){
+ 0!=this._activated&&(this.container.scale=.9)}
+ onUp(t){
+ 0!=this._activated&&(this.container.scale=1)}
+ onTap(t){
+ 0!=this._activated&&(zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),$L(),this.onClick&&this.onClick())}
+ showRedDot(){
+ this.redDot||(this.redDot=new JL,this.container.addChild(this.redDot)),this.redDot.show(),this.updateRedDot()}
+ hideRedDot(){
+ this.redDot&&this.redDot.hide()}
+ updateRedDot(){
+ this.redDot&&(this.redDot.x=this.bg.x+this.bg.width-this.redDot.width-12,this.redDot.y=this.bg.y-3)}
+ }
+ ;
+ Vt(Vzt,"CommonButton2"),Kt(Vzt,"COLOR_SAND_BROWN","Btn_Sand_Brown"),Kt(Vzt,"COLOR_ORANGE","Btn_Orange"),Kt(Vzt,"COLOR_GRAY","Btn_Gray");
+ let Kzt=Vzt;
+ const zzt=class extends Kzt{
+ constructor(t){
+ super(t),Kt(this,"bgOff"),Kt(this,"lblOff"),this.width=50,this.height=35,this.minWidth=50,this.outlineText=!0,this.setTexture({
+ texture:QA.getTexture("UI_Ekkorr","Progress_Bar_Bg_LightGreen"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
+ ),this.bgOff=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Progress_Bar_Bg_LightGray"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
+ ),this.bgOff.visible=!1,this.bgOff.width=this._width,this.bgOff.height=this._height,this.container.addChildAt(this.bgOff,0);
+ const i=cD.DEFAULT_OUTLINE_FONT_OPTION_17;
+ i.fill=16777135,i.stroke={
+ color:"#33872a",width:4,join:"round"}
+ ,this.lbl.setStyle(i);
+ const s=cD.DEFAULT_OUTLINE_FONT_OPTION_17;
+ s.fill=15790320,s.stroke={
+ color:"#535353",width:4,join:"round"}
+ ,this.lblOff=new JD(t,s.fill,s),this.lblOff.visible=!1,this.container.addChild(this.lblOff),this._activated=!1,this.activated=!0,this.updateLayout()}
+ updateLayout(){
+ super.updateLayout(),this.lbl.x=.5*(this._width-this.lbl.width)+1,this.lblOff&&(this.lblOff.x=this.lbl.x,this.lblOff.y=this.lbl.y)}
+ set activated(t){
+ super.activated=t,this._activated?(this.bg.visible=!0,this.lbl.visible=!0,this.bgOff.visible=!1,this.lblOff.visible=!1):(this.bg.visible=!1,this.lbl.visible=!1,this.bgOff.visible=!0,this.lblOff.visible=!0)}
+ onDown(t){
+ this.container.scale=.95}
+ onUp(t){
+ this.container.scale=1}
+ onTap(t){
+ zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),$L(),this.onClick&&this.onClick()}
+ }
+ ;
+ Vt(zzt,"HeroTranscendModeButton");
+ let qzt=zzt;
+ const Yzt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","Base_Check01"))),this.icon.x=0,this.icon.y=0,this.addChild(this.icon)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ }
+ ;
+ Vt(Yzt,"HeroCheckIcon"),Kt(Yzt,"_instance");
+ let Xzt=Yzt;
+ const Jzt=new Ag({
+ fontFamily:"Arial",fill:13421772,fontSize:13,fontWeight:"bold"}
+ ),Qzt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),Kt(this,"detectContainer",new Ge),this.lblGuide=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.contentContainer.addChild(this.lblGuide),this.contentContainer.addChild(this.detectContainer),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_370","영웅 안내");
+ const t=[`[ ${
+ SG.getText("COMMON_40","레벨")}
+ ]`,`1. ${
+ SG.getText("GAME_371","골드레벨")}
+  : ${
+ SG.getText("GAME_372","골드로 올리는 레벨로, 환생하면 초기화 됩니다.")}
+ `,`2. ${
+ SG.getText("GAME_373","강화레벨")}
+  : ${
+ SG.getText("GAME_374","훈장으로 올리는 레벨로, 환생해도 초기화 되지 않습니다.")}
+ `,"",`[ ${
+ SG.getText("GAME_68","편성 해제")}
+  ]`,`1. ${
+ SG.getText("GAME_375","영웅을 편성해제하면, 강화레벨을 0으로 초기화하고, 강화에 들어간 모든 훈장을 돌려줍니다.")}
+ `,`2. ${
+ SG.getText("GAME_376","골드레벨도 1로 초기화 되지만, 레벨업에 들어간 골드는 되돌려주지 않습니다.")}
+ `,"",SG.getText("GAME_377","[ 아이콘 설명 ]")];
+ this.lblGuide.text=t.join("\n"),this.lblGuide.x=30,this.lblGuide.y=80;
+ let i=this.lblGuide.y+this.lblGuide.height+10;
+ this.detectContainer.removeChildren(),this.detectContainer.x=30,this.detectContainer.y=i;
+ let s=0;
+ s=this.addIconDesc(s,"ICON_UNIT",SG.getText("GAME_378","적들이 성으로 돌진하지 못하도록 막아설 수 있는 최대 병사수입니다.")),s=this.addMultiIconDesc(s,["MALE_ICON","FEMALE_ICON","NEUTRAL_ICON"],SG.getText("GAME_379","남성, 여성, 중성을 표시합니다.")),s=this.addMultiIconDesc(s,["HUMAN_ICON","ELF_ICON","UNDEAD_ICON","ORC_ICON"],SG.getText("GAME_380","인간, 엘프, 언데드, 오크 종족을 표시합니다.")),s=this.addIconDesc(s,"DETECT_ICON",SG.getText("GAME_381","은신한 적을 감지할 수 있음을 표시합니다.")),s+=10;
+ const e=new JD(`[ ${
+ SG.getText("GAME_383","은신 감지 영웅")}
+  ]`,cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16);
+ e.y=s,this.detectContainer.addChild(e),s+=e.height+8;
+ const n=wx.getInstance().bookList.filter(t=>1===t.evolStage&&t.kindNum<1e3&&t.detect),h=[{
+ tribe:1,label:SG.getText("TRIBE_1","인간")}
+ ,{
+ tribe:2,label:SG.getText("TRIBE_2","엘프")}
+ ,{
+ tribe:3,label:SG.getText("TRIBE_3","언데드")}
+ ,{
+ tribe:4,label:SG.getText("TRIBE_4","오크")}
+ ];
+ let r=0;
+ for(const u of h){
+ const t=new Hg({
+ text:`${
+ u.label}
+  :`,style:Jzt}
+ );
+ t.width>r&&(r=t.width),t.destroy()}
+ const o=r+8,a=this.width-100;
+ for(const u of h){
+ const t=n.filter(t=>t.tribe===u.tribe).sort((t,i)=>i.grade-t.grade);
+ if(0===t.length)continue;
+ const i=new Hg({
+ text:`${
+ u.label}
+  :`,style:Jzt}
+ );
+ i.y=s+.5*(36-i.height),this.detectContainer.addChild(i);
+ let e=o;
+ for(const n of t)try{
+ const t=new He(QA.getTexture("UI_Ekkorr",`Hero${
+ n.base}
+ `));
+ if(t.scale.set(.35),t.x=e,t.y=s+.5*(36-t.height),this.detectContainer.addChild(t),e+=t.width+2,e>a)break}
+ catch(l){
+ }
+ s+=36}
+ const c=this.detectContainer.y+s+40;
+ this.height=c,await this.loadImage(),super.show()}
+ addIconDesc(t,i,s){
+ const e=new He(QA.getTexture("UI_Ekkorr",i));
+ e.scale.set(.8),e.x=0,e.y=t,this.detectContainer.addChild(e);
+ const n=new JD(s,cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16);
+ return cD.setLabelWrapWidth(n,this.width-100),n.x=.8*e.width+8,n.y=t+.5*(.8*e.height-n.height),this.detectContainer.addChild(n),t+Math.max(.8*e.height,n.height)+6}
+ addMultiIconDesc(t,i,s){
+ let e=0,n=0;
+ for(const r of i){
+ const i=new He(QA.getTexture("UI_Ekkorr",r));
+ i.scale.set(.8),i.x=e,i.y=t,this.detectContainer.addChild(i),e+=.8*i.width+3,n=Math.max(n,.8*i.height)}
+ const h=new JD(s,cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16);
+ return cD.setLabelWrapWidth(h,this.width-100),h.x=e+5,h.y=t+.5*(n-h.height),this.detectContainer.addChild(h),t+Math.max(n,h.height)+6}
+ getDefaultPositionY(){
+ return.47*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(Qzt,"HeroGuidePopup"),Kt(Qzt,"_instance");
+ let Zzt=Qzt;
+ const tqt=class extends DWt{
+ constructor(t,i=5){
+ super(),Kt(this,"lbl"),Kt(this,"labelPadding",5),this.labelPadding=i;
+ const s=cD.DEFAULT_FONT_OPTION_17;
+ s.fill=cD.COLOR_WHITE,this.lbl=new JD(t,s.fill,s),this.lbl.eventMode="none",this.addChild(this.lbl),this.updateLayout()}
+ updateLayout(){
+ this.lbl.x=this.bg.x+this.bg.width+this.labelPadding,this.lbl.y=this.bg.y+.5*(this.bg.height-this.lbl.height),this.customHitArea.width=this.bg.width+2*this.customHitAreaOffset+this.lbl.width,this.customHitArea.height=Math.max(this.bg.height,this.lbl.height)+2*this.customHitAreaOffset}
+ get text(){
+ return this.lbl.text}
+ set text(t){
+ t!=this.lbl.text&&(this.lbl.text=t,this.updateLayout())}
+ set textSize(t){
+ this.lbl.textSize=t}
+ get width(){
+ return this.lbl.x+this.lbl.width}
+ }
+ ;
+ Vt(tqt,"CheckBoxWithText");
+ let iqt=tqt;
+ const sqt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"cbSelectAll"),Kt(this,"listBg"),Kt(this,"listContainer",new Ge),Kt(this,"heroCheckBoxes",[]),Kt(this,"heroNameLabels",[]),Kt(this,"heroLevelLabels",[]),Kt(this,"rowHitAreas",[]),Kt(this,"sortedHeroes",[]),Kt(this,"btn1"),Kt(this,"btn10"),Kt(this,"btn100"),Kt(this,"btn1000"),Kt(this,"frameCounter",0),Kt(this,"FRAME_INTERVAL",30),Kt(this,"lastGoldValue",-1),this.title=SG.getText("GAME_254","일괄 레벨업");
+ const i=t.POPUP_W;
+ this.cbSelectAll=new iqt(SG.getText("COMMON_552","전체 선택"),10),this.cbSelectAll.x=30,this.cbSelectAll.y=70,this.addChild(this.cbSelectAll),this.cbSelectAll.onClick=()=>{
+ this.heroCheckBoxes.forEach(t=>{
+ t.visible&&(t.selected=this.cbSelectAll.selected)}
+ ),this.refreshButtons()}
+ ;
+ const s=this.cbSelectAll.y+this.cbSelectAll.height+5,e=i-40,n=t.MAX_HEROES*t.ROW_H+12;
+ this.listBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.listBg.x=30,this.listBg.y=s,this.listBg.width=e,this.listBg.height=n,this.contentContainer.addChild(this.listBg),this.listContainer.x=45,this.listContainer.y=s+6;
+ for(let l=0;
+ l<t.MAX_HEROES;
+ l++){
+ const i=l*t.ROW_H+4,s=new hqt;
+ s.x=0,s.y=i,s.onClick=()=>this.refreshButtons(),this.listContainer.addChild(s),this.heroCheckBoxes.push(s);
+ const n=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ n.x=34,n.y=i,this.listContainer.addChild(n),this.heroNameLabels.push(n);
+ const h=new JD("",16766720,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ h.x=e-70,h.y=i,this.listContainer.addChild(h),this.heroLevelLabels.push(h);
+ const r=new Ge;
+ r.hitArea=new Ri(-10,i-2,e+10,t.ROW_H),r.eventMode="static",r.cursor="pointer",r.on("pointertap",()=>s.toggle()),this.listContainer.addChild(r),this.rowHitAreas.push(r)}
+ this.contentContainer.addChild(this.listContainer);
+ const{
+ BTN_W:h,BTN_H:r,BTN_GAP:o}
+ =t,a=s+n+20;
+ let c=10+.5*(i-(4*h+3*o));
+ this.btn1000=this.makeButton("+1000",c,a),this.btn1000.onClick=()=>this.onBulkUpgrade(1e3),this.contentContainer.addChild(this.btn1000),c+=h+o,this.btn100=this.makeButton("+100",c,a),this.btn100.onClick=()=>this.onBulkUpgrade(100),this.contentContainer.addChild(this.btn100),c+=h+o,this.btn10=this.makeButton("+10",c,a),this.btn10.onClick=()=>this.onBulkUpgrade(10),this.contentContainer.addChild(this.btn10),c+=h+o,this.btn1=this.makeButton("+1",c,a),this.btn1.onClick=()=>this.onBulkUpgrade(1),this.contentContainer.addChild(this.btn1),this.height=a+r+40,this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ makeButton(i,s,e){
+ const{
+ BTN_W:n,BTN_H:h}
+ =t,r=new kU("UI_GOLD","0",i,.7,n,h);
+ return r.labelOrder=kU.TEXT_FIRST,r.textLabel.textSize=16,r.color=kU.BROWN,r.showIconLabel=!0,r.showTextLabel=!0,r.x=s,r.y=e,r}
+ show(t){
+ this.title=SG.getText("GAME_254","일괄 레벨업"),this.cbSelectAll.text=SG.getText("COMMON_552","전체 선택"),this.lastGoldValue=-1,this.frameCounter=0,this.cbSelectAll.selected=!0;
+ for(const i of this.heroCheckBoxes)i.selected=!0;
+ this.refreshHeroList(),this.refreshButtons(),LM.getInstance().add(this.onFrame,this),super.show()}
+ getDefaultPositionY(){
+ return 420+.5*this.height}
+ hide(){
+ LM.getInstance().remove(this.onFrame,this),super.hide()}
+ onFrame(){
+ if(this.frameCounter-- >0)return;
+ this.frameCounter=this.FRAME_INTERVAL;
+ const t=ML.gold;
+ t!==this.lastGoldValue&&(this.lastGoldValue=t,this.refreshButtons())}
+ refreshHeroList(){
+ const i=this.heroCheckBoxes.reduce((t,i,s)=>(i.visible&&i.selected&&this.sortedHeroes[s]&&t.push(this.sortedHeroes[s].id),t),[]);
+ this.sortedHeroes=wx.getInstance().list.filter(t=>t&&t.kindNum>0&&t.getBookVo()).sort((t,i)=>t.enhance!==i.enhance?i.enhance-t.enhance:t.level!==i.level?i.level-t.level:t.grade!==i.grade?i.grade-t.grade:t.tribe-i.tribe);
+ for(let s=0;
+ s<t.MAX_HEROES;
+ s++){
+ const t=this.sortedHeroes[s];
+ t?(this.heroCheckBoxes[s].visible=!0,this.heroCheckBoxes[s].selected=0==i.length||i.includes(t.id),this.heroNameLabels[s].text=SG.getText(t.getBookVo().getNameKey(),t.name),this.heroLevelLabels[s].text=`Lv.${
+ t.level}
+ `,this.heroLevelLabels[s].x=this.listBg.width-this.heroLevelLabels[s].width-40,this.heroNameLabels[s].visible=!0,this.heroLevelLabels[s].visible=!0,this.rowHitAreas[s].visible=!0):(this.heroCheckBoxes[s].visible=!1,this.heroCheckBoxes[s].selected=!1,this.heroNameLabels[s].visible=!1,this.heroLevelLabels[s].visible=!1,this.rowHitAreas[s].visible=!1)}
+ }
+ refreshButtons(){
+ const t=ML.gold,i=this.calcTotalCost(1);
+ this.btn1.iconText=VD.displayLargeNumberAsAlphabet(i),this.btn1.activated=t>=i;
+ const s=this.calcTotalCost(10);
+ this.btn10.iconText=VD.displayLargeNumberAsAlphabet(s),this.btn10.activated=t>=s;
+ const e=this.calcTotalCost(100);
+ this.btn100.iconText=VD.displayLargeNumberAsAlphabet(e),this.btn100.activated=t>=e;
+ const n=this.calcTotalCost(1e3);
+ this.btn1000.iconText=VD.displayLargeNumberAsAlphabet(n),this.btn1000.activated=t>=n}
+ getNextBoundary(t,i){
+ const s=t%i;
+ return 0===s?t+i:t+(i-s)}
+ getCheckedHeroes(){
+ return this.sortedHeroes.filter((i,s)=>s<t.MAX_HEROES&&this.heroCheckBoxes[s].selected)}
+ getTargetBoundary(t){
+ const i=this.getCheckedHeroes();
+ if(0===i.length)return 0;
+ const s=Math.min(...i.map(t=>t.level)),e=K2.getInstance().getMaxLevel();
+ return Math.min(this.getNextBoundary(s,t),e)}
+ calcTotalCost(t){
+ const i=this.getCheckedHeroes(),s=K2.getInstance(),e=VR.getInstance().getGameplayMultiplier(OR.UnitUpgradeGold);
+ let n=0;
+ for(const h of i){
+ const i=s.getMaxLevel(h.grade,h.trans),e=Math.min(h.level+t,i);
+ h.level<e&&(n+=s.getTotalGold(h.level,e))}
+ return Math.floor(n/e)}
+ onBulkUpgrade(t){
+ const i=this.getCheckedHeroes();
+ if(0===i.length)return;
+ const s=this.calcTotalCost(t);
+ if(ML.gold<s)return void u2.getInstance().showMessage(SG.getText("COMMON_359","골드가 부족합니다."));
+ ML.gold-=s,kF.getInstance().updateGold();
+ const e=K2.getInstance();
+ let n=!1;
+ for(const h of i){
+ const i=e.getMaxLevel(h.grade,h.trans),s=Math.min(h.level+t,i);
+ if(h.level<s){
+ const t=h.level;
+ h.level=s,Gqt.registerTargetLevel(h.id,s),jhi.getInstance().udpateHero(h),n||(n=uR.some(i=>t<i&&s>=i))}
+ }
+ n&&VR.getInstance().recalculate(),Gqt.markDirtyAndSchedule(),this.refreshHeroList(),this.refreshButtons(),$qt.getInstance().setData()}
+ }
+ ;
+ Vt(sqt,"HeroMultiLevelPopup"),Kt(sqt,"_instance"),Kt(sqt,"MAX_HEROES",10),Kt(sqt,"ROW_H",43),Kt(sqt,"BTN_W",123),Kt(sqt,"BTN_H",70),Kt(sqt,"BTN_GAP",8),Kt(sqt,"POPUP_W",560);
+ let eqt=sqt;
+ const nqt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"check"),Kt(this,"_selected",!1),Kt(this,"onClick"),this.bg=new He(QA.getTexture("UI_Ekkorr","UI_CheckBg")),this.bg.width=this.bg.height=22,this.bg.eventMode="none",this.addChild(this.bg),this.check=new He(QA.getTexture("UI_Ekkorr","UI_Check1")),this.check.width=this.check.height=22,this.check.eventMode="none",this.addChild(this.check),this.selected=!1}
+ toggle(){
+ this.selected=!this._selected,zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),this.onClick&&this.onClick()}
+ get selected(){
+ return this._selected}
+ set selected(t){
+ this._selected=t,this.check.visible=t}
+ }
+ ;
+ Vt(nqt,"HeroCheckBox");
+ let hqt=nqt;
+ const rqt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"onConfirmed",null),Kt(this,"lblQuestion",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblCost",new $B("UI_GEM","0",16768256,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnCancel",new kU("","","취소",.8,150,70)),Kt(this,"btnConfirm",new kU("UI_GEM","200","확인",.8,180,70)),this.contentContainer.addChild(this.lblQuestion,this.lblCost,this.btnCancel,this.btnConfirm),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.color=kU.RED,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.outSideClickHide=!0}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ showConfirm(t,i){
+ this.onConfirmed=i,this.title=SG.getText("GAME_14","영웅 슬롯 확장"),this.lblQuestion.text=SG.getText("GAME_241","영웅 슬롯을 추가하시겠습니까? "),this.lblCost.text=`${
+ t.toLocaleString()}
+ `,this.btnConfirm.iconText=String(t),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
+ onConfirmClick(){
+ this.hide(),this.onConfirmed&&(this.onConfirmed(),this.onConfirmed=null)}
+ updateLayout(){
+ const t=.5*this.width;
+ this.lblQuestion.x=t-.5*this.lblQuestion.width,this.lblQuestion.y=90,this.lblCost.x=t-.5*this.lblCost.width,this.lblCost.y=this.lblQuestion.y+this.lblQuestion.height+25;
+ const i=this.lblCost.y+this.lblCost.height+40,s=this.btnConfirm.width+16+this.btnCancel.width;
+ this.btnConfirm.x=t-.5*s,this.btnConfirm.y=i,this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+16,this.btnCancel.y=i,this.height=i+this.btnConfirm.height+50}
+ }
+ ;
+ Vt(rqt,"HeroSlotExpandPopup"),Kt(rqt,"instance");
+ let oqt=rqt;
+ const aqt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("늑대전사 ",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblHp",new $B("UI_HEART","100",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblAtk",new $B("UI_MAGIC_WAND","20",39423,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblDef",new $B("UI_PHY_DEFENSE","20",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblBlock",new $B("ICON_UNIT","0",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnHire",new VB("UI_GEM","고용")),Kt(this,"icon",new Y2),Kt(this,"mainContainer",new Ge),Kt(this,"requestPending",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.mainContainer.addChild(this.bg),this.icon.hideBackground(),this.icon.x=-1,this.icon.y=.5*(this.bg.height-this.icon.height),this.mainContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=13,this.mainContainer.addChild(this.lblName),this.lblHp.x=this.lblName.x,this.lblHp.y=this.lblName.y+this.lblName.height+8,this.mainContainer.addChild(this.lblHp),this.lblAtk.x=this.lblHp.x+100,this.lblAtk.y=this.lblHp.y,this.mainContainer.addChild(this.lblAtk),this.lblDef.x=this.lblAtk.x+100,this.lblDef.y=this.lblHp.y,this.mainContainer.addChild(this.lblDef),this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblDef.x+95,this.lblBlock.y=this.lblHp.y,this.mainContainer.addChild(this.lblBlock),this.btnHire.lbl.iconScale=.8,this.btnHire.color=VB.BROWN,this.btnHire.height=58,this.btnHire.width=120,this.btnHire.x=this.bg.width-this.btnHire.width-10,this.btnHire.y=.5*(this.bg.height-this.btnHire.height),this.mainContainer.addChild(this.btnHire),this.btnHire.on("pointertap",this.onHire,this),this.addChild(this.mainContainer)}
+ async onHire(t){
+ if("gem"===this.data.payType){
+ const t=SG.getValueReplace("GAME_640","##",this.data.gem,`보석 ${
+ this.data.gem}
+ 개를 소모하여 영웅을 고용하시겠습니까?`),i=b$t.getInstance();
+ i.title=SG.getText("COMMON_4","알림"),i.show(t,()=>{
+ this.buyHero()}
+ ),i.y=480}
+ else this.buyHero()}
+ async buyHero(){
+ if("medal"===this.data.payType){
+ if(ML.medal<this.data.medal)return void u2.getInstance().showMessage(SG.getText("GAME_48","훈장이 부족합니다."))}
+ else if(ML.gem<this.data.gem)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ let t=await rD.getInstance().hero.buyHero(this.data.id);
+ if(0==t.success)return this.setRequestPending(!1),void wG.getInstance().showError(t);
+ ML.setUserInfo(t.body),kF.getInstance().updateAll(),gqt.getInstance().setData();
+ const i=t.body.addedHeroId;
+ if(-1!==i){
+ const t=wx.getInstance().getVOWithId(i);
+ t&&jhi.getInstance().hireHero(t),u2.getInstance().showMessage(SG.getText("GAME_300","슬롯에 추가되었습니다."))}
+ else u2.getInstance().showMessage(SG.getText("GAME_301","[내 영웅]으로 이동했습니다."));
+ this.setRequestPending(!1),wVt.getInstance().getStatus()}
+ setRequestPending(t){
+ this.requestPending=t}
+ setData(t){
+ this.data=t;
+ let i=t;
+ this.icon.setData(i);
+ const s=SG.getText(i.getBookVo().getNameKey(),i.name);
+ this.lblName.text=s,this.lblHp.text=`${
+ VD.displayLargeNumberAsAlphabet(i.maxHp)}
+ `,this.lblAtk.text=`${
+ VD.displayLargeNumberAsAlphabet(i.atkDmg)}
+ `,this.lblDef.text=`${
+ VD.displayLargeNumberAsAlphabet(i.def)}
+ `,this.lblBlock.text=`${
+ i.numBlock}
+ `,i.dmgType==ex.MAGICAL?this.lblAtk.texture=QA.getTexture("UI_Ekkorr","ICON_ATTACK2"):this.lblAtk.texture=QA.getTexture("UI_Ekkorr","UI_SWORD"),"medal"===i.payType?(this.btnHire.lbl.texture=QA.getTexture("UI_Ekkorr","UI_STAR_ICON"),this.btnHire.text=`${
+ i.medal}
+ `):(this.btnHire.lbl.texture=QA.getTexture("UI_Ekkorr","UI_GEM"),this.btnHire.text=`${
+ i.gem}
+ `),this.updateCache()}
+ updateCache(){
+ }
+ clearCache(){
+ }
+ onClick(t,i){
+ t>=this.btnHire.x-10||this.data&&Pqt.getInstance().showInBook(this.data.kindNum,Dqt.shop)}
+ }
+ ;
+ Vt(aqt,"HeroHireItemRenderer");
+ let cqt=aqt;
+ const lqt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"infoBg"),Kt(this,"lblMessage1"),Kt(this,"lblMessage2"),Kt(this,"lblMessage3"),this.title=SG.getText("GAME_258","영웅 영입 지원 이벤트"),this.width=580,this.outSideClickHide=!0,this.infoBg=new TB,this.infoBg.setIndex(2),this.infoBg.width=this.width-46,this.infoBg.x=23,this.contentContainer.addChild(this.infoBg),this.lblMessage1=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage1),this.lblMessage2=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage2),this.lblMessage3=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage3)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ show(){
+ this.updateLayout(),super.show()}
+ updateLayout(){
+ this.title=SG.getText("GAME_546","영입 지원 이벤트");
+ const t=xG.currentHeroResetEvent;
+ if(t){
+ this.lblMessage1.text=SG.getText("GAME_547","유료 갱신 비용 감소")+" : 100 ➜ "+100/t.divide,this.lblMessage2.text=SG.getText("GAME_548","무료 충전 시간 감소 (분)")+" : 60 ➜ "+60/t.divide;
+ const i=(new Date).toISOString().slice(0,10);
+ this.lblMessage3.text=SG.getText("GAME_545","이벤트 기간")+` : ${
+ i}
+  ~ ${
+ i}
+ `}
+ 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}
+ }
+ ;
+ Vt(lqt,"HeroResetEventPopup"),Kt(lqt,"_instance");
+ let uqt=lqt;
+ const dqt=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblTime",new JD("04:00",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblCost",new $B("UI_GEM","100",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnRefresh",new zWt("새로고침",110)),Kt(this,"btnClose",new kKt),Kt(this,"btnMedalBuy",new zWt("훈장구매",110)),Kt(this,"btnResetEvent",new MB("UI_Ekkorr","UI_Question",1)),Kt(this,"cnt",0),Kt(this,"duration",3600),Kt(this,"lastUpdateTime",0),Kt(this,"divide",1),Kt(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=()=>{
+ $qt.getInstance().updateLanguage(),Vqt.getInstance().currentSubView=$qt.getInstance()}
+ ,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()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onResetEventClick(){
+ uqt.getInstance().show()}
+ updateLayout(){
+ this.btnMedalBuy.visible=ML.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}
+ onAdded(){
+ this.lastUpdateTime=wx.getInstance().lastBuyRefreshTime,LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ onFrame(){
+ if(this.cnt-- >0)return;
+ this.cnt=5;
+ let t=this.duration-.001*(tx.time-this.lastUpdateTime);
+ t<=0&&(t=0),this.updateCostLabel(t),this.lblTime.text=wU.displayTimeAsMMSS(t/this.divide),this.updateResetEvent(),this.updateLayout()}
+ updateCostLabel(t){
+ if(t>0)this.lblCost.text=String(100/this.divide),this.lblCost.textColor=cD.DEFAULT_COLOR,this.btnRefresh.hideRedDot();
+ else{
+ this.lblCost.text="FREE",this.lblCost.textColor=cD.COLOR_DEEP_SKYBLUE,this.btnRefresh.showRedDot();
+ const t=5-Math.floor(.5*this.btnRefresh.width),i=-Math.floor(.5*this.btnRefresh.height)-7;
+ this.btnRefresh.updateRedDotPos(t,i)}
+ }
+ async onRefresh(){
+ if(this.duration-.001*(tx.time-this.lastUpdateTime)>0)return b$t.getInstance().show(SG.getValueReplace("GAME_53","##",100/this.divide,"보석 100개를 사용하고, 영웅목록을 새로 갱신하겠습니다.")+"\n("+SG.getValueReplace("GAME_54","##",Math.floor(60/this.divide),"60분마다 무료로 목록을 갱신할 수 있습니다.")+")",()=>this.onRefleshHeroes(!0)),void(b$t.getInstance().y=480);
+ this.onRefleshHeroes(!1)}
+ updateResetEvent(){
+ if(xG.isValidEvent(RG.HERO_RESET_EVENT)){
+ this.btnResetEvent.visible=!0,this.btnRefresh.showEventTag(-2,2);
+ const t=xG.currentHeroResetEvent;
+ t&&(this.divide=t.divide)}
+ else this.divide=1,this.btnResetEvent.visible=!1,this.btnRefresh.hideEventTag()}
+ async onRefleshHeroes(t){
+ let i=await rD.getInstance().hero.refreshBuyableHeroes(t);
+ 0!=i.success?(ML.setUserInfo(i.body),gqt.getInstance().setData(),kF.getInstance().updateAll(),this.lastUpdateTime=wx.getInstance().lastBuyRefreshTime):wG.getInstance().showError(i)}
+ setData(){
+ this.updateLanguage(),this.updateMedalBuyBtn()}
+ updateMedalBuyBtn(){
+ if(this.btnMedalBuy.visible){
+ const t=wx.getInstance().getBuyableKindNumsByMedal();
+ this.btnMedalBuy.activated=t.length>0}
+ }
+ async onMedalBuy(){
+ if(!this.btnMedalBuy.activated)return void u2.getInstance().showMessage(SG.getText("GAME_1201","훈장으로 구매 가능한 영웅이 없습니다."));
+ const t=wx.getInstance().getBuyableTotalMedalsByMedal();
+ if(ML.medal<t)return void u2.getInstance().showMessage(SG.getText("GAME_48","훈장이 부족합니다."));
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ const i=await rD.getInstance().hero.buyHeroAllByMedal();
+ if(!1===i.success)return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ const s=wx.getInstance().getTeamIds(),e=wx.getInstance().getBuyableKindNumsByMedal();
+ ML.setUserInfo(i.body),gqt.getInstance().setData(),kF.getInstance().updateAll(),this.setRequestPending(!1);
+ const n=wx.getInstance().getTeamIds(),h=[];
+ for(let l=s.length;
+ l<n.length;
+ ++l){
+ const t=wx.getInstance().getVOWithId(n[l]);
+ t&&(h.push(SG.getText(t.getBookVo().getNameKey(),t.getBookVo().name)),jhi.getInstance().hireHero(t))}
+ let r="";
+ h.length>0&&(r=SG.getText("GAME_1199","슬롯")+" : "+h.join(", "));
+ const o=[];
+ for(let l=n.length-s.length;
+ l<e.length;
+ ++l){
+ const t=wx.getInstance().getBookVO(e[l]);
+ t&&o.push(SG.getText(t.getNameKey(),t.name))}
+ let a="";
+ o.length>0&&(a=SG.getText("GAME_65","병영")+" : "+o.join(", "));
+ let c=SG.getText("GAME_1198","획득한 영웅이 슬롯 또는 병영에 추가되었습니다.");
+ r&&(c+="\n - "+r),a&&(c+="\n - "+a),u2.getInstance().showMessage(c)}
+ setRequestPending(t){
+ this.requestPending=t}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_13","영웅 고용")),this.btnRefresh.text=SG.getText("COMMON_60","새로고침"),this.btnMedalBuy.text=SG.getText("GAME_1197","훈장구매"),this.updateLayout()}
+ }
+ ;
+ Vt(dqt,"HeroHireSubMenu"),Kt(dqt,"instance");
+ let fqt=dqt;
+ const pqt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"unitVOList",[]),this.list=new d5(cqt,630,VA.listHeight),this.list.x=5,this.list.y=fqt.getInstance().height;
+ for(let t=0;
+ t<5;
+ t++){
+ let t=bx.getVO();
+ t.kindNum=Math.floor(4*Math.random()+1),t.level=1,t.enhance=0,t.trans=0,this.unitVOList.push(t)}
+ this.addChild(this.list),this.addChild(fqt.getInstance()),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ }
+ setData(){
+ fqt.getInstance().setData();
+ let t=[],i=wx.getInstance().buyableUnitList.length;
+ for(let e=0;
+ e<5;
+ e++){
+ let s=this.unitVOList[e];
+ if(e<i){
+ let i=wx.getInstance().buyableUnitList[e];
+ if(s.kindNum=i.kindNum,s.id=i.id,s.payType=i.payType,s.gem=i.gem,s.medal=i.medal,-1==s.id)continue;
+ t.push(s)}
+ }
+ t.sort((t,i)=>t.grade-i.grade);
+ const s=this.list.getDataLen();
+ if(this.list.dataProvider=t,s>t.length){
+ const t=Math.floor(Math.abs(this.list.getContainerY())/80+1);
+ this.list.scrollTo(t)}
+ }
+ get className(){
+ return"HeroHireSubView"}
+ updateLanguage(){
+ this.setData(),fqt.getInstance().updateLanguage()}
+ }
+ ;
+ Vt(pqt,"HeroHireSubView"),Kt(pqt,"instance");
+ let gqt=pqt;
+ const mqt=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"lblMaxCapacity",new $B("menu_icon_03_on","0/10",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnHire",new zWt("고용",110)),Kt(this,"btnRoaster",new zWt("내영웅",110)),Kt(this,"btnMultiLevel",new gzt("+",40)),Kt(this,"btnPreset",new zWt("프리셋",90)),Kt(this,"btnGuide"),Kt(this,"btnSlotAdd"),Kt(this,"cnt",0),Kt(this,"requestPending",!1),Kt(this,"btnRosterPoint",new gi),Kt(this,"btnRosterlPointInitialized",!1),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnHire.width=110,this.btnHire.height=45,this.btnHire.y=.5*(this.bg.height-this.btnHire.height),this.addChild(this.btnHire),this.btnRoaster.width=110,this.btnRoaster.height=45,this.btnRoaster.y=.5*(this.bg.height-this.btnRoaster.height),this.addChild(this.btnRoaster),this.btnMultiLevel.height=42,this.btnMultiLevel.width=50,this.btnMultiLevel.y=.5*(this.bg.height-this.btnMultiLevel.height),this.addChild(this.btnMultiLevel),this.btnPreset.width=90,this.btnPreset.height=45,this.btnPreset.y=.5*(this.bg.height-this.btnPreset.height),this.addChild(this.btnPreset),this.btnHire.on("pointertap",this.onHire,this),this.btnRoaster.on("pointertap",this.onRoaster,this),this.btnMultiLevel.on("pointertap",this.onMultiLevelPopup,this),this.btnPreset.on("pointertap",this.onPresetToggle,this),this.btnSlotAdd=new MB("UI_Ekkorr","Btn_Plus"),this.btnSlotAdd.y=this.lblMaxCapacity.y+.5*(this.lblMaxCapacity.height-this.btnSlotAdd.height),this.addChild(this.btnSlotAdd),this.btnSlotAdd.onClick=this.onSlotAddBtnClick.bind(this),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ Zzt.getInstance().showGuide()}
+ ),Tei.getInstance().registerSubMenuButtonGetter(t=>"btnSlotAdd"===t&&this.btnSlotAdd.visible?{
+ parent:this,btn:{
+ x:this.btnSlotAdd.x,y:this.btnSlotAdd.y,width:this.btnSlotAdd.width,height:this.btnSlotAdd.height}
+ }
+ :null),this.updateLanguage(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ onFrame(){
+ this.cnt-- >0||(this.cnt=30,this.updateResetEvent())}
+ updateLayout(){
+ this.btnPreset.visible=ML.maxWave>=300,this.btnHire.x=640-this.btnHire.width-6,this.btnRoaster.x=this.btnHire.x-this.btnRoaster.width-2,this.btnPreset.visible?(this.btnPreset.x=this.btnRoaster.x-this.btnPreset.width-2,this.btnMultiLevel.x=this.btnPreset.x-this.btnMultiLevel.width-4):this.btnMultiLevel.x=this.btnRoaster.x-this.btnMultiLevel.width-4,ML.maxWave<50?this.btnMultiLevel.visible=!1:this.btnMultiLevel.visible=!0,this.btnSlotAdd.x=this.lblMaxCapacity.x+this.lblMaxCapacity.width+5,this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3}
+ onMultiLevelPopup(){
+ eqt.getInstance().show()}
+ onPresetToggle(){
+ $qt.getInstance().togglePresetBar()}
+ update(){
+ const t=ML.maxTeamSlots,i=wx.getInstance().list.length;
+ this.lblMaxCapacity.text=`${
+ i}
+ /${
+ t}
+ `,this.btnSlotAdd.visible=t<10}
+ onHire(){
+ gqt.getInstance().setData(),Vqt.getInstance().currentSubView=gqt.getInstance()}
+ onRoaster(){
+ yqt.getInstance().setData(),Vqt.getInstance().currentSubView=yqt.getInstance(),Yqt.getInstance().isRunning&&Yqt.getInstance().tutorialIndex==Yqt.TUTORIAL_INDEX_WAVE0&&Yqt.getInstance().highlightHeroHireButton()}
+ async onSlotAddBtnClick(){
+ const t=AL.getInstance().getClientData("HERO_SLOT_EXPAND_SLOTS"),i=AL.getInstance().getClientData("HERO_SLOT_EXPAND_WAVES"),s=AL.getInstance().getClientData("HERO_SLOT_EXPAND_GEMS");
+ let e=500;
+ if(t&&i&&s){
+ const n=t.split("|").map(Number),h=i.split("|").map(Number),r=s.split("|").map(Number),o=n.findIndex(t=>t>ML.maxTeamSlots);
+ if(o>=0){
+ if(e=r[o],ML.maxWave<h[o])return void u2.getInstance().showMessage(SG.getValueReplace("GAME_211","##",h[o],`웨이브 ${
+ h[o]}
+  이상 환생해야 확장이 가능합니다.`));
+ if(ML.gem<r[o])return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."))}
+ }
+ else if(ML.gem<e)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ oqt.getInstance().showConfirm(e,()=>{
+ this.executeExpandSlot()}
+ )}
+ async executeExpandSlot(){
+ if(this.requestPending)return;
+ this.setRequestPending(!0);
+ let t=await rD.getInstance().hero.expandSlot();
+ if(0==t.success)return this.setRequestPending(!1),void wG.getInstance().showError(t);
+ ML.setUserInfo(t.body),kF.getInstance().updateGem(),$qt.getInstance().setData(),this.setRequestPending(!1),wVt.getInstance().getStatus()}
+ setRequestPending(t){
+ this.requestPending=t}
+ updateResetEvent(){
+ xG.isValidEvent(RG.HERO_RESET_EVENT)?this.btnHire.showEventTag(-2,2):this.btnHire.hideEventTag()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_3","영웅")),this.btnHire.text=SG.getText("GAME_311","영입"),this.btnRoaster.text=SG.getText("GAME_65","내영웅"),this.btnPreset.text=SG.getText("GAME_742","프리셋"),this.updateLayout()}
+ getBtnRosterPoint(){
+ if(0==this.btnRosterlPointInitialized){
+ this.btnRosterlPointInitialized=!0;
+ const t=this.btnRoaster;
+ this.btnRosterPoint.x=Zqt.getInstance().x+t.x,this.btnRosterPoint.y=Zqt.getInstance().y+40+t.y}
+ return this.btnRosterPoint}
+ showHireBtnRedDot(){
+ this.btnHire.showRedDot();
+ const t=5-Math.floor(.5*this.btnRoaster.width),i=-Math.floor(.5*this.btnRoaster.height)-7;
+ this.btnHire.updateRedDotPos(t,i)}
+ hideHireBtnRedDot(){
+ this.btnHire.hideRedDot()}
+ }
+ ;
+ Vt(mqt,"HeroSubMenu"),Kt(mqt,"instance");
+ let wqt=mqt;
+ const vqt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"btnHire",new zWt("고용",120)),Kt(this,"icons",[]),Kt(this,"vos",[]),Kt(this,"mainContainer",new Ge),Kt(this,"costList",[300,600,900,1200,1500]),Kt(this,"posList",[0,1,2,3,4]),Kt(this,"selectedIndex",-1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=74,this.mainContainer.addChild(this.bg);
+ let t=2;
+ for(let i=0;
+ i<5;
+ i++){
+ const s=new Y2;
+ s.setMode(z2.ROSTER),s.scale=.85,s.x=t,s.y=.5*(this.bg.height-s.height),this.mainContainer.addChildAt(s,1),this.icons.push(s),this.vos.push(bx.getVO()),t+=s.width-10,this.posList[i]=t}
+ this.btnHire.text=SG.getText("GAME_64","배치"),this.btnHire.height=60,this.btnHire.x=this.bg.width-this.btnHire.width-5,this.btnHire.y=.5*(this.bg.height-this.btnHire.height)-3,this.mainContainer.addChild(this.btnHire),this.btnHire.on("pointertap",this.onHire,this),this.addChild(this.mainContainer)}
+ setHireEnabled(t){
+ this.btnHire.activated=t}
+ static refreshAllHireButtons(){
+ const i=yqt.getInstance().getItems(),s=!t.isHiring;
+ for(const t of i)t.setHireEnabled(s)}
+ async onHire(i){
+ if(t.isHiring)return;
+ let s=-1;
+ for(let t=this.icons.length-1;
+ t>=0;
+ t--)if(this.icons[t].active){
+ s=t;
+ break}
+ if(-1===s)return void u2.getInstance().showMessage(SG.getText("GAME_49","보유한 영웅이 없습니다."));
+ this.selectedIndex=s;
+ const e=this.getHireKindnumAndTrans(this.selectedIndex),n=e.hireKindNum,h=e.hireTrans;
+ e.baseKindNum;
+ const r=wx.getInstance();
+ if(0!==n)if(r.list.length>=ML.maxTeamSlots)ML.maxTeamSlots<10?u2.getInstance().showMessage(SG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+SG.getText("GAME_51","슬롯을 추가로 확장해주세요.")):u2.getInstance().showMessage(SG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+SG.getValueReplace("GAME_52","##",10,"최대 10명까지 배치할 수 있습니다."));
+ else{
+ t.isHiring=!0,t.refreshAllHireButtons();
+ try{
+ const t=await rD.getInstance().hero.addToTeam(n,h,!0);
+ if(0==t.success)return void wG.getInstance().showError(t);
+ ML.setUserInfo(t.body),kF.getInstance().updateAll(),yqt.getInstance().setData(),wqt.getInstance().update();
+ const i=t.body.addedHeroId,s=r.getVOWithId(i);
+ s&&jhi.getInstance().hireHero(s),$qt.getInstance().setData()}
+ finally{
+ t.isHiring=!1,t.refreshAllHireButtons()}
+ Yqt.getInstance().isRunning&&Yqt.getInstance().tutorialIndex==Yqt.TUTORIAL_INDEX_WAVE0&&Yqt.getInstance().highlightHeroHireButton()}
+ else u2.getInstance().showMessage(SG.getText("GAME_49","보유한 영웅이 없습니다."))}
+ getHireKindnumAndTrans(t){
+ var i;
+ const s=this.data,e=wx.getInstance(),n=e.getBookVO(s),h=(null==n?void 0:n.evolKindNum)??0,r=(null==(i=e.getOwnedUnitVO(s))?void 0:i.count)??0,o=e.getOwnedUnitVO(h),a=(null==o?void 0:o.count)??0;
+ let c=0,l=0;
+ if(0===t)r>0&&(c=s,l=0);
+ else if(1===t)a>0&&(c=h,l=0);
+ else{
+ const i=t-2;
+ ((null==o?void 0:o.trans[i])??0)>0&&(c=h,l=i+1)}
+ return 0===c&&r>0&&(c=s,l=0),{
+ hireKindNum:c,hireTrans:l,baseKindNum:s}
+ }
+ setData(i){
+ this.data=i;
+ const s=i,e=wx.getInstance(),n=e.getBookVO(s),h=(null==n?void 0:n.evolKindNum)??0,r=e.getOwnedUnitVO(s),o=h>0?e.getOwnedUnitVO(h):void 0,a=(null==r?void 0:r.count)??0,c=(null==o?void 0:o.count)??0;
+ if(this.vos[0].kindNum=s,this.icons[0].setData(this.vos[0]),this.icons[0].setNumber(a),this.icons[0].active=a>0,h>0){
+ this.vos[1].kindNum=h,this.vos[1].trans=0,this.icons[1].setData(this.vos[1]),this.icons[1].setNumber(c),this.icons[1].active=c>0;
+ for(let t=0;
+ t<3;
+ t++){
+ this.vos[2+t].kindNum=h,this.vos[2+t].trans=t+1,this.icons[2+t].setData(this.vos[2+t]);
+ const i=(null==o?void 0:o.trans[t])??0;
+ this.icons[2+t].setNumber(i),this.icons[2+t].active=i>0}
+ }
+ else for(let t=1;
+ t<5;
+ t++)this.icons[t].active=!1;
+ if(0===this.selectedIndex&&0===a)this.selectedIndex=-1;
+ else if(1===this.selectedIndex&&0===c)this.selectedIndex=-1;
+ else if(this.selectedIndex>=2&&this.selectedIndex<=4){
+ const t=this.selectedIndex-2;
+ 0===((null==o?void 0:o.trans[t])??0)&&(this.selectedIndex=-1)}
+ -1==this.selectedIndex&&Xzt.getInstance().parent&&this.removeChild(Xzt.getInstance()),this.btnHire.text=SG.getText("GAME_64","배치"),this.btnHire.x=this.bg.width-this.btnHire.width-5,this.btnHire.activated=!t.isHiring,this.updateCache()}
+ updateCache(){
+ }
+ clearCache(){
+ }
+ get height(){
+ return this.bg.height+3}
+ onClick(t,i){
+ for(let s=0;
+ s<this.posList.length;
+ s++)if(this.posList[s]>t&&this.icons[s].active){
+ const t=this.getHireKindnumAndTrans(s);
+ return void Pqt.getInstance().showInRoster(t.hireKindNum,t.hireTrans)}
+ }
+ reset(){
+ this.selectedIndex=-1}
+ onLongClick(t,i){
+ for(let s=0;
+ s<this.posList.length;
+ s++)if(this.posList[s]>t&&this.icons[s].active){
+ const t=this.getHireKindnumAndTrans(s);
+ Pqt.getInstance().showInRoster(t.hireKindNum,t.hireTrans);
+ break}
+ }
+ }
+ ;
+ Vt(vqt,"HeroRosterItemRenderer"),Kt(vqt,"isHiring",!1);
+ let bqt=vqt;
+ const _qt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"emptyLabel"),Kt(this,"btnHirePoint",new gi),Kt(this,"btnHirelPointInitialized",!1),this.list=new d5(bqt,630,VA.listHeight),this.list.x=5,this.list.y=zqt.getInstance().height,this.emptyLabel=new JD(SG.getText("GAME_337","병영에 대기중인 영웅이 없습니다."),10066329,cD.MENU_LABEL_OPTION),this.emptyLabel.x=320-this.emptyLabel.width/2,this.emptyLabel.y=this.list.y+80,this.emptyLabel.visible=!1,this.addChild(this.list),this.addChild(this.emptyLabel),this.addChild(zqt.getInstance()),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ onRemoved(){
+ zqt.getInstance().resetFilter()}
+ get className(){
+ return"HeroRosterView"}
+ getItems(){
+ return this.list.getItemList()}
+ setData(){
+ zqt.getInstance().setData(),this.updateList()}
+ updateList(){
+ const t=zqt.getInstance().selectedTribes,i=wx.getInstance(),s=new Set;
+ for(const r of i.ownedUnitList){
+ const e=i.getBookVO(r.kindNum);
+ e&&0!=t.includes(e.tribe)&&e.base>0&&s.add(e.base)}
+ const e=wx.getInstance(),n=Array.from(s).sort((t,i)=>{
+ const s=e.getBookVO(t),n=e.getBookVO(i);
+ return s&&n?s.tribe!=n.tribe?s.tribe-n.tribe:n.grade-s.grade:1}
+ ),h=this.list.getDataLen();
+ if(this.list.dataProvider=n,this.emptyLabel.visible=0===n.length,h>this.list.getDataLen()){
+ const t=Math.floor(Math.abs(this.list.getContainerY())/74);
+ this.list.scrollTo(t)}
+ }
+ onFilterChanged(){
+ const t=this.list.getItemList(),i=t.length;
+ for(let s=0;
+ s<i;
+ ++s)t[s].reset();
+ this.updateList()}
+ updateLanguage(){
+ this.emptyLabel.text=SG.getText("GAME_337","병영에 대기중인 영웅이 없습니다."),this.emptyLabel.x=320-this.emptyLabel.width/2,this.setData()}
+ getBtnHirePoint(){
+ if(0==this.btnHirelPointInitialized){
+ this.btnHirelPointInitialized=!0;
+ const t=this.getItems()[0].btnHire;
+ this.btnHirePoint.x=Zqt.getInstance().x+this.list.x+t.x,this.btnHirePoint.y=Zqt.getInstance().y+40+this.list.y+t.y}
+ return this.btnHirePoint}
+ }
+ ;
+ Vt(_qt,"HeroRosterView"),Kt(_qt,"instance");
+ let yqt=_qt;
+ const Mqt={
+ 1:200,2:300,3:500,4:1e3,5:2e3}
+ ,Eqt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"onEvolved",null),Kt(this,"lblQuestion",new JD("보석을 사용하여 진화하시겠습니까?",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblHeaderCurrent",new JD("현재",11184810,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHeaderArrow",new JD("→",16777215,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHeaderEvolved",new JD("진화 후",16768324,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHpCurrent",new $B("UI_HEART","0",11184810,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHpArrow",new JD("→",16777215,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblHpEvolved",new $B("UI_HEART","0",8978312,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblAtkCurrent",new $B("UI_SWORD","0",11184810,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblAtkArrow",new JD("→",16777215,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblAtkEvolved",new $B("UI_SWORD","0",8978312,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblDefCurrent",new $B("UI_PHY_DEFENSE","0",11184810,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblDefArrow",new JD("→",16777215,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblDefEvolved",new $B("UI_PHY_DEFENSE","0",8978312,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblTribeTitle",new JD("# 종족 특성",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblTribeDesc",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblUniqueTitle",new JD("# 고유스킬",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblUniqueDesc",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"btnCancel",new kU("UI_CLOSE_BTN","","취소",.7,160,70)),Kt(this,"btnConfirm",new kU("UI_GEM","200","진화",.8,200,70)),Kt(this,"vo"),Kt(this,"isBusy",!1),Kt(this,"isRosterMode",!1),Kt(this,"count",1),Kt(this,"particleContainer",new Ge),Kt(this,"particleList",[]),Kt(this,"particleFrame",0),Kt(this,"PARTICLE_DURATION",55),this.title=SG.getText("GAME_145","진화 확인"),this.lblQuestion.text=SG.getText("GAME_142","보석을 사용하여 진화하시겠습니까?"),this.lblQuestion.y=95,this.contentContainer.addChild(this.lblQuestion),this.lblHeaderCurrent.text=SG.getText("GAME_152","현재"),this.lblHeaderEvolved.text=SG.getText("GAME_153","진화 후"),this.contentContainer.addChild(this.lblHeaderCurrent,this.lblHeaderArrow,this.lblHeaderEvolved),this.contentContainer.addChild(this.lblHpCurrent,this.lblHpArrow,this.lblHpEvolved),this.contentContainer.addChild(this.lblAtkCurrent,this.lblAtkArrow,this.lblAtkEvolved),this.contentContainer.addChild(this.lblDefCurrent,this.lblDefArrow,this.lblDefEvolved),cD.setLabelWrapWidth(this.lblTribeDesc,430),cD.setLabelWrapWidth(this.lblUniqueDesc,430),this.contentContainer.addChild(this.lblTribeTitle,this.lblTribeDesc,this.lblUniqueTitle,this.lblUniqueDesc),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.btnCancel.color=kU.RED,this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.onClick=()=>this.hide(),this.btnConfirm.text=SG.getText("GAME_67","진화"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.showIconLabel=!0,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=()=>this.onConfirmClick(),this.contentContainer.addChild(this.btnCancel,this.btnConfirm),this.addChild(this.particleContainer),this.updateLayout()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ updateLayout(){
+ const t=.5*this.width,i=120,s=250,e=340;
+ this.lblQuestion.x=t-.5*this.lblQuestion.width;
+ let n=this.lblQuestion.y+this.lblQuestion.height+20;
+ this.lblHeaderCurrent.x=i,this.lblHeaderArrow.x=s,this.lblHeaderEvolved.x=e,this.lblHeaderCurrent.y=this.lblHeaderArrow.y=this.lblHeaderEvolved.y=n,n+=32,this.lblHpCurrent.x=i,this.lblHpArrow.x=s,this.lblHpEvolved.x=e,this.lblHpCurrent.y=this.lblHpArrow.y=this.lblHpEvolved.y=n,n+=32,this.lblAtkCurrent.x=i,this.lblAtkArrow.x=s,this.lblAtkEvolved.x=e,this.lblAtkCurrent.y=this.lblAtkArrow.y=this.lblAtkEvolved.y=n,n+=32,this.lblDefCurrent.x=i,this.lblDefArrow.x=s,this.lblDefEvolved.x=e,this.lblDefCurrent.y=this.lblDefArrow.y=this.lblDefEvolved.y=n,n+=57,this.lblTribeTitle.x=65,this.lblTribeTitle.y=n,n+=this.lblTribeTitle.height+2,this.lblTribeDesc.x=65,this.lblTribeDesc.y=n,n+=this.lblTribeDesc.height+15,this.lblUniqueTitle.x=65,this.lblUniqueTitle.y=n,n+=this.lblUniqueTitle.height+2,this.lblUniqueDesc.x=65,this.lblUniqueDesc.y=n,n+=this.lblUniqueDesc.height+25;
+ const h=this.btnCancel.width+16+this.btnConfirm.width;
+ this.btnCancel.x=t-.5*h,this.btnCancel.y=n,this.btnConfirm.x=this.btnCancel.x+this.btnCancel.width+16,this.btnConfirm.y=n,this.height=n+this.btnConfirm.height+50}
+ setData(t,i=!1,s=1){
+ this.vo=t,this.isBusy=!1,this.isRosterMode=i,this.isRosterMode?this.count=s:this.count=1,this.title=SG.getText("GAME_145","진화 확인"),this.lblQuestion.text=SG.getText("GAME_142","보석을 사용하여 진화하시겠습니까?"),this.lblHeaderCurrent.text=SG.getText("GAME_152","현재"),this.lblHeaderEvolved.text=SG.getText("GAME_153","진화 후"),this.lblTribeTitle.text=`# ${
+ SG.getText("GAME_28","종족 특성")}
+ `,this.lblTribeDesc.text=this.getTribeTraitText(this.vo.tribe),this.lblUniqueTitle.text=`# ${
+ SG.getText("GAME_72","고유스킬")}
+ `;
+ const e=wx.getInstance().getBookVO(this.vo.evolKindNum),n=e?kx.getInstance().getByKindNum(e.uniqueSkill):null;
+ this.lblUniqueDesc.text=n?SG.getText(n.getDescKey(),n.desc):SG.getText("COMMON_367","없음"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.count>1?(this.btnConfirm.activatedTextLabelColor=13434624,this.btnConfirm.text=`${
+ SG.getText("GAME_67","진화")}
+  (x${
+ this.count}
+ )`):(this.btnConfirm.activatedTextLabelColor=-1,this.btnConfirm.text=SG.getText("GAME_67","진화")),this.updateStats(),this.updateCost(),this.updateLayout(),super.show()}
+ updateStats(){
+ const t=wx.getInstance().getBookVO(this.vo.kindNum),i=wx.getInstance().getBookVO(this.vo.evolKindNum);
+ if(!t||!i)return;
+ const s=QA.getTexture("UI_Ekkorr",this.vo.dmgType===ex.MAGICAL?"ICON_ATTACK2":"UI_SWORD"),e=QA.getTexture("UI_Ekkorr",this.vo.phyDef>this.vo.magDef?"UI_PHY_DEFENSE":"UI_MAGIC_DEFENSE");
+ this.lblAtkCurrent.texture=s,this.lblAtkEvolved.texture=s,this.lblDefCurrent.texture=e,this.lblDefEvolved.texture=e;
+ const n=Vt(t=>VD.displayLargeNumberAsAlphabet(t),"fmt"),h=Vt((t,i)=>t>0?` (+${
+ Math.round((i-t)/t*100)}
+ %)`:"","pct");
+ this.lblHpCurrent.text=n(t.hp),this.lblHpEvolved.text=`${
+ n(i.hp)}
+ ${
+ h(t.hp,i.hp)}
+ `,this.lblAtkCurrent.text=n(t.atkDmg),this.lblAtkEvolved.text=`${
+ n(i.atkDmg)}
+ ${
+ h(t.atkDmg,i.atkDmg)}
+ `,this.lblDefCurrent.text=n(t.def),this.lblDefEvolved.text=`${
+ n(i.def)}
+ ${
+ h(t.def,i.def)}
+ `}
+ getTribeTraitText(t){
+ switch(t){
+ case 1:return SG.getText("GAME_286","넉백 면역 (뒤로 밀리지 않습니다.)");
+ case 2:return SG.getText("GAME_287","블로우 면역 (날려보내는 공격을 받아도 날아가지 않습니다.)");
+ case 3:return SG.getText("GAME_288","냉기 면역 (얼려지지 않습니다.)");
+ case 4:return SG.getText("GAME_289","기절 면역 (기절하지 않습니다.)");
+ default:return""}
+ }
+ updateCost(){
+ this.btnConfirm.iconText=String(this.getCost())}
+ getCost(){
+ const t=Mqt[this.vo.grade]??0;
+ return this.count*t}
+ async onConfirmClick(){
+ if(this.isBusy)return;
+ const t=this.getCost();
+ if(ML.gem<t)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ if(!this.vo.evolKindNum)return void u2.getInstance().showMessage(SG.getText("GAME_141","이미 최대 진화 단계입니다."));
+ this.isBusy=!0;
+ const i=this.vo.kindNum,s=this.vo.evolKindNum;
+ let e;
+ if(e=this.isRosterMode?await rD.getInstance().hero.evolveOwned(`${
+ this.vo.kindNum}
+ -${
+ this.count}
+ `,!0):await rD.getInstance().hero.evolve(this.vo.id),!e||!1===e.success)return u2.getInstance().showMessage(SG.getText("COMMON_77","네트워크 오류가 발생하였습니다.")),void(this.isBusy=!1);
+ if(ML.setUserInfo(e.body),kF.getInstance().updateAll(),$qt.getInstance().setData(),!this.isRosterMode){
+ const t=wx.getInstance().getVOWithId(this.vo.id);
+ t&&jhi.getInstance().udpateHero(t)}
+ u2.getInstance().showMessage(SG.getText("GAME_144","진화 성공!")),this.hide(),this.onEvolved&&(this.onEvolved(),this.onEvolved=null),cS.getInstance().dispatchCustomEvent("HeroEvolve",{
+ id:this.isRosterMode?0:this.vo.id,kindNum:i,evolKindNum:s}
+ )}
+ }
+ ;
+ Vt(Eqt,"EvolveConfirmPopup"),Kt(Eqt,"instance");
+ let Aqt=Eqt;
+ const Sqt=class extends qO{
+ constructor(){
+ let t;
+ super(),Kt(this,"bg"),Kt(this,"icons"),Kt(this,"labels"),Kt(this,"posList",[0,1,2,3,4,5,640]),Kt(this,"kindNumArray",[]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=75,this.bg.visible=!1,this.addChild(this.bg),this.icons=[],this.labels=[];
+ for(let i=0;
+ i<6;
+ ++i)t=new Y2,t.scale=.81,t.x=7+i*(t.width+1),t.y=8,this.addChild(t),this.icons.push(t),this.posList[i]=t.x;
+ this.posList.push(640)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ const i=t;
+ if(!i)return;
+ let s;
+ this.kindNumArray=i;
+ const e=i.length;
+ for(let n=0;
+ n<this.icons.length;
+ ++n)s=this.icons[n],n<e?(s.setDataWithKindNum(i[n]),s.visible=!0):s.visible=!1}
+ onClick(t,i){
+ this.kindNumArray.length;
+ let s=-1;
+ for(let e=0;
+ e<this.icons.length;
+ ++e)if(t>this.posList[e]&&t<this.posList[e+1]){
+ s=e;
+ break}
+ -1!=s&&s<this.kindNumArray.length&&this.icons[s].visible&&this.goDetail(this.kindNumArray[s])}
+ goDetail(t){
+ Iqt.getInstance().hide(),Pqt.getInstance().showInBook(t)}
+ }
+ ;
+ Vt(Sqt,"HeroBookItemRenderer");
+ let Tqt=Sqt;
+ const Cqt=class t extends bzt{
+ constructor(){
+ let t;
+ super(),Kt(this,"lblTitle"),Kt(this,"filterIcons"),Kt(this,"list"),Kt(this,"_selectedTribes",[1,2,3,4]),this.lblTitle=new JD(SG.getText("GAME_220","도감"),16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20),this.addChild(this.lblTitle),this.filterIcons=[];
+ for(let s=0;
+ s<4;
+ ++s)t=new czt(s),t.scale=.8,this.addChild(t),this.filterIcons.push(t),t.onClick=this.onFilterIconClick.bind(this);
+ const i=Math.min(VA.safeHeight-750,VA.viewMainY);
+ this.list=new d5(Tqt,630,VA.getBookListHeight(i)),this.addChild(this.list),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get className(){
+ return"HeroBookPopup"}
+ updateLayout(){
+ let t=kF.getInstance().height;
+ t+=.5*this.filterIcons[0].height+5;
+ let i,s=this.bg.width+.5*this.filterIcons[0].width-10;
+ for(let e=this.filterIcons.length-1;
+ e>-1;
+ --e)i=this.filterIcons[e],i.x=s-i.width-1,i.y=t,s=i.x;
+ i=this.filterIcons[0],this.lblTitle.x=10,this.lblTitle.y=Math.floor(i.y-.5*this.lblTitle.height),this.list.x=5,this.list.y=Math.floor(t+.5*this.filterIcons[0].height+5),this.list.setListHeight(this.bg.height-this.list.y-15)}
+ setData(){
+ this.lblTitle.text=SG.getText("GAME_220","도감"),this._selectedTribes=[1,2,3,4];
+ const t=this._selectedTribes.length;
+ for(let i=0;
+ i<t;
+ ++i)this.filterIcons[i].reset();
+ this.updateList(),this.updateLayout()}
+ updateList(){
+ const t=wx.getInstance();
+ let i,s=[];
+ const e=t.bookList.length;
+ for(let h=0;
+ h<e;
+ ++h)i=t.bookList[h],i.kindNum>1e3||i.tribe>4||0!=this._selectedTribes.includes(i.tribe)&&s.push(i.kindNum);
+ s.sort((i,s)=>{
+ const e=t.getBookVO(i),n=t.getBookVO(s);
+ return e&&n?e.tribe!=n.tribe?e.tribe-n.tribe:e.base!=n.base?n.base-e.base:n.grade-e.grade:1}
+ );
+ const n=this.list.getDataLen();
+ if(this.list.dataProvider=QO.chunkArray(s,6),n>this.list.getDataLen()){
+ const t=Math.floor(Math.abs(this.list.getContainerY())/80);
+ this.list.scrollTo(t)}
+ }
+ onFilterIconClick(t,i){
+ this._selectedTribes.length=0;
+ const s=this.filterIcons.length;
+ for(let e=0;
+ e<s;
+ ++e)this.filterIcons[e].selected&&this._selectedTribes.push(e+1);
+ this.updateList()}
+ }
+ ;
+ Vt(Cqt,"HeroBookPopup"),Kt(Cqt,"_instance");
+ let Iqt=Cqt;
+ const kqt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_17)),Kt(this,"materialContainer",new Ge),Kt(this,"materialIcons",[]),Kt(this,"materialCountLabels",[]),Kt(this,"materialCostLabels",[]),Kt(this,"btnCancel",new kU("UI_CLOSE_BTN","","취소",.7,160,70)),Kt(this,"btnTrans",new kU("PVP_COIN_ON","100","초월",1,200,70)),Kt(this,"count",1),Kt(this,"matCounts",[]),Kt(this,"preEvolKindNums",[]),Kt(this,"preEvolCounts",[]),Kt(this,"totalCost",0),Kt(this,"requestPending",!1),Kt(this,"onEvolved",null),this.width=600,this.lblMessage.y=90,cD.setLabelWrapWidth(this.lblMessage,this.width-60);
+ for(let t=0;
+ t<5;
+ t++){
+ const t=new Y2;
+ t.setMode(z2.BOOK),t.scale.set(.8),this.materialIcons.push(t);
+ const i=new JD("0/1",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ this.materialCountLabels.push(i);
+ const s=new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18);
+ this.materialCostLabels.push(s)}
+ this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.showIconLabel=!0,this.btnTrans.showTextLabel=!0,this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=this.onTransClick.bind(this),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.btnCancel.color=kU.RED,this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.onClick=()=>this.hide(),this.contentContainer.addChild(this.lblMessage,this.materialContainer,this.btnCancel,this.btnTrans),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.materialContainer.x=.5*(this.width-this.materialContainer.width),this.materialContainer.y=this.lblMessage.y+this.lblMessage.height+30;
+ const t=this.btnCancel.width+16+this.btnTrans.width,i=this.materialContainer.y+this.materialContainer.height+30;
+ this.btnCancel.x=.5*(this.width-t),this.btnCancel.y=i,this.btnTrans.x=this.btnCancel.x+this.btnCancel.width+16,this.btnTrans.y=i,this.height=i+this.btnTrans.height+50}
+ setData(t,i,s,e){
+ this.lblMessage.text=SG.getText("GAME_1237","재료 영웅을 진화시켜 초월 재료로 바로 사용할 수 있습니다.")+"\n"+SG.getText("GAME_1238","영웅을 진화한 후에 초월하시겠습니까?"),this.count=s,this.matCounts=[...t],this.preEvolKindNums.length=0,this.preEvolCounts.length=0,this.materialContainer.removeChildren(),this.totalCost=0;
+ const n=wx.getInstance();
+ let h=0;
+ const r=this.materialIcons.length;
+ for(let a=0;
+ a<r;
+ ++a){
+ const t=i[a],s=n.getBookVO(t);
+ if(!t||t<1||!s)continue;
+ const e=this.materialIcons[h];
+ e.setDataWithKindNum(t);
+ const r=this.count-this.matCounts[a],o=n.getOwnedUnitCount(t,0),c=this.materialCountLabels[h];
+ c.text=`${
+ o}
+ /${
+ r}
+ `,this.preEvolKindNums.push(t),this.preEvolCounts.push(o);
+ const l=Mqt[s.grade]??0,u=this.materialCostLabels[h],d=l*r;
+ u.text=`${
+ d}
+ `,this.totalCost+=d,e.x=113*h,e.y=0,c.x=e.x+.5*(80-c.width)+5,c.y=70,u.x=c.x+.5*(c.width-u.width)-5,u.y=c.y+c.height,this.materialContainer.addChild(e),this.materialContainer.addChild(c),this.materialContainer.addChild(u),h++}
+ const o=wx.getTransHonorCoinCost(e);
+ this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.iconText=String(o*s),this.updateLayout()}
+ async onTransClick(){
+ if(ML.gem<this.totalCost)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."),300);
+ if(this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=[];
+ for(let s=0;
+ s<this.preEvolKindNums.length;
+ ++s)t.push(`${
+ this.preEvolKindNums[s]}
+ -${
+ this.count-this.matCounts[s]}
+ `);
+ const i=await rD.getInstance().hero.evolveOwned(t.join("|"),!0);
+ if(!1===i.success)return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),kF.getInstance().updateAll(),this.setRequestPending(!1),this.hide(),this.onEvolved&&(this.onEvolved(),this.onEvolved=null)}
+ setRequestPending(t){
+ this.requestPending=t}
+ }
+ ;
+ Vt(kqt,"HeroTransMatMultiEvolvePopup"),Kt(kqt,"_instance");
+ let Oqt=kqt;
+ const xqt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","Icon_Skill_AU"))),Kt(this,"targetIcon",new He(QA.getTexture("UI_Ekkorr","Icon_All"))),Kt(this,"lblSkillLv",new JD("",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblSkillDesc",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblValue",new JD("",65280,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblValuePlus",new JD("",cD.COLOR_WHITE,cD.WHITE_OUTLINE_FONT_OPTION_16)),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=615,this.bg.height=70,this.addChild(this.bg),this.icon.x=5,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.targetIcon.x=this.icon.x+2,this.targetIcon.y=this.icon.y+2,this.addChild(this.targetIcon),this.targetIcon.visible=!1,this.addChild(this.lblSkillLv),this.addChild(this.lblSkillDesc),this.lblValue.x=this.bg.width-80,this.addChild(this.lblValue),this.lblValuePlus.x=this.lblValue.x,this.addChild(this.lblValuePlus),cD.setLabelWrapWidth(this.lblSkillDesc,this.lblValue.x-this.lblSkillDesc.x-10),this.updateLayout()}
+ updateLayout(){
+ this.lblSkillLv.x=Math.max(this.icon.x+this.icon.width+10,137),this.lblSkillDesc.x=this.lblSkillLv.x;
+ const t=.5*(this.bg.height-this.lblSkillLv.height-this.lblSkillDesc.height-0);
+ this.lblSkillDesc.y=t,this.lblSkillLv.y=t+this.lblSkillLv.height+0,this.lblValue.y=this.lblSkillDesc.y,this.lblValuePlus.y=this.lblSkillLv.y,this.lblValue.x=this.bg.width-this.lblValue.width-10,this.lblValuePlus.x=this.bg.width-this.lblValuePlus.width-10,cD.setLabelWrapWidth(this.lblSkillDesc,this.lblValuePlus.x-this.lblSkillDesc.x-10)}
+ setData(t){
+ this.data=t;
+ const i=t.mode===Dqt.book,s=t.mode===Dqt.shop,e=uR[t.index];
+ i||s||!e||t.level<e?(this.lblSkillDesc.textColor=cD.COLOR_GRAY,this.lblSkillLv.textColor=cD.COLOR_GRAY,this.lblValue.textColor=cD.COLOR_GRAY,this.lblValuePlus.textColor=cD.COLOR_GRAY):(this.lblSkillDesc.textColor=cD.DEFAULT_COLOR,this.lblSkillLv.textColor=cD.COLOR_ORANGE,this.lblValue.textColor=cD.DEFAULT_COLOR,this.lblValuePlus.textColor=cD.COLOR_ORANGE);
+ const n=oR.getInstance().get(t.id);
+ n?(this.updateIcons(n),this.lblSkillDesc.text=SG.getText(n.getDescKey(),n.desc)||"",this.lblSkillLv.text=`${
+ SG.getText("GAME_252","활성화 조건")}
+  : Lv.${
+ e}
+ `,this.isPercentSkill(n.skillCode)?(this.lblValue.text=`+${
+ t.value}
+ %`,this.lblValuePlus.text=`(+${
+ 2*t.value}
+ %)`):(this.lblValue.text=`+${
+ t.value}
+ `,this.lblValuePlus.text=`(+${
+ 2*t.value}
+ )`)):(this.lblSkillDesc.text="",this.lblSkillLv.text="",this.lblValue.text="",this.lblValuePlus.text=""),this.updateLayout()}
+ updateIcons(t){
+ let i,s;
+ const e=t.skillCode.split("_");
+ if(1==e.length?(i="",s=e[0]):(i=e[0],s=e[1]),this.icon.texture=QA.getTexture("UI_Ekkorr",`Icon_Skill_${
+ s}
+ `),this.targetIcon.visible=!1,i){
+ const t=this.getTargetName(i);
+ t&&(this.targetIcon.visible=!0,this.targetIcon.texture=QA.getTexture("UI_Ekkorr",`Icon_${
+ t}
+ `))}
+ }
+ getTargetName(t){
+ let i="";
+ return"T"==t?i=`Tribe${
+ Pqt.getInstance().vo.tribe}
+ `:"M"==t?i="Melee":"R"==t?i="Range":"A"==t&&(i="All"),i}
+ getSkillName(t){
+ return{
+ A_AU:SG.getText("SKILL_001","공격력 업그레이드"),A_HU:SG.getText("SKILL_002","체력 업그레이드"),A_DU:SG.getText("SKILL_003","방어력 업그레이드"),A_RU:SG.getText("SKILL_004","회복력 업그레이드"),R_HU:SG.getText("SKILL_005","종족 체력 업그레이드"),R_AU:SG.getText("SKILL_006","종족 공격력 업그레이드"),R_DU:SG.getText("SKILL_007","종족 방어력 업그레이드")}
+ [t]||t}
+ isPercentSkill(t){
+ return!0}
+ get height(){
+ return this.bg.height+5}
+ }
+ ;
+ Vt(xqt,"GoldSkillItemRenderer");
+ let Rqt=xqt;
+ const Nqt=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"icon",new Y2),Kt(this,"lblName",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_20)),Kt(this,"lblHp",new $B("UI_HEART","0",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblAtk",new $B("UI_MAGIC_WAND","0",39423,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblDef",new $B("UI_PHY_DEFENSE","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblMagDef",new $B("UI_MAGIC_DEFENSE","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblBlock",new $B("ICON_UNIT","0",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblAtkSpd",new $B("UI_ATTACK_SPEED","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblMoveSpd",new $B("UI_MOVE_SPEED","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblRecovery",new $B("ICON_OPEN","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblAtkRange",new $B("UI_ATTACK_RANGE","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblCriChange",new $B("UI_CRITICAL_PERCENT","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblCriDamage",new $B("UI_CRITICAL_DAMAGE","0",16776960,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"iconAtkType",new He(QA.getTexture("UI_Ekkorr","ICON_MELEE"))),Kt(this,"iconDamageType",new He(QA.getTexture("UI_Ekkorr","ICON_SWORD"))),Kt(this,"iconTribeType",new He(QA.getTexture("UI_Ekkorr","HUMAN_ICON"))),Kt(this,"iconIsAir",new He(QA.getTexture("UI_Ekkorr","ICON_AIR"))),Kt(this,"iconIsMale",new He(QA.getTexture("UI_Ekkorr","MALE_ICON"))),Kt(this,"iconDetect",new He(QA.getTexture("UI_Ekkorr","DETECT_ICON"))),Kt(this,"canAirAttack",new He(QA.getTexture("UI_Ekkorr","AIR_ICON"))),Kt(this,"btnEnhance",new kU("UI_STAR_ICON","1000","강화",.8,160,70)),Kt(this,"btnEvolve",new kU("UI_GEM","100","진화",.8,200,70)),Kt(this,"btnEvolveMass",new kU("UI_GEM","100","대량진화",.8,230,70)),Kt(this,"btnSell",new kU("UI_GEM","10","해고",.8,200,70)),Kt(this,"btnHire",new kU("UI_GEM","","",.8,160,70)),Kt(this,"btn10Enhance",new kU("UI_STAR_ICON","10000","+10",.8,160,70)),Kt(this,"btn100Enhance",new kU("UI_STAR_ICON","100000","+100",.8,160,70)),Kt(this,"multiEnhanceContainer",new Ge),Kt(this,"enhanceRapidClickCount",0),Kt(this,"lastEnhanceRapidClickTime",0),Kt(this,"RAPID_CLICK_THRESHOLD",500),Kt(this,"RAPID_CLICK_COUNT",3),Kt(this,"enhanceTimer",null),Kt(this,"enhanceStartValue",-1),Kt(this,"enhanceStartMedal",-1),Kt(this,"propertyList",[]),Kt(this,"propertyContainer",new Ge),Kt(this,"basicPropertyContainer",new Ge),Kt(this,"basicPropertyList",[]),Kt(this,"lblNormalAttackTitle",new JD("# 일반 공격",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblNormalAttackDesc",new JD("적을 강타합니다.",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblSpecialAttackTitle",new JD("# 스킬 공격",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblSpecialAttackDesc",new JD("스킬이 없습니다.",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblUniqueTitle",new JD("# 고유스킬",16776960,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblUniqueDesc",new JD("고유스킬이 없습니다",16776960,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblTribleTitle",new JD("# 종족 특성",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblTribleDesc",new JD("진화하면, 종족 특성이 추가됩니다.\n밤에는 공격력이 10% 증가하고, 낮에는 공격력이 10% 감소합니다.",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"starIcon",new He(QA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[0])),Kt(this,"contentContainer",new Ge),Kt(this,"tapDetail",new gzt("상세",200)),Kt(this,"tapSkill",new gzt("스킬",200)),Kt(this,"detailContainer",new Ge),Kt(this,"skillContainer",new Ge),Kt(this,"basicPropertyBg"),Kt(this,"basicPropertyBg2"),Kt(this,"lblGoldSkill",new JD("골드스킬",6736896,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"goldSkillList"),Kt(this,"container",new Ge),Kt(this,"draggableBg"),Kt(this,"draggableMask"),Kt(this,"draggableContainer"),Kt(this,"tapTrans",new gzt("초월",200)),Kt(this,"transContainer",new Ge),Kt(this,"transBg"),Kt(this,"transPageNav"),Kt(this,"transStatusTable"),Kt(this,"transGradeTable"),Kt(this,"transMode",1),Kt(this,"btnTransMode1"),Kt(this,"btnTransMode10"),Kt(this,"lblTransMaxTop",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblTransMaxBottom",new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblTransStepTitle",new JD("1차 초월",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"materialContainer",new Ge),Kt(this,"materialIcons",[]),Kt(this,"materialCountLabels",[]),Kt(this,"materialSatisfied",[!1,!1,!1,!1,!1]),Kt(this,"btnTrans",new kU("PVP_COIN_ON","100","초월",1,200,70)),Kt(this,"btnTransTicket",new kU("Ticket_HeroTrans_s","100","초월",1,200,70)),Kt(this,"bookVo"),Kt(this,"vo"),Kt(this,"mode","list"),Kt(this,"tribeIcons",["HUMAN_ICON","HUMAN_ICON","ELF_ICON","UNDEAD_ICON","ORC_ICON","DEMON_ICON","ANGEL_ICON"]),Kt(this,"requestPending",!1),Kt(this,"onHeroEvolveBind"),this.y=Math.min(VA.safeHeight-t.POPUP_MIN_HEIGHT,VA.viewMainY),this.bg.height=VA.safeHeight-this.y,this.addChild(this.container),this.addChild(this.contentContainer),this.icon.x=11,this.icon.y=50,this.lblName.align="center",this.lblName.y=this.icon.y+5,this.lblName.x=this.icon.x+this.icon.width+10,this.lblHp.y=this.lblAtk.y=this.lblDef.y=this.lblMagDef.y=this.lblBlock.y=this.lblName.y+this.lblName.height+16,this.lblHp.x=this.lblName.x,this.lblAtk.x=this.lblHp.x+100,this.lblDef.x=this.lblAtk.x+100,this.lblMagDef.x=this.lblDef.x+100,this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblMagDef.x+100,this.container.addChild(this.detailContainer),this.goldSkillList=new KO(Rqt,620,530),this.goldSkillList.x=13,this.goldSkillList.y=0,this.skillContainer.addChild(this.goldSkillList),this.lblGoldSkill.x=this.goldSkillList.x,this.lblGoldSkill.y=this.goldSkillList.y+this.goldSkillList.getListHeight()+10,this.lblGoldSkill.text=`# ${
+ SG.getText("GAME_89","레벨 달성시 활성화 되고, 강화레벨 달성시 능력치 100% 추가")}
+ `,this.skillContainer.addChild(this.lblGoldSkill),this.propertyList.push(this.iconTribeType,this.iconIsMale,this.iconDetect);
+ for(let t=0;
+ t<this.propertyList.length;
+ t++)this.propertyList[t].x=30*t,this.propertyList[t].y=0,this.propertyContainer.addChild(this.propertyList[t]);
+ this.addChild(this.propertyContainer),this.tapDetail.text=SG.getText("GAME_83","상세"),this.tapSkill.text=SG.getText("GAME_84","스킬"),this.tapTrans.text=SG.getText("GAME_820","초월"),this.tapDetail.selected=!0,this.tapDetail.width=200,this.tapSkill.width=200,this.tapTrans.width=200,this.addChild(this.tapDetail),this.addChild(this.tapSkill),this.addChild(this.tapTrans),this.tapDetail.onClick=this.onTapDetailClick.bind(this),this.tapSkill.onClick=this.onTapSkillClick.bind(this),this.tapTrans.onClick=this.onTapTransClick.bind(this),this.tapTrans.visible=!1,this.buildTransContainer(),this.basicPropertyBg=new TB,this.basicPropertyBg.setIndex(2),this.basicPropertyBg.width=620,this.basicPropertyBg.height=85,this.detailContainer.addChild(this.basicPropertyBg),this.basicPropertyBg2=new TB,this.basicPropertyBg2.setIndex(2),this.basicPropertyBg2.width=620,this.basicPropertyBg2.height=480,this.detailContainer.addChild(this.basicPropertyBg2),this.basicPropertyList.push(this.lblAtkSpd,this.lblMoveSpd,this.lblRecovery,this.lblAtkRange);
+ for(let t=0;
+ t<this.basicPropertyList.length;
+ t++)this.basicPropertyList[t].x=t%2*280,this.basicPropertyList[t].y=34*Math.floor(t/2),this.basicPropertyContainer.addChild(this.basicPropertyList[t]);
+ this.detailContainer.addChild(this.basicPropertyContainer),this.draggableContainer=new VWt,this.detailContainer.addChild(this.draggableContainer),this.draggableBg=new Lf,this.draggableBg.rect(0,0,this.basicPropertyBg2.width,this.basicPropertyBg2.height).fill(3814183),this.draggableContainer.addChild(this.draggableBg),this.draggableMask=new Lf,this.draggableMask.rect(0,0,this.basicPropertyBg2.width,this.basicPropertyBg2.height).fill(16711680),this.detailContainer.addChild(this.draggableMask),this.draggableContainer.mask=this.draggableMask,this.draggableContainer.addChild(this.lblNormalAttackTitle),this.draggableContainer.addChild(this.lblNormalAttackDesc),this.draggableContainer.addChild(this.lblSpecialAttackTitle),this.draggableContainer.addChild(this.lblSpecialAttackDesc),this.draggableContainer.addChild(this.lblUniqueTitle),this.draggableContainer.addChild(this.lblUniqueDesc),this.draggableContainer.addChild(this.lblTribleTitle),this.draggableContainer.addChild(this.lblTribleDesc),this.btnEnhance.text=SG.getText("GAME_66","강화"),this.btnEnhance.showIconLabel=!0,this.btnEnhance.showTextLabel=!0,this.btnEnhance.color=kU.LIGHT_GREEN,this.btnEnhance.onClick=()=>this.onEnhanceClick(1),this.btn10Enhance.labelOrder=kU.TEXT_FIRST,this.btn10Enhance.textLabel.textSize=15,this.btn10Enhance.textAlign="left",this.btn10Enhance.iconScale=.7,this.btn10Enhance.color=kU.LIGHT_GREEN,this.btn10Enhance.showIconLabel=!0,this.btn10Enhance.showTextLabel=!0,this.btn10Enhance.onClick=()=>{
+ const t=this.getNextIncrement(this.vo.enhance,10);
+ this.onEnhanceClick(t)}
+ ,this.multiEnhanceContainer.addChild(this.btn10Enhance),this.btn100Enhance.labelOrder=kU.TEXT_FIRST,this.btn100Enhance.textLabel.textSize=15,this.btn100Enhance.textAlign="left",this.btn100Enhance.iconScale=.7,this.btn100Enhance.color=kU.LIGHT_GREEN,this.btn100Enhance.showIconLabel=!0,this.btn100Enhance.showTextLabel=!0,this.btn100Enhance.onClick=()=>{
+ const t=this.getNextIncrement(this.vo.enhance,100);
+ this.onEnhanceClick(t)}
+ ,this.multiEnhanceContainer.addChild(this.btn100Enhance),this.multiEnhanceContainer.visible=!1,this.addChild(this.multiEnhanceContainer),this.btnEvolve.text=SG.getText("GAME_67","진화"),this.btnEvolve.showIconLabel=!0,this.btnEvolve.showTextLabel=!0,this.btnEvolve.color=kU.GREEN,this.btnEvolve.onClick=this.onEvolveClick.bind(this);
+ const i=t.MASS_EVOLVE_COUNT;
+ this.btnEvolveMass.text=`${
+ SG.getText("GAME_67","진화")}
+  (x${
+ i}
+ )`,this.btnEvolveMass.showIconLabel=!0,this.btnEvolveMass.showTextLabel=!0,this.btnEvolveMass.color=kU.GREEN,this.btnEvolveMass.activatedTextLabelColor=13434624,this.btnEvolveMass.onClick=this.onEvolveMassClick.bind(this),this.btnSell.text=SG.getText("GAME_68","해고"),this.btnSell.showIconLabel=!1,this.btnSell.showTextLabel=!0,this.btnSell.color=kU.RED,this.btnSell.onClick=this.onSellClick.bind(this),this.btnHire.text=SG.getText("GAME_64","배치"),this.btnHire.showIconLabel=!1,this.btnHire.showTextLabel=!0,this.btnHire.onClick=this.onHireClick.bind(this),this.contentContainer.addChild(this.icon,this.lblName,this.lblHp,this.lblAtk,this.lblDef,this.lblMagDef,this.lblBlock,this.btnEnhance,this.btnEvolve,this.btnEvolveMass,this.btnSell,this.btnHire,this.starIcon),this.updateLayout(),this.draggableMask.x=this.draggableContainer.x,this.draggableMask.y=this.basicPropertyContainer.y+this.basicPropertyContainer.height+40;
+ const s=this.draggableMask.x-this.basicPropertyBg2.x,e=this.draggableMask.y-this.basicPropertyBg2.y;
+ this.draggableMask.width=this.basicPropertyBg2.width-2*s,this.draggableMask.height=this.basicPropertyBg2.height-2*e,this.draggableBg.width=this.draggableMask.width,this.updateDraggableContainer();
+ const n=this.draggableMask.width;
+ cD.setLabelWrapWidth(this.lblNormalAttackDesc,n),cD.setLabelWrapWidth(this.lblSpecialAttackDesc,n),cD.setLabelWrapWidth(this.lblUniqueDesc,n),cD.setLabelWrapWidth(this.lblTribleDesc,n),cD.setLabelWrapWidth(this.lblGoldSkill,this.bg.width-2*this.lblGoldSkill.x)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ get className(){
+ return"HeroDetailPopup"}
+ onAdded(){
+ super.onAdded(),this.setHeroEvolve(!0),Oei.getInstance().registerHeroDetailPopupGetter(()=>this),Tei.getInstance().registerPopupButtonGetter(t=>"btnEnhance"===t&&this.btnEnhance.visible?{
+ parent:this.contentContainer,btn:{
+ x:this.btnEnhance.x,y:this.btnEnhance.y,width:this.btnEnhance.width,height:this.btnEnhance.height}
+ }
+ :null)}
+ onRemoved(){
+ Zqt.getInstance().visible=!0,"book"===this.mode?Iqt.getInstance().show2():"guild"===this.mode?Xt(async()=>{
+ const{
+ Guild2Popup:t}
+ =await Promise.resolve().then(()=>rii);
+ return{
+ Guild2Popup:t}
+ }
+ ,void 0).then(({
+ Guild2Popup:t}
+ )=>{
+ t.getInstance().addResources()}
+ ):(kF.getInstance().setMode(CF.NORMAL),Zqt.getInstance().addChild(kF.getInstance())),this.setHeroEvolve(!1),Tei.getInstance().unregisterPopupButtonGetter(),0!=this.draggableContainer.max&&(this.draggableContainer.y=this.draggableContainer.max),this.bookVo&&this.bookVo.remove()}
+ getEnhanceGuideInfo(){
+ if(!this.vo||this.vo.enhance>=wx.HERO_MAX_ENHANCE)return null;
+ const t=wzt.getInstance().getCost(this.vo.enhance+1);
+ return ML.medal<t?null:{
+ parent:this.contentContainer,btn:{
+ x:this.btnEnhance.x,y:this.btnEnhance.y,width:this.btnEnhance.width,height:this.btnEnhance.height}
+ }
+ }
+ onTapDetailClick(){
+ this.tapDetail.selected=!0,this.tapSkill.selected=!1,this.tapTrans.selected=!1,null==this.detailContainer.parent&&this.container.addChild(this.detailContainer),this.skillContainer.parent&&this.container.removeChild(this.skillContainer),this.transContainer.parent&&this.container.removeChild(this.transContainer),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout()}
+ onTapSkillClick(){
+ this.tapDetail.selected=!1,this.tapSkill.selected=!0,this.tapTrans.selected=!1,this.detailContainer.parent&&this.container.removeChild(this.detailContainer),null==this.skillContainer.parent&&this.container.addChild(this.skillContainer),this.transContainer.parent&&this.container.removeChild(this.transContainer),this.lblGoldSkill.text=`# ${
+ SG.getText("GAME_89","레벨 달성시 활성화 되고, 강화레벨 달성시 능력치 100% 추가")}
+ `,this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout()}
+ onTapTransClick(){
+ ML.maxWave<t.TRANS_TAB_MIN_WAVE?u2.getInstance().showMessage(SG.getValueReplace("GAME_34","##",t.TRANS_TAB_MIN_WAVE,`${
+ t.TRANS_TAB_MIN_WAVE}
+  wave 이상에서 개방됩니다.`)):(this.tapDetail.selected=!1,this.tapSkill.selected=!1,this.tapTrans.selected=!0,this.detailContainer.parent&&this.container.removeChild(this.detailContainer),this.skillContainer.parent&&this.container.removeChild(this.skillContainer),null==this.transContainer.parent&&this.container.addChild(this.transContainer),this.updateTransInfo(),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout())}
+ applyTabResourceMode(){
+ if("guild"===this.mode)return;
+ const t=kF.getInstance();
+ this.tapTrans.selected&&this.tapTrans.visible?(t.setMode(CF.TOWER),t.updateHonor()):t.setMode(CF.NORMAL)}
+ buildTransContainer(){
+ this.transBg=new TB,this.transBg.setIndex(2),this.transBg.width=620,this.transBg.height=160,this.transContainer.addChild(this.transBg),this.transPageNav=new IB(620,16,cD.DEFAULT_COLOR,15),this.transPageNav.extraHeight=90,this.transContainer.addChild(this.transPageNav),this.lblTransMaxTop.visible=!1,this.lblTransMaxBottom.visible=!1,this.transContainer.addChild(this.lblTransMaxTop),this.transContainer.addChild(this.lblTransMaxBottom),this.transPageNav.onPageChange=t=>{
+ const i=!!this.vo&&this.vo.trans>=this.vo.maxTrans;
+ this.lblTransMaxBottom.visible=i&&0===t}
+ ,this.transStatusTable=new Ge,this.transGradeTable=new Ge,this.transContainer.addChild(this.lblTransStepTitle);
+ for(let i=0;
+ i<t.MATERIAL_SLOT_COUNT;
+ i++){
+ const t=new Y2;
+ t.setMode(z2.BOOK),t.scale.set(.8),t.visible=!1,t.eventMode="static",t.cursor="pointer";
+ const s=i;
+ t.on("pointertap",()=>this.onMaterialIconClick(s)),this.materialIcons.push(t),this.materialContainer.addChild(t);
+ const e=new JD("0/1",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ e.visible=!1,this.materialCountLabels.push(e),this.materialContainer.addChild(e)}
+ this.transContainer.addChild(this.materialContainer),this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.showIconLabel=!0,this.btnTrans.showTextLabel=!0,this.btnTrans.color=kU.GREEN,this.btnTrans.onClick=this.onTransClick.bind(this),this.btnTrans.visible=!1,this.contentContainer.addChild(this.btnTrans),this.btnTransTicket.text=SG.getText("GAME_820","초월"),this.btnTransTicket.showIconLabel=!0,this.btnTransTicket.showTextLabel=!0,this.btnTransTicket.color=kU.GREEN,this.btnTransTicket.onClick=this.onTransTicketClick.bind(this),this.btnTransTicket.visible=!1,this.contentContainer.addChild(this.btnTransTicket),this.btnTransMode10=new qzt("x10"),this.btnTransMode10.x=this.transBg.x+this.transBg.width-this.btnTransMode10.width-10,this.btnTransMode10.y=this.transBg.y+15,this.transContainer.addChild(this.btnTransMode10),this.btnTransMode1=new qzt("x1"),this.btnTransMode1.x=this.btnTransMode10.x-this.btnTransMode1.width-5,this.btnTransMode1.y=this.btnTransMode10.y,this.transContainer.addChild(this.btnTransMode1),this.btnTransMode1.onClick=()=>{
+ this.onTransModeClick(1)}
+ ,this.btnTransMode10.onClick=()=>{
+ this.onTransModeClick(10)}
+ }
+ applyTabButtonVisibility(){
+ const i=this.tapTrans.selected&&this.tapTrans.visible;
+ if(this.btnTransMode1.visible=!1,this.btnTransMode10.visible=!1,i){
+ if(this.btnEnhance.visible=!1,this.btnEvolve.visible=!1,this.btnEvolveMass.visible=!1,this.btnSell.visible=!1,this.btnHire.visible=!1,this.multiEnhanceContainer.visible=!1,this.btnTrans.visible=!0,this.btnTransTicket.visible=AL.getInstance().isHeroTranscendTicket(),"roster"==this.mode&&AL.getInstance().isHeroMassTranscend()){
+ const i=wx.getInstance().getOwnedUnitVO(this.vo.kindNum),s=this.vo.trans>0?(null==i?void 0:i.trans[this.vo.trans-1])??0:(null==i?void 0:i.count)??0,e=t.MASS_TRANSCEND_COUNT;
+ this.btnTransMode1.visible=!(s<e),this.btnTransMode10.visible=this.btnTransMode1.visible,10==this.transMode?(this.btnTransMode1.activated=!1,this.btnTransMode10.activated=!0):(this.btnTransMode1.activated=!0,this.btnTransMode10.activated=!1)}
+ }
+ else this.btnTrans.visible=!1,this.btnTransTicket.visible=!1,this.applyModeButtonVisibility()}
+ applyModeButtonVisibility(){
+ if(this.vo)if(this.btnEvolveMass.visible=!1,"book"==this.mode||"shop"==this.mode||"guild"==this.mode)this.btnEnhance.visible=!1,this.btnSell.visible=!1,this.btnHire.visible=!1,this.btnEvolve.visible=!1;
+ else if("roster"==this.mode){
+ if(this.btnEnhance.visible=!1,this.btnSell.visible=!1,this.btnHire.visible=!0,this.btnEvolve.visible=this.vo.evolKindNum>0&&0===this.vo.evolStage,this.btnEvolve.visible&&AL.getInstance().isHeroMassEvolve()){
+ const i=wx.getInstance().getOwnedUnitVO(this.vo.base),s=(null==i?void 0:i.count)??0,e=t.MASS_EVOLVE_COUNT;
+ this.btnEvolveMass.visible=!(s<e)}
+ }
+ else this.btnEnhance.visible=!0,this.btnSell.visible=!0,this.btnHire.visible=!1,this.btnEvolve.visible=-1!=this.vo.evolKindNum}
+ updateTransInfo(){
+ var i;
+ if(!this.vo)return;
+ const s=wx.getInstance(),e=this.vo.trans,n=e+1,h=e>=this.vo.maxTrans;
+ this.lblTransStepTitle.text=h?SG.getText("GAME_829","최대초월"):`${
+ SG.getValueReplace("GAME_821","##",n,`${
+ n}
+ 차 초월`)}
+  ( ${
+ SG.getText("GAME_822","재료")}
+  )`;
+ const r=SG.getText("GAME_852","최대 초월입니다.");
+ this.lblTransMaxTop.text=r,this.lblTransMaxBottom.text=r,this.lblTransMaxTop.visible=h,this.lblTransMaxBottom.visible=h&&0===this.transPageNav.pageIndex,this.updateTransMaterials();
+ const o=Math.max(0,Math.min(e,t.TRANS_BONUS.length-1)),a=t.TRANS_BONUS[o],c=(null==(i=this.vo.getBookVo())?void 0:i.grade)??0,l=wx.getTransPointForGrade(c,e)*wx.TRANS_MEDAL_BONUS_PER_POINT_GLOBAL,u=K2.getBaseMaxLevelForGrade(c),d=u+e*K2.TRANS_MAX_LEVEL_BONUS,f=Vt((t,i)=>SG.getText(t,i),"_t"),p=Vt((t,i,s)=>SG.getValueReplace(t,"##",i,s),"_tv");
+ let g=`# ${
+ 0===e?f("GAME_838","기본 능력"):p("GAME_839",e,`${
+ e}
+  초월 능력`)}
+  (${
+ f("GAME_840","현재")}
+ )\n- ${
+ p("GAME_824",a.stat,`영웅의 공격력, 방어력 및 체력 버프: ${
+ a.stat}
+ %`)}
+ \n- ${
+ p("GAME_825",l,`훈장버프 : ${
+ l}
+ %`)}
+ \n- ${
+ p("GAME_826",d,`최대레벨 : ${
+ d}
+ `)}
+ `;
+ if(!h){
+ const i=Math.min(n,t.TRANS_BONUS.length-1),s=t.TRANS_BONUS[i],e=wx.getTransPointForGrade(c,n)*wx.TRANS_MEDAL_BONUS_PER_POINT_GLOBAL,h=u+n*K2.TRANS_MAX_LEVEL_BONUS;
+ g+=`\n# ${
+ p("GAME_839",n,`${
+ n}
+  초월 능력`)}
+ \n- ${
+ p("GAME_824",s.stat,`영웅의 공격력, 방어력 및 체력 버프: ${
+ s.stat}
+ %`)}
+ \n- ${
+ p("GAME_825",e,`훈장버프 : ${
+ e}
+ %`)}
+ \n- ${
+ p("GAME_826",h,`최대레벨 : ${
+ h}
+ `)}
+ `}
+ const m=this.vo.kindNum,w=SG.getText(this.vo.getBookVo().getNameKey(),this.vo.name),v=new Set(cx.getInstance().getAwakenedHeroes()).has(m),b=s.calcHeroTransPoint(m);
+ g+=`\n# ${
+ SG.getValueReplace("GAME_1183","###",w,`${
+ w}
+ 의 초월 포인트`)}
+  : ${
+ t.formatTransPoint(b)}
+ `;
+ const _=t.formatTransPoint(Math.min(b,100));
+ g+=`\n- ${
+ SG.getValueReplaceMulti("GAME_1185",["###","@@@"],[w,_],`${
+ w}
+ 의 공격력, 방어력, 체력이 ${
+ _}
+ % 증가한다.`)}
+ `,v&&(g+=`\n- ${
+ SG.getValueReplace("GAME_1184","###",w,`커플 펫이 5성이 되어, ${
+ w}
+ 의 초월 포인트가 50% 증가`)}
+ `);
+ const y=this.getTotalTransPoints(),M=t.formatTransPoint,E=`# ${
+ f("GAME_827","초월 포인트")}
+  : ${
+ M(y)}
+ \n- ${
+ f("GAME_841","영웅 종류에 관계없이 보유한 모든 영웅의 초월 포인트 합산입니다.")}
+ \n- ${
+ f("GAME_842","모든 영웅의 골드 최대 레벨이 초월 포인트 만큼 증가합니다.")}
+ \n- ${
+ f("GAME_843","초월 포인트 1당 훈장 획득량이 +5% 증가합니다. ( 훈장 획득 보너스는 최대 +2000%까지)")}
+ \n- ${
+ f("GAME_844","훈장 획득 보너스는 영웅이 팀에 편성되지 않아도 적용됩니다.")}
+ `,A=[cD.DEFAULT_COLOR],S=h?[cD.DEFAULT_COLOR,16763904]:[cD.DEFAULT_COLOR,8965358,16763904],T=h?[15]:[15,15];
+ this.updateTransStatusTable(),this.updateTransGradeTable();
+ const C=[{
+ title:f("GAME_823","초월 능력"),content:g,itemColors:S,itemMarkerColors:S,itemSpacings:T}
+ ,{
+ title:f("GAME_827","초월 포인트"),content:E,itemColors:A,itemMarkerColors:A}
+ ,{
+ title:f("GAME_848","초월 포인트 현황"),customContainer:this.transStatusTable}
+ ,{
+ title:f("GAME_851","등급별 초월포인트"),customContainer:this.transGradeTable}
+ ];
+ if(this.transPageNav.setPages(C),h)this.btnTrans.text=SG.getText("GAME_829","최대초월"),this.btnTrans.iconText="",this.btnTrans.activated=!1,this.btnTransTicket.text=SG.getText("GAME_829","최대초월"),this.btnTransTicket.iconText="",this.btnTransTicket.activated=!1;
+ else{
+ const t=this.getTransHonorCoinCost(n);
+ this.btnTrans.text=SG.getText("GAME_820","초월"),this.btnTrans.iconText=String(t),this.btnTrans.activated=!0,this.btnTransTicket.text=SG.getText("GAME_820","초월"),this.btnTransTicket.iconText=this.getTransTicketCostStr();
+ const i=this.isTransTicketActivated();
+ this.btnTransTicket.activated=!0,this.btnTransTicket.color=i?kU.GREEN:kU.GRAY}
+ }
+ updateTransMaterials(){
+ if(!this.vo)return;
+ const i=wx.getInstance(),s=this.vo.trans,e=s+1;
+ if(s>=this.vo.maxTrans)for(let n=0;
+ n<t.MATERIAL_SLOT_COUNT;
+ n++)this.materialSatisfied[n]=!1,this.materialIcons[n].visible=!1,this.materialCountLabels[n].visible=!1;
+ else{
+ const s=this.vo.getBookVo().getTransMaterials(e),n=new Map;
+ "roster"===this.mode&&0===this.vo.trans&&n.set(this.vo.kindNum,1);
+ for(let e=0;
+ e<t.MATERIAL_SLOT_COUNT;
+ e++){
+ const t=s[e],h=this.materialIcons[e],r=this.materialCountLabels[e];
+ if(t&&t>0){
+ h.setDataWithKindNum(t),h.visible=!0;
+ const s=i.getOwnedUnitCount(t,0),o=n.get(t)??0,a=s>o&&s>=this.transMode;
+ a&&n.set(t,o+this.transMode),this.materialSatisfied[e]=a,h.alpha=a?1:.5,r.text=`${
+ s}
+ /${
+ this.transMode}
+ `,r.visible=!0}
+ else this.materialSatisfied[e]=!1,h.visible=!1,r.visible=!1}
+ }
+ }
+ static getTransPointForGrade(t,i){
+ return wx.getTransPointForGrade(t,i)}
+ static formatTransPoint(t){
+ return Number.isInteger(t)?String(t):t.toFixed(1)}
+ renderTransPointTable(t,i){
+ t.removeChildren();
+ const s=[100,140,140,140],e=cD.DEFAULT_COLOR,n=[SG.getText("GAME_850","등급"),SG.getValueReplace("GAME_845","##",1,"1 초월"),SG.getValueReplace("GAME_845","##",2,"2 초월"),SG.getValueReplace("GAME_845","##",3,"3 초월")],h=[6,5,4,3,2];
+ let r=15;
+ const o=Vt((i,e,n)=>{
+ const h=new JD(i,n,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ let o=0;
+ for(let t=0;
+ t<e;
+ t++)o+=s[t];
+ h.x=o+.5*(s[e]-h.width),h.y=r,t.addChild(h)}
+ ,"placeCell");
+ for(let a=0;
+ a<n.length;
+ a++)o(n[a],a,16763904);
+ r+=30;
+ for(let a=0;
+ a<h.length;
+ a++){
+ const t=h[a];
+ o(SG.getValueReplace("GAME_849","##",t,`${
+ t}
+  ★`),0,e);
+ for(let s=1;
+ s<=3;
+ s++)o(i(t,s),s,e);
+ r+=30}
+ }
+ updateTransStatusTable(){
+ const i=this.aggregateOwnedTransStats([6,5,4,3,2]);
+ this.renderTransPointTable(this.transStatusTable,(s,e)=>{
+ const n=i[s][e-1];
+ return n.count<=0?"-":`${
+ t.formatTransPoint(n.score)}
+ (${
+ n.count}
+ )`}
+ )}
+ updateTransGradeTable(){
+ this.renderTransPointTable(this.transGradeTable,(i,s)=>{
+ const e=t.getTransPointForGrade(i,s);
+ return t.formatTransPoint(e)}
+ )}
+ aggregateOwnedTransStats(t){
+ const i={
+ }
+ ;
+ for(const n of t)i[n]=[{
+ count:0,score:0}
+ ,{
+ count:0,score:0}
+ ,{
+ count:0,score:0}
+ ];
+ const s=wx.getInstance(),e=new Set(cx.getInstance().getAwakenedHeroes());
+ for(const n of s.list){
+ if(n.kindNum>=1e4||n.trans<1||n.trans>3)continue;
+ const t=s.getBookVO(n.kindNum);
+ if(!t||!(t.grade in i))continue;
+ const h=i[t.grade][n.trans-1];
+ h.count+=1,h.score+=wx.getTransPointForHero(n.kindNum,t.grade,n.trans,e)}
+ for(const n of s.ownedUnitList){
+ if(n.kindNum>=1e4)continue;
+ const t=s.getBookVO(n.kindNum);
+ if(!t||!(t.grade in i))continue;
+ const h=n.trans??[0,0,0];
+ for(let s=0;
+ s<3;
+ s++){
+ const r=h[s]??0;
+ if(r<=0)continue;
+ const o=i[t.grade][s];
+ o.count+=r,o.score+=r*wx.getTransPointForHero(n.kindNum,t.grade,s+1,e)}
+ }
+ return i}
+ getTotalTransPoints(){
+ return wx.getInstance().totalTransPoint}
+ onTransModeClick(t=1){
+ this.transMode=t,10==this.transMode?(this.btnTransMode1.activated=!1,this.btnTransMode10.activated=!0):(this.btnTransMode1.activated=!0,this.btnTransMode10.activated=!1),this.updateTransInfo(),this.updateLayoutTransMaterials()}
+ async onTransClick(){
+ if(!this.vo||this.vo.trans>=this.vo.maxTrans)return;
+ if(this.requestPending)return;
+ const i=this.vo.trans+1;
+ let s=!0;
+ const e=this.vo.getBookVo().getTransMaterials(i);
+ for(let r=0;
+ r<t.MATERIAL_SLOT_COUNT;
+ r++)if(e[r]&&e[r]>0&&!this.materialSatisfied[r]){
+ s=!1;
+ break}
+ if(!s){
+ const i=[];
+ for(let r=0;
+ r<t.MATERIAL_SLOT_COUNT;
+ r++)e[r]&&e[r]>0&&(this.materialSatisfied[r]||i.push(e[r]));
+ let s=!0;
+ const n=[],h=[];
+ for(let t=0;
+ t<i.length;
+ ++t){
+ const e=wx.getInstance(),r=i[t],o=e.bookList.find(t=>t.evolKindNum===r);
+ o&&(e.getOwnedUnitCount(o.kindNum,0)<this.transMode?s=!1:(n.push(e.getOwnedUnitCount(r,0)),h.push(o.kindNum)))}
+ if(s){
+ const t=this.vo.trans+1,i=this.getTransHonorCoinCost(t);
+ if(ML.honorCoin<i)return s=!1,void u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다"))}
+ if(s){
+ const t=Oqt.getInstance();
+ t.onEvolved=()=>{
+ this.onTransMatMultiEvolve()}
+ ,t.setData(n,h,this.transMode,this.vo.trans+1),t.show()}
+ else u2.getInstance().showMessage(SG.getText("GAME_830","재료 영웅이 부족합니다"));
+ return}
+ const n=this.getTransHonorCoinCost(i);
+ if(ML.honorCoin<n)return void u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다"));
+ const{
+ TransConfirmPopup:h}
+ =await Xt(async()=>{
+ const{
+ TransConfirmPopup:t}
+ =await Promise.resolve().then(()=>Qui);
+ return{
+ TransConfirmPopup:t}
+ }
+ ,void 0);
+ h.getInstance().showWith(n,()=>{
+ this.runTranscend(!1,this.transMode)}
+ )}
+ onTransMatMultiEvolve(){
+ "roster"===this.mode&&(this.showInRoster(this.vo.evolKindNum,this.vo.trans),yqt.getInstance().setData()),$zt.getInstance().validateTeam(),this.updateTransMaterials();
+ const t=this.vo.trans+1,i=this.getTransHonorCoinCost(t);
+ ML.honorCoin<i?u2.getInstance().showMessage(SG.getText("GAME_194","명예코인이 부족합니다")):this.runTranscend(!1,this.transMode)}
+ async onTransTicketClick(){
+ if(!this.vo||this.vo.trans>=this.vo.maxTrans)return;
+ if(!this.isTransTicketActivated())return void u2.getInstance().showMessage(SG.getText("GAME_1231","초월권이 부족하여 초월할 수 없습니다."));
+ if(this.requestPending)return;
+ const{
+ TransConfirmPopup:t}
+ =await Xt(async()=>{
+ const{
+ TransConfirmPopup:t}
+ =await Promise.resolve().then(()=>Qui);
+ return{
+ TransConfirmPopup:t}
+ }
+ ,void 0);
+ t.getInstance().showWithTicket(this.getTransTicketCostStr(),()=>{
+ this.runTranscend(!0,this.transMode)}
+ )}
+ async runTranscend(t=!1,i=1){
+ if(this.vo&&!(this.vo.trans>=this.vo.maxTrans)&&!this.requestPending){
+ this.setRequestPending(!0);
+ try{
+ const s="roster"===this.mode,e=s?await rD.getInstance().hero.transcendOwned(this.vo.kindNum,this.vo.trans,i,t,!0):await rD.getInstance().hero.transcend(this.vo.id,void 0,t,!0);
+ if(!e||!1===e.success){
+ const t=(null==e?void 0:e.error)??"";
+ let i=(null==e?void 0:e.errorMessage)??"";
+ return"HERO_TRANSCEND_INSUFFICIENT_MATERIAL"===t?i=SG.getText("GAME_830","재료 영웅이 부족합니다"):"HERO_TRANSCEND_INSUFFICIENT_COIN"===t||"INSUFFICIENT_HONOR_COIN"===t?i=SG.getText("GAME_194","명예코인이 부족합니다"):"HERO_INVALID_TRANSCEND"===t?i="초월할 수 없는 영웅입니다.":"HERO_MAX_TRANSCEND"===t?i="이미 최대 초월 단계입니다.":"INSUFFICIENT_TICKET"===t?i=SG.getText("GAME_1243","초월권이 부족합니다."):i||(i=SG.getText("COMMON_77","네트워크 오류가 발생하였습니다.")),void u2.getInstance().showMessage(i)}
+ if(ML.setUserInfo(e.body),$Vt.getInstance().setData(e.body.transTicket),kF.getInstance().updateAll(),kF.getInstance().updateHonor(),$qt.getInstance().setData(),$zt.getInstance().validateTeam(),s)this.vo.trans+=1,yqt.getInstance().setData(),zqt.getInstance().update();
+ else{
+ const t=wx.getInstance().getVOWithId(this.vo.id);
+ t&&jhi.getInstance().udpateHero(t)}
+ this.updateHeroInfo(this.vo,this.mode),this.updateTransInfo(),this.applyTabButtonVisibility(),this.updateLayout()}
+ finally{
+ this.setRequestPending(!1)}
+ }
+ }
+ async onMaterialIconClick(t){
+ if(!this.vo||this.vo.trans>=this.vo.maxTrans)return;
+ const i=wx.getInstance(),s=this.vo.trans+1,e=this.vo.getBookVo().getTransMaterials(s)[t];
+ if(!e||e<=0)return;
+ const n=i.getBookVO(e),h=n?SG.getText(n.getNameKey(),n.name):"",r=i.bookList.find(t=>t.evolKindNum===e),o=r?i.getOwnedUnitCount(r.kindNum,0):0;
+ if(this.materialSatisfied[t])return;
+ if(r&&o>=this.transMode){
+ const t=Mqt[r.grade]??0,{
+ EvolveMaterialConfirmPopup:i}
+ =await Xt(async()=>{
+ const{
+ EvolveMaterialConfirmPopup:t}
+ =await Promise.resolve().then(()=>M3t);
+ return{
+ EvolveMaterialConfirmPopup:t}
+ }
+ ,void 0);
+ return void i.getInstance().showWith(h,t,()=>{
+ this.evolveMaterialPreHero(r.kindNum,this.transMode)}
+ ,this.transMode)}
+ const a=this.transMode>1?`[ ${
+ h}
+  (x${
+ this.transMode}
+ ) ]`:h;
+ r?u2.getInstance().showMessage(SG.getValueReplace("GAME_832","##",a,`${
+ a}
+ 으로 진화할 수 있는 영웅이 없습니다.`)):u2.getInstance().showMessage(SG.getValueReplace("GAME_831","##",a,`${
+ a}
+ 을 보유하고 있지 않습니다.`))}
+ async evolveMaterialPreHero(t,i=1){
+ const s=wx.getInstance().getBookVO(t);
+ if(!s)return;
+ const e=Mqt[s.grade]??0;
+ if(ML.gem<e*i)u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ else if(!this.requestPending){
+ this.setRequestPending(!0);
+ try{
+ const s=await rD.getInstance().hero.evolveOwned(`${
+ t}
+ -${
+ i}
+ `,!0);
+ if(!1===s.success)return void("HERO_NOT_FOUND"==s.error?u2.getInstance().showMessage(SG.getText("GAME_830","재료 영웅이 부족합니다")):u2.getInstance().showError(s));
+ ML.setUserInfo(s.body),kF.getInstance().updateAll(),$qt.getInstance().setData(),"roster"===this.mode&&(yqt.getInstance().setData(),zqt.getInstance().update()),this.updateTransInfo(),cS.getInstance().dispatchCustomEvent("HeroEvolve",{
+ id:0,kindNum:t}
+ )}
+ finally{
+ this.setRequestPending(!1)}
+ }
+ }
+ async onSellClick(){
+ if(!this.vo||this.vo.id<=0||this.vo.kindNum<=0)return;
+ if(wx.getInstance().list.length<2)return void u2.getInstance().showMessage(SG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다."));
+ if(1==this.requestPending)return;
+ if(this.setRequestPending(!0),this.btnSell.activated=!1,this.enhanceTimer&&!(await this.syncEnhanceToServer()))return this.btnSell.activated=!0,void this.setRequestPending(!1);
+ const t=await rD.getInstance().hero.removeFromTeam(this.vo.id);
+ if(!1===t.success){
+ this.btnSell.activated=!0,this.setRequestPending(!1);
+ let i=t.lerrorMessage;
+ return"HERO_CANNOT_REMOVE_LAST"==t.error&&(i=SG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다.")),void u2.getInstance().showMessage(i)}
+ jhi.getInstance().fireHero(this.vo),ML.setUserInfo(t.body),kF.getInstance().updateAll(),$qt.getInstance().setData(),this.hide(),this.setRequestPending(!1)}
+ onMultiEnhance(){
+ this.multiEnhanceContainer.visible=!this.multiEnhanceContainer.visible,this.updateLayout()}
+ getNextIncrement(t,i){
+ t+i>wx.HERO_MAX_ENHANCE&&(i=wx.HERO_MAX_ENHANCE-t);
+ const s=t%i;
+ return 0===s?i:i-s}
+ onEnhanceClick(i=1){
+ if(1===i){
+ const t=Date.now();
+ t-this.lastEnhanceRapidClickTime<this.RAPID_CLICK_THRESHOLD?this.enhanceRapidClickCount++:this.enhanceRapidClickCount=1,this.lastEnhanceRapidClickTime=t,this.enhanceRapidClickCount>=this.RAPID_CLICK_COUNT&&(this.enhanceRapidClickCount=0,this.multiEnhanceContainer.visible||(this.multiEnhanceContainer.visible=!0,this.updateLayout()))}
+ let s=this.vo.enhance+i;
+ s>wx.HERO_MAX_ENHANCE&&(s=wx.HERO_MAX_ENHANCE);
+ let e=0;
+ for(let t=this.vo.enhance+1;
+ t<=s;
+ t++)e+=wzt.getInstance().getCost(t);
+ ML.medal<e?u2.getInstance().showMessage(SG.getText("GAME_48","훈장이 부족합니다.")):(this.enhanceTimer&&clearTimeout(this.enhanceTimer),-1===this.enhanceStartValue&&(this.enhanceStartValue=this.vo.enhance,this.enhanceStartMedal=ML.medal),ML.medal-=e,this.vo.enhance=s,jhi.getInstance().udpateHero(this.vo),kF.getInstance().updateMedal(),this.updateHeroInfo(this.vo,this.mode),$qt.getInstance().setData(),zjt.get().play(this.contentContainer,this.icon.x,this.icon.y-9),Tei.getInstance().onConditionChanged(),this.enhanceTimer=setTimeout(async()=>{
+ await this.syncEnhanceToServer(),this.multiEnhanceContainer.visible=!1,this.updateLayout()}
+ ,t.ENHANCE_DEBOUNCE_DELAY))}
+ async syncEnhanceToServer(){
+ if(this.enhanceTimer&&(clearTimeout(this.enhanceTimer),this.enhanceTimer=null),this.enhanceStartValue===this.vo.enhance)return this.resetEnhance(),!0;
+ const t=this.vo.enhance;
+ if(t>wx.HERO_MAX_ENHANCE)return u2.getInstance().showMessage(SG.getText("GAME_139","최대 강화레벨입니다.")),!1;
+ const i=await rD.getInstance().hero.enhanceUp(this.vo.id,t);
+ return 0==i.success?(this.vo.enhance=this.enhanceStartValue,ML.medal=this.enhanceStartMedal,jhi.getInstance().udpateHero(this.vo),kF.getInstance().updateMedal(),this.updateHeroInfo(this.vo,this.mode),$qt.getInstance().setData(),this.resetEnhance(),u2.getInstance().showMessage(SG.getText("COMMON_77","네트워크 오류가 발생하였습니다.")),!1):(ML.setUserInfo(i.body),kF.getInstance().updateAll(),$qt.getInstance().setData(),this.updateHeroInfo(this.vo,this.mode),this.resetEnhance(),!0)}
+ resetEnhance(){
+ this.enhanceTimer&&clearTimeout(this.enhanceTimer),this.enhanceTimer=null,this.enhanceStartValue=-1,this.enhanceStartMedal=-1}
+ onEvolveClick(t=1){
+ if(!this.vo.evolKindNum)return void u2.getInstance().showMessage(SG.getText("GAME_141","이미 최대 진화 단계입니다."));
+ const i=Aqt.getInstance();
+ i.onEvolved=()=>{
+ "roster"===this.mode&&(this.showInRoster(this.vo.evolKindNum,this.vo.trans),yqt.getInstance().setData()),$zt.getInstance().validateTeam()}
+ ,i.setData(this.vo,"roster"===this.mode,t),i.show()}
+ onEvolveMassClick(){
+ const i=t.MASS_EVOLVE_COUNT;
+ this.onEvolveClick(i)}
+ show(i,s="list"){
+ if("book"!==s&&"shop"!==s&&"guild"!==s&&(!i||!i.kindNum||i.kindNum<=0))return;
+ if(this.transMode=1,this.requestPending=!1,this.tapDetail.text=SG.getText("GAME_83","상세"),this.tapSkill.text=SG.getText("GAME_84","스킬"),this.resetEnhance(),this.multiEnhanceContainer.visible=!1,this.updateHeroInfo(i,s),this.btnEnhance.visible=!0,this.btnSell.visible=!0,this.btnSell.activated=!0,this.applyModeButtonVisibility(),"book"==this.mode||"shop"==this.mode||"guild"==this.mode){
+ if("guild"==this.mode){
+ const i=t.POPUP_GUILD_MIN_HEIGHT;
+ this.bg.height<i&&(this.y=Math.max(0,VA.safeHeight-i))}
+ else this.y=Math.min(VA.safeHeight-t.POPUP_MIN_HEIGHT,VA.viewMainY);
+ this.bg.height=VA.safeHeight-this.y}
+ const e=("list"===this.mode||"roster"===this.mode)&&this.vo.evolStage>0&&this.vo.maxTrans>0;
+ this.tapTrans.visible=e,!e&&this.tapTrans.selected?this.onTapDetailClick():this.tapTrans.selected&&this.updateTransInfo(),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout(),this.updateDraggableContainer(),this.show2()}
+ hide(){
+ this.enhanceTimer&&this.syncEnhanceToServer(),this.multiEnhanceContainer.visible=!1,super.hide()}
+ showInBook(t,i="book"){
+ const s=wx.getInstance().getBookVO(t);
+ s&&(this.bookVo=bx.getVO(),this.bookVo.setBook(s.kindNum),this.show(this.bookVo,i))}
+ showInRoster(t,i){
+ const s=wx.getInstance().getBookVO(t);
+ s&&(this.bookVo=bx.getVO(),this.bookVo.setBook(s.kindNum),this.bookVo.trans=i,this.show(this.bookVo,"roster"))}
+ updateHeroInfo(i,s){
+ let e=!this.vo||this.vo.kindNum!=i.kindNum;
+ this.vo=i,this.mode=s,"book"===this.mode?this.icon.setMode(z2.BOOK):"shop"===this.mode||"guild"===this.mode?this.icon.setMode(z2.SHOP):"roster"===this.mode?this.icon.setMode(z2.BOOK):this.icon.setMode(z2.HERO_LIST),this.icon.setData(i),i.dmgType==ex.MAGICAL?this.lblAtk.texture=QA.getTexture("UI_Ekkorr","ICON_ATTACK2"):this.lblAtk.texture=QA.getTexture("UI_Ekkorr","UI_SWORD"),this.iconTribeType.texture=QA.getTexture("UI_Ekkorr",this.tribeIcons[i.tribe]),i.sex==hx.MALE?this.iconIsMale.texture=QA.getTexture("UI_Ekkorr","MALE_ICON"):i.sex==hx.FEMALE?this.iconIsMale.texture=QA.getTexture("UI_Ekkorr","FEMALE_ICON"):this.iconIsMale.texture=QA.getTexture("UI_Ekkorr","NEUTRAL_ICON"),i.detect?this.propertyContainer.addChild(this.iconDetect):this.propertyContainer.removeChild(this.iconDetect);
+ const n=SG.getText(i.getBookVo().getNameKey(),i.name);
+ this.lblName.text=n,this.starIcon.texture=QA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[i.grade-1],this.lblHp.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedMaxHp)}
+ `,this.lblAtk.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedAtkDmg)}
+ `,this.lblDef.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedPhyDef)}
+ `,this.lblMagDef.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedMagDef)}
+ `,this.lblBlock.text=`${
+ i.numBlock}
+ `,this.lblAtkSpd.text=`${
+ SG.getText("GAME_21","공격속도")}
+  : ${
+ (1e4/i.buffedAtkSpd/30).toFixed(1)}
+ `,this.lblMoveSpd.text=`${
+ SG.getText("GAME_22","이동속도")}
+  : ${
+ (10*i.buffedMoveSpd).toFixed(2)}
+ `,this.lblRecovery.text=`${
+ SG.getText("GAME_23","회복력")}
+  : ${
+ i.recovery.toFixed(1)}
+ %`,this.lblAtkRange.text=`${
+ SG.getText("GAME_20","공격범위")}
+  : ${
+ i.atkRange}
+ `,this.lblNormalAttackTitle.text=`# ${
+ SG.getText("GAME_26","일반 공격")}
+ `,this.lblNormalAttackDesc.text=SG.getText(i.getBookVo().getNAtkKey(),i.nAtk)||"",this.lblSpecialAttackTitle.text=`# ${
+ SG.getText("GAME_27","스킬 공격")}
+ `,i.sAtk?this.lblSpecialAttackDesc.text=SG.getText(i.getBookVo().getSAtkKey(),i.sAtk)||"":this.lblSpecialAttackDesc.text=SG.getText("COMMON_367","없음"),this.lblTribleTitle.text=`# ${
+ SG.getText("GAME_28","종족 특성")}
+ `,this.lblTribleDesc.text=this.getTribeTraitDesc(i.tribe,i.evolStage>0),this.btnEnhance.text=SG.getText("GAME_66","강화"),this.btnEvolve.text=SG.getText("GAME_67","진화"),this.btnEvolveMass.text=`${
+ SG.getText("GAME_67","진화")}
+  (x10)`,this.btnSell.text=SG.getText("GAME_68","해고");
+ const h=Mqt[this.vo.grade]??0;
+ this.btnEvolve.iconText=String(h);
+ const r=t.MASS_EVOLVE_COUNT;
+ this.btnEvolveMass.iconText=String(h*r);
+ const o=wx.HERO_MAX_ENHANCE;
+ if(this.vo.enhance+1>o)this.btnEnhance.iconText="Max",this.btnEnhance.activated=!1;
+ else{
+ const t=wzt.getInstance().getCost(i.enhance+1);
+ this.btnEnhance.iconText=VD.displayLargeNumberAsAlphabet(t),this.btnEnhance.activated=ML.medal>=t}
+ if(this.vo.enhance+10>o)this.btn10Enhance.visible=!1;
+ else{
+ const t=this.getNextIncrement(i.enhance,10);
+ let s=0;
+ for(let e=i.enhance+1;
+ e<=i.enhance+t;
+ e++)s+=wzt.getInstance().getCost(e);
+ this.btn10Enhance.text=`+${
+ t}
+ `,this.btn10Enhance.iconText=VD.displayLargeNumberAsAlphabet(s),this.btn10Enhance.activated=ML.medal>=s,this.btn10Enhance.visible=!0}
+ if(this.vo.enhance+100>o)this.btn100Enhance.visible=!1;
+ else{
+ const t=this.getNextIncrement(i.enhance,100);
+ let s=0;
+ for(let e=i.enhance+1;
+ e<=i.enhance+t;
+ e++)s+=wzt.getInstance().getCost(e);
+ this.btn100Enhance.text=`+${
+ t}
+ `,this.btn100Enhance.iconText=VD.displayLargeNumberAsAlphabet(s),this.btn100Enhance.activated=ML.medal>=s,this.btn100Enhance.visible=!0}
+ this.lblUniqueTitle.text=`# ${
+ SG.getText("GAME_72","고유스킬")}
+ `;
+ const a=kx.getInstance().getByKindNum(i.uniqueSkill);
+ if(a){
+ const t=SG.getText(a.getDescKey(),a.desc);
+ this.lblUniqueDesc.text=t}
+ else this.lblUniqueDesc.text=SG.getText("COMMON_367","없음");
+ const c=[],l=Math.min(i.goldBuffIds.length,12);
+ for(let t=0;
+ t<l;
+ t++)c.push({
+ index:t,id:i.goldBuffIds[t],value:i.goldBuffValues[t],level:i.level,mode:this.mode}
+ );
+ this.goldSkillList.dataProvider=c,e&&this.goldSkillList.scrollTo(0)}
+ getTribeTraitDesc(t,i){
+ if(i)switch(t){
+ case 1:return SG.getText("GAME_286","넉백 면역 (뒤로 밀리지 않습니다.)");
+ case 2:return SG.getText("GAME_287","블로우 면역 (날려보내는 공격을 받아도 날아가지 않습니다.)");
+ case 3:return SG.getText("GAME_288","냉기 면역 (얼려지지 않습니다.)");
+ case 4:return SG.getText("GAME_289","기절 면역 (기절하지 않습니다.)");
+ default:return""}
+ else switch(t){
+ case 1:return SG.getText("GAME_290","진화하면, 넉백에 면역이 되어, 밀리지 않습니다.");
+ case 2:return SG.getText("GAME_291","진화하면 블로우 면역이 되어, 큰 타격을 받아도 날아가지 않습니다.");
+ case 3:return SG.getText("GAME_292","진화하면, 얼려지지 않습니다.");
+ case 4:return SG.getText("GAME_293","진화하면, 기절에 면역이 됩니다.");
+ default:return""}
+ }
+ updateLayout(){
+ this.starIcon.x=this.lblName.x+this.lblName.width+5,this.starIcon.y=this.lblName.y+.5*(this.lblName.height-this.starIcon.height),this.tapDetail.x=9,this.tapDetail.y=this.icon.y+this.icon.height+4,this.tapSkill.x=this.tapDetail.x+this.tapDetail.width+2,this.tapSkill.y=this.tapDetail.y,this.tapTrans.x=this.tapSkill.x+this.tapSkill.width+2,this.tapTrans.y=this.tapDetail.y,this.transBg.x=this.icon.x,this.transBg.y=this.tapSkill.y+this.tapSkill.height+5,this.transPageNav.x=this.icon.x,this.transPageNav.y=this.transBg.y+this.transBg.height+8,this.btnTransMode10.x=this.transBg.x+this.transBg.width-this.btnTransMode10.width-10,this.btnTransMode10.y=this.transBg.y+15,this.btnTransMode1.x=this.btnTransMode10.x-this.btnTransMode1.width-5,this.btnTransMode1.y=this.btnTransMode10.y,this.lblTransMaxTop.x=this.transBg.x+.5*(this.transBg.width-this.lblTransMaxTop.width),this.lblTransMaxTop.y=this.transBg.y+.5*(this.transBg.height-this.lblTransMaxTop.height),this.lblTransMaxBottom.x=this.transPageNav.x+.5*(this.transBg.width-this.lblTransMaxBottom.width),this.lblTransMaxBottom.y=this.transPageNav.y+Math.max(280,.6*this.transPageNav.height),this.lblTransStepTitle.x=this.transBg.x+25,this.lblTransStepTitle.y=this.transBg.y+12,this.updateLayoutTransMaterials(),this.materialContainer.x=this.transBg.x,this.materialContainer.y=this.lblTransStepTitle.y+this.lblTransStepTitle.height+16,this.propertyContainer.x=this.bg.width-this.propertyContainer.width-20,this.propertyContainer.y=52,this.basicPropertyBg.x=this.icon.x,this.basicPropertyBg.y=this.tapSkill.y+this.tapSkill.height+5,this.basicPropertyBg2.x=this.icon.x,this.basicPropertyBg2.y=this.basicPropertyBg.y+this.basicPropertyBg.height+8,this.basicPropertyContainer.x=this.basicPropertyBg.x+25,this.basicPropertyContainer.y=this.basicPropertyBg.y+15,this.skillContainer.y=this.tapSkill.y+this.tapSkill.height+5,this.draggableContainer.x=this.basicPropertyContainer.x,this.lblNormalAttackDesc.y=this.lblNormalAttackTitle.y+this.lblNormalAttackTitle.height+0,this.lblSpecialAttackTitle.y=this.lblNormalAttackDesc.y+this.lblNormalAttackDesc.height+20,this.lblSpecialAttackDesc.y=this.lblSpecialAttackTitle.y+this.lblSpecialAttackTitle.height+0,this.lblTribleTitle.y=this.lblSpecialAttackDesc.y+this.lblSpecialAttackDesc.height+20,this.lblTribleDesc.y=this.lblTribleTitle.y+this.lblTribleTitle.height+0,this.lblUniqueTitle.y=this.lblTribleDesc.y+this.lblTribleDesc.height+20,this.lblUniqueDesc.y=this.lblUniqueTitle.y+this.lblUniqueTitle.height+0;
+ const t=this.bg.height-this.btnEnhance.height-18,i=this.btnEvolve.visible?this.btnEvolve.width+20:0,s=this.btnEnhance.width+20+i+this.btnSell.width,e=.5*(this.width-s);
+ this.btnEnhance.x=e,this.btnEnhance.y=t,this.btnEvolve.x=this.btnEnhance.x+this.btnEnhance.width+20,this.btnEvolve.y=t,this.btnSell.x=this.btnEvolve.x+i,this.btnSell.y=t;
+ let n=16;
+ const h=[this.btnHire];
+ if(this.btnHire.visible&&this.btnEvolve.visible&&(h.unshift(this.btnEvolve),this.btnEvolveMass.visible&&(n=10,h.splice(1,0,this.btnEvolveMass))),this.alignButtons(h,n,t),this.btnTrans.visible){
+ const i=[this.btnTrans];
+ this.btnTransTicket.visible&&i.push(this.btnTransTicket),this.alignButtons(i,n,t)}
+ if(this.multiEnhanceContainer.visible){
+ const t=5;
+ this.btn10Enhance.x=this.btnEnhance.x,this.btn10Enhance.y=this.btnEnhance.y-this.btn10Enhance.height-t,this.btn100Enhance.x=this.btnEnhance.x,this.btn100Enhance.y=this.btn10Enhance.y-this.btn100Enhance.height-t}
+ const r=this.draggableContainer.y-this.basicPropertyBg2.y;
+ this.draggableBg.height=this.lblUniqueDesc.y+this.lblUniqueDesc.height+r}
+ updateLayoutTransMaterials(){
+ const i=80*t.MATERIAL_SLOT_COUNT+33*(t.MATERIAL_SLOT_COUNT-1),s=.5*(this.transBg.width-i);
+ for(let e=0;
+ e<t.MATERIAL_SLOT_COUNT;
+ e++){
+ const t=this.materialIcons[e],i=this.materialCountLabels[e];
+ t.x=s+113*e,t.y=0,i.x=t.x+.5*(80-i.width)+5,i.y=70}
+ }
+ alignButtons(t,i,s){
+ if(!t||0==t.length)return;
+ let e=0;
+ const n=t.length;
+ for(let r=0;
+ r<n;
+ ++r)r>0&&(e+=i),e+=t[r].width;
+ let h=.5*(this.width-e);
+ for(let r=0;
+ r<n;
+ ++r)t[r].x=h,h+=t[r].width+i,t[r].y=s}
+ updateDraggableContainer(){
+ this.draggableContainer.max=this.draggableMask.y,this.draggableContainer.min=this.draggableMask.y+this.draggableMask.height-this.draggableBg.height,this.draggableContainer.yOffset=0,this.draggableContainer.y=this.draggableContainer.max}
+ async onHireClick(){
+ const t=wx.getInstance();
+ if(t.list.length>=ML.maxTeamSlots)return void(ML.maxTeamSlots<10?u2.getInstance().showMessage(SG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+SG.getText("GAME_51","슬롯을 추가로 확장해주세요.")):u2.getInstance().showMessage(SG.getText("GAME_50","영웅을 배치할 슬롯이 없습니다.")+"\n"+SG.getValueReplace("GAME_52","##",10,"최대 10명까지 배치할 수 있습니다.")));
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ let i=await rD.getInstance().hero.addToTeam(this.bookVo.kindNum,this.bookVo.trans);
+ if(0==i.success)return this.setRequestPending(!1),void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),kF.getInstance().updateAll(),yqt.getInstance().setData();
+ let s=i.body.addedHeroId,e=t.getVOWithId(s);
+ e&&jhi.getInstance().hireHero(e),$qt.getInstance().setData(),this.hide(),this.setRequestPending(!1)}
+ setRequestPending(t){
+ this.requestPending=t}
+ setHeroEvolve(t){
+ cS.getInstance().removeEventListener("HeroEvolve",this.onHeroEvolveBind),t&&(this.onHeroEvolveBind=this.onHeroEvolve.bind(this),cS.getInstance().addEventListener("HeroEvolve",this.onHeroEvolveBind))}
+ onHeroEvolve(t){
+ if(t&&t.detail){
+ let i=-1;
+ if("id"in t.detail&&(i=t.detail.id),i==this.vo.id){
+ this.updateHeroInfo(this.vo,this.mode);
+ const t=("list"===this.mode||"roster"===this.mode)&&this.vo.evolStage>0&&this.vo.maxTrans>0;
+ this.tapTrans.visible=t,!t&&this.tapTrans.selected?this.onTapDetailClick():this.tapTrans.selected&&this.updateTransInfo(),this.applyTabButtonVisibility(),this.applyTabResourceMode(),this.updateLayout(),this.updateDraggableContainer()}
+ }
+ }
+ getTransHonorCoinCost(t){
+ return wx.getTransHonorCoinCost(t)*this.transMode}
+ getTransTicket(){
+ return $Vt.getInstance().getHeroTransTicket(5)}
+ getTransTicketCostStr(){
+ return`${
+ this.getTransTicket()}
+ /${
+ (this.vo.trans+1)*this.transMode}
+ `}
+ isTransTicketActivated(){
+ return!(this.getTransTicket()<(this.vo.trans+1)*this.transMode)}
+ }
+ ;
+ Vt(Nqt,"HeroDetailPopup"),Kt(Nqt,"_instance"),Kt(Nqt,"POPUP_MIN_HEIGHT",950),Kt(Nqt,"POPUP_GUILD_MIN_HEIGHT",1080),Kt(Nqt,"MASS_EVOLVE_COUNT",10),Kt(Nqt,"MASS_TRANSCEND_COUNT",10),Kt(Nqt,"ENHANCE_DEBOUNCE_DELAY",3e3),Kt(Nqt,"MATERIAL_SLOT_COUNT",5),Kt(Nqt,"TRANS_BONUS",[{
+ stat:0,medal:0,maxLv:1200}
+ ,{
+ stat:40,medal:10,maxLv:1300}
+ ,{
+ stat:80,medal:20,maxLv:1400}
+ ,{
+ stat:120,medal:30,maxLv:1500}
+ ]),Kt(Nqt,"TRANS_TAB_MIN_WAVE",300);
+ let Pqt=Nqt;
+ var Dqt=(t=>(t.list="list",t.roster="roster",t.book="book",t.shop="shop",t.guild="guild",t))(Dqt||{
+ }
+ );
+ const Lqt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("늑대전사 ",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblKnightBuff",new JD("",4495871,cD.WHITE_OUTLINE_FONT_OPTION_16)),Kt(this,"lblPlusLv",new JD("",4513092,cD.WHITE_OUTLINE_FONT_OPTION_16)),Kt(this,"lblHp",new $B("UI_HEART","100",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblAtk",new $B("UI_MAGIC_WAND","20",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblDef",new $B("UI_PHY_DEFENSE","20",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblBlock",new $B("ICON_UNIT","0",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"btnUpgrade",new kU("UI_GOLD","10000","+1")),Kt(this,"btn10",new kU("UI_GOLD","100","+10")),Kt(this,"btn100",new kU("UI_GOLD","1000","+100")),Kt(this,"btn1000",new kU("UI_GOLD","10000","+1000")),Kt(this,"starIcon",new He(QA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[0])),Kt(this,"icon",new Y2),Kt(this,"heroContainer",new Ge),Kt(this,"multiLevelContainer",new Ge),Kt(this,"isMultiLevel",!1),Kt(this,"rapidClickCount",0),Kt(this,"lastRapidClickTime",0),Kt(this,"cost1",-1),Kt(this,"cost10",-1),Kt(this,"cost100",-1),Kt(this,"cost1000",-1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.addChild(this.heroContainer),this.addChild(this.multiLevelContainer),this.icon.x=-1,this.icon.y=.5*(this.bg.height-this.icon.height),this.heroContainer.addChild(this.icon),this.lblName.x=135,this.lblName.y=10,this.heroContainer.addChild(this.lblName),this.starIcon.x=this.lblName.x+this.lblName.width+5,this.starIcon.y=this.lblName.y+.5*(this.lblName.height-this.starIcon.height),this.heroContainer.addChild(this.starIcon),this.lblKnightBuff.visible=!1,this.heroContainer.addChild(this.lblKnightBuff),this.lblPlusLv.visible=!1,this.heroContainer.addChild(this.lblPlusLv),this.lblHp.x=this.lblName.x,this.lblHp.y=this.lblName.y+this.lblName.height+10,this.heroContainer.addChild(this.lblHp),this.lblAtk.x=this.lblHp.x+100,this.lblAtk.y=this.lblHp.y,this.heroContainer.addChild(this.lblAtk),this.lblDef.x=this.lblAtk.x+100,this.lblDef.y=this.lblHp.y,this.heroContainer.addChild(this.lblDef),this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblDef.x+95,this.lblBlock.y=this.lblHp.y,this.heroContainer.addChild(this.lblBlock),this.btnUpgrade.labelOrder=kU.TEXT_FIRST,this.btnUpgrade.textLabel.textSize=15,this.btnUpgrade.textAlign="left",this.btnUpgrade.iconScale=.7,this.btnUpgrade.color=kU.BROWN,this.btnUpgrade.height=60,this.btnUpgrade.width=110,this.btnUpgrade.x=this.bg.width-this.btnUpgrade.width-10,this.btnUpgrade.y=.5*(this.bg.height-this.btnUpgrade.height)-2,this.heroContainer.addChild(this.btnUpgrade),this.btnUpgrade.on("pointertap",t=>this.onUpgrade(t,1),this),this.btn10.labelOrder=kU.TEXT_FIRST,this.btn10.textLabel.textSize=15,this.btn10.textAlign="left",this.btn10.iconScale=.7,this.btn10.color=kU.BROWN,this.btn10.height=60,this.btn10.width=115,this.btn10.x=this.btnUpgrade.x-this.btn10.width-5,this.btn10.y=.5*(this.bg.height-this.btn10.height)-2,this.btn10.on("pointertap",()=>{
+ const i=this.getNextIncrement(this.data.level,10);
+ this.onUpgrade(null,i),t.autoCloseCounter=0}
+ ,this),this.multiLevelContainer.addChild(this.btn10),this.btn100.labelOrder=kU.TEXT_FIRST,this.btn100.textLabel.textSize=15,this.btn100.textAlign="left",this.btn100.iconScale=.7,this.btn100.color=kU.BROWN,this.btn100.height=60,this.btn100.width=115,this.btn100.x=this.btn10.x-this.btn100.width-5,this.btn100.y=.5*(this.bg.height-this.btn100.height)-2,this.btn100.on("pointertap",()=>{
+ const i=this.getNextIncrement(this.data.level,100);
+ this.onUpgrade(null,i),t.autoCloseCounter=0}
+ ,this),this.multiLevelContainer.addChild(this.btn100),this.btn1000.labelOrder=kU.TEXT_FIRST,this.btn1000.textLabel.textSize=15,this.btn1000.textAlign="left",this.btn1000.iconScale=.7,this.btn1000.color=kU.BROWN,this.btn1000.height=60,this.btn1000.width=115,this.btn1000.x=this.btn100.x-this.btn1000.width-5,this.btn1000.y=.5*(this.bg.height-this.btn1000.height)-2,this.btn1000.on("pointertap",()=>{
+ const i=this.getNextIncrement(this.data.level,1e3);
+ this.onUpgrade(null,i),t.autoCloseCounter=0}
+ ,this),this.multiLevelContainer.visible=!1}
+ get vo(){
+ return this.data}
+ onMultiLevel(){
+ $qt.getInstance().isMultiLevel=!$qt.getInstance().isMultiLevel,$qt.getInstance().setMultiLevel($qt.getInstance().isMultiLevel)}
+ getNextIncrement(t,i){
+ const s=t%i;
+ return 0===s?i:i-s}
+ onUpgrade(i,s=1){
+ if(!this.data||this.data.id<=0||this.data.kindNum<=0)return;
+ if(1===s){
+ const t=Date.now();
+ t-this.lastRapidClickTime<500?this.rapidClickCount++:this.rapidClickCount=1,this.lastRapidClickTime=t,this.rapidClickCount>=3&&!this.multiLevelContainer.visible&&(this.rapidClickCount=0,this.onMultiLevel())}
+ const e=this.data.level,n=this.data,h=K2.getInstance().getMaxLevel(n.grade,n.trans);
+ if(e>=h)return void u2.getInstance().showMessage(SG.getText("COMMON_369","최대 레벨입니다."));
+ const r=Math.min(e+s,h),o=K2.getInstance().getTotalGold(e,r),a=VR.getInstance().getGameplayMultiplier(OR.UnitUpgradeGold),c=Math.floor(o/a);
+ if(ML.gold<c)return void u2.getInstance().showMessage(SG.getText("COMMON_359","골드가 부족합니다."));
+ ML.gold-=c,kF.getInstance().updateGold();
+ const l=this.data;
+ l.level=r,uR.some(t=>e<t&&r>=t)&&VR.getInstance().recalculate(),this.setData(l),jhi.getInstance().udpateHero(l);
+ const u=this.data.id;
+ t.heroTargetLevels.set(u,this.data.level),t.markDirtyAndSchedule(),zjt.get().play(this,8,.5*(this.bg.height-104)),Tei.getInstance().onConditionChanged()}
+ static registerTargetLevel(i,s){
+ t.heroTargetLevels.set(i,s)}
+ static markDirtyAndSchedule(){
+ t.isDirty=!0,-1===t.numReviveSnapshot&&(t.numReviveSnapshot=ML.numRevive),null!==t.updateTimer&&clearTimeout(t.updateTimer),t.updateTimer=setTimeout(()=>{
+ t.sendToServer(),t.updateTimer=null,t.isDirty=!1,$qt.getInstance().isMultiLevel=!1,$qt.getInstance().setMultiLevel(!1)}
+ ,t.DEBOUNCE_DELAY)}
+ static async sendToServer(){
+ if(0===t.heroTargetLevels.size)return void(t.numReviveSnapshot=-1);
+ if(-1!==t.numReviveSnapshot&&t.numReviveSnapshot!==ML.numRevive)return t.heroTargetLevels.clear(),void(t.numReviveSnapshot=-1);
+ t.numReviveSnapshot=-1;
+ const i=new Map(t.heroTargetLevels);
+ t.heroTargetLevels.clear();
+ const s=[],e=[];
+ i.forEach((t,i)=>{
+ s.push(i),e.push(t)}
+ );
+ const n=s.join("|"),h=e.join("|");
+ let r=await rD.getInstance().hero.levelUp(n,h,ML.gold);
+ if(!1===r.success){
+ const t=await rD.getInstance().hero.getHeroInfo();
+ return t.success&&(ML.setUserInfo(t.body),kF.getInstance().updateAll(),$qt.getInstance().setData()),void wG.getInstance().showError(r)}
+ ML.setUserInfo(r.body),kF.getInstance().updateGold(),$qt.getInstance().isMultiLevel=!1,$qt.getInstance().setMultiLevel(!1)}
+ static cleanup(){
+ null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.isDirty&&(t.sendToServer(),t.isDirty=!1)}
+ static async cleanupAsync(){
+ null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.isDirty&&(t.isDirty=!1,await t.sendToServer())}
+ static cancel(){
+ null!==t.updateTimer&&(clearTimeout(t.updateTimer),t.updateTimer=null),t.heroTargetLevels.clear(),t.isDirty=!1,t.numReviveSnapshot=-1}
+ recalculateCosts(t){
+ if(!this.data||this.data.id<0||this.data.level<=0)return void(this.cost1=this.cost10=this.cost100=this.cost1000=-1);
+ const i=this.data,s=K2.getInstance(),e=s.getMaxLevel(i.grade,i.trans)-i.level;
+ if(e<=0)return void(this.cost1=this.cost10=this.cost100=this.cost1000=-1);
+ this.cost1=Math.floor(s.getTotalGold(i.level,i.level+1)/t);
+ const n=Math.min(this.getNextIncrement(i.level,10),e);
+ this.cost10=n>0?Math.floor(s.getTotalGold(i.level,i.level+n)/t):-1;
+ const h=Math.min(this.getNextIncrement(i.level,100),e);
+ this.cost100=h>0?Math.floor(s.getTotalGold(i.level,i.level+h)/t):-1;
+ const r=Math.min(this.getNextIncrement(i.level,1e3),e);
+ this.cost1000=r>0?Math.floor(s.getTotalGold(i.level,i.level+r)/t):-1}
+ refreshActivation(t){
+ const i=this.cost1>=0&&t>=this.cost1;
+ if(this.btnUpgrade.activated!==i&&(this.btnUpgrade.activated=i),!this.multiLevelContainer.visible)return;
+ const s=this.cost10>=0&&t>=this.cost10;
+ this.btn10.activated!==s&&(this.btn10.activated=s);
+ const e=this.cost100>=0&&t>=this.cost100;
+ this.btn100.activated!==e&&(this.btn100.activated=e);
+ const n=this.cost1000>=0&&t>=this.cost1000;
+ this.btn1000.activated!==n&&(this.btn1000.activated=n)}
+ static checkAutoClose(i){
+ const s=Date.now();
+ s-t.lastCounterUpdateTime>=900&&(t.lastCounterUpdateTime=s,t.autoCloseCounter++,t.autoCloseCounter>=t.AUTO_CLOSE_SECONDS&&(t.autoCloseCounter=0,i.isMultiLevel=!1,i.setMultiLevel(!1)))}
+ showMultiLevel(){
+ null==this.data||this.data.id<0||(this.multiLevelContainer.visible=!0,t.autoCloseCounter=0,t.lastCounterUpdateTime=Date.now(),this.refreshActivation(ML.gold))}
+ hideMultiLevel(){
+ this.multiLevelContainer.visible=!1,t.autoCloseCounter=0,t.lastCounterUpdateTime=0}
+ setData(t){
+ this.data=t;
+ let i=t;
+ const s=i.getBookVo();
+ if(!s)return void(this.visible=!1);
+ this.visible=!0;
+ const e=SG.getText(s.getNameKey(),i.name),n=K2.getInstance().getMaxLevel(i.grade,i.trans),h=i.level>=n?" (max)":"";
+ null!=this.index?this.lblName.text=this.index+1+". "+e+h:this.lblName.text=e+h,this.lblHp.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedMaxHp)}
+ `,this.lblAtk.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedAtkDmg)}
+ `,this.lblDef.text=`${
+ VD.displayLargeNumberAsAlphabet(i.buffedPhyDef)}
+ `,this.lblBlock.text=`${
+ i.numBlock}
+ `,this.starIcon.x=this.lblName.x+this.lblName.width+5,this.starIcon.texture=QA.getTextures("UI_Ekkorr","UI_UNIT_RARE")[i.grade-1];
+ let r=this.starIcon.x+50;
+ const o=ML.getKnightLevel(i.tribe);
+ o>0?(this.lblKnightBuff.text=`(+${
+ o}
+ )`,this.lblKnightBuff.textColor=4495871,this.lblKnightBuff.x=r,this.lblKnightBuff.y=this.lblName.y,this.lblKnightBuff.visible=!0,r+=this.lblKnightBuff.width+2):this.lblKnightBuff.visible=!1;
+ const a=VR.getInstance().getGameplayTotal(OR.PlusLv);
+ a>0?(this.lblPlusLv.text=`(+${
+ a}
+ )`,this.lblPlusLv.textColor=4513092,this.lblPlusLv.x=r,this.lblPlusLv.y=this.lblName.y,this.lblPlusLv.visible=!0):this.lblPlusLv.visible=!1,i.dmgType==ex.MAGICAL?this.lblAtk.texture=QA.getTexture("UI_Ekkorr","ICON_ATTACK2"):this.lblAtk.texture=QA.getTexture("UI_Ekkorr","UI_SWORD"),i.phyDef>i.magDef?this.lblDef.texture=QA.getTexture("UI_Ekkorr","UI_PHY_DEFENSE"):this.lblDef.texture=QA.getTexture("UI_Ekkorr","UI_MAGIC_DEFENSE"),this.icon.setData(i);
+ const c=VR.getInstance().getGameplayMultiplier(OR.UnitUpgradeGold);
+ this.recalculateCosts(c);
+ const l=i.level>=n;
+ if(this.btnUpgrade.text=l?"max":"+1",this.btnUpgrade.iconText=l?"":VD.displayLargeNumberAsAlphabet(this.cost1),this.btnUpgrade.iconLabel.texture=QA.getTexture("UI_Ekkorr",l?"UI_GRAY_GOLD":"UI_GOLD"),t.level>0){
+ const i=n-t.level,s=Math.min(this.getNextIncrement(t.level,10),i);
+ this.btn10.text=s>0?`+${
+ s}
+ `:"max",this.btn10.iconText=s>0?VD.displayLargeNumberAsAlphabet(this.cost10):"",this.btn10.iconLabel.texture=QA.getTexture("UI_Ekkorr",s>0?"UI_GOLD":"UI_GRAY_GOLD");
+ const e=Math.min(this.getNextIncrement(t.level,100),i);
+ this.btn100.text=e>0?`+${
+ e}
+ `:"max",this.btn100.iconText=e>0?VD.displayLargeNumberAsAlphabet(this.cost100):"",this.btn100.iconLabel.texture=QA.getTexture("UI_Ekkorr",e>0?"UI_GOLD":"UI_GRAY_GOLD");
+ const h=Math.min(this.getNextIncrement(t.level,1e3),i);
+ this.btn1000.text=h>0?`+${
+ h}
+ `:"max",this.btn1000.iconText=h>0?VD.displayLargeNumberAsAlphabet(this.cost1000):"",this.btn1000.iconLabel.texture=QA.getTexture("UI_Ekkorr",h>0?"UI_GOLD":"UI_GRAY_GOLD"),this.btn10.visible=!0,this.btn100.visible=!0,this.btn1000.visible=h>0}
+ this.refreshActivation(ML.gold)}
+ clearCache(){
+ }
+ async onClick(i,s){
+ !this.data||this.data.id<=0||this.data.kindNum<=0||this.multiLevelContainer.visible||i<this.btnUpgrade.x&&(await t.cleanupAsync(),Pqt.getInstance().show(this.data))}
+ }
+ ;
+ Vt(Lqt,"HeroItemRenderer"),Kt(Lqt,"updateTimer",null),Kt(Lqt,"DEBOUNCE_DELAY",3e3),Kt(Lqt,"isDirty",!1),Kt(Lqt,"heroTargetLevels",new Map),Kt(Lqt,"numReviveSnapshot",-1),Kt(Lqt,"autoCloseCounter",0),Kt(Lqt,"AUTO_CLOSE_SECONDS",5),Kt(Lqt,"lastCounterUpdateTime",0);
+ let Gqt=Lqt;
+ const Bqt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage"),Kt(this,"bgInput"),Kt(this,"inputEl"),Kt(this,"lblHint"),Kt(this,"btnCancel"),Kt(this,"btnConfirm"),Kt(this,"slotId",-1),Kt(this,"requestPending",!1),Kt(this,"onSuccess",null),this.title=SG.getText("GAME_1097","프리셋 이름 변경");
+ const t=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ t.fill=cD.COLOR_WHITE,t.lineHeight=30,t.fontWeight="normal",this.lblMessage=new JD(SG.getText("GAME_1098","프리셋 이름을 작성해주세요."),cD.DEFAULT_COLOR,t),this.addChild(this.lblMessage),cD.setLabelWrapWidth(this.lblMessage,this.width-40),this.bgInput=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Slot2"),leftWidth:4,topHeight:4,rightWidth:4,bottomHeight:4}
+ ),this.bgInput.visible=!1,this.bgInput.x=40,this.bgInput.width=this.width-2*this.bgInput.x,this.bgInput.height=70,this.addChild(this.bgInput),this.inputEl=this.createHTMLInput(),this.lblHint=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblHint),this.btnCancel=new Kzt(SG.getText("COMMON_2","취소")),this.btnCancel.outlineText=!0,this.btnCancel.width=240,this.btnCancel.height=65,this.btnCancel.onClick=this.onCancelClick.bind(this),this.addChild(this.btnCancel),this.btnConfirm=new Kzt(SG.getText("COMMON_1","확인")),this.btnConfirm.color=Kzt.COLOR_ORANGE,this.btnConfirm.outlineText=!0,this.btnConfirm.width=this.btnCancel.width,this.btnConfirm.height=this.btnCancel.height,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm),this.updateLayout(),this.on("removed",this.onRemoved)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ createHTMLInput(){
+ const i=document.createElement("input");
+ return i.type="text",i.maxLength=t.MAX_INPUT_LEN,i.style.position="absolute",i.style.fontFamily="Arial",i.style.fontSize="18px",i.style.textAlign="center",i.style.display="none",i.style.color="white",i.style.background="transparent",i.style.border="2px solid #684f3e",i.style.borderRadius="6px",i.style.boxSizing="border-box",i.addEventListener("input",()=>this.updateHint()),document.body.appendChild(i),i}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=80,this.bgInput.x=40,this.bgInput.y=this.lblMessage.y+this.lblMessage.height+20,this.lblHint.x=this.bgInput.x,this.lblHint.y=this.bgInput.y+this.bgInput.height+5,this.btnCancel.x=this.bgInput.x,this.btnCancel.y=this.lblHint.y+this.lblHint.height+20,this.btnConfirm.x=this.bgInput.x+this.bgInput.width-this.btnConfirm.width,this.btnConfirm.y=this.btnCancel.y,this.height=this.btnCancel.y+this.btnCancel.height+50}
+ showForSlot(t,i,s=null){
+ this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.slotId=t,this.inputEl.value=i??"",this.onSuccess=s,this.updateHint(),super.show()}
+ onShowMotionComplete(){
+ super.onShowMotionComplete(),this.showInputOverlay()}
+ hide(){
+ this.hideInputOverlay(),super.hide()}
+ onRemoved(){
+ this.hideInputOverlay()}
+ showInputOverlay(){
+ const t=this.toGlobal(this.bgInput.position),i=VA.stage.scale;
+ this.inputEl.style.display="block",this.inputEl.style.left=t.x+"px",this.inputEl.style.top=t.y+"px",this.inputEl.style.width=`${
+ Math.floor(this.bgInput.width*i.x)}
+ px`,this.inputEl.style.height=`${
+ Math.floor(this.bgInput.height*i.y)}
+ px`,this.inputEl.placeholder=SG.getText("GAME_1097","프리셋 이름 입력"),setTimeout(()=>this.inputEl.focus(),50)}
+ hideInputOverlay(){
+ this.inputEl.style.display="none",this.inputEl.blur()}
+ updateHint(){
+ const i=this.inputEl.value.length;
+ this.lblHint.text=`${
+ i}
+  / ${
+ t.MAX_INPUT_LEN}
+ `}
+ onCancelClick(){
+ this.hide()}
+ async onConfirmClick(){
+ if(this.requestPending)return;
+ if(this.slotId<0)return;
+ const t=(this.inputEl.value??"").trim();
+ this.requestPending=!0;
+ const i=await rD.getInstance().hero.renameHeroPreset(this.slotId,t);
+ if(this.requestPending=!1,!1!==i.success){
+ if(ML.setUserInfo(i.body),kF.getInstance().updateAll(),u2.getInstance().showMessage(SG.getText("GAME_1099","프리셋 이름이 변경되었습니다.")),this.onSuccess)try{
+ this.onSuccess()}
+ catch(Xst){
+ }
+ this.hide()}
+ else wG.getInstance().showError(i)}
+ }
+ ;
+ Vt(Bqt,"HeroPresetRenamePopup"),Kt(Bqt,"_instance"),Kt(Bqt,"MAX_INPUT_LEN",8);
+ let Uqt=Bqt;
+ const Fqt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"slotButtons",[]),Kt(this,"btnSave"),Kt(this,"lblSaveHint"),Kt(this,"saveMode",!1),Kt(this,"requestPending",!1),Kt(this,"onApplied",null),Kt(this,"longPressTimers",[null,null,null,null,null]),Kt(this,"longPressFired",[!1,!1,!1,!1,!1]),this.bg=new Lf,this.bg.roundRect(0,0,t.WIDTH,t.HEIGHT,6),this.bg.fill({
+ color:2825487,alpha:.6}
+ ),this.addChild(this.bg);
+ for(let n=0;
+ n<5;
+ n++){
+ const i=new gzt(this.getSlotName(n),t.SLOT_BUTTON_WIDTH,16);
+ i.autoResize=!1,i.lbl.textSize=16,i.width=t.SLOT_BUTTON_WIDTH,i.height=t.SLOT_BUTTON_HEIGHT,i.x=8+n*(t.SLOT_BUTTON_WIDTH+t.SLOT_GAP),i.y=4+.5*(t.ROW_HEIGHT-i.height),i.on("pointertap",()=>{
+ this.longPressFired[n]?this.longPressFired[n]=!1:this.onSlotClick(n)}
+ ,this),i.on("pointerdown",()=>this.startLongPress(n),this),i.on("pointerup",()=>this.cancelLongPress(n),this),i.on("pointerupoutside",()=>this.cancelLongPress(n),this),i.on("pointercancel",()=>this.cancelLongPress(n),this),i.selected=!1,this.slotButtons.push(i),this.addChild(i)}
+ const i=t.ROW_HEIGHT+8,s=t.ACTION_BUTTON_WIDTH,e=t.SLOT_BUTTON_HEIGHT;
+ this.btnSave=new eG("저장",s,8),this.btnSave.width=s,this.btnSave.height=e,this.btnSave.x=640-s-t.ACTION_BUTTON_RIGHT_MARGIN,this.btnSave.y=i+.5*(t.ROW_HEIGHT-e),this.btnSave.on("pointertap",this.onSaveClick,this),this.addChild(this.btnSave),this.lblSaveHint=new JD("프리셋 길게 누르면 이름 변경",16767354,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSaveHint.setWrapWidth(400),this.lblSaveHint.x=12,this.lblSaveHint.visible=!0,this.addChild(this.lblSaveHint),this.recenterHint()}
+ recenterHint(){
+ const i=t.ROW_HEIGHT+8;
+ this.lblSaveHint.y=i+.5*(t.ROW_HEIGHT-this.lblSaveHint.height)}
+ get barHeight(){
+ return t.HEIGHT}
+ getSlotName(t){
+ const i=t+1;
+ return SG.getValueReplace("GAME_744","##",String(i),`${
+ i}
+  번`)}
+ getSlotDisplayLabel(t){
+ const i=wx.getInstance().heroPresets[t];
+ return i&&i.label&&i.label.length>0?i.label:this.getSlotName(t)}
+ startLongPress(i){
+ this.cancelLongPress(i),this.saveMode||this.requestPending||(this.longPressFired[i]=!1,this.longPressTimers[i]=setTimeout(()=>{
+ this.longPressFired[i]=!0,this.longPressTimers[i]=null,this.openRenamePopup(i)}
+ ,t.LONG_PRESS_MS))}
+ cancelLongPress(t){
+ null!==this.longPressTimers[t]&&(clearTimeout(this.longPressTimers[t]),this.longPressTimers[t]=null)}
+ openRenamePopup(t){
+ const i=wx.getInstance().heroPresets[t];
+ Uqt.getInstance().showForSlot(t,(null==i?void 0:i.label)??"",()=>this.update())}
+ update(){
+ const t=wx.getInstance(),i=t.heroPresets,s=this.saveMode?-1:t.getActiveHeroPresetSlot();
+ for(let e=0;
+ e<this.slotButtons.length;
+ e++){
+ const t=this.slotButtons[e],n=i[e],h=n&&n.team.length>0,r=this.getSlotName(e);
+ let o=this.getSlotDisplayLabel(e);
+ this.saveMode&&(o=h?SG.getValueReplace("GAME_746","##",r,`${
+ r}
+  덮어쓰기`):SG.getValueReplace("GAME_745","##",r,`${
+ r}
+  저장`)),t.text=o,t.selected=s===e,t.alpha=this.saveMode||h?1:.65}
+ this.saveMode?this.btnSave.text=SG.getText("COMMON_2","취소"):this.btnSave.text=SG.getText("GAME_527","저장"),this.lblSaveHint.visible=!0,this.lblSaveHint.text=this.saveMode?SG.getText("GAME_747","저장할 슬롯을 선택하세요"):SG.getText("GAME_1100","프리셋 길게 누르면 이름 변경"),this.recenterHint()}
+ setSaveMode(t){
+ this.saveMode=t,this.update()}
+ updateLanguage(){
+ this.update()}
+ async onSlotClick(t){
+ if(this.requestPending)return;
+ const i=wx.getInstance(),s=i.heroPresets[t];
+ if(this.saveMode){
+ if(0===i.list.length)return u2.getInstance().showMessage(SG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다.")),void this.setSaveMode(!1);
+ const e=this.getSlotName(t),n=s&&s.team.length>0?SG.getValueReplace("GAME_749","##",e,`${
+ e}
+  프리셋을 덮어쓰시겠습니까?`):SG.getValueReplace("GAME_748","##",e,`${
+ e}
+  프리셋에 현재 상태를 저장하시겠습니까?`);
+ return void b$t.getInstance().show(n,async()=>{
+ await this.doSave(t,(null==s?void 0:s.label)??""),this.setSaveMode(!1)}
+ )}
+ s&&0!==s.team.length?b$t.getInstance().show(SG.getText("GAME_750","선택한 프리셋으로 교체하시겠습니까?"),async()=>{
+ await this.doApply(t)}
+ ):u2.getInstance().showMessage(SG.getText("GAME_753","비어있는 슬롯입니다. 저장 버튼으로 저장하세요."))}
+ onSaveClick(){
+ this.requestPending||(this.saveMode?this.setSaveMode(!1):0!==wx.getInstance().list.length?this.setSaveMode(!0):u2.getInstance().showMessage(SG.getText("GAME_305","팀에 최소 1명의 영웅이 배치되어 있어야 합니다.")))}
+ async doSave(t,i){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const s=wx.getInstance().list.map(t=>({
+ kindNum:t.kindNum,trans:t.trans,enhance:t.enhance}
+ )),e=await rD.getInstance().hero.saveHeroPreset(t,i,s,!0);
+ this.requestPending=!1,!1!==e.success?(ML.setUserInfo(e.body),kF.getInstance().updateAll(),this.update(),u2.getInstance().showMessage(SG.getText("GAME_756","프리셋이 저장되었습니다."))):wG.getInstance().showError(e)}
+ async doApply(t){
+ if(this.requestPending)return;
+ this.requestPending=!0;
+ const i=wx.getInstance(),s=i.list.map(t=>t.id),e=i.list.map(t=>t.level);
+ Gqt.cancel();
+ const n=await rD.getInstance().hero.applyHeroPreset(t,!0,e);
+ if(this.requestPending=!1,!1===n.success)return void wG.getInstance().showError(n);
+ ML.setUserInfo(n.body),i.setLastAppliedHeroPresetSlot(t),kF.getInstance().updateAll(),this.update();
+ const h=jhi.getInstance(),r=bx.getVO();
+ for(const o of s)r.id=o,h.fireHero(r);
+ r.remove();
+ for(const o of i.list)await h.hireHero(o);
+ u2.getInstance().showMessage(SG.getText("GAME_757","프리셋이 적용되었습니다.")),this.onApplied&&this.onApplied()}
+ }
+ ;
+ Vt(Fqt,"HeroPresetBar"),Kt(Fqt,"WIDTH",630),Kt(Fqt,"ROW_HEIGHT",42),Kt(Fqt,"HEIGHT",2*Fqt.ROW_HEIGHT+8),Kt(Fqt,"SLOT_BUTTON_WIDTH",118),Kt(Fqt,"SLOT_BUTTON_HEIGHT",38),Kt(Fqt,"SLOT_GAP",4),Kt(Fqt,"ACTION_BUTTON_WIDTH",120),Kt(Fqt,"ACTION_BUTTON_RIGHT_MARGIN",10),Kt(Fqt,"LONG_PRESS_MS",500);
+ let Hqt=Fqt;
+ const Wqt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"presetBar"),Kt(this,"lblMessage",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"cnt",0),Kt(this,"lastGold",-1),Kt(this,"lastUgMult",-1),Kt(this,"isMultiLevel",!1),this.presetBar=new Hqt,this.presetBar.x=5,this.presetBar.y=wqt.getInstance().height,this.presetBar.visible=!1,this.presetBar.onApplied=()=>this.setData(),this.list=new d5(Gqt,630,VA.listHeight),this.list.x=5,this.list.y=wqt.getInstance().height,this.lblMessage.y=189;
+ const t=this.lblMessage.getStyle();
+ t.fontSize=18,this.lblMessage.setStyle(t),this.addChild(this.list),this.addChild(this.lblMessage),this.addChild(this.presetBar),this.addChild(wqt.getInstance()),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ togglePresetBar(){
+ this.setPresetBarVisible(!this.presetBar.visible)}
+ setPresetBarVisible(t){
+ this.presetBar.visible=t;
+ const i=wqt.getInstance().height;
+ if(t){
+ this.presetBar.update();
+ const t=this.presetBar.barHeight+4;
+ this.list.y=i+t,this.list.setListHeight(VA.listHeight-t)}
+ else this.list.y=i,this.list.setListHeight(VA.listHeight)}
+ get isPresetBarVisible(){
+ return this.presetBar.visible}
+ setMultiLevel(t){
+ let i=this.list.getItemList();
+ if(t)for(let s=0;
+ s<i.length;
+ s++)i[s].showMultiLevel();
+ else for(let s=0;
+ s<i.length;
+ s++)i[s].hideMultiLevel()}
+ onAdded(){
+ LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this),Tei.getInstance().unregisterListItemsGetter("Hero"),Gqt.cleanup()}
+ getListItems(){
+ return this.list.getItemList()}
+ onFrame(){
+ var t;
+ if(null==(null==(t=this.parent)?void 0:t.parent))return LM.getInstance().remove(this.onFrame,this),void Gqt.cleanup();
+ this.isMultiLevel&&Gqt.checkAutoClose(this);
+ const i=ML.gold,s=VR.getInstance().getGameplayMultiplier(OR.UnitUpgradeGold),e=s!==this.lastUgMult;
+ if(i===this.lastGold&&!e)return;
+ this.lastGold=i,this.lastUgMult=s;
+ const n=this.list.getItemList();
+ for(let h=0;
+ h<n.length;
+ h++)e&&n[h].recalculateCosts(s),n[h].refreshActivation(i);
+ ++this.cnt>60&&(this.cnt=0,this.updateRobsterBtnRedDot())}
+ updateRobsterBtnRedDot(){
+ const t=wx.getInstance().lastBuyRefreshTime;
+ let i=3600-.001*(tx.time-t);
+ i<=0&&(i=0),i>0?wqt.getInstance().hideHireBtnRedDot():wqt.getInstance().showHireBtnRedDot()}
+ setData(){
+ LM.getInstance().add(this.onFrame,this),this.lastGold=-1,this.lastUgMult=-1,Tei.getInstance().registerListItemsGetter(()=>this.getListItems(),"Hero"),wqt.getInstance().update(),wqt.getInstance().updateLanguage();
+ let t=[];
+ for(let i=0;
+ i<wx.getInstance().list.length;
+ i++){
+ const s=wx.getInstance().list[i];
+ !s||s.kindNum<=0||t.push(s)}
+ t.sort((t,i)=>t.enhance!==i.enhance?i.enhance-t.enhance:t.level!==i.level?i.level-t.level:t.grade!==i.grade?i.grade-t.grade:t.tribe-i.tribe),0===t.length?(this.lblMessage.text=SG.getText("GAME_1200","배치된 영웅이 없습니다."),this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.visible=!0,this.list.visible=!1):(this.lblMessage.visible=!1,this.list.visible=!0,this.list.dataProvider=t),this.setMultiLevel(!1),this.isMultiLevel=!1,this.presetBar.visible&&this.presetBar.update(),this.updateRobsterBtnRedDot()}
+ get className(){
+ return"HeroSubView"}
+ updateLanguage(){
+ this.setData()}
+ }
+ ;
+ Vt(Wqt,"HeroSubView"),Kt(Wqt,"instance");
+ let $qt=Wqt;
+ const jqt=class t extends uzt{
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ constructor(){
+ super(),this.currentSubView=$qt.getInstance()}
+ setData(){
+ $qt.getInstance().setData(),this.currentSubView=$qt.getInstance()}
+ get className(){
+ return"HeroView"}
+ }
+ ;
+ Vt(jqt,"HeroView"),Kt(jqt,"instance");
+ let Vqt=jqt;
+ const Kqt=class t extends ozt{
+ constructor(){
+ let t;
+ super(),Kt(this,"btnBook",new zWt("Book",110)),Kt(this,"btnClose",new kKt),Kt(this,"btnGuide"),Kt(this,"lblMaxCapacity",new $B("menu_icon_03_on","0/10",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"filterIcons"),Kt(this,"_selectedTribes",[1,2,3,4]),Kt(this,"btnClosePoint",new gi),Kt(this,"btnClosePointInitialized",!1),this.lblTitle.y=2,this.lblMaxCapacity.iconScale=.5,this.lblMaxCapacity.x=this.lblTitle.x,this.lblMaxCapacity.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblMaxCapacity),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.addChild(this.btnClose),this.btnBook.width=110,this.btnBook.height=45,this.btnBook.y=.5*(this.bg.height-this.btnBook.height),this.addChild(this.btnBook),this.btnBook.on("pointertap",this.onBook,this),this.btnClose.onClick=()=>{
+ $qt.getInstance().updateLanguage(),Vqt.getInstance().currentSubView=$qt.getInstance(),Yqt.getInstance().isRunning&&Yqt.getInstance().tutorialIndex==Yqt.TUTORIAL_INDEX_WAVE0&&Yqt.getInstance().clearTutorialWave0()}
+ ,this.filterIcons=[];
+ for(let i=0;
+ i<4;
+ ++i)t=new czt(i),t.scale=.8,t.y=.5*this.bg.height,this.addChild(t),this.filterIcons.push(t),t.onClick=this.onFilterIconClick.bind(this);
+ this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ hzt.getInstance().showGuide()}
+ ),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLayout(){
+ this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+3,this.btnGuide.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnGuide.height)+2,this.btnBook.x=this.btnClose.x-this.btnBook.width-5;
+ const t=this.filterIcons.length;
+ let i=this.btnBook.x+.5*this.filterIcons[t-1].width-5;
+ for(let s=t-1;
+ s>-1;
+ --s)this.filterIcons[s].x=i-this.filterIcons[s].width-1,i=this.filterIcons[s].x}
+ update(){
+ const t=ML.maxTeamSlots,i=wx.getInstance().list.length;
+ this.lblMaxCapacity.text=`${
+ i}
+ /${
+ t}
+ `}
+ setData(){
+ this.update(),this.updateLanguage()}
+ resetFilter(){
+ this._selectedTribes=[1,2,3,4];
+ const t=this.filterIcons.length;
+ for(let i=0;
+ i<t;
+ ++i)this.filterIcons[i].reset()}
+ onBook(){
+ Iqt.getInstance().setData(),Iqt.getInstance().show2()}
+ get selectedTribes(){
+ return this._selectedTribes}
+ onFilterIconClick(t,i){
+ this._selectedTribes.length=0;
+ const s=this.filterIcons.length;
+ for(let e=0;
+ e<s;
+ ++e)this.filterIcons[e].selected&&this._selectedTribes.push(e+1);
+ yqt.getInstance().onFilterChanged()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_13","영웅목록")),this.btnBook.text=SG.getText("GAME_220","도감"),this.updateLayout()}
+ getBtnClosePoint(){
+ if(0==this.btnClosePointInitialized){
+ this.btnClosePointInitialized=!0;
+ const t=this.btnClose;
+ this.btnClosePoint.x=Zqt.getInstance().x+t.x,this.btnClosePoint.y=Zqt.getInstance().y+40+t.y}
+ return this.btnClosePoint}
+ }
+ ;
+ Vt(Kqt,"HeroRosterSubMenu"),Kt(Kqt,"instance");
+ let zqt=Kqt;
+ const qqt=class t{
+ constructor(){
+ Kt(this,"isOpened",!0),Kt(this,"savedIndex",0),Kt(this,"tutorialIndex",0),Kt(this,"enableMissionGuide",!0),Kt(this,"bottomMenuUnlockList",[0,1,2,3,4,5]),Kt(this,"isHelpHeroPopupped",!1),Kt(this,"isHelpQuestPopupped",!1),Kt(this,"isHelpRevivePopupped",!1)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ async init(){
+ }
+ get isRunning(){
+ return 0!=this.isOpened&&this.tutorialIndex>0}
+ async startTutorial(){
+ 0!=this.isOpened&&(ML.numRevive>0||(this.savedIndex=Number(await $A.getTutorialID()??0),ML.wave>this.savedIndex?1==ML.wave?(this.enableMissionGuide=!1,this.tutorialIndex!=t.TUTORIAL_INDEX_WAVE0&&(this.tutorialIndex=t.TUTORIAL_INDEX_WAVE0,await this.startTutorialWave0())):2==ML.wave?(this.enableMissionGuide=!1,this.tutorialIndex=ML.wave,await this.startTutorialWave2()):3==ML.wave?(this.enableMissionGuide=!1,this.tutorialIndex=t.TUTORIAL_INDEX_WAVE3,await this.startTutorialWave3()):(this.enableMissionGuide=!0,this.tutorialIndex=ML.wave,this.startTutorialWaveEtc()):1==ML.wave?(this.bottomMenuUnlockList=[2],Lni.getInstance().onMenuClickByIndex(2),Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),Aei.getInstance().opened=!1,this.enableMissionGuide=!1):2==ML.wave?(this.bottomMenuUnlockList=[1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList)):3==ML.wave?(this.bottomMenuUnlockList=[0,1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),this.enableMissionGuide=!0,Tei.getInstance().init()):(this.bottomMenuUnlockList=[0,1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList))))}
+ async startTutorialWave0(){
+ this.bottomMenuUnlockList=[2],Lni.getInstance().onMenuClickByIndex(2),Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),Aei.getInstance().opened=!1,qG.getInstance().stop(),rL.getInstance().stopUpdate(),ezt.getInstance().onCompleteHandler=this.onTurotial0Toast1Complete.bind(this);
+ const t=SG.getText("DIALOGUE_TEXT_75","윽.. 머리야.. 여긴 어디지? 뭔가 익숙한데...");
+ ezt.getInstance().show("L_FRO",t)}
+ onTurotial0Toast1Complete(){
+ const t=EKt.getInstance().getMainList();
+ t&&(xKt.getInstance().onHideHandler=this.onHelpCastlePopupHide.bind(this),xKt.getInstance().showWith(t[0].main,2,!0,!1))}
+ onHelpCastlePopupHide(){
+ jhi.getInstance().startTutorial0Wave(),ezt.getInstance().onCompleteHandler=this.onTurotial0Toast2Complete.bind(this);
+ const t=SG.getText("DIALOGUE_TEXT_76","저 슬라임 녀석들.. 성을 공격하러 오는 것 같은데?");
+ ezt.getInstance().show("L_SUR",t)}
+ onTurotial0Toast2Complete(){
+ qG.getInstance().stop(),this.bottomMenuUnlockList.push(1),Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList);
+ const t=Lni.getInstance().getMenu(1),i=Lni.getInstance().getHeroPoint();
+ UKt.getInstance().show(i.x,i.y,t.width,t.height)}
+ showHeroHelpPopup(){
+ this.isHelpHeroPopupped||this.tutorialIndex==t.TUTORIAL_INDEX_WAVE0&&(UKt.getInstance().hide(),setTimeout(()=>{
+ const t=EKt.getInstance().getMainList();
+ t&&(xKt.getInstance().onHideHandler=this.highlightHeroRosterButton.bind(this),xKt.getInstance().showWith(t[1].main,0,!0,!1),this.isHelpHeroPopupped=!0)}
+ ,100))}
+ highlightHeroRosterButton(){
+ const t=wqt.getInstance().btnRoaster,i=wqt.getInstance().getBtnRosterPoint();
+ UKt.getInstance().show(i.x+.5*t.width,i.y+.5*t.height,t.width,t.height)}
+ highlightHeroHireButton(){
+ const t=yqt.getInstance().getItems();
+ if(t.length<1)return void this.highlightHeroHireCloseButton();
+ const i=t[0].btnHire,s=yqt.getInstance().getBtnHirePoint();
+ UKt.getInstance().show(s.x+.5*i.width,s.y+.5*i.height,i.width,i.height)}
+ highlightHeroHireCloseButton(){
+ const t=zqt.getInstance().btnClose,i=zqt.getInstance().getBtnClosePoint();
+ UKt.getInstance().show(i.x+.5*t.width,i.y+.5*t.height,t.width,t.height)}
+ clearTutorialWave0(){
+ UKt.getInstance().hide(),qG.getInstance().start()}
+ async endTutorialWave0(){
+ await $A.saveTutorialID(String(t.TUTORIAL_INDEX_WAVE0)),this.savedIndex=1}
+ async startTutorialWave2(){
+ this.bottomMenuUnlockList=[1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),Lni.getInstance().onMenuClickByIndex(1),Aei.getInstance().opened=!1}
+ async startTutorialWave3(){
+ if(this.bottomMenuUnlockList=[1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),Aei.getInstance().opened=!1,zD.getInstance().npcDialogue){
+ const t=[],i=new HKt;
+ i.code="L_SAD",i.text=SG.getText("DIALOGUE_TEXT_5","영웅들을 무장시키고 성벽을 보강하려니... 생각보다 자금이 턱없이 부족하군."),i.position=1,t.push(i);
+ const s=new HKt;
+ s.code="S_SMI",s.text=SG.getText("DIALOGUE_TEXT_6","이해합니다, 성주임. 마침 성주님의 명성을 듣고 도움을 청하는 이들이 줄을 섰답니다. [퀘스트]를 해결해 주시면 그들은 기꺼이 금화를 내놓을 거예요."),s.position=2,t.push(s),ezt.getInstance().onCompleteHandler=this.onTurotial3ToastComplete.bind(this),t.length>0&&ezt.getInstance().showDialogues(t)}
+ else this.onTurotial3ToastComplete()}
+ onTurotial3ToastComplete(){
+ this.bottomMenuUnlockList=[0,1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),rL.getInstance().startUpdate();
+ const t=Lni.getInstance().getMenu(0),i={
+ x:t.x,y:t.y,width:t.width,height:t.height}
+ ;
+ Oei.getInstance().showOnTarget(Lni.getInstance(),i)}
+ showQuestHelpPopup(){
+ this.isHelpQuestPopupped||setTimeout(()=>{
+ const t=EKt.getInstance().getMainList();
+ t&&(xKt.getInstance().onHideHandler=this.endTutorialWave3.bind(this),xKt.getInstance().showWith(t[2].main,0,!0,!1),this.isHelpQuestPopupped=!0)}
+ ,100)}
+ async endTutorialWave3(){
+ await $A.saveTutorialID(String(t.TUTORIAL_INDEX_WAVE3)),this.savedIndex=t.TUTORIAL_INDEX_WAVE3,this.enableMissionGuide=!0,Tei.getInstance().init(),QKt.getInstance().doAccountCreate()}
+ async startTutorialWaveEtc(){
+ Aei.getInstance().opened=!1,ML.wave>=10?this.bottomMenuUnlockList=[0,1,2,5]:this.bottomMenuUnlockList=[0,1,2],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList)}
+ async startTutorialRevive(){
+ if(0!=this.isOpened&&0==this.isHelpRevivePopupped){
+ const t=EKt.getInstance().getMainList();
+ t&&(xKt.getInstance().onHideHandler=this.endTutorialRevive.bind(this),xKt.getInstance().showWith(t[3].main,0,!0,!1),this.isHelpRevivePopupped=!0)}
+ }
+ async endTutorialRevive(){
+ this.bottomMenuUnlockList=[0,1,2,3,4,5],Lni.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),await $A.saveTutorialID(String(t.TUTORIAL_INDEX_REVIVE))}
+ async showHeroHelpPopupByPresent(t){
+ if(t<5||t>7)return;
+ const i=EKt.getInstance().getMainList();
+ i&&(xKt.getInstance().onHideHandler=this.endTutorialWave3.bind(this),xKt.getInstance().showWith(i[t].main,0,!0,!1),this.isHelpQuestPopupped=!0)}
+ }
+ ;
+ Vt(qqt,"TutorialController"),Kt(qqt,"instance"),Kt(qqt,"TUTORIAL_INDEX_WAVE0",1),Kt(qqt,"TUTORIAL_INDEX_WAVE3",3),Kt(qqt,"TUTORIAL_INDEX_REVIVE",100);
+ let Yqt=qqt;
+ const Xqt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg",new ZD),Kt(this,"lblText",new JD("",cD.COLOR_WHITE,cD.DEFAULT_DESC_FONT_OPTION_16)),Kt(this,"btnChat",new n$t("Btn_Guild_Chatting","UI_Ekkorr")),Kt(this,"btnHelp"),Kt(this,"messages",[]),Kt(this,"currentIndex",0),Kt(this,"BG_WIDTH",640),Kt(this,"BG_HEIGHT",20),Kt(this,"SCROLL_SPEED",.8),Kt(this,"VISIBLE_WIDTH",640),Kt(this,"chatUnlockTick",0),Kt(this,"onLanguageChangeBind"),Kt(this,"textY",-1),Kt(this,"update",Vt(()=>{
+ !this.btnChat.visible&&++this.chatUnlockTick>=60&&(this.chatUnlockTick=0,ML.maxWave>=t.CHAT_UNLOCK_WAVE&&(this.btnChat.visible=!0),Yqt.getInstance().isOpened?(this.btnHelp.visible=!0,this.btnHelp.x=this.BG_WIDTH-this.btnHelp.width+6,this.btnChat.x=this.btnHelp.x-this.btnChat.width+10):(this.btnHelp.visible=!1,this.btnChat.x=this.BG_WIDTH-this.btnChat.width+6)),0!==this.messages.length&&(this.lblText.x-=this.SCROLL_SPEED,this.lblText.x+this.lblText.width<0&&(this.currentIndex=(this.currentIndex+1)%this.messages.length,this.showCurrentMessage()))}
+ ,"update")),this.bg.width=this.BG_WIDTH,this.bg.height=this.BG_HEIGHT,this.bg.alpha=.4,this.bg.setIndex(7),this.addChild(this.bg),this.lblText.textColor=cD.COLOR_WHITE,this.lblText.wordWrap=!1,this.addChild(this.lblText),this.btnHelp=new MB("UI_Ekkorr","Btn_help_p"),this.btnHelp.x=this.BG_WIDTH-this.btnHelp.width+6,this.btnHelp.y=.5*(this.BG_HEIGHT-this.btnHelp.height)+4,this.btnHelp.onClick=this.onHelpBtnClick.bind(this),this.addChild(this.btnHelp),this.btnChat.scale=1,this.btnChat.x=this.btnHelp.x-this.btnChat.width+10,this.btnChat.y=this.btnHelp.y,this.btnChat.onClick=this.onChatBtn.bind(this),this.btnChat.visible=ML.maxWave>=t.CHAT_UNLOCK_WAVE,this.addChild(this.btnChat),un.shared.add(this.update,this),this.setLanguageChange(!0)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ async onChatBtn(){
+ if(VVt())return pKt.getInstance().show(),void cKt.getInstance().start();
+ const t=await rD.getInstance().guild.getMyMembership(!0);
+ AD.setMembershipData(t.body),pKt.getInstance().show(),cKt.getInstance().start()}
+ onHelpBtnClick(){
+ DKt.getInstance().show()}
+ setLanguageChange(t){
+ cS.getInstance().removeEventListener("LanguageChange",this.onLanguageChangeBind),t&&(this.onLanguageChangeBind=this.onLanguageChange.bind(this),cS.getInstance().addEventListener("LanguageChange",this.onLanguageChangeBind))}
+ onLanguageChange(t=null){
+ this.refreshMessages()}
+ refreshMessages(){
+ this.messages=vKt.getInstance().getFilteredMessages(),this.currentIndex=0,this.showCurrentMessage()}
+ showCurrentMessage(){
+ 0!==this.messages.length&&(this.lblText.text=this.messages[this.currentIndex],this.lblText.x=this.VISIBLE_WIDTH+15,this.textY<0&&(this.textY=.5*(this.BG_HEIGHT-this.lblText.height)),this.lblText.y=this.textY)}
+ setMessages(t){
+ this.messages=t,this.currentIndex=0,this.showCurrentMessage()}
+ addMessage(t){
+ this.messages.push(t)}
+ clearMessages(){
+ this.messages=[],this.currentIndex=0,this.lblText.text=""}
+ destroy(){
+ un.shared.remove(this.update,this),this.setLanguageChange(!1),super.destroy()}
+ }
+ ;
+ Vt(Xqt,"MessageInfo"),Kt(Xqt,"instance"),Kt(Xqt,"CHAT_UNLOCK_WAVE",50);
+ let Jqt=Xqt;
+ const Qqt=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"_currentView",null),Kt(this,"container",new Ge),Kt(this,"bg"),Kt(this,"onLanguageChangeBind"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:8,topHeight:8,rightWidth:8,bottomHeight:8}
+ ),this.addChild(this.bg),this.bg.width=640,this.bg.height=VA.viewMainHeight,this.container.y=40,this.addChild(this.container),kF.getInstance().y=-1,this.addChild(kF.getInstance()),Jqt.getInstance().y=-20,this.addChild(Jqt.getInstance()),this.setLanguageChange(!0)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setExpandedMode(i){
+ i?(this.y=t.EXPANDED_Y,this.bg.height=VA.safeHeight-t.EXPANDED_Y-VA.BOTTOM_MENU_H):(this.y=VA.viewMainY,this.bg.height=VA.viewMainHeight)}
+ static getExpandedListHeight(){
+ return VA.safeHeight-t.EXPANDED_Y-VA.BOTTOM_MENU_H-VA.SUB_MENU_H-VA.RESOURCE_INFO_H}
+ get currentView(){
+ return this._currentView}
+ set currentView(t){
+ null!=this._currentView&&this.container.removeChild(this._currentView),this._currentView=t,null!=this._currentView&&(this.container.addChild(this._currentView),this._currentView.x=0,this._currentView.y=0,BVt.showItemsInVertical([this._currentView],20,.3))}
+ setLanguageChange(t){
+ cS.getInstance().removeEventListener("LanguageChange",this.onLanguageChangeBind),t&&(this.onLanguageChangeBind=this.onLanguageChange.bind(this),cS.getInstance().addEventListener("LanguageChange",this.onLanguageChangeBind))}
+ onLanguageChange(t=null){
+ this._currentView&&this._currentView.updateLanguage()}
+ }
+ ;
+ Vt(Qqt,"ViewMain"),Kt(Qqt,"instance"),Kt(Qqt,"EXPANDED_Y",320);
+ let Zqt=Qqt;
+ const tYt=class extends r5{
+ constructor(){
+ super(),Kt(this,"receivedIcon"),Kt(this,"activatedBg"),Kt(this,"_activated",!0),Kt(this,"_received",!1),this.activatedBg=new He(QA.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.activatedBg.visible=!this._activated,this.addChild(this.activatedBg),this.receivedIcon=new He(QA.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)}
+ }
+ ;
+ Vt(tYt,"AchievementRewardItem");
+ let iYt=tYt;
+ const sYt=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblIndex"),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","Package_2"))),Kt(this,"lblName"),Kt(this,"lblProgress"),Kt(this,"barBg"),Kt(this,"barFill"),Kt(this,"rewardContainer",new Ge),Kt(this,"rewardItems",[]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:135,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=t.W,this.bg.height=t.H,this.addChild(this.bg),this.lblIndex=new JD("",16764057,cD.DEFAULT_OUTLINE_FONT_OPTION_32),this.addChild(this.icon),this.lblName=new JD("",16764057,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblName),this.barBg=new ZD,this.barBg.setIndex(4),this.barBg.width=t.BAR_W,this.barBg.height=t.BAR_H,this.barBg.alpha=.5,this.addChild(this.barBg),this.barFill=new ZD,this.barFill.setIndex(3),this.barFill.width=t.BAR_W,this.barFill.height=t.BAR_H,this.addChild(this.barFill),this.lblProgress=new JD("0/0",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblProgress),this.addChild(this.rewardContainer);
+ for(let t=0;
+ t<7;
+ t++){
+ const t=new iYt;
+ t.scale.set(.7),t.visible=!1,this.rewardItems.push(t),this.rewardContainer.addChild(t)}
+ }
+ get width(){
+ return t.W}
+ get height(){
+ return t.H}
+ setData(i){
+ const s=i.index+1;
+ this.lblIndex.text=`${
+ s}
+ `,this.lblIndex.x=.5*(t.INDEX_AREA_W-this.lblIndex.width),this.lblIndex.y=.5*(this.height-this.lblIndex.height),this.icon.x=.5*(t.INDEX_AREA_W-this.icon.width),this.icon.y=.5*(this.height-this.icon.height);
+ const e=SG.getText("GAME_946","총 결제 금액"),n=xG.isUsdCurrency()?`$${
+ wU.setComma(i.amount)}
+ `:`₩${
+ wU.setComma(i.amount)}
+ `;
+ this.lblName.text=`${
+ e}
+  (${
+ n}
+ )`,this.lblName.height,t.BAR_H,this.lblName.x=140,this.lblName.y=5;
+ const h=this.lblName.y+this.lblName.height+5;
+ this.barBg.x=140,this.barBg.y=h,this.barFill.x=140,this.barFill.y=h;
+ const r=Number(i.amount)>0?Math.min(1,Math.max(0,Number(i.userAmount)/Number(i.amount))):0;
+ this.barFill.width=t.BAR_W*r,this.lblProgress.text=`${
+ Math.floor(100*r)}
+ %`,this.lblProgress.x=140+this.barBg.width-this.lblProgress.width,this.lblProgress.y=this.lblName.y,this.showRewards(i.rewards,1==r),this.rewardContainer.x=140,this.rewardContainer.y=this.barBg.y+this.barBg.height+7}
+ showRewards(t,i){
+ const s=Math.min(t.length,7);
+ let e=0,n=!1;
+ for(let h=0;
+ h<7;
+ h++){
+ const r=this.rewardItems[h];
+ n=!1,h<s?(r.setDataFrom(t[h]),r.visible=!0,r.x=e,e+=r.width*r.scale.x+5,r.received=i,r.activated=!i,r.type!=n5.ticket||r.subType!=n5.heroGacha&&r.subType!=n5.heroSelect&&r.subType!=n5.treasureGacha&&r.subType!=n5.petSelect||(n=!0)):r.visible=!1,this.setItemEvent(r,n)}
+ }
+ setItemEvent(t,i){
+ t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
+ onItemTap(t){
+ const i=t.target;
+ if(!i)return;
+ let s="";
+ if(i.type==n5.ticket&&i.subType==n5.heroGacha?s=SG.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.heroSelect?s=SG.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.treasureGacha?s=SG.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==n5.ticket&&i.subType==n5.petSelect?s=SG.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i.type!=n5.trans||i.subType!=n5.hero&&i.subType!=n5.treasure?i.type==n5.runeTicket&&(s=SG.getText("GAME_1502","레이드 상점에서 크리스탈을 랜덤하게 획득할 수 있습니다.")):s=SG.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다."),s){
+ const t=l5.getInstance();
+ t.text=s;
+ let e=this.rewardContainer.x+i.x-20;
+ e+t.width+7>this.bg.x+this.bg.width&&(e=this.bg.x+this.bg.width-t.width-7);
+ let n=i.y-i.height;
+ n<7&&(n=7),t.show(this,e,n)}
+ }
+ }
+ ;
+ Vt(sYt,"PaymentEventItemRenderer"),Kt(sYt,"W",534),Kt(sYt,"H",102),Kt(sYt,"BAR_W",380),Kt(sYt,"BAR_H",10),Kt(sYt,"INDEX_AREA_W",124);
+ let eYt=sYt;
+ const nYt=class t extends OB{
+ constructor(){
+ super(),Kt(this,"lblGuide"),this.lblGuide=new AB("@",this.width-90,16,cD.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_945","결제 이벤트");
+ const t=[SG.getText("GAME_947","목표 금액에 도달하면 보상이 우편으로 발송됩니다."),SG.getText("GAME_948","총 결제 금액은 이벤트 기간 내 결제분만 반영됩니다."),SG.getText("GAME_986","붉은 보석으로 상품 구매 시, 결제 이벤트에 반영됩니다."),SG.getText("GAME_987","웹 마켓에서 진행된 결제는 결제 이벤트에 반영되지 않습니다.")];
+ this.lblGuide.text=t.map(t=>`@ ${
+ t}
+ `).join("\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(nYt,"PaymentEventGuidePopup"),Kt(nYt,"_instance");
+ let hYt=nYt;
+ const rYt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"bntMonth",new gzt(SG.getText("COMMON_482","월간"),215)),Kt(this,"btnSpecial",new gzt(SG.getText("GAME_1158","스페셜"),215)),Kt(this,"tabs"),Kt(this,"activeIndex",0),Kt(this,"infoBg"),Kt(this,"lblPeriod"),Kt(this,"lblRemainTitle"),Kt(this,"lblRemainTime"),Kt(this,"lblTotal"),Kt(this,"lblAmount"),Kt(this,"btnGuide"),Kt(this,"list"),Kt(this,"endTime",0),Kt(this,"count",0),this.title="결제 이벤트",this.width=580,this.outSideClickHide=!0,this.tabs=[this.btnSpecial,this.bntMonth];
+ for(let i=0;
+ i<this.tabs.length;
+ i++){
+ const t=this.tabs[i];
+ this.addChild(t);
+ const s=i;
+ t.onClick=()=>this.switchTab(s)}
+ this.layoutTabs(),this.infoBg=new TB,this.infoBg.setIndex(2),this.infoBg.width=this.width-46,this.infoBg.x=23,this.contentContainer.addChild(this.infoBg),this.lblPeriod=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblPeriod),this.lblRemainTitle=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblRemainTitle),this.lblRemainTime=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblRemainTime),this.lblTotal=new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblTotal),this.lblAmount=new JD("",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblAmount),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=this.infoBg.x+this.infoBg.width-this.btnGuide.width-10,this.btnGuide.y=this.infoBg.y+10,this.contentContainer.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ hYt.getInstance().showGuide()}
+ );
+ const t=this.width-46;
+ this.list=new d5(eYt,t,300),this.list.x=23,this.contentContainer.addChild(this.list),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onAdded(){
+ LM.getInstance().add(this.onEnter,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onEnter,this)}
+ async update(){
+ await xG.getEventList()}
+ show(){
+ null==xG.currentPaymentMonthEvent?this.activeIndex=0:null==xG.currentPaymentSpecialEvent&&(this.activeIndex=1),this.switchTab(this.activeIndex),super.show()}
+ updateLayout(){
+ this.title=SG.getText("GAME_945","결제 이벤트");
+ const t=0==this.activeIndex?xG.currentPaymentSpecialEvent:xG.currentPaymentMonthEvent;
+ let i=[];
+ if(t){
+ const s=t.userAmount,e=t.endTime.replace("T"," ").replace(".000Z","");
+ this.endTime=new Date(t.endTime).getTime(),this.endTime,tx.time,this.lblPeriod.text=SG.getText("GAME_545","이벤트 기간")+` : ~ ${
+ e}
+  (UTC)`,this.lblRemainTitle.text=SG.getText("COMMON_29","남은 시간")+" : ",this.onEnterUpdate(),this.lblTotal.text=SG.getText("GAME_946","총 결제 금액")+" : ",this.lblAmount.text=xG.isUsdCurrency()?`$${
+ wU.setComma(s)}
+ `:`₩${
+ wU.setComma(s)}
+ `,this.lblAmount.textColor=cD.COLOR_BRIGHT_GREEN;
+ let n=0;
+ for(let h=0;
+ h<t.rewards.length;
+ h++){
+ const e={
+ index:h,userAmount:s,rewards:t.rewards[h],amount:xG.isUsdCurrency()?t.amounts[h].usdAmount:t.amounts[h].amount}
+ ;
+ i.push(e),s>=Number(e.amount)&&(n=h)}
+ this.list.dataProvider=i,t.rewards.length<4?this.list.scrollTo(0):this.list.scrollTo(n)}
+ this.lblPeriod.x=this.lblRemainTitle.x=this.lblTotal.x=50,this.lblRemainTime.x=this.lblRemainTitle.x+this.lblRemainTitle.width,this.lblAmount.x=this.lblTotal.x+this.lblTotal.width;
+ const s=null!=xG.currentPaymentMonthEvent&&null!=xG.currentPaymentSpecialEvent;
+ this.tabs.forEach(t=>t.visible=s);
+ const e=s?125:70;
+ this.infoBg.y=e,this.btnGuide.y=this.infoBg.y+10,this.lblPeriod.y=this.infoBg.y+20,this.lblRemainTitle.y=this.lblRemainTime.y=this.lblPeriod.y+this.lblPeriod.height+10,this.lblTotal.y=this.lblAmount.y=this.lblRemainTitle.y+this.lblRemainTitle.height+10,this.infoBg.height=this.lblTotal.y+this.lblTotal.height-this.infoBg.y+17;
+ const n=this.infoBg.y+this.infoBg.height+14;
+ this.list.y=n;
+ const h=Math.min(352,103*i.length);
+ this.list.setListHeight(h),this.height=this.list.y+this.list.height+30}
+ onEnter(){
+ ++this.count>60&&(this.count=0,this.onEnterUpdate())}
+ onEnterUpdate(){
+ const t=.001*(this.endTime-tx.time);
+ this.lblRemainTime.textColor=t<43200?cD.COLOR_RED:cD.DEFAULT_COLOR,this.lblRemainTime.text=t>0?`${
+ wU.displayTimeAsTwoOfDDHHMMSS(t)}
+ `:SG.getText("GAME_949","이벤트 종료")}
+ switchTab(t){
+ this.activeIndex=t;
+ for(let i=0;
+ i<this.tabs.length;
+ i++)this.tabs[i].selected=i===t;
+ this.updateLayout()}
+ layoutTabs(){
+ let t=.5*(this.width-46-2);
+ for(const s of this.tabs)s.fitWithinWidth(t,50);
+ let i=23;
+ for(let s=0;
+ s<this.tabs.length;
+ s++){
+ const e=this.tabs[s];
+ i=23+(t+2)*s,e.x=i,e.y=65}
+ }
+ }
+ ;
+ Vt(rYt,"PaymentEventPopup"),Kt(rYt,"_instance"),Kt(rYt,"TAB_HEIGHT",60);
+ let oYt=rYt;
+ const aYt=class t extends ozt{
+ constructor(){
+ super(),Kt(this,"tabs",[]),Kt(this,"buttons",[]),Kt(this,"activeIndex",0),Kt(this,"onTabChange",null),Kt(this,"btnPaymentEvent",new MB("UI_Ekkorr","Package_2",.7)),Kt(this,"clickedEventInfo",[]),Kt(this,"cnt",0),this.btnPaymentEvent.onClick=this.onPaymentEventClick.bind(this),this.addChild(this.btnPaymentEvent),this.btnPaymentEvent.visible=!1,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ async onAdded(){
+ this.btnPaymentEvent.hideRedDot();
+ const t=await $A.getPaymentEventInfo();
+ if(t)for(this.clickedEventInfo=t.split("#").map(t=>""===t?[0]:t.split("|").map(Number));
+ this.clickedEventInfo.length<2;
+ )this.clickedEventInfo.push([0]);
+ else this.clickedEventInfo=Array.from({
+ length:2}
+ ,()=>[0]);
+ LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ LM.getInstance().remove(this.onFrame,this)}
+ async onPaymentEventClick(){
+ await oYt.getInstance().update(),oYt.getInstance().show();
+ const t=[xG.currentPaymentSpecialEvent,xG.currentPaymentMonthEvent];
+ this.clickedEventInfo=[];
+ for(const i of t){
+ if(!i){
+ this.clickedEventInfo.push([]);
+ continue}
+ const t=[];
+ t.push(i.id);
+ for(let s=0;
+ s<i.rewards.length;
+ s++){
+ let e=i.amounts[s].amount;
+ xG.isUsdCurrency()&&(e=i.amounts[s].usdAmount),i.userAmount>=e?t.push(1):t.push(0)}
+ this.clickedEventInfo.push(t)}
+ $A.savePaymentEventInfo(this.clickedEventInfo.map(t=>t.join("|")).join("#"))}
+ onFrame(){
+ this.cnt-- >0||(this.cnt=30,this.updatePaymentEvent())}
+ updatePaymentEvent(){
+ if(this.buttons.length<2)return;
+ const t=this.buttons[1];
+ if(this.buttons[1]&&(xG.isValidEvent(RG.PAYMENT_EVENT)?(this.btnPaymentEvent.visible=!0,xG.currentPaymentSpecialEvent?t.showEventTag(-3,2):t.hideEventTag()):(this.btnPaymentEvent.visible=!1,t.hideEventTag()),this.btnPaymentEvent.visible&&(xG.currentPaymentSpecialEvent||xG.currentPaymentMonthEvent))){
+ const t=!!xG.currentPaymentSpecialEvent&&this.clickedEventInfo[0][0]<xG.currentPaymentSpecialEvent.id,i=!!xG.currentPaymentMonthEvent&&this.clickedEventInfo[1][0]<xG.currentPaymentMonthEvent.id;
+ t||this.checkNewReach(0)||i||this.checkNewReach(1)?this.btnPaymentEvent.showRedDot():this.btnPaymentEvent.hideRedDot()}
+ }
+ checkNewReach(t){
+ const i=0==t?xG.currentPaymentSpecialEvent:xG.currentPaymentMonthEvent;
+ if(!i)return!1;
+ for(let s=0;
+ s<i.rewards.length;
+ s++){
+ let e=i.amounts[s].amount;
+ if(xG.isUsdCurrency()&&(e=i.amounts[s].usdAmount),0==this.clickedEventInfo[t][s+1]&&i.userAmount>=e)return!0}
+ return!1}
+ setTabs(t){
+ for(const i of this.buttons)this.removeChild(i);
+ this.buttons=[],this.tabs=t;
+ for(let i=0;
+ i<t.length;
+ i++){
+ const s=t[i],e=new gzt(SG.getText(s.labelKey,s.defaultText));
+ e.height=50,this.addChild(e),this.buttons[i]=e;
+ const n=i;
+ e.onClick=()=>this.setActiveTab(n)}
+ this.layoutTabs(),this.setActiveTab(0),this.updateLayout()}
+ layoutTabs(){
+ if(this.buttons.reduce((t,i)=>t+i.width,0)+2*Math.max(0,this.buttons.length-1)<=628){
+ let t=634;
+ for(let i=this.buttons.length-1;
+ i>=0;
+ i--){
+ const s=this.buttons[i];
+ s.height=50,t-=s.width+2,s.x=t,s.y=5}
+ }
+ else{
+ const t=this.buttons.length,i=Math.floor((628-2*(t-1))/t),s=56;
+ let e=634;
+ for(let n=t-1;
+ n>=0;
+ n--){
+ const t=this.buttons[n];
+ t.setMultilineMode(i,s,15),e-=i+2,t.x=e,t.y=.5*(60-s)}
+ }
+ }
+ setActiveTab(t){
+ this.activeIndex=t;
+ for(let i=0;
+ i<this.buttons.length;
+ i++)this.buttons[i].selected=i===t;
+ this.onTabChange&&this.onTabChange(t)}
+ updateLayout(){
+ const t=this.buttons[0];
+ this.btnPaymentEvent.x=this.lblTitle.x+this.lblTitle.width+10,this.btnPaymentEvent.y=t.y+.5*(t.height-this.btnPaymentEvent.height)}
+ updateLanguage(){
+ this.setTitle(SG.getText("COMMON_356","상점")),this.setTabs(this.tabs)}
+ }
+ ;
+ Vt(aYt,"ShopSubMenu"),Kt(aYt,"instance");
+ let cYt=aYt;
+ const lYt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("2배속 ",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","Shop_Icon_07"))),Kt(this,"btnBuy",new VB("UI_GEM","100")),Kt(this,"btnAd",new VB("UI_MOVIE_SMALL",SG.getText("GAME_236","광고"))),Kt(this,"lblRemaining",new JD("",11184810,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblCooldown",new JD("",16737894,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"requesting",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.x=5,this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.addChild(this.icon),this.lblName.x=135,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.btnBuy.lbl.iconScale=.8,this.btnBuy.color=VB.BROWN,this.btnBuy.height=55,this.btnBuy.width=140,this.btnBuy.x=this.bg.width-this.btnBuy.width-6,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.on("pointerdown",this.onBuy,this),this.btnAd.lbl.iconScale=.6,this.btnAd.color=ZL.BROWN,this.btnAd.height=55,this.btnAd.width=140,this.btnAd.x=this.bg.width-this.btnAd.width-6,this.btnAd.y=.5*(this.bg.height-this.btnAd.height),this.addChild(this.btnAd),this.btnAd.onClick=this.onAdWatch.bind(this),this.lblRemaining.y=.5*(this.bg.height-this.lblRemaining.height),this.addChild(this.lblRemaining),this.lblCooldown.visible=!1,this.addChild(this.lblCooldown)}
+ async onBuy(t){
+ if(1==this.data.kindNum){
+ let t=await rD.getInstance().user.buySpeed15();
+ if(0==t.success)return void wG.getInstance().showError(t);
+ ML.setUser(t.body),kF.getInstance().updateAll(),qG.getInstance().setSpeed(2)}
+ }
+ async onAdWatch(){
+ var t;
+ try{
+ const t=sjt.getInstance().checkApproved();
+ if(0==t.approved)return void wG.getInstance().show(t.errorMessage)}
+ catch(s){
+ const t=SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
+ return void wG.getInstance().show(t)}
+ if(this.requesting)return;
+ if(!(null==(t=this.data)?void 0:t.isAd))return;
+ const i=this.data.adsType;
+ if(0!==eU.getInstance().getDailyRemaining(i)){
+ if(eU.getInstance().isCooldownReady(i)){
+ this.requesting=!0;
+ try{
+ ML.canSkipAds?(CU.trackAd("ad_skip",String(i)),await this.onAdComplete()):(CU.trackAd("ad_try",String(i)),await jL(async()=>{
+ CU.trackAd("ad_success",String(i)),await this.onAdComplete()}
+ ,i,()=>{
+ CU.trackAd("ad_fail",String(i))}
+ ))}
+ finally{
+ this.requesting=!1}
+ }
+ }
+ else wG.getInstance().show(SG.getText("GAME_244","오늘 최대 횟수를 초과했습니다."))}
+ async onAdComplete(){
+ const t=this.data.adsType,i=await rD.getInstance().ads.watch(t,!0);
+ if(!1!==i.success){
+ if(lVt.getInstance().markDirty(),i.body.user&&(ML.setUserData(i.body.user),kF.getInstance().updateAll()),i.body.ads&&eU.getInstance().setData(i.body.ads),i.body.dungeon&&Nx.getInstance().setData(i.body.dungeon),"speed"===i.body.rewardType&&qG.getInstance().setSpeed(2),5===t){
+ const t=eU.getInstance().getDailyRemaining(5),i=eU.getInstance().isCooldownReady(5);
+ 0!==t&&i||jhi.getInstance().removeAdsGoblins()}
+ this.updateRemaining()}
+ else wG.getInstance().showError(i)}
+ setData(t){
+ this.data=t,t.isAd?(this.btnBuy.visible=!1,this.btnAd.visible=!0,this.lblName.text=t.name,this.icon.scale.set(1),this.icon.texture=QA.getTexture("UI_Ekkorr",t.icon),this.icon.y=.5*(this.bg.height-this.icon.height),this.updateRemaining()):(this.btnBuy.visible=!0,this.btnAd.visible=!1,this.lblRemaining.visible=!1,this.lblName.text=t.name,(1==t.kindNum||2==t.kindNum)&&(this.icon.texture=QA.getTexture("UI_Ekkorr",t.icon)),this.icon.y=.5*(this.bg.height-this.icon.height),this.btnBuy.text=t.gem.toString()),this.icon.x=60-.5*this.icon.width,this.lblRemaining.visible?cD.setLabelWrapWidth(this.lblName,this.lblRemaining.x-this.lblName.x-5):cD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x-5),this.lblName.y=.5*(this.bg.height-this.lblName.height)}
+ updateRemaining(){
+ var t;
+ (null==(t=this.data)?void 0:t.isAd)&&this.updateCooldown()}
+ updateCooldown(){
+ var t;
+ if(!(null==(t=this.data)?void 0:t.isAd))return;
+ const i=this.data.adsType,s=eU.getInstance().getCooldownRemaining(i),e=eU.getInstance().getDailyRemaining(i),n=0===e,h=e>=0&&this.data.dailyMax,r=this.btnAd.x-8,o=.5*this.bg.height;
+ if(s>0&&!n){
+ const t=Math.ceil(s/1e3),i=Math.floor(t/60),n=t%60,a=`${
+ String(i).padStart(2,"0")}
+ :${
+ String(n).padStart(2,"0")}
+ `;
+ this.lblCooldown.visible=!0,this.lblCooldown.text=a,this.btnAd.activated=!1,h?(this.lblRemaining.visible=!0,this.lblRemaining.text=`${
+ e}
+ /${
+ this.data.dailyMax}
+ `,this.lblCooldown.x=r-this.lblCooldown.width,this.lblCooldown.y=o-this.lblCooldown.height-1,this.lblRemaining.x=r-this.lblRemaining.width,this.lblRemaining.y=o+1):(this.lblRemaining.visible=!1,this.lblCooldown.x=r-this.lblCooldown.width,this.lblCooldown.y=o-.5*this.lblCooldown.height)}
+ else this.lblCooldown.visible=!1,this.btnAd.activated=!n,h?(this.lblRemaining.visible=!0,this.lblRemaining.text=`${
+ e}
+ /${
+ this.data.dailyMax}
+ `,this.lblRemaining.x=r-this.lblRemaining.width,this.lblRemaining.y=o-.5*this.lblRemaining.height):this.lblRemaining.visible=!1}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(lYt,"ShopItemRenderer");
+ let uYt=lYt;
+ const dYt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),this.list=new KO(uYt,635,VA.listHeight),this.list.x=0,this.list.y=0,this.addChild(this.list),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ LM.getInstance().add(this.onFrame,this)}
+ onRemoved(){
+ Tei.getInstance().unregisterListItemsGetter("Shop"),LM.getInstance().remove(this.onFrame,this)}
+ onFrame(){
+ var t;
+ if(null==(null==(t=this.parent)?void 0:t.parent))return;
+ const i=this.list.getItemList();
+ for(let s=0;
+ s<i.length;
+ s++)!1!==i[s].visible&&i[s].updateCooldown()}
+ getListItems(){
+ return this.list.getItemList()}
+ setData(){
+ Tei.getInstance().registerListItemsGetter(()=>this.getListItems(),"Shop");
+ let t=[];
+ t.push({
+ kindNum:1,icon:"UI_SHOP_SPEED2",name:SG.getValueReplaceMulti("GAME_57",["@@","##"],[20,2],"20분간 게임속도 2배 증가"),gem:100,desc:SG.getValueReplaceMulti("GAME_57",["@@","##"],[20,2],"20분간 게임속도 2배 증가")}
+ ),t.push({
+ isAd:!0,adsType:2,dailyMax:20,icon:"UI_SHOP_SPEED2",name:SG.getValueReplaceMulti("GAME_228",["##","@@"],[20,2],"{
+  광고보고 20분간 2배속 }
+ "),rewardDesc:SG.getValueReplaceMulti("GAME_232",["##","@@","$$"],[10,2,20],"{
+  20분간 2배속, 하루 최대 3회 }
+ ")}
+ ),t.push({
+ isAd:!0,adsType:3,dailyMax:3,icon:"UI_COIN_Big",name:SG.getValueReplace("GAME_229","##",100,"{
+  광고보고 명예코인 100개 }
+ "),rewardDesc:SG.getValueReplaceMulti("GAME_233",["##","@@"],[100,3],"{
+  명예코인 100개, 하루 최대 3회 }
+ ")}
+ ),t.push({
+ isAd:!0,adsType:5,dailyMax:10,icon:"UI_SHOP_GEM",name:SG.getValueReplace("GAME_231","##",100,"{
+  광고보고 보석 100개 }
+ "),rewardDesc:SG.getValueReplaceMulti("GAME_235",["##","@@"],[100,10],"{
+  보석 100개, 하루 최대 10회 }
+ ")}
+ ),this.list.dataProvider=t,this.onAdded()}
+ get className(){
+ return"ShopGemSubView"}
+ }
+ ;
+ Vt(dYt,"ShopGemSubView"),Kt(dYt,"instance");
+ let fYt=dYt;
+ const pYt=class extends n$t{
+ constructor(t="Icon_Web_Market",i="UI_Ekkorr"){
+ super(t,i),Kt(this,"lbl");
+ const s=cD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ s.fill=cD.COLOR_BRIGHT_ORANGE,this.lbl=new JD("WEB",s.fill,s),this.lbl.eventMode="none",this.addChild(this.lbl),this.update()}
+ update(){
+ super.update(),this.lbl&&(this.lbl.x=this.icon.x-.5*this.lbl.width,this.lbl.y=this.icon.y+10),this.pivot.set(.5*this.width,.5*this.height)}
+ onDown(){
+ this.scale=.95}
+ onUp(){
+ this.scale=1}
+ get width(){
+ return this.icon.width}
+ get height(){
+ return this.icon.height}
+ }
+ ;
+ Vt(pYt,"WebMarketButton");
+ let gYt=pYt;
+ const mYt=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",16777215,cD.ERROR_POPUP_LABEL_OPTION)),Kt(this,"btnConfirm",new eG("이동")),Kt(this,"btnCancel",new CWt("취소")),Kt(this,"iconNote"),Kt(this,"lblNote",new JD("",cD.COLOR_LIGHT_BROWN,cD.ERROR_POPUP_LABEL_OPTION)),Kt(this,"onConfirm",null),Kt(this,"onCancel",null),this.title="알림",this.lblMessage.y=90;
+ let t=this.lblMessage.getStyle();
+ t.align="center",this.lblMessage.setStyle(t),this.iconNote=new He(QA.getTexture("UI_Ekkorr","UI_Alarm")),this.iconNote.anchor.set(.5),this.iconNote.scale.set(.8),this.iconNote.x=35,t=this.lblNote.getStyle(),t.fontSize=17,t.lineHeight=25,this.lblNote.setStyle(t),this.lblNote.x=this.iconNote.x+.5*this.iconNote.width+5,this.contentContainer.addChild(this.lblMessage,this.btnConfirm,this.btnCancel,this.lblNote,this.iconNote),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.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()}
+ onCancelClick(){
+ this.hide();
+ let t=this.onCancel;
+ this.onCancel=null,null!==t&&t()}
+ showError(t,i=null,s=null,e=null){
+ let n=t.errorMessage,h=SG.getErrorMessage(t.error);
+ h&&(n=h),i&&(n+="\n"+i),this.show(n,s,e)}
+ show(t,i=null,s=null){
+ this.onConfirm=i,this.onCancel=s;
+ let e=SG.getText("GAME_939","웹 마켓에서 특별한 상품들을 만나보실 수 있습니다."),n=SG.getText("GAME_940","웹 마켓으로 이동하시겠습니까?"),h="("+SG.getText("GAME_941","구매하신 상품은 인게임 우편으로 전송됩니다.")+")",r=SG.getText("GAME_942","상품 결제 및 구매 문제 발생 시, NEXT MARKET 고객센터로 문의해 주세요.");
+ this.lblMessage.text=e+"\n"+n+"\n"+h,this.lblNote.text=r,this.title=SG.getText("COMMON_4","알림"),this.btnConfirm.text=SG.getText("COMMON_65","이동"),this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout(),super.show(t,i,s)}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnConfirm.y=this.lblMessage.y+this.lblMessage.height+30,this.btnCancel.y=this.btnConfirm.y,this.iconNote.y=this.btnConfirm.y+this.btnConfirm.height+40,this.lblNote.y=this.iconNote.y+.5*(this.iconNote.height-this.lblNote.height),this.height=this.lblNote.y+this.lblNote.height+30}
+ getDefaultPositionY(){
+ return.3*VA.stageHeight}
+ onBackButton(){
+ return this.onConfirmClick(),!0}
+ }
+ ;
+ Vt(mYt,"LineMarketConfirimPopup"),Kt(mYt,"_instance");
+ let wYt=mYt;
+ const vYt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"btnPackage",new gzt(SG.getText("GAME_237","패키지"),150,80)),Kt(this,"btnPeriod",new gzt(SG.getText("GAME_238","기간상품"),150,80)),Kt(this,"btnNormal",new gzt(SG.getText("GAME_239","일반상품"),150,80)),Kt(this,"tabs"),Kt(this,"activeIndex",0),Kt(this,"btnLineMarket",new gYt),Kt(this,"lblRedGem"),Kt(this,"list"),Kt(this,"productList",null),Kt(this,"setDataCallback",null),Kt(this,"onPaymentSuccessBind"),this.tabs=[this.btnPackage,this.btnPeriod,this.btnNormal];
+ for(let t=0;
+ t<this.tabs.length;
+ t++){
+ const i=this.tabs[t];
+ this.addChild(i);
+ const s=t;
+ i.onClick=()=>this.switchTab(s)}
+ this.layoutTabs();
+ const i=this.tabs[0];
+ this.addChild(this.btnLineMarket),this.btnLineMarket.x=.5*this.btnLineMarket.width+5,this.btnLineMarket.y=i.y+.5*i.height,this.btnLineMarket.onClick=this.onLineMarketBtnClick.bind(this),this.lblRedGem=new $B("UI_RED_GEM_ICON","0",cD.COLOR_RED_GEM,cD.DEFAULT_FONT_OPTION_18),this.lblRedGem.text="0",this.lblRedGem.x=this.btnLineMarket.x+.5*this.btnLineMarket.width+10,this.lblRedGem.y=this.btnLineMarket.y-.5*this.lblRedGem.height+1,this.addChild(this.lblRedGem),"N"==t5.getInstance().nextMarketYn&&(this.btnLineMarket.visible=!1,this.lblRedGem.visible=!1);
+ const s=VA.listHeight-t.TAB_HEIGHT;
+ this.list=new d5(Ajt,635,s),this.list.x=0,this.list.y=t.TAB_HEIGHT,this.addChild(this.list),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ this.setPaymentSuccess(!0)}
+ onRemoved(){
+ this.setPaymentSuccess(!1)}
+ async onLineMarketBtnClick(){
+ const t="1.5.31";
+ "capacitor"==AL.getInstance().envPlatform&&zA.isAppBundleVersionLessThan(t)?wG.getInstance().show(SG.getText("COMMON_497","최신 버전으로 업데이트 후에 이용해 주세요.")+`\n${
+ SG.getText("COMMON_500","최신 버전")}
+  : ${
+ t}
+ `,()=>{
+ const t=AL.getInstance().getStoreLink();
+ t&&window.open(t,"_blank")}
+ ):wYt.getInstance().show("",this.goLineMarket.bind(this))}
+ async goLineMarket(){
+ var t;
+ const i=navigator.userAgent||"",s=/apps-in-toss|supertoss/i.test(i),e=AL.getInstance().isGoogleClient()||AL.getInstance().isGoogleClientKr()||AL.getInstance().isAppleClient()||AL.getInstance().isAppleClientKr();
+ let n=null;
+ e||s||(n=window.open("about:blank","_blank"));
+ try{
+ const i=await rD.getInstance().lineNext.getStoreUrl();
+ if(!i.success||!(null==(t=i.body)?void 0:t.url)){
+ let t=SG.getText("COMMON_83","잠시 후에 이용해 주세요.");
+ return wG.getInstance().show(t),void(n&&n.close())}
+ const h=i.body.url;
+ if(e){
+ const{
+ Browser:t}
+ =await Xt(async()=>{
+ const{
+ Browser:t}
+ =await Promise.resolve().then(()=>tdi);
+ return{
+ Browser:t}
+ }
+ ,void 0);
+ return void t.open({
+ url:h}
+ )}
+ if(s)return void(window.location.href=h);
+ n?n.location.href=h:window.location.href=h}
+ catch(Xst){
+ n&&n.close()}
+ }
+ switchTab(t,i=!0){
+ this.activeIndex=t;
+ for(let e=0;
+ e<this.tabs.length;
+ e++)this.tabs[e].selected=e===t;
+ this.productList=null;
+ const s=t5.getInstance();
+ switch(t){
+ case 0:this.productList=s.packageList.filter(t=>t.active&&s.isAvailableForPurchase(t));
+ break;
+ case 1:this.productList=s.periodList.filter(t=>t.active&&s.isAvailableForPurchase(t));
+ break;
+ case 2:this.productList=s.normalList.filter(t=>t.active&&s.isAvailableForPurchase(t))}
+ this.productList&&(this.list.dataProvider=this.productList),i&&this.list.scrollTo(0)}
+ async setData(){
+ this.updateRedGem(),await t5.getInstance().getAvailProducts(1),this.switchTab(this.activeIndex),this.updateLanguage(),this.setDataCallback&&(this.setDataCallback(),this.setDataCallback=null)}
+ refreshList(){
+ this.switchTab(this.activeIndex,!1)}
+ layoutTabs(){
+ for(const i of this.tabs)i.fitWithinWidth(150,50);
+ let t=634;
+ for(let i=this.tabs.length-1;
+ i>=0;
+ i--){
+ const s=this.tabs[i];
+ t-=152,s.x=t,s.y=3}
+ }
+ updateLanguage(){
+ this.btnPackage.text=SG.getText("GAME_237","패키지"),this.btnPeriod.text=SG.getText("GAME_238","기간상품"),this.btnNormal.text=SG.getText("GAME_239","일반상품"),this.layoutTabs()}
+ get className(){
+ return"ShopPaySubView"}
+ updateRedGem(){
+ this.lblRedGem.text=ML.redGem.toFixed(0)}
+ getActiveIndex(){
+ return this.activeIndex}
+ getCurrentProductList(){
+ return this.productList}
+ clickTab(t){
+ t!==this.activeIndex&&(t<0||t>=this.tabs.length||this.switchTab(t))}
+ scrollWithProductIds(t){
+ if(!this.productList)return;
+ if(!t||0==t.length)return;
+ const i=this.productList.findIndex(i=>t.includes(i.productId));
+ -1!==i&&this.list.scrollTo(i)}
+ setPaymentSuccess(t){
+ cS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),cS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
+ onPaymentSuccess(t){
+ this.refreshList(),this.updateRedGem()}
+ }
+ ;
+ Vt(vYt,"ShopPaySubView"),Kt(vYt,"instance"),Kt(vYt,"TAB_HEIGHT",60);
+ let bYt=vYt;
+ const _Yt=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","UI_SHOP_GEM"))),Kt(this,"lblName"),Kt(this,"lblDesc"),Kt(this,"rewardContainer",new Ge),Kt(this,"rewardItems",[]),Kt(this,"btnBuy",new zWt("구매",120)),Kt(this,"purchasing",!1),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.x=5,this.bg.width=630,this.bg.height=100,this.addChild(this.bg),this.icon.scale.set(1),this.icon.x=25,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ t.fill=cD.DEFAULT_COLOR,this.lblName=new JD("",t.fill,t),this.lblName.x=140,this.lblName.y=10,this.addChild(this.lblName);
+ const i=cD.DEFAULT_DESC_FONT_OPTION_16;
+ i.fill=13421772,this.lblDesc=new JD("",i.fill,i),this.lblDesc.x=140,this.lblDesc.y=45,this.addChild(this.lblDesc),this.rewardContainer.x=140,this.rewardContainer.y=42,this.addChild(this.rewardContainer);
+ for(let s=0;
+ s<5;
+ s++){
+ const t=new r5;
+ t.scale.set(.7),this.rewardItems.push(t),this.rewardContainer.addChild(t)}
+ this.btnBuy.color=ZL.BROWN,this.btnBuy.height=55,this.btnBuy.width=120,this.btnBuy.x=this.bg.width-this.btnBuy.width-10,this.btnBuy.y=.5*(this.bg.height-this.btnBuy.height),this.addChild(this.btnBuy),this.btnBuy.onClick=this.onBuy.bind(this),cD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x),cD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x)}
+ async onBuy(){
+ try{
+ if(!this.data)return;
+ if(this.purchasing)return;
+ this.purchasing=!0,this.isSubscriptionRow(this.data)?await this.buySubscription():await rjt.getInstance().buyProduct(this.data.productId),this.purchasing=!1}
+ catch(Xst){
+ this.purchasing=!1}
+ }
+ isSubscriptionRow(t){
+ const i=null==t?void 0:t.rewards;
+ return!!Array.isArray(i)&&i.some(t=>"yes"===(null==t?void 0:t.subscribe))}
+ async buySubscription(){
+ const t=this.data,i=t5.getInstance().getStoreProductIdByProductId(this.data.productId);
+ if(!i)return;
+ const s="1.5.29";
+ if("capacitor"==AL.getInstance().envPlatform&&zA.isAppBundleVersionLessThan(s))return void wG.getInstance().show(SG.getText("COMMON_497","최신 버전으로 업데이트 후에 이용해 주세요.")+`\n${
+ SG.getText("COMMON_500","최신 버전")}
+  : ${
+ s}
+ `,()=>{
+ const t=AL.getInstance().getStoreLink();
+ t&&window.open(t,"_blank")}
+ );
+ let e;
+ try{
+ e=structuredClone(t)}
+ catch(o){
+ e=JSON.parse(JSON.stringify(t))}
+ const n=Vt(async()=>{
+ cS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ productId:e.productId,productVo:e}
+ )}
+ ,"onSubscriptionSuccess"),{
+ Capacitor:h}
+ =await Xt(async()=>{
+ const{
+ Capacitor:t}
+ =await Promise.resolve().then(()=>q$t);
+ return{
+ Capacitor:t}
+ }
+ ,void 0),r=_jt.getInstance();
+ "ios"===h.getPlatform()?await r.buyAppleSubscription(this.data.productId,i,n):await r.buyGoogleSubscription(this.data.productId,i,n)}
+ setData(t){
+ this.data=t;
+ const i=t;
+ this.lblName.text=SG.getText(`PRODUCT_NAME_${
+ i.id}
+ `,t.name??"");
+ const s=i.descriptionLangIds.split("|").map(t=>SG.getText(t.trim(),""));
+ this.lblDesc.text=s.filter(t=>t).join("\n")||i.descriptions||"",i.productId==Q2.Secretary?this.showDescMode(i):this.showRewardMode(i.rewards);
+ let e=i.iconNames;
+ e||(e="Package_1"),this.icon.texture=QA.getTexture("UI_Ekkorr",e),this.btnBuy.text=t5.getInstance().getPriceStr(i.productId),this.btnBuy.x=this.bg.width-this.btnBuy.width-10}
+ showRewardMode(t){
+ this.lblDesc.visible=!1,this.rewardContainer.visible=!0;
+ const i=Math.min(t.length,5);
+ let s=0;
+ for(let e=0;
+ e<5;
+ e++){
+ const n=this.rewardItems[e];
+ e<i?(n.setDataFrom(t[e]),n.visible=!0,n.x=s,s+=n.width*n.scale.x+5):n.visible=!1}
+ }
+ showDescMode(t){
+ if(this.lblDesc.visible=!0,this.rewardContainer.visible=!1,t.descriptionLangIds){
+ const i=t.descriptionLangIds.split("|").map(t=>SG.getText(t.trim(),""));
+ this.lblDesc.text=i.filter(t=>t).join("\n")||t.descriptions||""}
+ else this.lblDesc.text=(t.descriptions??"").replace(/\\n/g,"\n");
+ let i=45;
+ i+this.lblDesc.height>this.bg.y+this.bg.height-3&&(i=this.bg.y+this.bg.height-3-this.lblDesc.height),this.lblDesc.y=i}
+ onClick(t,i){
+ this.data&&(t>=this.btnBuy.x||djt.getInstance().showProduct(this.data))}
+ get height(){
+ return this.bg.height+2}
+ }
+ ;
+ Vt(_Yt,"ShopPayItemRendererStage");
+ let yYt=_Yt;
+ const MYt=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"list"),Kt(this,"subscribeLabel"),Kt(this,"onPaymentSuccessBind");
+ const t=VA.listHeight-0;
+ this.list=new d5(yYt,635,t),this.list.x=0,this.list.y=0,this.addChild(this.list),this.subscribeLabel=new $B("UI_Alarm","0",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_16),this.subscribeLabel.visible=!1,this.subscribeLabel.textOffsetX=-1,this.subscribeLabel.textOffsetY=-2,this.subscribeLabel.text=SG.getText("COMMON_504","구독"),this.subscribeLabel.x=10,this.subscribeLabel.y=10,this.addChild(this.subscribeLabel),this.subscribeLabel.eventMode="dynamic",this.subscribeLabel.on("pointertap",this.onSubscribeLabelTap,this),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onAdded(){
+ this.setPaymentSuccess(!0)}
+ onRemoved(){
+ this.setPaymentSuccess(!1)}
+ get className(){
+ return"ShopPaySubViewStage"}
+ async setData(){
+ this.updateSubscribeLabel();
+ let t=0,i=VA.listHeight-t;
+ this.subscribeLabel.visible&&(t=this.subscribeLabel.y+this.subscribeLabel.height+5,i=VA.listHeight-t),this.list.y=t,this.list.setListHeight(i);
+ const s=t5.getInstance();
+ this.list.dataProvider=s.reviewShopList}
+ refreshList(){
+ this.setData()}
+ updateSubscribeLabel(){
+ let t=!1;
+ ML.isAssistantPremium?t=!0:"capacitor"==AL.getInstance().envPlatform&&(t5.getInstance().getByProductId(Q2.Secretary)||(t=!0)),this.subscribeLabel.visible=t}
+ onSubscribeLabelTap(t){
+ const i=AL.getInstance();
+ let s=SG.getText("COMMON_502","구독은 현재 기간이 종료되기 최소 24시간 전에 취소하지 않으면 자동으로 갱신됩니다.");
+ i.isGoogleClient()||i.isGoogleClientKr()?s+="\n\n"+SG.getText("COMMON_505","Google Play 구독 설정에서 구독을 관리하거나 취소할 수 있습니다."):s+="\n\n"+SG.getText("COMMON_503","앱 스토어 계정 설정에서 구독을 관리하거나 취소할 수 있습니다.");
+ const e=e5.getInstance();
+ e.title=SG.getText("COMMON_4","알림"),e.show(s)}
+ setPaymentSuccess(t){
+ cS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),cS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
+ onPaymentSuccess(t){
+ this.refreshList()}
+ }
+ ;
+ Vt(MYt,"ShopPaySubViewStage"),Kt(MYt,"instance");
+ let EYt=MYt;
+ const AYt=class t extends uzt{
+ constructor(){
+ super(),Kt(this,"subViews",[]),Kt(this,"shopSubMenu",cYt.getInstance()),Kt(this,"currentIndex",-1),this.shopSubMenu.setTabs([{
+ labelKey:"GAME_197",defaultText:"보석상점"}
+ ,{
+ labelKey:"GAME_198",defaultText:"결제상점"}
+ ]),this.subViews=[fYt.getInstance(),bYt.getInstance()];
+ const t=this.shopSubMenu.height;
+ for(const i of this.subViews)i.y=t,i.visible=!1,this.addChild(i);
+ if(t5.getInstance().isReviewShop()){
+ const i=EYt.getInstance();
+ i.y=t,i.visible=!1,this.addChild(i)}
+ this.addChild(this.shopSubMenu),this.shopSubMenu.onTabChange=t=>this.switchTab(t),this.switchTab(0)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ switchTab(t){
+ this.currentIndex=t;
+ for(let i=0;
+ i<this.subViews.length;
+ i++)this.subViews[i].visible=i===t;
+ this.checkShopForReview()}
+ checkShopForReview(){
+ if(t5.getInstance().isReviewShop()){
+ const t=EYt.getInstance();
+ 1==this.currentIndex?(this.subViews[this.currentIndex].visible=!1,t.setData(),t.visible=!0):t.visible=!1}
+ }
+ setData(){
+ this.shopSubMenu.updateLanguage(),this.subViews[0].setData(),this.subViews[1].setData(),this.checkShopForReview()}
+ get className(){
+ return"ShopView"}
+ getCurrentViewClassName(){
+ for(let t=0;
+ t<this.subViews.length;
+ t++)if(this.subViews[t].visible)return this.subViews[t].className;
+ return""}
+ getCurrentIndex(){
+ return this.currentIndex}
+ clickTab(t){
+ t!==this.currentIndex&&(t<0||t>=this.subViews.length||(this.switchTab(t),this.shopSubMenu.setActiveTab(t)))}
+ updateLanguage(){
+ this.setData(),this.shopSubMenu.updateLanguage()}
+ }
+ ;
+ Vt(AYt,"ShopView"),Kt(AYt,"instance");
+ let SYt=AYt;
+ const TYt=class t{
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ constructor(){
+ }
+ isQuestView(){
+ var t;
+ return null!=Zqt.getInstance().currentView&&"QuestView"==(null==(t=Zqt.getInstance().currentView)?void 0:t.className)}
+ isHeroView(){
+ var t;
+ return null!=Zqt.getInstance().currentView&&"HeroView"==(null==(t=Zqt.getInstance().currentView)?void 0:t.className)}
+ isHeroSubView(){
+ var t,i;
+ return 0!=this.isHeroView()&&"HeroSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isHeroRosterView(){
+ var t,i;
+ return 0!=this.isHeroView()&&"HeroRosterView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isHeroHireSubView(){
+ var t,i;
+ return 0!=this.isHeroView()&&"HeroHireSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isCastleView(){
+ var t;
+ return null!=Zqt.getInstance().currentView&&"CastleView"==(null==(t=Zqt.getInstance().currentView)?void 0:t.className)}
+ isCastleSubView(){
+ var t,i;
+ return 0!=this.isCastleView()&&"CastleSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isCastleUpgradeSubView(){
+ var t,i;
+ return 0!=this.isCastleView()&&"CastleUpgradeSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isTreasureView(){
+ var t;
+ return null!=Zqt.getInstance().currentView&&"TreasureView"==(null==(t=Zqt.getInstance().currentView)?void 0:t.className)}
+ isTreasureSubView(){
+ var t,i;
+ return 0!=this.isTreasureView()&&"TreasureSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isTreasureInventorySubView(){
+ var t,i;
+ return 0!=this.isTreasureView()&&"TreasureInventorySubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isTreasureShopSubView(){
+ var t,i;
+ return 0!=this.isTreasureView()&&"TreasureShopSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isBattleView(){
+ var t;
+ return null!=Zqt.getInstance().currentView&&"BattleView"==(null==(t=Zqt.getInstance().currentView)?void 0:t.className)}
+ isHonorShopSubView(){
+ var t,i;
+ return 0!=this.isBattleView()&&"HonorShopSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isDungeonSubView(){
+ var t,i;
+ if(0==this.isBattleView())return!1;
+ const s=null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className;
+ return"DungeonSubView"==s||"DungeonDetailSubView"==s}
+ isPVPBattlePopup(){
+ return this.isDetailPopupView("PVPBattlePopup")}
+ isDailyBattleSubView(){
+ var t,i;
+ return 0!=this.isBattleView()&&"DailyBattleSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isTowerSubView(){
+ var t,i;
+ return 0!=this.isBattleView()&&"TowerSubView"==(null==(i=null==(t=Zqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
+ isShopView(){
+ var t;
+ return null!=Zqt.getInstance().currentView&&"ShopView"==(null==(t=Zqt.getInstance().currentView)?void 0:t.className)}
+ isShopGemSubView(){
+ return 0!=this.isShopView()&&"ShopGemSubView"==SYt.getInstance().getCurrentViewClassName()}
+ isShopPaySubView(){
+ return 0!=this.isShopView()&&"ShopPaySubView"==SYt.getInstance().getCurrentViewClassName()}
+ isDetailPopupView(t){
+ const i=NU.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}
+ isPetPopup(){
+ return this.isDetailPopupView("PetPopup")}
+ isGuildPopup(){
+ return this.isDetailPopupView("Guild2Popup")}
+ isInventoryPopup(){
+ return this.isDetailPopupView("InventoryPopup")}
+ }
+ ;
+ Vt(TYt,"ViewUtil"),Kt(TYt,"instance");
ReviveLayer 1 hunks, 5250 statements
- const J$=class t extends aS{
- constructor(){
- super(),zt(this,"spine",null),zt(this,"isLoaded",!1),zt(this,"loadingStarted",!1),zt(this,"overlay"),zt(this,"onCompleteCallback",null),zt(this,"onEarlyCallback",null),zt(this,"earlyFrameCount",0),zt(this,"safetyTimer",null),zt(this,"listener",{
- complete:Kt(()=>{
- this.onAnimationComplete()}
- ,"complete")}
- ),this.overlay=new Gf,this.overlay.rect(0,-KA.SAFE_AREA_TOP,640,KA.stageHeight+KA.SAFE_AREA_TOP),this.overlay.fill({
- color:0,alpha:.7}
- ),this.addChild(this.overlay),this.visible=!1,this.eventMode="static"}
- preload(){
- this.loadSpine()}
- async loadSpine(){
- if(!this.loadingStarted){
- this.loadingStarted=!0;
- try{
- const t=`${
- YA.getBase()}
- assets/spines/Reincarnation.skel`,i=`${
- YA.getBase()}
- assets/spines/Reincarnation.atlas`;
- if(od.add({
- alias:"reincarnationAtlas",src:i}
- ),od.add({
- alias:"reincarnationSkel",src:t}
- ),await od.load(["reincarnationAtlas","reincarnationSkel"]),this.spine=Y$.from({
- skeleton:"reincarnationSkel",atlas:"reincarnationAtlas"}
- ),!this.spine)throw new Error("Failed to create Reincarnation Spine");
- this.spine.x=320,this.spine.y=.5*KA.stageHeight,this.spine.scale.set(1),this.spine.visible=!1,this.spine.autoUpdate=!1,this.addChild(this.spine),this.isLoaded=!0}
- catch(t){
- this.loadingStarted=!1}
- }
- }
- async play(i,s){
- this.safetyTimer&&(clearTimeout(this.safetyTimer),this.safetyTimer=null),this.onCompleteCallback=i,this.onEarlyCallback=s??null,this.earlyFrameCount=0,this.isLoaded||this.loadingStarted||await this.loadSpine();
- let e=0;
- for(;
- !this.isLoaded&&this.loadingStarted&&e<100;
- )await new Promise(t=>setTimeout(t,50)),e++;
- if(!this.isLoaded||!this.spine)return null==s||s(),i(),this.onEarlyCallback=null,void(this.onCompleteCallback=null);
- this.visible=!0,this.overlay.visible=!0,this.spine.visible=!0,this.spine.alpha=1,this.spine.autoUpdate=!1,this.spine.autoUpdate=!0,this.spine.state.removeListener(this.listener),this.spine.state.addListener(this.listener),this.spine.state.setAnimation(0,"Reincarnation",!1),this.onEarlyCallback&&(this.earlyFrameCount=0,GM.getInstance().add(this.onEarlyFrame,this)),this.safetyTimer=setTimeout(()=>this.forceFinish(),t.SAFETY_TIMEOUT_MS)}
- onEarlyFrame(){
- this.earlyFrameCount++,this.earlyFrameCount>=98&&(GM.getInstance().remove(this.onEarlyFrame,this),this.overlay.visible=!1,this.onEarlyCallback&&(this.onEarlyCallback(),this.onEarlyCallback=null))}
- onAnimationComplete(){
- this.spine&&(this.spine.state.removeListener(this.listener),this.spine.state.clearTracks(),this.spine.autoUpdate=!1,this.spine.visible=!1),this.visible=!1,this.onCompleteCallback&&(this.onCompleteCallback(),this.onCompleteCallback=null)}
- forceFinish(){
- this.safetyTimer=null;
- const t=this.onEarlyCallback,i=this.onCompleteCallback;
- (t||i)&&(GM.getInstance().remove(this.onEarlyFrame,this),this.spine&&(this.spine.state.removeListener(this.listener),this.spine.state.clearTracks(),this.spine.autoUpdate=!1,this.spine.visible=!1),this.overlay.visible=!1,this.visible=!1,t&&(this.onEarlyCallback=null,t()),i&&(this.onCompleteCallback=null,i()))}
- }
- ;
- Kt(J$,"ReviveLayer"),zt(J$,"SAFETY_TIMEOUT_MS",8e3);
- let Q$=J$;
- const Z$=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"main",0),zt(this,"sub",0),zt(this,"type",""),zt(this,"num",0),zt(this,"gem",0)}
- getNameKey(){
- return`ACHIEVEMENT_NAME_${
- this.main}
- `}
- getDescKey(){
- return`ACHIEVEMENT_DESC_${
- this.main}
- `}
- }
- ;
- Kt(Z$,"AchievementVO");
- let tV=Z$;
- const iV=class{
- constructor(){
- zt(this,"main",0),zt(this,"type",""),zt(this,"value",0),zt(this,"claimedSub",0)}
- }
- ;
- Kt(iV,"AchievementStatusVO");
- let sV=iV;
- const eV=class t{
- constructor(){
- zt(this,"objBook",{
- }
- ),zt(this,"mainArray",[]),zt(this,"objTypeByMain",{
- }
- ),zt(this,"objMainByType",{
- }
- ),zt(this,"requestPending1",!1),zt(this,"statusList",[]),zt(this,"statusObj",{
- }
- )}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- if(0==Array.isArray(t))return;
- const i=t.length;
- for(let s=0;
- s<i;
- ++s){
- const i=t[s],e=new tV;
- e.kindNum=Number(i.kindNum),e.main=Number(i.main),e.sub=Number(i.sub),e.type=i.type.toString(),e.num=Number(i.num),e.gem=Number(i.gem),this.objBook[e.main]||(this.objBook[e.main]=[]),this.objBook[e.main].push(e)}
- for(const s in this.objBook){
- const t=Number(s),i=this.objBook[s][0].type;
- this.mainArray.push(t),this.objTypeByMain[t]=i,this.objMainByType[i]=t}
- this.mainArray.sort()}
- getListWithMain(t){
- return this.objBook[t]}
- getMainArray(){
- return this.mainArray}
- setData(t){
- }
- updateAfterClaim(t,i,s){
- }
- async getStatus(t=!1){
- if(this.requestPending1)return;
- this.requestPending1=!0;
- const i=await hD.getInstance().achievement.getStatus(t);
- if(0==i.success)return this.requestPending1=!1,void lS.getInstance().dispatchCustomEvent("AchieveStatus");
- this.setStatusData(i.body),this.requestPending1=!1,lS.getInstance().dispatchCustomEvent("AchieveStatus")}
- setStatusData(t){
- if(!t||!t.list)return;
- this.statusList.length=0;
- const i=t.list.length;
- for(let s=0;
- s<i;
- ++s){
- const i=t.list[s],e=new sV;
- e.type=i.type.toString(),e.value=Number(i.value),e.claimedSub=Number(i.claimedSub),e.main=this.objMainByType[e.type],this.statusList.push(e),this.statusObj[e.main]=e}
- this.statusList.sort((t,i)=>t.main-i.main)}
- getStatusList(){
- return this.statusList}
- getStatusWithMain(t){
- return this.statusObj[t]}
- getClaimedAchievements(){
- const t=[];
- for(const i of this.statusList)i.claimedSub>0&&t.push({
- type:i.type,main:i.main}
- );
- return t}
- hasReward(){
- const t=this.statusList.length;
- for(let i=0;
- i<t;
- ++i)if(1==this.hasRewardWithMain(this.statusList[i].main))return!0;
- return!1}
- hasRewardWithMain(t){
- const i=this.getListWithMain(t);
- if(!i)return!1;
- const s=this.getStatusWithMain(t);
- if(!s)return!1;
- const e=i[i.length-1];
- let n;
- return n=s.claimedSub<e.sub?i[s.claimedSub]:e,!(s.value<n.num||s.claimedSub==n.sub)}
- }
- ;
- Kt(eV,"AchievementDataManager"),zt(eV,"instance");
- let nV=eV;
- const hV=Object.freeze(Object.defineProperty({
- __proto__:null,AchievementDataManager:nV,AchievementStatusVO:sV,AchievementVO:tV}
- ,Symbol.toStringTag,{
- value:"Module"}
- ));
- var rV=(t=>(t.REBIRTH="REBIRTH",t.INFINITE_RANK="INFINITE_RANK",t.DUNGEON="DUNGEON",t.SPIRIT_LAND="SPIRIT_LAND",t.DAILY_RANK="DAILY_RANK",t.TOWER="TOWER",t.AD_VIEW="AD_VIEW",t))(rV||{
- }
- );
- const oV=class t{
- constructor(){
- zt(this,"baseDate",""),zt(this,"quests",[]),zt(this,"milestones",[]),zt(this,"totalScore",0),zt(this,"_dirty",!0),zt(this,"_refreshing",!1)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- setData(t){
- t&&(this.baseDate=String(t.baseDate??""),this.quests=Array.isArray(t.quests)?t.quests.map(t=>this.toQuestVO(t)):[],this.milestones=Array.isArray(t.milestones)?t.milestones.map(t=>this.toMilestoneVO(t)):[],this.totalScore=Number(t.totalScore??0),this._dirty=!1)}
- markDirty(){
- this._dirty=!0,this.refreshInBackground()}
- async refreshInBackground(){
- var t;
- if(!this._refreshing){
- this._refreshing=!0;
- try{
- const i=await hD.getInstance().dailyQuest.getInfo(!1);
- if(!(null==i?void 0:i.success))return;
- (null==(t=i.body)?void 0:t.dailyQuest)&&this.setData(i.body.dailyQuest)}
- catch{
- }
- finally{
- this._refreshing=!1}
- }
- }
- needsRefresh(){
- return!!this._dirty||!this.baseDate||this.baseDate!==this.getUtc0DateKey()}
- getUtc0DateKey(){
- const t=new Date(ix.time);
- return`${
- t.getUTCFullYear()}
- -${
- (t.getUTCMonth()+1).toString().padStart(2,"0")}
- -${
- t.getUTCDate().toString().padStart(2,"0")}
- `}
- toQuestVO(t){
- return{
- type:t.type,progress:Number(t.progress??0),target:Number(t.target??0),score:Number(t.score??0),reward:t.reward??{
- }
- ,claimed:!!t.claimed}
- }
- toMilestoneVO(t){
- return{
- score:Number(t.score??0),reward:t.reward??{
- }
- ,claimed:!!t.claimed,claimable:!!t.claimable}
- }
- getQuest(t){
- return this.quests.find(i=>i.type===t)}
- getClaimableQuestCount(){
- let t=0;
- for(const i of this.quests)!i.claimed&&i.progress>=i.target&&t++;
- return t}
- getClaimableMilestoneCount(){
- let t=0;
- for(const i of this.milestones)i.claimable&&t++;
- return t}
- hasClaimable(){
- return this.getClaimableQuestCount()+this.getClaimableMilestoneCount()>0}
- }
- ;
- Kt(oV,"DailyQuestDataManager"),zt(oV,"_instance");
- let aV=oV;
- const cV=class t{
- constructor(){
- zt(this,"medals",[])}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- var i;
- (null==(i=null==t?void 0:t[0])?void 0:i.medal)&&(this.medals=String(t[0].medal).split("|").map(Number))}
- init(){
- }
- getMedal(t){
- if(t<10)return 0;
- const i=Math.floor(t/10)-1;
- return i>=this.medals.length?this.medals[this.medals.length-1]??0:this.medals[i]??0}
- }
- ;
- Kt(cV,"RebirthMedalManager"),zt(cV,"instance");
- let lV=cV;
- const uV=class extends mB{
- constructor(t,i=1,s="Icon_Arrow_Left_01",e="Icon_Arrow_Right_01",n=!1){
- const h="UI_Ekkorr",r="left"===t?s:e;
- super(h,r,i),zt(this,"bg2"),zt(this,"textureNameLeft","Icon_Arrow_Left_01"),zt(this,"textureNameRight","Icon_Arrow_Right_01"),zt(this,"_direction","left"),this._direction=t,this.textureNameLeft=s,this.textureNameRight=e,n&&(this.bg2=new We(ZA.getTexture(h,r)),this.bg2.anchor.set(.5,.5),this.bg2.scale.set(this.iconScale),"left"===this._direction?this.bg2.x=this.bg.x+this.bg.width-3:this.bg2.x=this.bg.x-this.bg2.width+3,this.bg2.y=this.bg.y,this.addChild(this.bg2))}
- get direction(){
- return this._direction}
- set direction(t){
- t!==this._direction&&(this._direction=t,"left"===this._direction?this.setTexture("UI_Ekkorr",this.textureNameLeft):this.setTexture("UI_Ekkorr",this.textureNameRight))}
- setTexture(t,i){
- super.setTexture(t,i),this.bg2&&(this.bg2.texture=ZA.getTexture(t,i),this.bg2.scale.set(this.iconScale),"left"===this._direction?this.bg2.x=this.bg.x+this.bg.width-5:this.bg2.x=this.bg.x-this.bg2.width+5,this.bg2.y=this.bg.y)}
- }
- ;
- Kt(uV,"ArrowButton");
- let dV=uV;
- const fV=class extends dV{
- constructor(t,i=1){
- super(t,i,"Icon_Arrow_Left_02_white","Icon_Arrow_Right_02_white",!0)}
- }
- ;
- Kt(fV,"ArrowButtonDouble");
- let pV=fV;
- const gV=class t extends Be{
- constructor(){
- super(),zt(this,"hearts",[]),zt(this,"MAX_DISPLAY",5),zt(this,"HEART_SPACING",22),zt(this,"DEAD_TINT",3355443)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- getHeartPointAt(t){
- const i=this.getGlobalPosition(),s=i.x+t*this.HEART_SPACING,e=i.y;
- return new mi(s,e)}
- playArriveMotionAt(t){
- const i=this.hearts[t];
- i&&(i.scale.set(1),HI.to(i.scale,{
- x:.6,y:.6,duration:.3,ease:"back.out(3)"}
- ))}
- update(){
- const t=_L.maxHeart,i=_L.heart;
- if(t<=0)return void(this.visible=!1);
- this.visible=!0;
- const s=Math.min(t,this.MAX_DISPLAY);
- for(;
- this.hearts.length<s;
- ){
- const t=new We(ZA.getTexture("UI_Ekkorr","Icon_Heart2"));
- t.scale.set(.6),this.hearts.push(t),this.addChild(t)}
- for(;
- this.hearts.length>s;
- ){
- const t=this.hearts.pop();
- this.removeChild(t)}
- for(let e=0;
- e<s;
- e++){
- const t=this.hearts[e];
- t.x=e*this.HEART_SPACING,t.y=0,e<i?(t.tint=16777215,t.alpha=1):(t.tint=this.DEAD_TINT,t.alpha=.5)}
- }
- }
- ;
- Kt(gV,"HeartInfo"),zt(gV,"_instance");
- let mV=gV;
- const wV=class t extends ZD{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- super()}
- showError(t,i=null,s=90){
- let e=(null==t?void 0:t.errorMessage)??AG.getText("COMMON_77","네트워크 오류가 발생하였습니다."),n=AG.getErrorMessage(t.error);
- n&&(e=n),i&&(e+="\n"+i),this.showMessage(e,s)}
- }
- ;
- Kt(wV,"CommonToast"),zt(wV,"instance");
- let vV=wV;
- var bV=(t=>(t.IDLE="idle",t.DUNGEON="dungeon",t.RAID="raid",t.PVP="pvp",t.PVP2="pvp2",t.TOWER="tower",t.GUILD_WAR="guildWar",t))(bV||{
- }
- ),yV=(t=>(t.RUNNING="running",t.PAUSED="paused",t.STOPPED="stopped",t))(yV||{
- }
- );
- const _V=class t{
- constructor(){
- zt(this,"acc",[0])}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- const i=String(t[0].golds).split("|").map(Number);
- i.length>0&&0===i[i.length-1]&&i.pop(),this.acc=[0,...i]}
- init(){
- }
- getGoldForLevel(t){
- return t<1||t>=this.acc.length?0:this.acc[t]-this.acc[t-1]}
- getTotalGold(t,i){
- return t>=i?0:(i>=this.acc.length&&(i=this.acc.length-1),t<0&&(t=0),this.acc[i]-this.acc[t])}
- getMaxAffordableLevel(t,i){
- let s=t,e=this.acc.length-1;
- for(;
- s<e;
- ){
- const n=Math.floor((s+e+1)/2);
- this.acc[n]-this.acc[t]<=i?s=n:e=n-1}
- return s}
- static get BASE_MAX_LEVEL(){
- if(-1==this._BASE_MAX_LEVEL){
- let t=EL.getInstance().getClientData("HERO_MAX_LEVEL");
- t||(t="1000"),this._BASE_MAX_LEVEL=Number(t)}
- return this._BASE_MAX_LEVEL}
- static getMaxLevelByGrade(){
- if(null!==this._maxLevelByGrade)return this._maxLevelByGrade;
- const t=EL.getInstance().getClientData("HERO_MAX_LEVEL_BY_GRADE");
- return t?(this._maxLevelByGrade=t.split("|").map(Number),this._maxLevelByGrade):null}
- static getBaseMaxLevelForGrade(t){
- const i=this.getMaxLevelByGrade();
- return i&&t>=1&&t<=i.length?i[t-1]:this.BASE_MAX_LEVEL}
- getMaxLevel(i,s=0){
- const e=KN.getInstance().getGameplayTotal(xN.MaxLv),n=lx.getInstance().getPetPoint(),h=Math.max(0,s)*t.TRANS_MAX_LEVEL_BONUS,r=Math.floor(vx.getInstance().totalTransPoint),o=ON.getWyvernRiderMaxLvContribution(),a=i?t.getBaseMaxLevelForGrade(i):t.BASE_MAX_LEVEL;
- return Math.min(this.acc.length-1,a+e+n+h+r+o)}
- }
- ;
- Kt(_V,"HeroUpgradeManager"),zt(_V,"instance"),zt(_V,"_BASE_MAX_LEVEL",-1),zt(_V,"_maxLevelByGrade",null),zt(_V,"TRANS_MAX_LEVEL_BONUS",100);
- let MV=_V;
- const EV=class{
- }
- ;
- Kt(EV,"MenuState"),zt(EV,"currentIndex",0);
- let AV=EV;
- const SV=class t{
- constructor(){
- zt(this,"currentMissionId",1),zt(this,"rewardPending",!1),zt(this,"missionList",[]),zt(this,"stepList",[])}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- if(this.missionList=[],t)for(let i=0;
- i<t.length;
- i++){
- const s=t[i],e=new kV;
- e.kindNum=Number(s.kindNum)||0,e.desc=s.desc||"",e.gem=Number(s.gem)||0,e.condition=s.condition||"",this.missionList.push(e)}
- }
- setStepBookData(t){
- if(this.stepList=[],t)for(let i=0;
- i<t.length;
- i++){
- const s=t[i],e=new IV;
- e.id=Number(s.id)||0,e.step=Number(s.step)||0,e.action=s.action||"",e.target=Number(s.target)??-1,e.param=s.param||"-1",this.stepList.push(e)}
- }
- getCurrentMission(){
- return this.missionList.find(t=>t.kindNum===this.currentMissionId)||null}
- getCurrentSteps(){
- return this.stepList.filter(t=>t.id===this.currentMissionId).sort((t,i)=>t.step-i.step)}
- getSteps(t){
- return this.stepList.filter(i=>i.id===t).sort((t,i)=>t.step-i.step)}
- isAllCompleted(){
- if(0===this.missionList.length)return!0;
- const t=Math.max(...this.missionList.map(t=>t.kindNum));
- return this.currentMissionId>t}
- async loadInfo(){
- const t=await hD.getInstance().missionGuide.getInfo();
- t.success&&t.body&&(_L.setUserInfo(t.body),t.body.missionGuide&&(this.currentMissionId=t.body.missionGuide.currentMissionId,this.rewardPending=t.body.missionGuide.rewardPending))}
- async completeMission(t){
- const i=await hD.getInstance().missionGuide.complete(t);
- return!(!i.success||!i.body||(i.body.missionGuide&&(this.currentMissionId=i.body.missionGuide.currentMissionId,this.rewardPending=i.body.missionGuide.rewardPending),0))}
- async claimReward(t){
- var i;
- const s=await hD.getInstance().missionGuide.claim(t);
- return s.success&&s.body?(_L.setUserInfo(s.body),s.body.missionGuide&&(this.currentMissionId=s.body.missionGuide.currentMissionId,this.rewardPending=s.body.missionGuide.rewardPending),(null==(i=s.body.reward)?void 0:i.gem)||0):0}
- }
- ;
- Kt(SV,"MissionGuideDataManager"),zt(SV,"instance");
- let TV=SV;
- const CV=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"desc",""),zt(this,"gem",0),zt(this,"condition","")}
- getDescKey(){
- return`MISSION_GUIDE_DESC_${
- this.kindNum}
- `}
- }
- ;
- Kt(CV,"MissionGuideVO");
- let kV=CV;
- const OV=class{
- constructor(){
- zt(this,"id",0),zt(this,"step",0),zt(this,"action",""),zt(this,"target",-1),zt(this,"param","-1")}
- }
- ;
- Kt(OV,"MissionGuideStepVO");
- let IV=OV;
- const xV=class t extends Be{
- constructor(){
- super(),zt(this,"sp",new We),zt(this,"count",0),zt(this,"_height",82*1.2),this.addChild(this.sp)}
- static async load(){
- this.ready||(await ZA.generateTexture("LevelUp","ktx2",!1),this.textures=ZA.getTextures("LevelUp","LevelUp"),this.ready=!0)}
- static get(){
- const i=this.pool.length>0?this.pool.pop():new t;
- return i.visible=!0,i}
- static release(t){
- t.visible=!1,t.removeFromParent(),this.pool.push(t)}
- play(i,s,e){
- this.x=s,this.y=e,this.scale.set(1.2),this.count=0,this.sp.texture=t.textures[0],GM.getInstance().add(this.onEnter,this),i.addChild(this),KL.getInstance().playSFX(KL.SFX_LEVEL_UP)}
- onEnter(){
- this.count++,this.count<t.textures.length?this.sp.texture=t.textures[this.count]:(GM.getInstance().remove(this.onEnter,this),t.release(this))}
- get height(){
- return this._height}
- }
- ;
- Kt(xV,"ClickEffect"),zt(xV,"pool",[]),zt(xV,"textures"),zt(xV,"ready",!1);
- let NV=xV;
- const PV=class t extends Be{
- constructor(){
- super(),zt(this,"onVisibilityChanged",null),zt(this,"bg"),zt(this,"icon"),zt(this,"lblGem"),zt(this,"lblDesc"),zt(this,"lblTitle"),zt(this,"gem"),zt(this,"onClaim",null),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.x=20,this.bg.width=380,this.bg.height=60,this.bg.alpha=.3,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Ekkorr","UI_SKILL_BASE")),this.icon.x=0,this.icon.y=0,this.addChild(this.icon),this.gem=new We(ZA.getTexture("UI_Ekkorr","UI_GEM")),this.gem.x=this.icon.x+.5*(this.icon.width-this.gem.width),this.gem.y=this.icon.y+.28*(this.icon.height-this.gem.height),this.addChild(this.gem),this.lblGem=new YD("10",52377,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblGem.textColor=aD.COLOR_DEEP_SKYBLUE,this.lblGem.x=.5*(this.icon.width-this.lblGem.width),this.lblGem.y=this.icon.height-this.lblGem.height-12,this.addChild(this.lblGem),this.lblTitle=new YD("[ 미션 - 1 ]",52377,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblTitle.textColor=aD.DEFAULT_COLOR,this.lblTitle.x=this.icon.x+this.icon.width,this.lblTitle.y=9,this.addChild(this.lblTitle),this.lblDesc=new YD("1번 퀘스트 레벨 5 달성",52377,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDesc.textColor=aD.DEFAULT_COLOR,this.lblDesc.x=this.lblTitle.x,this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+1,this.addChild(this.lblDesc),this.activated=!1,super.visible=!1,this.eventMode="static",this.cursor="pointer",this.on("pointertap",this.onClick,this)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- set visible(t){
- super.visible!==t&&(super.visible=t,this.onVisibilityChanged&&this.onVisibilityChanged(t))}
- get visible(){
- return super.visible}
- onClick(){
- TV.getInstance().rewardPending&&this.onClaim&&(this.playClaimEffect(),this.onClaim())}
- playClaimEffect(){
- NV.get().play(this,this.icon.x+.5*this.icon.width-50,this.icon.y+.5*this.icon.height-60);
- const t=this.gem.getGlobalPosition(),i=KA.stage.toLocal(t),s=i.x+.5*this.gem.width-14,e=i.y+.5*this.gem.height-20;
- Jt(async()=>{
- const{
- RewardController:t}
- =await Promise.resolve().then(()=>u5t);
- return{
- RewardController:t}
- }
- ,void 0).then(({
- RewardController:t}
- )=>{
- t.getInstance().getGem(s,e,10,4)}
- )}
- setData(t){
- this.lblGem.text=t.gem.toString(),this.lblTitle.text=`[ ${
- AG.getText("GAME_409","미션")}
-  ${
- t.kindNum}
-  ]`,this.lblDesc.text=AG.getText(t.getDescKey(),t.desc)}
- set activated(t){
- 1==t?(this.bg.tint=16777215,this.icon.tint=16777215,this.gem.tint=16777215,this.lblGem.textColor=aD.COLOR_DEEP_SKYBLUE):(this.bg.tint=10066329,this.icon.tint=10066329,this.gem.tint=10066329,this.lblGem.textColor=10066329)}
- }
- ;
- Kt(PV,"MissionGuide"),zt(PV,"instance");
- let RV=PV;
- const DV=class extends aS{
- constructor(){
- super()}
- removeAll(){
- this.removeChildren()}
- }
- ;
- Kt(DV,"DetailPopupLayer");
- let LV=DV;
- var GV=(t=>(t[t.NORMAL=0]="NORMAL",t[t.DUNGEON=1]="DUNGEON",t[t.TOWER=2]="TOWER",t[t.GUILD=3]="GUILD",t[t.TREASURE_DETAIL=4]="TREASURE_DETAIL",t))(GV||{
- }
- );
- const BV=class t extends Be{
- constructor(){
- super(),zt(this,"bg",new QD),zt(this,"lblGold",new GB("UI_GOLD","0",aD.COLOR_ORANGE,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblGem",new GB("UI_GEM_ICON","0",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblMedal",new GB("UI_STAR_ICON","0",aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblSpeed",new GB("UI_SPEED_ICON0","+0%",aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblHonor",new GB("PVP_COIN_ON","0",aD.COLOR_PURPLE_PINK,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblGuildCoin",new GB("GUILD_COIN","0",aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblCores",[]),zt(this,"mode",0),zt(this,"CORE_START_X",260),zt(this,"CORE_GAP",100),zt(this,"goldCountTween",null),zt(this,"gemPoint",new mi),zt(this,"gemPointInitialized",!1),zt(this,"medalPoint",new mi),zt(this,"medalPointInitialized",!1),zt(this,"goldPoint",new mi),zt(this,"goldPointInitialized",!1),zt(this,"guildCoinPoint",new mi),zt(this,"guildCoinPointInitialized",!1),this.bg.width=640,this.bg.height=40,this.addChild(this.bg),this.bg.alpha=.5,this.bg.setIndex(7),this.lblGem.x=260,this.lblGem.y=.5*(this.bg.height-this.lblGem.height),this.addChild(this.lblGem),this.lblMedal.x=390,this.lblMedal.y=.5*(this.bg.height-this.lblMedal.height),this.addChild(this.lblMedal),this.lblHonor.x=390,this.lblHonor.y=.5*(this.bg.height-this.lblHonor.height),this.lblHonor.visible=!1,this.addChild(this.lblHonor),this.lblGuildCoin.x=510,this.lblGuildCoin.y=.5*(this.bg.height-this.lblGuildCoin.height),this.lblGuildCoin.visible=!1,this.addChild(this.lblGuildCoin),this.lblSpeed.x=5,this.lblSpeed.y=.5*(this.bg.height-this.lblSpeed.height),this.lblSpeed.hitArea=new Pi(0,-this.lblSpeed.y,120,this.bg.height),this.lblSpeed.eventMode="static",this.lblSpeed.cursor="pointer",this.lblSpeed.on("pointertap",()=>{
- Jt(async()=>{
- const{
- GameSpeedBuffPopup:t}
- =await Promise.resolve().then(()=>Voi);
- return{
- GameSpeedBuffPopup:t}
- }
- ,void 0).then(({
- GameSpeedBuffPopup:t}
- )=>{
- t.getInstance().showPopup()}
- )}
- ),this.addChild(this.lblSpeed);
- for(let t=0;
- t<4;
- t++){
- const i=new GB(`Core${
- t+1}
- `,"0",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_18);
- i.x=this.CORE_START_X+t*this.CORE_GAP,i.y=.5*(this.bg.height-i.height),i.visible=!1,this.addChild(i),this.lblCores.push(i)}
- this.lblGold.x=510,this.lblGold.y=.5*(this.bg.height-this.lblGold.height),this.addChild(this.lblGold)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- static ensureMounted(i){
- const s=t.getInstance();
- if(t.isVisibleInStageTree(s))return;
- const e=LV.getInstance();
- for(let t=e.children.length-1;
- t>=0;
- t--){
- const i=e.children[t];
- if(i instanceof Be&&i.visible)return void i.addChild(s)}
- i.addChild(s)}
- static isVisibleInStageTree(t){
- const i=KA.stage;
- if(!i)return!0;
- let s=t;
- for(;
- s;
- ){
- if(!s.visible)return!1;
- if(s===i)return!0;
- s=s.parent}
- return!1}
- updateGold(){
- this.lblGold.text=$D.displayLargeNumberAsAlphabet(_L.gold)}
- celebrateGold(t){
- var i;
- const s=_L.gold,e=Math.max(0,s-t);
- null==(i=this.goldCountTween)||i.kill();
- const n={
- v:e}
- ;
- this.goldCountTween=HI.to(n,{
- v:s,duration:.8,ease:"power1.out",onUpdate:Kt(()=>{
- this.lblGold.text=$D.displayLargeNumberAsAlphabet(n.v)}
- ,"onUpdate"),onComplete:Kt(()=>{
- this.lblGold.text=$D.displayLargeNumberAsAlphabet(s),this.goldCountTween=null}
- ,"onComplete")}
- )}
- updateMedal(){
- this.lblMedal.text=$D.displayLargeNumberAsAlphabet(_L.medal)}
- updateGem(){
- this.lblGem.text=_L.gem.toFixed(0)}
- updateHonor(){
- this.lblHonor.text=$D.displayLargeNumberAsAlphabet(_L.honorCoin)}
- updateGuildCoin(){
- var t;
- const i=(null==(t=ED.myMembershipVO)?void 0:t.coin)??0;
- this.lblGuildCoin.text=$D.displayLargeNumberAsAlphabet(i)}
- updateSpeed(t){
- this.lblSpeed.text="+"+Math.round(100*(t-1)).toFixed(0)+"%"}
- updateCores(){
- const t=Rx.getInstance();
- for(let i=0;
- i<4;
- i++)this.lblCores[i].text=$D.displayLargeNumberAsAlphabet(t.userCores[i])}
- updateAll(){
- this.updateGold(),this.updateMedal(),this.updateGem(),this.updateHonor(),1===this.mode&&this.updateCores()}
- getMode(){
- return this.mode}
- setMode(t){
- if(this.mode!==t){
- this.mode=t,this.lblSpeed.visible=!0,this.lblSpeed.x=5;
- for(const t of this.lblCores)t.visible=!1;
- switch(t){
- case 0:this.lblGem.visible=!0,this.lblGem.x=260,this.lblMedal.visible=!0,this.lblMedal.x=390,this.lblHonor.visible=!1,this.lblGuildCoin.visible=!1,this.lblGold.visible=!0,this.lblGold.x=510;
- break;
- case 1:this.lblGem.visible=!0,this.lblGem.x=140,this.lblMedal.visible=!1,this.lblHonor.visible=!1,this.lblGuildCoin.visible=!1,this.lblGold.visible=!1;
- for(let t=0;
- t<4;
- t++)this.lblCores[t].visible=!0,this.lblCores[t].x=this.CORE_START_X+t*this.CORE_GAP;
- this.updateCores();
- break;
- case 2:this.lblGem.visible=!0,this.lblGem.x=260,this.lblMedal.visible=!1,this.lblHonor.visible=!0,this.lblHonor.x=390,this.lblGold.visible=!0,this.lblGold.x=510,this.lblGuildCoin.visible=!1,this.updateHonor();
- break;
- case 3:this.lblGem.visible=!0,this.lblGem.x=260,this.lblMedal.visible=!1,this.lblHonor.visible=!0,this.lblHonor.x=390,this.lblGold.visible=!1,this.lblGuildCoin.visible=!0,this.lblGuildCoin.x=510,this.updateHonor(),this.updateGuildCoin();
- break;
- case 4:this.lblGem.visible=!0,this.lblGem.x=380,this.lblMedal.visible=!1,this.lblHonor.visible=!0,this.lblHonor.x=510,this.lblGold.visible=!1,this.lblGuildCoin.visible=!1,this.updateHonor()}
- }
- }
- setDungeonMode(t){
- this.setMode(t?1:0)}
- setTowerMode(t){
- this.setMode(t?2:0)}
- setFlags(t){
- const i=!!(1&t),s=!!(2&t),e=!!(4&t),n=!!(8&t),h=!!(16&t),r=!!(32&t);
- this.lblSpeed.visible=i,this.lblGem.visible=s,this.lblMedal.visible=e,this.lblGold.visible=n,this.lblHonor.visible=h;
- for(const c of this.lblCores)c.visible=r;
- const o=i?120:0;
- let a=o>0?o:10;
- if(r){
- this.lblGem.x=a,a+=120;
- for(let t=0;
- t<4;
- t++)this.lblCores[t].x=a,a+=100;
- r&&this.updateCores()}
- else{
- const t=[];
- s&&t.push(this.lblGem),e&&t.push(this.lblMedal),h&&t.push(this.lblHonor);
- const i=510,n=i-a,r=t.length>0?n/t.length:0;
- for(let s=0;
- s<t.length;
- s++)t[s].x=a+s*r;
- this.lblGold.x=i}
- h&&this.updateHonor()}
- getGemPoint(){
- return 0==this.gemPointInitialized&&(this.gemPointInitialized=!0,this.gemPoint.x=this.x+this.lblGem.x+12,this.gemPoint.y=this.y+this.lblGem.y+.5*this.lblGem.height),this.gemPoint}
- getMedalPoint(){
- return 0==this.medalPointInitialized&&(this.medalPointInitialized=!0,this.medalPoint.x=this.x+this.lblMedal.x+12,this.medalPoint.y=this.y+this.lblMedal.y+.5*this.lblMedal.height),this.medalPoint}
- getGoldPoint(){
- return 0==this.goldPointInitialized&&(this.goldPointInitialized=!0,this.goldPoint.x=this.x+this.lblGold.x+12,this.goldPoint.y=this.y+this.lblGold.y+.5*this.lblGold.height),this.goldPoint}
- getGuildCoinPoint(){
- return 0==this.guildCoinPointInitialized&&(this.guildCoinPointInitialized=!0,this.guildCoinPoint.x=this.x+this.lblGuildCoin.x+12,this.guildCoinPoint.y=this.y+this.lblGuildCoin.y+.5*this.lblGuildCoin.height),this.guildCoinPoint}
- startGemMotion(t=null,i=1.2){
- this.lblGem.startMotion(t,i)}
- startMedalMotion(t=null,i=1.2){
- this.lblMedal.startMotion(t,i)}
- startGoldMotion(t=null,i=1.2){
- this.lblGold.startMotion(t,i)}
- startGuildCoinMotion(t=null,i=1.2){
- this.lblGuildCoin.startMotion(t,i)}
- }
- ;
- Kt(BV,"ResourceInfo"),zt(BV,"instance");
- let UV=BV;
- const FV=class t{
- constructor(){
- 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,"pendingParent",null),zt(this,"pendingBtn",null)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- async init(){
- if(0==_L.numRevive&&_L.wave<3)return;
- const t=TV.getInstance();
- if(0!==t.missionList.length){
- if(await t.loadInfo(),t.isAllCompleted())return this.active=!1,void(RV.getInstance().visible=!1);
- VV.getInstance().retire(),RV.getInstance().onClaim=()=>{
- this.onRewardClaimed()}
- ,this.active=!0,this.refreshMission(),this.onConditionChanged()}
- else this.active=!1}
- refreshMission(){
- const t=TV.getInstance(),i=t.getCurrentMission();
- if(!i)return this.active=!1,this.stopFrameCheck(),void(RV.getInstance().visible=!1);
- RV.getInstance().visible=!0,RV.getInstance().setData(i),RV.getInstance().activated=t.rewardPending,this.currentSteps=t.getCurrentSteps(),this.cachedCondition=WV(i.condition),this.startFrameCheck(),this.updatePointing()}
- startFrameCheck(){
- this.checking||(this.checking=!0,this.frameSkip=0,GM.getInstance().add(this.onFrameCheck,this))}
- stopFrameCheck(){
- this.checking&&(this.checking=!1,GM.getInstance().remove(this.onFrameCheck,this))}
- onFrameCheck(){
- if(++this.frameSkip<t.CHECK_INTERVAL)return;
- this.frameSkip=0;
- const i=TV.getInstance();
- if(!i.rewardPending)return this.cachedCondition&&jV(this.cachedCondition)?(i.rewardPending=!0,RV.getInstance().activated=!0,void this.updatePointing()):void this.updatePointing();
- this.updatePointing()}
- onMenuChanged(){
- this.active&&this.updatePointing()}
- onConditionChanged(){
- this.active&&(this.frameSkip=t.CHECK_INTERVAL)}
- async onRewardClaimed(){
- if(!this.active)return;
- const t=TV.getInstance();
- if(!t.rewardPending)return;
- VV.getInstance().hideFromTarget();
- const i=t.currentMissionId;
- if(await t.claimReward(i)>0&&UV.getInstance().updateGem(),t.isAllCompleted())return this.active=!1,this.stopFrameCheck(),void(RV.getInstance().visible=!1);
- this.refreshMission(),this.onConditionChanged()}
- registerBottomMenuGetter(t){
- this.bottomMenuGetter=t}
- registerSubMenuButtonGetter(t){
- this.subMenuButtonGetter=t}
- registerListItemsGetter(t,i=""){
- this.listItemsGetter=t,this.currentSubViewName=i,this.updatePointing()}
- registerPopupButtonGetter(t){
- this.popupButtonGetter=t,this.updatePointing()}
- unregisterPopupButtonGetter(){
- this.popupButtonGetter=null}
- unregisterListItemsGetter(t=""){
- t&&this.currentSubViewName!==t||(this.listItemsGetter=null,this.currentSubViewName="")}
- registerReviveButtonGetter(t){
- this.reviveButtonGetter=t,this.updatePointing()}
- unregisterReviveButtonGetter(){
- this.reviveButtonGetter=null}
- showWithDelay(i,s){
- const e=VV.getInstance();
- if(e.currentTarget!==i){
- if(this.pointingDelayed)return this.pendingParent=i,void(this.pendingBtn=s);
- e.hideFromTarget(),this.pendingParent=i,this.pendingBtn=s,this.pointingDelayed=!0,this.pointingDelayTimer&&clearTimeout(this.pointingDelayTimer),this.pointingDelayTimer=setTimeout(()=>{
- this.pointingDelayed=!1,this.pointingDelayTimer=null,this.pendingParent&&this.pendingBtn&&e.showOnTarget(this.pendingParent,this.pendingBtn),this.pendingParent=null,this.pendingBtn=null}
- ,t.POINTING_DELAY)}
- else e.showOnTarget(i,s)}
- cancelPointingDelay(){
- this.pointingDelayTimer&&(clearTimeout(this.pointingDelayTimer),this.pointingDelayTimer=null),this.pointingDelayed=!1}
- updatePointing(){
- if(!this.active)return;
- if(0===this.currentSteps.length)return VV.getInstance().hideFromTarget(),void this.cancelPointingDelay();
- if(TV.getInstance().rewardPending){
- const t=RV.getInstance();
- return void this.showWithDelay(t,{
- x:0,y:-20,width:t.width,height:t.height}
- )}
- const t=VV.getInstance();
- for(const i of this.currentSteps){
- if("-1"===i.action||"none"===i.action)return t.hideFromTarget(),void this.cancelPointingDelay();
- if("bottomMenu"===i.action){
- const t=i.target;
- if(AV.currentIndex===t)continue;
- if(this.bottomMenuGetter){
- const i=this.bottomMenuGetter(t);
- i&&this.showWithDelay(i.parent,i.btn)}
- return}
- if("list"===i.action){
- if(this.popupButtonGetter)continue;
- if(!this.listItemsGetter)return;
- const t=this.listItemsGetter(),s=i.target;
- if(s<0||s>=t.length)return;
- const e=t[s];
- if(!e)return;
- const n=i.param;
- if(n&&n.includes("|")){
- let t=!1;
- for(let e=this.currentSteps.indexOf(i)+1;
- e<this.currentSteps.length;
- e++){
- const i=this.currentSteps[e];
- if("list"===i.action&&i.param&&!i.param.includes("|")){
- const s=this.listItemsGetter()[i.target];
- if(s&&s[i.param]){
- t=!0;
- break}
- }
- }
- if(t)continue;
- const s=n.split("|"),h=Number(s[0])||0,r=Number(s[1])||0;
- this.showWithDelay(e,{
- x:h,y:r,width:0,height:0}
- )}
- else if(n&&"-1"!==n){
- const t=e[n];
- if(!t)continue;
- if("activated"in t&&!1===t.activated)return VV.getInstance().hideFromTarget(),void this.cancelPointingDelay();
- this.showWithDelay(e,t)}
- return}
- if("subMenu"===i.action){
- const t=i.param;
- if(t&&this.currentSubViewName.toLowerCase().includes(t.replace("btn","").toLowerCase()))continue;
- if(this.subMenuButtonGetter&&t&&"-1"!==t){
- const i=this.subMenuButtonGetter(t);
- i&&this.showWithDelay(i.parent,i.btn)}
- return}
- if("popup"===i.action){
- if(!this.popupButtonGetter)return;
- const t=i.param;
- if(t&&"-1"!==t){
- const i=this.popupButtonGetter(t);
- i&&this.showWithDelay(i.parent,i.btn)}
- return}
- if("revive"===i.action){
- if(!this.reviveButtonGetter)return;
- const t=i.param;
- if(t&&"-1"!==t){
- const i=this.reviveButtonGetter(t);
- i&&this.showWithDelay(i.parent,i.btn)}
- return}
- }
- t.hideFromTarget(),this.cancelPointingDelay()}
- isActive(){
- return this.active}
- }
- ;
- Kt(FV,"MissionGuideController"),zt(FV,"instance"),zt(FV,"CHECK_INTERVAL",10),zt(FV,"POINTING_DELAY",1e3);
- let HV=FV;
- function WV(t){
- if(!t)return null;
- const i=t.split("#"),s=i[0].split("|"),e=s[0],n=Number(s[1])||0;
- if(i.length<2)return{
- type:e,targetNum:n,condType:"",condValue:0}
- ;
- const h=i[1].split("|");
- return{
- type:e,targetNum:n,condType:h[0],condValue:Number(h[1])||0}
- }
- function jV(t){
- switch(t.type){
- case"quest":{
- const i=hL.getInstance().getDataByKindNum(t.targetNum);
- return!!i&&"level"===t.condType&&i.level>=t.condValue}
- case"hero":{
- const i=vx.getInstance().list;
- let s=0;
- for(const e of i)e&&("level"===t.condType&&e.level>=t.condValue&&s++,"enhance"===t.condType&&e.enhance>=t.condValue&&s++);
- return s>=t.targetNum}
- case"castle":{
- const i=wN.getInstance().bookList,s=t.targetNum-1;
- if(s<0||s>=i.length)return!1;
- const e=i[s];
- return!!e&&("level"===t.condType?e.level>=t.condValue:"enhance"===t.condType&&wN.getInstance().castleEnhance>=t.condValue)}
- case"numRevive":return _L.numRevive>=t.targetNum;
- case"maxRevive":return _L.maxWave>=t.targetNum;
- case"heart":{
- const i=wN.getInstance().specialBookList;
- return 0!==i.length&&i[0].level>=t.targetNum}
- case"core1":return Rx.getInstance().userCores[0]>=t.targetNum;
- case"treasure":return Wx.getInstance().equipedKindNums.length>=t.targetNum;
- default:return!1}
- }
- Kt(WV,"parseCondition"),Kt(jV,"checkCondition");
- const $V=class t extends Be{
- constructor(){
- super(),zt(this,"sp",new We),zt(this,"frame",0),zt(this,"frameCount",0),zt(this,"playing",!1),zt(this,"currentTarget",null),zt(this,"itemsGetters",new Map),zt(this,"heroDetailPopupGetter",null),zt(this,"bottomMenuGetter",null),zt(this,"checking",!1),zt(this,"retired",!1),zt(this,"onBattleSwitchBind"),this.eventMode="none",this.addChild(this.sp),this.sp.x=-24,this.sp.y=-34,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return t._instance||(t._instance=new t),t._instance}
- static load(){
- this.textures||ZA.hasSheet("ClickHand")&&(this.textures=ZA.getTextures("ClickHand","ClickHand"))}
- registerHeroDetailPopupGetter(t){
- this.heroDetailPopupGetter=t}
- registerBottomMenuGetter(t){
- this.bottomMenuGetter=t}
- onAdded(){
- this.setBattleSwitch(!0)}
- onRemoved(){
- this.setBattleSwitch(!1)}
- checkEnable(){
- this.retired||_L.numRevive>=2&&this.retire()}
- startCheck(t,i){
- this.retired||(this.itemsGetters.set(t,i),this.checking||(this.checking=!0,GM.getInstance().add(this.onCheck,this)))}
- stopCheck(t){
- this.itemsGetters.delete(t),0===this.itemsGetters.size&&this.checking&&(this.checking=!1,GM.getInstance().remove(this.onCheck,this)),this.hideFromTarget()}
- retire(){
- this.retired||(this.retired=!0,this.hideFromTarget(),this.itemsGetters.clear(),this.checking&&(this.checking=!1,GM.getInstance().remove(this.onCheck,this)))}
- onCheck(){
- const t=AV.currentIndex;
- 0===t&&this.checkQuest()||1===t&&this.checkHero()||2===t&&this.checkCastle()||this.hideFromTarget()}
- checkQuest(){
- if(!this.itemsGetters.has(0))return!1;
- const t=hL.getInstance(),i=1===_L.numRevive,s=i?3:4;
- for(let e=1;
- e<=s;
- e++){
- const s=t.getDataByKindNum(e);
- if(s){
- if(!s.isOpen)return!!(s.canOpen&&_L.gold>=s.effectiveOpenGold)&&(this.showOnItem(0,t=>{
- var i;
- return(null==(i=t.vo)?void 0:i.kindNum)===e}
- ,"btnOpen"),!0);
- if(!i&&s.getLevelUpGold()<=s.effectiveIncGold)return _L.gold>=s.getLevelUpGold()&&(this.showOnItem(0,t=>{
- var i;
- return(null==(i=t.vo)?void 0:i.kindNum)===e}
- ,"btnOpen"),!0)}
- }
- if(i){
- let i=!0;
- for(let s=1;
- s<=3;
- s++){
- const e=t.getDataByKindNum(s);
- if(!e||!e.isOpen){
- i=!1;
- break}
- }
- if(i&&this.bottomMenuGetter){
- const t=vx.getInstance(),i=t.getTeamIds();
- for(const n of i){
- const i=t.getVOWithId(n);
- if(i&&i.enhance>=1)return!1}
- const{
- parent:s,btn:e}
- =this.bottomMenuGetter();
- return this.showOnTarget(s,e),!0}
- }
- return!1}
- checkHero(){
- if(!this.itemsGetters.has(1))return!1;
- const t=this.itemsGetters.get(1)();
- if(!t||0===t.length)return!1;
- const i=t[0];
- if(!i||!i.vo||i.vo.level<=0)return!1;
- if(1===_L.numRevive){
- if(this.heroDetailPopupGetter){
- const t=this.heroDetailPopupGetter();
- if(t&&t.parent){
- const i=t.getEnhanceGuideInfo();
- if(i)return this.showOnTarget(i.parent,i.btn),!0}
- return!1}
- return!(i.vo.enhance>=1||(this.showOnTarget(i,{
- x:80,y:40,width:0,height:0}
- ),0))}
- if(i.vo.level>=10)return!1;
- const s=KN.getInstance().getGameplayMultiplier(xN.UnitUpgradeGold),e=Math.floor(MV.getInstance().getTotalGold(i.vo.level,i.vo.level+1)/s);
- return _L.gold>=e&&(this.showOnTarget(i,i.btnUpgrade),!0)}
- checkCastle(){
- if(0!==_L.numRevive)return!1;
- if(!this.itemsGetters.has(2))return!1;
- const t=this.itemsGetters.get(2)();
- if(!t||0===t.length)return!1;
- const i=wN.getInstance(),s=i.castleVO.level;
- if(s<5){
- const t=MV.getInstance().getTotalGold(s,s+1);
- return _L.gold>=t&&(this.showOnItem(2,t=>{
- var i;
- return 1===(null==(i=t.vo)?void 0:i.kindNum)}
- ,"btnUpgrade"),!0)}
- if(s>=5){
- const t=i.getBookDataByKindNum(2);
- if(t&&t.level<2)return _L.gold>=t.cost&&(this.showOnItem(2,t=>{
- var i;
- return 2===(null==(i=t.vo)?void 0:i.kindNum)}
- ,"btnUpgrade"),!0);
- const s=i.getBookDataByKindNum(3);
- if(s&&s.level<2)return _L.gold>=s.cost&&(this.showOnItem(2,t=>{
- var i;
- return 3===(null==(i=t.vo)?void 0:i.kindNum)}
- ,"btnUpgrade"),!0);
- const e=i.getBookDataByKindNum(4);
- if(e&&e.level<1)return _L.gold>=e.cost&&(this.showOnItem(2,t=>{
- var i;
- return 4===(null==(i=t.vo)?void 0:i.kindNum)}
- ,"btnUpgrade"),!0)}
- return!1}
- showOnItem(t,i,s){
- const e=this.itemsGetters.get(t);
- if(!e)return;
- const n=e();
- for(let h=0;
- h<n.length;
- h++){
- const t=n[h];
- if(i(t)){
- const i=t[s];
- return void(i&&this.showOnTarget(t,i))}
- }
- }
- showOnTarget(t,i){
- if(this.currentTarget===t)return this.x=i.x+.55*i.width,void(this.y=i.y+.45*i.height);
- this.hideFromTarget(),this.currentTarget=t,this.x=i.x+.55*i.width,this.y=i.y+.45*i.height,t.addChild(this),this.show()}
- hideFromTarget(){
- this.currentTarget&&(this.currentTarget=null,this.hide(),this.removeFromParent())}
- show(){
- t.textures||t.load(),t.textures&&0!==t.textures.length&&(this.frame=0,this.frameCount=0,this.sp.texture=t.textures[0],this.visible=!0,this.playing||(this.playing=!0,GM.getInstance().add(this.onEnter,this)))}
- hide(){
- this.visible=!1,this.playing&&(this.playing=!1,GM.getInstance().remove(this.onEnter,this))}
- onEnter(){
- t.textures&&(this.frameCount++,this.frame+=.6,this.frame>=t.textures.length&&(this.frame=0),this.sp.texture=t.textures[Math.floor(this.frame)])}
- destroy(){
- this.itemsGetters.clear(),this.checking&&(this.checking=!1,GM.getInstance().remove(this.onCheck,this)),this.hide(),super.destroy(),this.setBattleSwitch(!1)}
- setBattleSwitch(t){
- lS.getInstance().removeEventListener("BattleSwitch",this.onBattleSwitchBind),t&&(this.onBattleSwitchBind=this.onBattleSwitch.bind(this),lS.getInstance().addEventListener("BattleSwitch",this.onBattleSwitchBind))}
- async onBattleSwitch(t){
- if(!t||!t.detail)return;
- if(this.retired&&0==HV.getInstance().isActive())return void this.setBattleSwitch(!1);
- const i=t.detail.fromType,s=t.detail.toType;
- i&&s&&(i==bV.IDLE&&s!=bV.IDLE?this.hide():i!=bV.IDLE&&s==bV.IDLE&&this.show())}
- }
- ;
- Kt($V,"ClickHand"),zt($V,"_instance"),zt($V,"textures",null);
- let VV=$V;
- const KV=class extends aS{
- constructor(){
- super(),zt(this,"blocker"),zt(this,"allowRect"),zt(this,"highlightBorder"),zt(this,"dimParts",[]),this.createUI()}
- createUI(){
- for(let t=0;
- t<4;
- t++){
- const t=new Gf;
- t.alpha=.5,t.rect(0,0,1,1).fill(0),this.dimParts.push(t),this.addChild(t)}
- this.blocker=new Gf,this.blocker.rect(0,0,640,KA.stageHeight).fill(0),this.blocker.alpha=0,this.blocker.eventMode="static",this.addChild(this.blocker),this.highlightBorder=new Gf,this.addChild(this.highlightBorder),this.allowRect=new Pi(0,0,0,0),this.setBlockerEnabled(!1)}
- setClickArea(t,i,s,e){
- this.allowRect=new Pi(t,i,s,e),this.updateDim(),this.blocker.hitArea={
- contains:Kt((t,i)=>!this.allowRect.contains(t,i),"contains")}
- ,this.setBlockerEnabled(!0)}
- setBlockerEnabled(t){
- this.blocker.eventMode=t?"static":"none";
- for(const i of this.dimParts)i.visible=t;
- this.highlightBorder.visible=t}
- updateDim(){
- const t=KA.stageHeight,{
- x:i,y:s,width:e,height:n}
- =this.allowRect;
- this.dimParts[0].clear().rect(0,0,640,s).fill(0),this.dimParts[1].clear().rect(0,s,i,n).fill(0),this.dimParts[2].clear().rect(i+e,s,640-(i+e),n).fill(0),this.dimParts[3].clear().rect(0,s+n,640,t-(s+n)).fill(0),this.highlightBorder.clear().rect(i,s,e,n).stroke({
- color:16776960,width:3}
- )}
- }
- ;
- Kt(KV,"ClickAniLayer");
- let zV=KV;
- const qV=class t extends Be{
- constructor(){
- super(),zt(this,"sp"),zt(this,"textures",[]),this.textures=ZA.getTextures("ClickHand","ClickHand"),this.sp=new jf(this.textures),this.addChild(this.sp),this.eventMode="none"}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- isPlaying(){
- return!!this.parent}
- show(t,i,s,e,n=0,h=0){
- this.x=t,this.y=i,zV.getInstance().setClickArea(t-.5*s+n,i-.5*e+h,s,e),this.isPlaying()||(this.sp.animationSpeed=.65,this.sp.play(),zV.getInstance().addChild(this))}
- hide(){
- zV.getInstance().setBlockerEnabled(!1),this.sp.stop(),this.parent&&this.removeFromParent()}
- }
- ;
- Kt(qV,"ClickAniEffect"),zt(qV,"instance");
- let XV=qV;
- const YV=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"wave",0),zt(this,"order",0),zt(this,"position",1),zt(this,"text",""),zt(this,"code",""),zt(this,"maxWave",-1),zt(this,"repeat",9999)}
- getTextKey(){
- return`DIALOGUE_TEXT_${
- this.kindNum}
- `}
- }
- ;
- Kt(YV,"DialogueVO");
- let JV=YV;
- const QV=class t{
- constructor(){
- zt(this,"list",[]),zt(this,"waveMap",new Map),zt(this,"playCount",{
- }
- ),zt(this,"playCountLoaded",!1)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- setBookData(t){
- if(this.list=[],this.waveMap.clear(),t){
- for(let i=0;
- i<t.length;
- i++){
- const s=t[i],e=new JV;
- e.kindNum=Number(s.kindNum),e.wave=Number(s.wave),e.order=Number(s.order),e.position=Number(s.position)||1,e.text=s.text??"",e.code=s.code??"",e.maxWave=Number(s.maxWave)||-1,e.repeat=Number(s.repeat)||9999,this.list.push(e);
- let n=this.waveMap.get(e.wave);
- n||(n=[],this.waveMap.set(e.wave,n)),n.push(e)}
- for(const t of this.waveMap.values())t.sort((t,i)=>t.order-i.order);
- this.loadPlayCount()}
- }
- async loadPlayCount(){
- if(this.playCountLoaded)return;
- const i=await $A.getData(t.LOCAL_KEY);
- this.playCount=i??{
- }
- ,this.playCountLoaded=!0}
- savePlayCount(){
- $A.saveData(t.LOCAL_KEY,this.playCount)}
- async getByWaveAsync(t){
- return await this.loadPlayCount(),this.getByWave(t)}
- getByWave(t){
- const i=this.waveMap.get(t)??[],s=_L.maxWave,e=[];
- let n=!1;
- for(const h of i)if(!(h.maxWave>0&&s<h.maxWave)){
- if(h.repeat<999){
- const t=this.playCount[h.kindNum]??0;
- if(t>=h.repeat)continue;
- this.playCount[h.kindNum]=t+1,n=!0}
- e.push(h)}
- return n&&this.savePlayCount(),e}
- hasDialogue(t){
- return this.waveMap.has(t)}
- }
- ;
- Kt(QV,"DialogueDataManager"),zt(QV,"instance"),zt(QV,"LOCAL_KEY",$A.KEY_DIALOGUE_COUNT);
- let ZV=QV;
- const tK=[[1,1,1,"성","성은 우리가 지켜야하는 기지입니다","HELP_TITLE_1","HELP_1"],[2,1,2,"성","성이 파괴되면, 환생하여 다시 진행해야 합니다.","HELP_TITLE_1","HELP_2"],[3,1,3,"성","신전에서 생명의 비술을 연구하면, 성이 파괴되어도 이어할 수 있습니다.","HELP_TITLE_1","HELP_4"],[4,1,4,"성","성은 훈장을 사용하여 영구히 유지되는 강화를 진행할 수 있습니다.","HELP_TITLE_1","HELP_3"],[5,2,1,"영웅","영웅은 최전방에서 성을 보호하고 적을 물리치는 아군입니다.","HELP_TITLE_2","HELP_5"],[6,2,2,"영웅","병영에서 배치를 통해 출전시킨 영웅만 전투에 나서게 됩니다. 대기중인 영웅들을 지금 출전시켜 보세요!","HELP_TITLE_2","HELP_6"],[7,3,1,"퀘스트","퀘스트를 통해 골드를 획득할 수 있습니다.","HELP_TITLE_3","HELP_7"],[8,3,2,"퀘스트","게이지가 찰때마다 골드를 획득합니다.","HELP_TITLE_3","HELP_8"],[9,3,3,"퀘스트","레벨업을 하면, 획득하는 골드가 늘어납니다.","HELP_TITLE_3","HELP_9"],[10,3,4,"퀘스트","다음 단계 퀘스트를 오픈하면, 더 많은 골드를 획득할 수 있습니다.","HELP_TITLE_3","HELP_10"],[11,4,1,"환생","성이 파괴되면, 환생을 해야합니다.","GAME_5","HELP_11"],[12,4,2,"환생","10 wave 이상에서는 언제든 환생을 할 수 있습니다.","HELP_TITLE_4","HELP_12"],[13,4,3,"환생","환생을 하면, ( 훈장 )을 얻게 됩니다.","HELP_TITLE_4","HELP_13"],[14,4,4,"환생","( 훈장 )은 게임에서 가장 중요한 재화로, 영웅과 성을 강화하는데 사용됩니다.","HELP_TITLE_4","HELP_14"],[15,4,5,"환생","높은 웨이브에서 환생할수록 (훈장)을 더 많이 획득할 수 있습니다.","HELP_TITLE_4","HELP_15"],[16,5,1,"기사단","기사단 레벨은 최고 도달 웨이브를 기준으로 산정됩니다. (100 웨이브당 1 레벨)","HELP_TITLE_5","HELP_16"],[17,5,2,"기사단","무한랭킹전/던전 등에서 영웅의 레벨은 기사단 레벨을 기준으로 결정됩니다.","HELP_TITLE_5","HELP_17"],[18,6,1,"영웅 - 사제","사제에게는 ( 신의 은총 )이라는 스킬이 있습니다.","HELP_TITLE_6","HELP_18"],[19,6,2,"영웅 - 사제","( 신의 은총 )은 확률적으로 발동하는데, 2분 동안 게임 속도를 300% 올려줍니다.","HELP_TITLE_6","HELP_19"],[20,6,3,"영웅 - 사제","사제를 여러명 가질수록, (신의 은총) 스킬이 발동할 확률이 높아집니다.","HELP_TITLE_6","HELP_20"],[21,7,1,"영웅 - 페어리","엘프의 비술은 확률적으로 웨이브를 1씩 건너뛰는 스킬을 가지고 있습니다.","HELP_TITLE_7","HELP_21"],[22,7,2,"영웅 - 페어리","페어리는 엘프의 비술 스킬을 가지고 있습니다.","HELP_TITLE_7","HELP_22"],[23,7,3,"영웅 - 페어리","페어리를 많이 보유할수록, 웨이브를 1씩 건너뛰어 빠르게 전진할 수 있습니다.","HELP_TITLE_7","HELP_23"],[24,8,1,"영웅 - 암흑 궁병","암흑 궁병은 환생시, 시작 웨이브를 올려주는 스킬을 가지고 있습니다.","HELP_TITLE_8","HELP_24"],[25,8,2,"영웅 - 암흑 궁병","암흑 궁병을 많이 보유할수록, 환생후 높은 웨이브에서 시작할 수 있습니다.","HELP_TITLE_8","HELP_25"],[26,8,3,"영웅 - 암흑 궁병","( 암흑궁병을 10명 배치하고, 1000층에서 환생하면, 500층에서 시작합니다. )","HELP_TITLE_8","HELP_26"]],iK=class t{
- constructor(){
- zt(this,"items"),this.items=tK.map(([t,i,s,e,n,h,r])=>({
- kindNum:t,main:i,sub:s,title:AG.getText(h,e),desc:AG.getText(r,n)}
- ))}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- getMainList(){
- const t=new Set,i=[];
- for(const s of this.items)t.has(s.main)||(t.add(s.main),i.push(s));
- return i}
- getSubsByMain(t){
- return this.items.filter(i=>i.main===t).sort((t,i)=>t.sub-i.sub)}
- getIconName(t){
- return{
- 1:"Icon_Help_Castle",2:"Icon_Help_Hero",3:"Icon_Help_Quest",4:"Icon_Help_Revive",5:"Icon_Help_Knight",6:"Icon_Help_Prist",7:"Icon_Help_Pairy",8:"Icon_Help_DarkArche"}
- [t]??`Help_${
- t}
- _1`}
- getImageName(t,i){
- return`Help_${
- t}
- _${
- i}
- `}
- }
- ;
- Kt(iK,"HelpDataManager"),zt(iK,"instance",null);
- let sK=iK;
- var eK=(t=>(t[t.Secretary=7001]="Secretary",t[t.Secretary_Day30=7002]="Secretary_Day30",t))(eK||{
- }
- );
- const nK=class t{
- constructor(){
- zt(this,"_unlockWave",10),zt(this,"_productBookEnableYn",""),zt(this,"_nextMarketYn",""),zt(this,"allProducts",[]),zt(this,"packageList",[]),zt(this,"periodList",[]),zt(this,"normalList",[]),zt(this,"wavePassList",[]),zt(this,"reviewShopList",[]),zt(this,"requestPending",!1),zt(this,"_productIdsWithHammer",null),zt(this,"objTargeting",{
- }
- )}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- get unlockWave(){
- return this._unlockWave}
- get productBookEnableYn(){
- if(""==this._productBookEnableYn){
- const t=EL.getInstance().getClientData("PRODUCT_BOOK_ENABLE");
- this._productBookEnableYn=t&&"Y"==t?"Y":"N"}
- return this._productBookEnableYn}
- get nextMarketYn(){
- if(""==this._nextMarketYn){
- const t=EL.getInstance().getClientData("NEXT_MARKET_YN");
- this._nextMarketYn=t&&"N"==t?"N":"Y"}
- return this._nextMarketYn}
- async getProducts(t,i=!0){
- return"Y"==this.productBookEnableYn?this.getAvailProducts(t,i):this.loadProducts(t,i)}
- setProducts(t){
- "Y"==this.productBookEnableYn?this.setAvailProducts(t):this.setData(t)}
- async loadProducts(t,i=!0){
- if(1==this.requestPending)return!1;
- this.setRequestPending(!0);
- const s=await hD.getInstance().shop.getProducts(!0);
- return s.success?(this.setData(s.body),this.setRequestPending(!1),!0):(this.setRequestPending(!1),!1)}
- async getAvailProducts(t,i=!0){
- if(1==this.requestPending)return!1;
- this.setRequestPending(!0);
- const s=await hD.getInstance().shop.getAvailProducts(t,i);
- return s.success?(this.setAvailProducts(s.body),this.setRequestPending(!1),!0):(this.setRequestPending(!1),!1)}
- setAvailProducts(t){
- if(!t)return;
- const i=[];
- for(const s of t)if("id"in s&&"count"in s){
- const t=Number(s.id),e=Number(s.count),n=this.getById(t);
- n&&(i.push(t),n.active=1,n.purchaseCount=e)}
- for(const s of this.allProducts)i.includes(s.id)||(s.active=0)}
- setRequestPending(t){
- this.requestPending=t}
- setData(t){
- var i;
- if(!t)return;
- if(this.allProducts=[],this.packageList=[],this.periodList=[],this.normalList=[],this.wavePassList.length=0,this.reviewShopList.length=0,!t)return;
- for(const e of t){
- const t={
- id:e.id??0,productId:e.productId??0,name:e.name??"",sku:e.sku??"",googleId:e.googleId??"",appleId:e.appleId??"",googleIdKr:e.googleIdKr??"",appleIdKr:e.appleIdKr??"",main:e.main??0,sub:e.sub??0,sub2:e.sub2??0,payback:e.payback??0,currency:e.currency??"",price:e.price??0,usdPrice:e.usdPrice??0,slxPrice:e.slxPrice??0,amount:e.amount??e.price??0,maxPurchase:e.maxPurchase??0,frequency:e.frequency??0,rewards:e.rewards??[],iconNames:e.iconNames??"",descriptions:e.descriptions??"",descriptionLangIds:e.descriptionLangIds??"",imageURL:e.imageURL??"",purchaseCount:0,active:e.active??0,targeting:e.targeting}
- ;
- if(this.allProducts.push(t),t.targeting){
- const s=(null==(i=t.targeting.triggerEvent)?void 0:i.type)??"";
- s&&(this.objTargeting[s]||(this.objTargeting[s]=[]),this.objTargeting[s].push(t.productId))}
- else if(0==t.main)switch(t.sub){
- case 0:this.packageList.push(t);
- break;
- case 1:this.periodList.push(t);
- break;
- case 2:this.normalList.push(t)}
- else 1==t.main?0===t.sub&&this.wavePassList.push(t):-1==t.main&&this.reviewShopList.push(t)}
- this.periodList.sort((t,i)=>{
- var s,e,n,h;
- let r=(null==(s=t.rewards)?void 0:s.some(t=>"yes"===t.subscribe||"assistant"===t.subType))?0:1,o=(null==(e=i.rewards)?void 0:e.some(t=>"yes"===t.subscribe||"assistant"===t.subType))?0:1;
- return r!=o||(r=(null==(n=t.rewards)?void 0:n.some(t=>"buff"===t.type&&"speed"===t.subType))?0:1,o=(null==(h=i.rewards)?void 0:h.some(t=>"buff"===t.type&&"speed"===t.subType))?0:1),r-o}
- );
- const s=this.getByProductId(eK.Secretary);
- s&&this.reviewShopList.unshift(s)}
- getAll(){
- return this.allProducts}
- getById(t){
- return this.allProducts.find(i=>i.id===t)}
- getByProductId(t){
- return this.allProducts.find(i=>i.productId===t)}
- getProductIdByStoreProductId(t){
- if(!t)return 0;
- for(const i of this.allProducts)if(i.googleId===t||i.googleIdKr===t||i.appleId===t||i.appleIdKr===t||i.sku===t)return i.productId;
- return 0}
- getStoreProductIdByProductId(t){
- const i=this.getByProductId(t);
- if(!i)return"";
- const s=EL.getInstance();
- if("toss"==s.envPlatform)return i.sku;
- if("capacitor"==s.envPlatform){
- if(s.isGoogleClientKr())return i.googleIdKr;
- if(s.isAppleClientKr())return i.appleIdKr;
- if(s.isGoogleClient())return i.googleId;
- if(s.isAppleClient())return i.appleId}
- return""}
- getWavePassList(){
- return this.wavePassList}
- getPriceStr(i){
- const s=t.getInstance().getByProductId(i);
- if(!s)return"";
- let e=`$${
- s.usdPrice}
- `;
- const n=EL.getInstance();
- if(0==s.usdPrice||n.isTossClient()||n.isGoogleClientKr())e="usd"===s.currency?`$${
- s.price}
- `:`₩${
- Math.round(s.price).toLocaleString()}
- `;
- else if(n.isAppleClientKr()){
- let t;
- try{
- t=JSON.parse(n.getClientData("IN_APP_SHOP_APPLE_KR_PRICE"))}
- catch(h){
- t={
- .99:"1100",1.99:"3300",2.99:"4400",4.99:"7700",7.99:"11000",9.99:"17000",14.99:"25000",19.99:"33000",24.99:"44000",29.99:"49000",34.99:"55000",49.99:"77000",99.99:"149000"}
- }
- e=`₩${
- Math.round(t[String(s.usdPrice)]).toLocaleString()}
- `}
- return e}
- getRedGemPrice(i){
- const s=t.getInstance().getByProductId(i);
- return s?Math.round(100*s.usdPrice):0}
- isAvailableForPurchaseWithProductId(t){
- const i=this.getByProductId(t);
- return!!i&&this.isAvailableForPurchase(i)}
- isAvailableForPurchase(t){
- return!!t&&("N"==this.productBookEnableYn||0==t.maxPurchase||t.purchaseCount<t.maxPurchase)}
- isSubscriptionProductWithProductId(t){
- const i=this.getByProductId(t);
- return!!i&&this.isSubscriptionProduct(i)}
- isSubscriptionProduct(t){
- if(!t)return!1;
- const i=t.rewards;
- return!!Array.isArray(i)&&i.some(t=>"yes"===(null==t?void 0:t.subscribe))}
- isReviewShop(){
- const t=EL.getInstance();
- if(1==t.isAppleClientKr()||1==t.isAppleClient()){
- const t=EL.getInstance().getClientData("IN_APP_SHOP_REVIEW");
- return!(!t||"Y"!=t)}
- return!1}
- getUsdPriceByKrwPrice(t){
- let i=0;
- switch(t){
- case 1100:i=.99;
- break;
- case 3300:i=1.99;
- break;
- case 4400:i=2.99;
- break;
- case 6600:i=4.99;
- break;
- case 14e3:case 14300:i=9.99;
- break;
- case 22e3:i=14.99;
- break;
- case 28600:case 29e3:i=19.99;
- break;
- case 33e3:i=24.99;
- break;
- case 44e3:i=29.99;
- break;
- case 48400:case 49e3:i=34.99;
- break;
- case 66e3:i=49.99;
- break;
- case 148500:case 149e3:i=99.99}
- return i}
- getRewardMessage(t){
- if(!t||0===t.length)return AG.getText("GAME_347","상품이 지급되었습니다.");
- const i=[];
- return t.includes("buff:ads")&&i.push(AG.getText("GAME_348","광고 제거 상품이 적용되었습니다.")),t.includes("buff:speed")&&i.push(AG.getText("GAME_349","2배속 상품이 적용되었습니다.")),t.includes("buff:assistant")&&i.push(AG.getText("GAME_1242","전문비서가 고용되었습니다.")),t.includes("pass")&&i.push(AG.getText("GAME_350","WAVE 패스가 활성화되었습니다.")),t.includes("mail")&&i.push(AG.getText("GAME_351","상품이 메일로 전송되었습니다.")),0==i.length&&i.push(AG.getText("GAME_347","상품이 지급되었습니다.")),i.join("\n")}
- getProductIdsWithHammer(){
- if(!this._productIdsWithHammer){
- let t;
- this._productIdsWithHammer=[];
- const i=this.allProducts.length;
- for(let s=0;
- s<i;
- ++s){
- if(t=this.allProducts[s],!t||!t.rewards)continue;
- let i=!1;
- const e=t.rewards.length;
- for(let s=0;
- s<e;
- ++s)if("hammer"===t.rewards[s].type){
- i=!0;
- break}
- i&&this._productIdsWithHammer.push(t.productId)}
- }
- return this._productIdsWithHammer}
- getTargetingByType(t){
- return this.objTargeting[t]}
- }
- ;
- Kt(nK,"ShopDataManager"),zt(nK,"instance");
- let hK=nK;
- const rK=Object.freeze(Object.defineProperty({
- __proto__:null,ShopDataManager:hK}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),oK=class extends tG{
- constructor(t,i=150,s=30){
- super(t,i,s),this.color=QL.BROWN}
- }
- ;
- Kt(oK,"CommonBrownButton");
- let aK=oK;
- const cK=class extends tG{
- constructor(t,i=150,s=30){
- super(t,i,s),this.color=QL.RED}
- }
- ;
- Kt(cK,"CommonRedButton");
- let lK=cK;
- const uK=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_17)),zt(this,"btnConfirm",new sG("확인")),zt(this,"btnCancel",new lK("취소")),zt(this,"onConfirm",null),zt(this,"onCancel",null),zt(this,"textAlignCenter",!1),this.title="",this.lblMessage.y=90,this.contentContainer.addChild(this.lblMessage,this.btnConfirm,this.btnCancel),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.btnClose.onClick=this.onCancelClick.bind(this),aD.setLabelWrapWidth(this.lblMessage,this.width-60)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onConfirmClick(){
- this.hide();
- let t=this.onConfirm;
- this.onConfirm=null,null!==t&&t()}
- onCancelClick(){
- this.hide();
- let t=this.onCancel;
- this.onCancel=null,null!==t&&t()}
- show(t,i=null,s=null){
- this.onConfirm=i,this.onCancel=s,this.lblMessage.text=t,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
- hide(){
- super.hide(),this.title="",this.textAlignCenter=!1}
- updateLayout(){
- if(this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width-this.btnCancel.width-20),this.btnCancel.x=this.btnConfirm.x+this.btnConfirm.width+20,this.btnConfirm.y=this.lblMessage.y+this.lblMessage.height+30,this.btnCancel.y=this.btnConfirm.y,this.height=this.btnConfirm.y+this.btnConfirm.height+40,this.textAlignCenter){
- let t=this.lblMessage.getStyle();
- t.align="center",this.lblMessage.setStyle(t)}
- else{
- let t=this.lblMessage.getStyle();
- t.align="left",this.lblMessage.setStyle(t)}
- }
- getDefaultPositionY(){
- return.3*KA.stageHeight}
- onBackButton(){
- return this.onCancelClick(),!0}
- }
- ;
- Kt(uK,"CommonConfirmPopup"),zt(uK,"_instance");
- let dK=uK;
- const fK=Object.freeze(Object.defineProperty({
- __proto__:null,CommonConfirmPopup:dK}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),pK=class extends Be{
- constructor(){
- super(),zt(this,"icon",new We),zt(this,"bg",new We),zt(this,"cover",new We),zt(this,"star",new We),zt(this,"posList",[30,26,24,19,16,13,9]),this.bg.x=3,this.bg.y=3,this.addChild(this.bg),this.icon.x=3,this.icon.y=3,this.addChild(this.icon),this.cover.x=0,this.cover.y=0,this.addChild(this.cover),this.addChild(this.star),this.setEmpty()}
- setEmpty(){
- this.bg.texture=ZA.getTexture("UI_PET","HeroFrame_1_Bg"),this.cover.texture=ZA.getTexture("UI_PET","HeroFrame_1"),this.icon.visible=!1,this.star.visible=!1}
- setPet(t,i){
- this.icon.visible=!0,this.star.visible=!0,this.icon.alpha=1,this.icon.tint=16777215,this.icon.texture=ZA.getTexture("UI_PET",`UI_PET${
- t}
- `),this.icon.width=this.icon.height=this.cover.width-6,this.icon.x=3,this.icon.y=2;
- const s=Math.max(1,Math.min(i,5));
- this.star.texture=ZA.getTextures("UI_PET","UI_UNIT_RARE")[s-1],this.star.x=this.posList[s-1],this.star.y=this.bg.height-this.star.height,this.bg.texture=ZA.getTexture("UI_PET",`HeroFrame_${
- s}
- _Bg`),this.cover.texture=ZA.getTexture("UI_PET",`HeroFrame_${
- s}
- `)}
- setInactive(t){
- this.icon.visible=!0,this.star.visible=!1,this.icon.texture=ZA.getTexture("UI_PET",`UI_PET${
- t}
- `),this.icon.width=this.icon.height=this.cover.width-6,this.icon.x=3,this.icon.y=2,this.icon.alpha=.9,this.icon.tint=11184810,this.bg.texture=ZA.getTexture("UI_PET","HeroFrame_1_Bg"),this.cover.texture=ZA.getTexture("UI_PET","HeroFrame_1")}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- showStar(){
- this.star.visible=!0}
- hideStar(){
- this.star.visible=!1}
- }
- ;
- Kt(pK,"PetIcon");
- let gK=pK;
- var mK=(t=>(t[t.ROSTER=0]="ROSTER",t[t.HERO_LIST=1]="HERO_LIST",t[t.HERO_DETAIL=2]="HERO_DETAIL",t[t.BOOK=3]="BOOK",t[t.SHOP=4]="SHOP",t[t.HERO_PVP=5]="HERO_PVP",t[t.TOWER=6]="TOWER",t[t.TOWER_TEAM=7]="TOWER_TEAM",t))(mK||{
- }
- );
- const wK=class extends Be{
- constructor(){
- super(),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","Hero1"))),zt(this,"lblLevel",new YD("Lv.1",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblEnhance",new YD("+1",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblCount",new YD("1",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_24)),zt(this,"bg",new We(ZA.getTexture("UI_Ekkorr","HeroFrame1"))),zt(this,"cover",new We(ZA.getTexture("UI_Ekkorr","HeroCover1"))),zt(this,"mode",mK.HERO_LIST),zt(this,"trans",new We(ZA.getTexture("UI_Ekkorr","Trans0001"))),zt(this,"_active",!1),this.addChild(this.bg),this.addChild(this.icon),this.addChild(this.cover),this.addChild(this.lblLevel),this.addChild(this.lblEnhance),this.addChild(this.lblCount),this.addChild(this.trans),this.bg.scale.x=.88,this.cover.scale.x=.88,this.icon.height=this.bg.height-4,this.icon.scale.x=this.icon.scale.y,this.icon.x=1,this.icon.y=2,this.lblLevel.textColor=16777215,this.lblLevel.x=(this.icon.width-this.lblLevel.width)/2,this.lblLevel.y=this.bg.height-this.lblLevel.height-1,this.lblCount.textColor=16777215,this.lblCount.x=this.bg.width-this.lblCount.width-38,this.lblCount.y=this.bg.height-this.lblCount.height,this.lblCount.visible=!1,this.lblEnhance.x=this.bg.width-this.lblEnhance.width-2,this.lblEnhance.y=7,this.trans.scale=1.2,this.trans.x=5,this.trans.y=7,this.trans.visible=!1}
- setData(t){
- this.setTextures(t.base,t.grade);
- const i=MV.getInstance().getMaxLevel(t.grade,t.trans);
- this.lblLevel.text=`Lv.${
- t.level}
- `,this.lblLevel.textColor=t.level>=i?16763904:16777215,this.lblEnhance.text=`+${
- t.enhance}
- `,this.lblEnhance.x=this.bg.width-this.lblEnhance.width-30,this.lblLevel.x=(this.bg.width-15-this.lblLevel.width)/2,t.trans>0?(this.trans.visible=!0,this.trans.texture=ZA.getTexture("UI_Ekkorr",`Trans000${
- t.trans}
- `)):this.trans.visible=!1,this.mode===mK.HERO_LIST?(this.lblEnhance.visible=t.enhance>0,this.lblLevel.visible=!0,this.lblCount.visible=!1):this.mode===mK.ROSTER?(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!0):this.mode===mK.BOOK||this.mode===mK.SHOP?(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!1):this.mode===mK.HERO_PVP?(this.lblEnhance.visible=!1,this.lblLevel.visible=!0,this.lblCount.visible=!1):this.mode===mK.TOWER?(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!0,this.trans.visible=!1):this.mode===mK.TOWER_TEAM&&(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!1,this.trans.visible=!1)}
- setTextures(t,i){
- t>0?(this.icon.visible=!0,this.icon.texture=ZA.getTexture("UI_Ekkorr",`Hero${
- t}
- `)):this.icon.visible=!1,this.bg.texture=ZA.getTexture("UI_Ekkorr",`HeroFrame${
- i}
- `),this.cover.texture=ZA.getTexture("UI_Ekkorr",`HeroCover${
- i}
- `)}
- setMode(t){
- this.mode=t}
- setNumber(t){
- this.lblCount.text=t.toString()}
- get active(){
- return this._active}
- set active(t){
- this._active=t,t?(this.bg.tint=16777215,this.cover.tint=16777215,this.icon.tint=16777215,this.trans.tint=16777215,this.lblCount.textColor=16777215):(this.bg.tint=3355443,this.cover.tint=3355443,this.icon.tint=3355443,this.trans.tint=3355443,this.lblCount.textColor=3355443)}
- showBackground(){
- this.bg.visible=!0}
- hideBackground(){
- this.bg.visible=!1}
- showIcon(){
- this.icon.visible=!0}
- hideIcon(){
- this.icon.visible=!1}
- showLevel(){
- this.lblLevel.visible=!0}
- hideLevel(){
- this.lblLevel.visible=!1}
- showEnhance(){
- this.lblEnhance.visible=!0}
- hideEnhance(){
- this.lblEnhance.visible=!1}
- setCountText(t){
- this.lblCount.text=t,this.lblCount.visible=!0,this.lblCount.x=(this.bg.width-15-this.lblCount.width)/2}
- hideTrans(){
- this.trans.visible=!1}
- setTransAlpha(t){
- this.trans.alpha=t}
- setDataWithKindNum(t,i=0){
- if(t>0){
- const i=vx.getInstance().getBookVO(t);
- if(!i)return;
- this.setTextures(i.base,i.grade)}
- else this.setTextures(0,1);
- i>0?(this.trans.visible=!0,this.trans.texture=ZA.getTexture("UI_Ekkorr",`Trans000${
- i}
- `)):this.trans.visible=!1,this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!1}
- }
- ;
- Kt(wK,"HeroIcon");
- let vK=wK;
- var bK=(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.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))(bK||{
- }
- );
- const yK=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"img"),zt(this,"heroIcon"),zt(this,"petIcon"),zt(this,"lblNum"),zt(this,"_type",""),zt(this,"_amount",0),zt(this,"_grade",-1),zt(this,"_kindNum",-1),zt(this,"_subType",""),this.bg=new We(ZA.getTexture("UI_Ekkorr","Frame_Reward_01")),this.addChild(this.bg),this.img=new We(ZA.getTexture("UI_Ekkorr","UI_SHOP_GEM")),this.addChild(this.img),this.heroIcon=new vK,this.heroIcon.visible=!1,this.heroIcon.height=this.bg.height,this.heroIcon.scale.x=this.heroIcon.scale.y,this.addChild(this.heroIcon),this.petIcon=new gK,this.petIcon.visible=!1,this.petIcon.scale=.9,this.addChild(this.petIcon);
- const t=aD.DEFAULT_OUTLINE_FONT_OPTION_18;
- t.fill=aD.COLOR_WHITE,t.fontSize=18,this.lblNum=new YD("1",t.fill,t),this.addChild(this.lblNum),this.updateLayout()}
- get width(){
- return this.heroIcon.visible?this.heroIcon.width:this.bg.width}
- get height(){
- return this.heroIcon.visible?this.heroIcon.height:this.bg.height}
- updateLayout(){
- const t=this.bg.width,i=this.bg.height;
- this.img.x=.5*(t-this.img.width),this.img.y=.5*(i-this.img.height)-3,this.heroIcon.visible?this.lblNum.x=.5*(this.heroIcon.width-this.lblNum.width)-7:this.lblNum.x=.5*(t-this.lblNum.width),this.lblNum.y=i-this.lblNum.height}
- get type(){
- return this._type}
- get amount(){
- return this._amount}
- get grade(){
- return this._grade}
- get kindNum(){
- return this._kindNum}
- get subType(){
- return this._subType}
- setData(t,i,s=-1,e=-1,n=""){
- this._type=t,this._amount=i,this._grade=s,this._kindNum=e,this._subType=n,this.img.visible=!1,this.bg.visible=!1,this.heroIcon.visible=!1,this.petIcon.visible=!1;
- let h=1,r="",o="UI_Ekkorr";
- t==bK.gem?(r="UI_SHOP_GEM",h=.85):t==bK.redGem?(r="UI_SHOP_RED_GEM",h=.83):t==bK.gold?(r="m_gold",h=.7):t==bK.honorCoin?(r="UI_COIN_Big",h=.8):t==bK.guildCoin||t==bK.guildPoint?(r="GUILD_COIN",h=1.6):t==bK.raidCoin?(r="RaidCoin_on",h=1.5):t==bK.hammer?(r="Icon_Hammer",o="UI",h=1.5):"dungeonTicket"==t?(r="DungeonTick",h=.8):t==bK.hero?(this.heroIcon.setDataWithKindNum(e),this.heroIcon.visible=!0):t==bK.ticket&&n==bK.heroGacha?r="Ticket_HeroGacha":t==bK.ticket&&n==bK.heroSelect?(r="Ticket_HeroSelect",h=.85):t==bK.trans&&n==bK.hero?r=9==this._grade?"Ticket_HeroTrans2":"Ticket_HeroTrans":t==bK.pet?(this.petIcon.setPet(e,1),this.petIcon.visible=!0):t==bK.petTicket||n==bK.petTicket||t==bK.ticket&&n==bK.pet?(r="PetTick",h=.9):t==bK.petSelect||n==bK.petSelect||t==bK.ticket&&n==bK.petSelect?(r="Ticket_PetSelect",h=.9):t==bK.ticket&&n==bK.treasureGacha?(r="Ticket_TreasureGacha",h=.95):t==bK.trans&&n==bK.treasure&&(r=7===this._grade?"Ticket_TreasureTrans7":"Ticket_TreasureTrans6"),r&&(this.img.scale=h,this.img.texture=ZA.getTexture(o,r),this.img.visible=!0,this.bg.visible=!0),this.lblNum.text=String(i),this.updateLayout()}
- setDataFrom(t){
- if(!t||!t.type||!t.amount)return;
- let i=String(t.type),s=Number(t.amount),e="grade"in t?Number(t.grade):-1,n="kindNum"in t?Number(t.kindNum):-1,h="";
- "subType"in t&&(h=t.subType),this.setData(i,s,e,n,h)}
- reset(){
- this._type="",this._amount=0,this._grade=-1,this._kindNum=-1,this._subType=""}
- }
- ;
- Kt(yK,"RewardItem");
- let _K=yK;
- var MK,EK,AK=(t=>(t.EMPTY="",t.UNKNOWN="UNKNOWN",t.VERIFIED="VERIFIED",t.SUPERVISED="SUPERVISED",t.SUPERVISED_APPROVAL_PENDING="SUPERVISED_APPROVAL_PENDING",t.SUPERVISED_APPROVAL_DENIED="SUPERVISED_APPROVAL_DENIED",t.SHARED="SHARED",t.DECLINED="DECLINED",t.UNSUPPORTED="UNSUPPORTED",t))(AK||{
- }
- );
- (EK=MK||(MK={
- }
- )).Unimplemented="UNIMPLEMENTED",EK.Unavailable="UNAVAILABLE";
- const SK=class extends Error{
- constructor(t,i,s){
- super(t),this.message=t,this.code=i,this.data=s}
- }
- ;
- Kt(SK,"CapacitorException");
- let TK=SK;
- const CK=Kt(t=>{
- var i,s;
- return(null==t?void 0:t.androidBridge)?"android":(null===(s=null===(i=null==t?void 0:t.webkit)||void 0===i?void 0:i.messageHandlers)||void 0===s?void 0:s.bridge)?"ios":"web"}
- ,"getPlatformId"),kK=Kt(t=>{
- const i=t.CapacitorCustomPlatform||null,s=t.Capacitor||{
- }
- ,e=s.Plugins=s.Plugins||{
- }
- ,n=Kt(()=>null!==i?i.name:CK(t),"getPlatform"),h=Kt(()=>"web"!==n(),"isNativePlatform"),r=Kt(t=>{
- const i=c.get(t);
- return!!(null==i?void 0:i.platforms.has(n()))||!!o(t)}
- ,"isPluginAvailable"),o=Kt(t=>{
- var i;
- return null===(i=s.PluginHeaders)||void 0===i?void 0:i.find(i=>i.name===t)}
- ,"getPluginHeader"),a=Kt(i=>t.console.error(i),"handleError"),c=new Map,l=Kt((t,h={
- }
- )=>{
- const r=c.get(t);
- if(r)return r.proxy;
- const a=n(),l=o(t);
- let u;
- const d=Kt(async()=>(!u&&a in h?u=u="function"==typeof h[a]?await h[a]():h[a]:null!==i&&!u&&"web"in h&&(u=u="function"==typeof h.web?await h.web():h.web),u),"loadPluginImplementation"),f=Kt((i,e)=>{
- var n,h;
- if(!l){
- if(i)return null===(h=i[e])||void 0===h?void 0:h.bind(i);
- throw new TK(`"${
- t}
- " plugin is not implemented on ${
- a}
- `,MK.Unimplemented)}
- {
- const h=null==l?void 0:l.methods.find(t=>e===t.name);
- if(h)return"promise"===h.rtype?i=>s.nativePromise(t,e.toString(),i):(i,n)=>s.nativeCallback(t,e.toString(),i,n);
- if(i)return null===(n=i[e])||void 0===n?void 0:n.bind(i)}
- }
- ,"createPluginMethod"),p=Kt(i=>{
- let s;
- const e=Kt((...e)=>{
- const n=d().then(n=>{
- const h=f(n,i);
- if(h){
- const t=h(...e);
- return s=null==t?void 0:t.remove,t}
- throw new TK(`"${
- t}
- .${
- i}
- ()" is not implemented on ${
- a}
- `,MK.Unimplemented)}
- );
- return"addListener"===i&&(n.remove=async()=>s()),n}
- ,"wrapper");
- return e.toString=()=>`${
- i.toString()}
- () {
-  [capacitor code] }
- `,Object.defineProperty(e,"name",{
- value:i,writable:!1,configurable:!1}
- ),e}
- ,"createPluginMethodWrapper"),g=p("addListener"),m=p("removeListener"),w=Kt((t,i)=>{
- const s=g({
- eventName:t}
- ,i),e=Kt(async()=>{
- const e=await s;
- m({
- eventName:t,callbackId:e}
- ,i)}
- ,"remove"),n=new Promise(t=>s.then(()=>t({
- remove:e}
- )));
- return n.remove=async()=>{
- await e()}
- ,n}
- ,"addListenerNative"),v=new Proxy({
- }
- ,{
- get(t,i){
- switch(i){
- case"$$typeof":return;
- case"toJSON":return()=>({
- }
- );
- case"addListener":return l?w:g;
- case"removeListener":return m;
- default:return p(i)}
- }
- }
- );
- return e[t]=v,c.set(t,{
- name:t,proxy:v,platforms:new Set([...Object.keys(h),...l?[a]:[]])}
- ),v}
- ,"registerPlugin");
- return s.convertFileSrc||(s.convertFileSrc=t=>t),s.getPlatform=n,s.handleError=a,s.isNativePlatform=h,s.isPluginAvailable=r,s.registerPlugin=l,s.Exception=TK,s.DEBUG=!!s.DEBUG,s.isLoggingEnabled=!!s.isLoggingEnabled,s}
- ,"createCapacitor"),OK=Kt(t=>t.Capacitor=kK(t),"initCapacitorGlobal")("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{
- }
- ),IK=OK.registerPlugin,xK=class{
- constructor(){
- this.listeners={
- }
- ,this.retainedEventArguments={
- }
- ,this.windowListeners={
- }
- }
- addListener(t,i){
- let s=!1;
- this.listeners[t]||(this.listeners[t]=[],s=!0),this.listeners[t].push(i);
- const e=this.windowListeners[t];
- e&&!e.registered&&this.addWindowListener(e),s&&this.sendRetainedArgumentsForEvent(t);
- const n=Kt(async()=>this.removeListener(t,i),"remove");
- return Promise.resolve({
- remove:n}
- )}
- async removeAllListeners(){
- this.listeners={
- }
- ;
- for(const t in this.windowListeners)this.removeWindowListener(this.windowListeners[t]);
- this.windowListeners={
- }
- }
- notifyListeners(t,i,s){
- const e=this.listeners[t];
- if(e)e.forEach(t=>t(i));
- else if(s){
- let s=this.retainedEventArguments[t];
- s||(s=[]),s.push(i),this.retainedEventArguments[t]=s}
- }
- hasListeners(t){
- var i;
- return!!(null===(i=this.listeners[t])||void 0===i?void 0:i.length)}
- registerWindowListener(t,i){
- this.windowListeners[i]={
- registered:!1,windowEventName:t,pluginEventName:i,handler:Kt(t=>{
- this.notifyListeners(i,t)}
- ,"handler")}
- }
- unimplemented(t="not implemented"){
- return new OK.Exception(t,MK.Unimplemented)}
- unavailable(t="not available"){
- return new OK.Exception(t,MK.Unavailable)}
- async removeListener(t,i){
- const s=this.listeners[t];
- if(!s)return;
- const e=s.indexOf(i);
- this.listeners[t].splice(e,1),this.listeners[t].length||this.removeWindowListener(this.windowListeners[t])}
- addWindowListener(t){
- window.addEventListener(t.windowEventName,t.handler),t.registered=!0}
- removeWindowListener(t){
- t&&(window.removeEventListener(t.windowEventName,t.handler),t.registered=!1)}
- sendRetainedArgumentsForEvent(t){
- const i=this.retainedEventArguments[t];
- i&&(delete this.retainedEventArguments[t],i.forEach(i=>{
- this.notifyListeners(t,i)}
- ))}
- }
- ;
- Kt(xK,"WebPlugin");
- let NK=xK;
- const PK=Kt(t=>encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),"encode$6"),RK=Kt(t=>t.replace(/(%[\dA-F]{
- 2}
- )+/gi,decodeURIComponent),"decode$8"),DK=class extends NK{
- async getCookies(){
- const t=document.cookie,i={
- }
- ;
- return t.split(";
- ").forEach(t=>{
- if(t.length<=0)return;
- let[s,e]=t.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");
- s=RK(s).trim(),e=RK(e).trim(),i[s]=e}
- ),i}
- async setCookie(t){
- try{
- const i=PK(t.key),s=PK(t.value),e=t.expires?`;
-  expires=${
- t.expires.replace("expires=","")}
- `:"",n=(t.path||"/").replace("path=",""),h=null!=t.url&&t.url.length>0?`domain=${
- t.url}
- `:"";
- document.cookie=`${
- i}
- =${
- s||""}
- ${
- e}
- ;
-  path=${
- n}
- ;
-  ${
- h}
- ;
- `}
- catch(i){
- return Promise.reject(i)}
- }
- async deleteCookie(t){
- try{
- document.cookie=`${
- t.key}
- =;
-  Max-Age=0`}
- catch(i){
- return Promise.reject(i)}
- }
- async clearCookies(){
- try{
- const t=document.cookie.split(";
- ")||[];
- for(const i of t)document.cookie=i.replace(/^ +/,"").replace(/=.*/,`=;
- expires=${
- (new Date).toUTCString()}
- ;
- path=/`)}
- catch(t){
- return Promise.reject(t)}
- }
- async clearAllCookies(){
- try{
- await this.clearCookies()}
- catch(t){
- return Promise.reject(t)}
- }
- }
- ;
- Kt(DK,"CapacitorCookiesPluginWeb");
- let LK=DK;
- IK("CapacitorCookies",{
- web:Kt(()=>new LK,"web")}
- );
- const GK=Kt(async t=>new Promise((i,s)=>{
- const e=new FileReader;
- e.onload=()=>{
- const t=e.result;
- i(t.indexOf(",")>=0?t.split(",")[1]:t)}
- ,e.onerror=t=>s(t),e.readAsDataURL(t)}
- ),"readBlobAsBase64"),BK=Kt((t={
- }
- )=>{
- const i=Object.keys(t);
- return Object.keys(t).map(t=>t.toLocaleLowerCase()).reduce((s,e,n)=>(s[e]=t[i[n]],s),{
- }
- )}
- ,"normalizeHttpHeaders"),UK=Kt((t,i=!0)=>t?Object.entries(t).reduce((t,s)=>{
- const[e,n]=s;
- let h,r;
- return Array.isArray(n)?(r="",n.forEach(t=>{
- h=i?encodeURIComponent(t):t,r+=`${
- e}
- =${
- h}
- &`}
- ),r.slice(0,-1)):(h=i?encodeURIComponent(n):n,r=`${
- e}
- =${
- h}
- `),`${
- t}
- &${
- r}
- `}
- ,"").substr(1):null,"buildUrlParams"),FK=Kt((t,i={
- }
- )=>{
- const s=Object.assign({
- method:t.method||"GET",headers:t.headers}
- ,i),e=BK(t.headers)["content-type"]||"";
- if("string"==typeof t.data)s.body=t.data;
- else if(e.includes("application/x-www-form-urlencoded")){
- const i=new URLSearchParams;
- for(const[s,e]of Object.entries(t.data||{
- }
- ))i.set(s,e);
- s.body=i.toString()}
- else if(e.includes("multipart/form-data")||t.data instanceof FormData){
- const i=new FormData;
- if(t.data instanceof FormData)t.data.forEach((t,s)=>{
- i.append(s,t)}
- );
- else for(const s of Object.keys(t.data))i.append(s,t.data[s]);
- s.body=i;
- const e=new Headers(s.headers);
- e.delete("content-type"),s.headers=e}
- else(e.includes("application/json")||"object"==typeof t.data)&&(s.body=JSON.stringify(t.data));
- return s}
- ,"buildRequestInit"),HK=class extends NK{
- async request(t){
- const i=FK(t,t.webFetchExtra),s=UK(t.params,t.shouldEncodeUrlParams),e=s?`${
- t.url}
- ?${
- s}
- `:t.url,n=await fetch(e,i),h=n.headers.get("content-type")||"";
- let r,o,{
- responseType:a="text"}
- =n.ok?t:{
- }
- ;
- switch(h.includes("application/json")&&(a="json"),a){
- case"arraybuffer":case"blob":o=await n.blob(),r=await GK(o);
- break;
- case"json":r=await n.json();
- break;
- default:r=await n.text()}
- const c={
- }
- ;
- return n.headers.forEach((t,i)=>{
- c[i]=t}
- ),{
- data:r,headers:c,status:n.status,url:n.url}
- }
- async get(t){
- return this.request(Object.assign(Object.assign({
- }
- ,t),{
- method:"GET"}
- ))}
- async post(t){
- return this.request(Object.assign(Object.assign({
- }
- ,t),{
- method:"POST"}
- ))}
- async put(t){
- return this.request(Object.assign(Object.assign({
- }
- ,t),{
- method:"PUT"}
- ))}
- async patch(t){
- return this.request(Object.assign(Object.assign({
- }
- ,t),{
- method:"PATCH"}
- ))}
- async delete(t){
- return this.request(Object.assign(Object.assign({
- }
- ,t),{
- method:"DELETE"}
- ))}
- }
- ;
- Kt(HK,"CapacitorHttpPluginWeb");
- let WK=HK;
- var jK,$K,VK,KK;
- IK("CapacitorHttp",{
- web:Kt(()=>new WK,"web")}
- ),($K=jK||(jK={
- }
- )).Dark="DARK",$K.Light="LIGHT",$K.Default="DEFAULT",(KK=VK||(VK={
- }
- )).StatusBar="StatusBar",KK.NavigationBar="NavigationBar";
- const zK=class extends NK{
- async setStyle(){
- this.unavailable("not available for web")}
- async setAnimation(){
- this.unavailable("not available for web")}
- async show(){
- this.unavailable("not available for web")}
- async hide(){
- this.unavailable("not available for web")}
- }
- ;
- Kt(zK,"SystemBarsPluginWeb");
- let qK=zK;
- IK("SystemBars",{
- web:Kt(()=>new qK,"web")}
- );
- const XK=Object.freeze(Object.defineProperty({
- __proto__:null,Capacitor:OK,CapacitorException:TK,get ExceptionCode(){
- return MK}
- ,get SystemBarType(){
- return VK}
- ,get SystemBarsStyle(){
- return jK}
- ,WebPlugin:NK,buildRequestInit:FK,registerPlugin:IK}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),YK=IK("PlayAgeSignals"),JK=class t{
- constructor(){
- zt(this,"ageLower",-1),zt(this,"ageUpper",-1),zt(this,"userStatus",null),zt(this,"ageRangeResult",null),zt(this,"errorMessage",null),zt(this,"requestAgeRangeCallback",null)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- async requestAgeRange(t){
- this.requestAgeRangeCallback=t,this.ageLower=-1,this.ageUpper=-1,this.ageRangeResult=null;
- try{
- const t=await YK.check();
- if(this.ageRangeResult=t,this.debug("Play Age Signals API - success"),this.debug(t),this.addExtras("_requestAgeRange_result",JSON.stringify(t)),1==t.status){
- const i=parseInt(String(t.ageLower));
- 0==isNaN(i)&&(this.ageLower=i);
- const s=parseInt(String(t.ageUpper));
- 0==isNaN(s)&&(this.ageUpper=s),null==t.userStatus?this.userStatus=AK.VERIFIED:""==t.userStatus?this.userStatus=AK.UNKNOWN:this.userStatus=t.userStatus,this.onRequestAgeRangeCallback(!0)}
- else t.errorMessage.toLowerCase().includes("not yet implemented")?(this.userStatus=AK.VERIFIED,this.errorMessage=null,this.onRequestAgeRangeCallback(!0)):(this.userStatus=AK.UNKNOWN,this.errorMessage=this.getMessageFromErrorCode(t.errorCode,t.errorMessage),this.onRequestAgeRangeCallback(!1))}
- catch(i){
- this.debug("Play Age Signals API - fail"),this.debug(i),this.addExtras("_requestAgeRange_error",JSON.stringify(i)),this.onRequestAgeRangeCallback(!1)}
- }
- checkApproved(t){
- return this.debug(""),this.debug("AgeRangeObjectAOS, checkApproved()"),this.debug(" -> this.userStatus : "+this.userStatus),this.debug(" -> this.ageUpper : "+this.ageUpper),this.debug(" -> ageUpperLimit : "+t),this.addExtras("_checkApproved_userStatus",""+this.userStatus),this.addExtras("_checkApproved_ageUpper",""+this.ageUpper),this.addExtras("_checkApproved_ageUpperLimit",""+t),null==this.userStatus?{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (N)"}
- :this.userStatus==AK.UNKNOWN?{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (U)"}
- :this.userStatus==AK.VERIFIED||this.userStatus!=AK.SUPERVISED_APPROVAL_DENIED&&this.userStatus!=AK.SUPERVISED_APPROVAL_PENDING||this.ageUpper>t?{
- approved:!0,errorMessage:""}
- :{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_23","이 기능은 보호자 승인 전까지 이용할 수 없습니다.")}
- }
- async isEligibleForAgeFeatures(){
- return null}
- getMessageFromErrorCode(t,i){
- let s=AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
- switch(t){
- case"API_NOT_AVAILABLE":s=AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (NA)";
- break;
- case"PLAY_STORE_NOT_FOUND":s=AG.getText("AGE_RANGE_14","이 기기에서 Play 스토어를 찾을 수 없습니다. 설치 또는 활성화 후 다시 시도해 주세요.");
- break;
- case"NETWORK_ERROR":s=AG.getText("AGE_RANGE_15","네트워크 연결에 문제가 있습니다. 인터넷 상태를 확인해 주세요.");
- break;
- case"PLAY_SERVICES_NOT_FOUND":s=AG.getText("AGE_RANGE_16","Google Play 서비스가 없거나 사용할 수 없습니다. 설치 및 활성화 여부를 확인해 주세요.");
- break;
- case"CANNOT_BIND_TO_SERVICE":s=AG.getText("AGE_RANGE_17","Play 스토어 서비스에 연결할 수 없습니다. Play 스토어 앱 업데이트 후 다시 시도해 주세요.");
- break;
- case"PLAY_STORE_VERSION_OUTDATED":s=AG.getText("AGE_RANGE_18","Play 스토어 앱 버전이 오래되었습니다. 최신 버전으로 업데이트해 주세요.");
- break;
- case"PLAY_SERVICES_VERSION_OUTDATED":s=AG.getText("AGE_RANGE_19","Google Play 서비스 버전이 오래되었거나 지원되지 않습니다. 업데이트해 주세요.");
- break;
- case"CLIENT_TRANSIENT_ERROR":s=AG.getText("AGE_RANGE_20","일시적인 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.");
- break;
- case"APP_NOT_OWNED":s=AG.getText("AGE_RANGE_21","이 앱은 Google Play에서 설치되지 않았습니다. Google Play에서 정식 버전을 설치해 주세요.");
- break;
- case"INTERNAL_ERROR":s=AG.getText("AGE_RANGE_22","알 수 없는 오류가 발생했습니다.(IE) 다시 시도해 주세요. 계속 발생한다면 고객센터에 문의해 주세요.");
- break;
- case"SDK_VERSION_OUTDATED":s=AG.getText("AGE_RANGE_22","알 수 없는 오류가 발생했습니다.(SVO) 다시 시도해 주세요. 계속 발생한다면 고객센터에 문의해 주세요.")}
- return TL.getInstance().development&&(s+="\n"+i),s}
- onRequestAgeRangeCallback(t){
- const i=this.requestAgeRangeCallback;
- this.requestAgeRangeCallback=null,i&&i(t)}
- addExtras(t,i){
- wP.addExtraParams(t,i)}
- debug(t){
- TL.getInstance().development}
- }
- ;
- Kt(JK,"AgeRangeObjectAOS"),zt(JK,"instance");
- let QK=JK;
- const ZK=IK("DeclaredAgeRangePlugin"),tz=class t{
- constructor(){
- zt(this,"ageLower",-1),zt(this,"ageUpper",-1),zt(this,"userStatus",null),zt(this,"ageRangeResult",null),zt(this,"errorMessage",null),zt(this,"requestAgeRangeCallback",null)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- async requestAgeRange(t){
- this.requestAgeRangeCallback=t,this.ageRangeResult=null,this.ageLower=-1,this.ageUpper=-1;
- let i=!0;
- const s=EL.getInstance().getClientData("AGE_RANGE_IGNORE_ELIGIBLE_IOS");
- if(s&&"Y"==s&&(i=!1),i)try{
- const t=await ZK.isEligibleForAgeFeatures();
- if(this.debug("Declared Age Range API / isEligibleForAgeFeatures - success"),this.debug(t),this.addExtras("_isEligibleForAgeFeatures_result",JSON.stringify(t)),t&&"status"in t&&"eligible"in t&&1==t.status&&0==t.eligible)return this.userStatus=AK.VERIFIED,void this.onRequestAgeRangeCallback(!0)}
- catch(e){
- this.debug("Declared Age Range API / isEligibleForAgeFeatures - error"),this.debug(JSON.stringify(e)),this.addExtras("_isEligibleForAgeFeatures_error",JSON.stringify(e))}
- try{
- let t=[13,16,18],i=EL.getInstance().getClientData("AGE_RANGE_AGE_GATE_IOS");
- i&&(t=ZI.convertToNumber(i.split("|")));
- const s=await ZK.requestAgeRange({
- ageGates:t}
- );
- if(this.ageRangeResult=s,this.debug("Declared Age Range API / requestAgeRange - success"),this.debug(s),this.addExtras("_requestAgeRange_result",JSON.stringify(s)),1==s.status){
- const t=parseInt(String(s.lowerBound));
- 0==isNaN(t)&&(this.ageLower=t);
- const i=parseInt(String(s.upperBound));
- 0==isNaN(i)&&(this.ageUpper=i),null==s.userStatus||""==s.userStatus?this.userStatus=AK.UNKNOWN:this.userStatus=s.userStatus.toUpperCase(),this.onRequestAgeRangeCallback(!0)}
- else s.errorMessage.toLowerCase().includes("not yet implemented")?(this.userStatus=AK.VERIFIED,this.errorMessage=null,this.onRequestAgeRangeCallback(!0)):(this.userStatus=AK.UNKNOWN,this.errorMessage=this.getMessageFromErrorCode(s.errorCode,s.errorMessage),this.onRequestAgeRangeCallback(!1))}
- catch(e){
- this.debug("Declared Age Range API / requestAgeRange - error"),this.debug(e),this.addExtras("_requestAgeRange_error",JSON.stringify(e)),this.onRequestAgeRangeCallback(!1)}
- }
- checkApproved(t){
- return this.debug(""),this.debug("AgeRangeObjectIOS, checkApproved()"),this.debug(" -> this.userStatus : "+this.userStatus),this.debug(" -> this.ageUpper : "+this.ageUpper),this.debug(" -> ageUpperLimit : "+t),this.addExtras("_checkApproved_userStatus",""+this.userStatus),this.addExtras("_checkApproved_ageUpper",""+this.ageUpper),this.addExtras("_checkApproved_ageUpperLimit",""+t),null==this.userStatus?{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (N)"}
- :this.userStatus==AK.UNKNOWN?{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (U)"}
- :this.userStatus==AK.UNSUPPORTED?{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (U2)"}
- :this.userStatus==AK.VERIFIED?{
- approved:!0,errorMessage:""}
- :this.userStatus==AK.DECLINED?{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_9","연령 정보 제공에 동의하지 않아 일부 기능이 제한됩니다.")}
- :this.ageUpper>t?{
- approved:!0,errorMessage:""}
- :{
- approved:!1,errorMessage:AG.getText("AGE_RANGE_6","연령 기준에 따라 이 기능의 이용이 제한됩니다.")}
- }
- async isEligibleForAgeFeatures(){
- this.debug(""),this.debug("AgeRangeObjectIOS, isEligibleForAgeFeatures()");
- try{
- const t=await ZK.isEligibleForAgeFeatures();
- return this.debug("AgeRangeObjectIOS, isEligibleForAgeFeatures() - success"),this.debug(t),t}
- catch(t){
- this.debug("AgeRangeObjectIOS, isEligibleForAgeFeatures() - error"),this.debug(t)}
- return null}
- getMessageFromErrorCode(t,i){
- let s=AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
- return"NOT_AVAILABLE"===t&&(s=AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.")+" (NA)"),TL.getInstance().development&&(s+="\n"+i),s}
- onRequestAgeRangeCallback(t){
- const i=this.requestAgeRangeCallback;
- this.requestAgeRangeCallback=null,i&&i(t)}
- addExtras(t,i){
- wP.addExtraParams(t,i)}
- debug(t){
- TL.getInstance().development}
- }
- ;
- Kt(tz,"AgeRangeObjectIOS"),zt(tz,"instance");
- let iz=tz;
- const sz=class t{
- constructor(){
- zt(this,"_activated",!0),zt(this,"_ageRangeYn","Y"),zt(this,"_ageRangeStartDate",null),zt(this,"_ageUpperLimit",15)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- get activated(){
- return this._activated}
- setConfig(t){
- this.debug(""),this.debug("AgeRangeManager, setConfig()"),this.debug(t);
- const i=EL.getInstance();
- if("capacitor"!=i.envPlatform)return void(this._activated=!1);
- if(!t)return;
- if(this.debug(t),i.isGoogleClientKr()){
- if("AGE_RANGE_YN_AOS_KR"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_AOS_KR,"N"==this._ageRangeYn))return void(this._activated=!1)}
- else if(i.isGoogleClient()){
- if("AGE_RANGE_YN_AOS_GB"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_AOS_GB,"N"==this._ageRangeYn))return void(this._activated=!1)}
- else if(i.isAppleClientKr()){
- if("AGE_RANGE_YN_IOS_KR"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_IOS_KR,"N"==this._ageRangeYn))return void(this._activated=!1)}
- else if(i.isAppleClient()&&"AGE_RANGE_YN_IOS_GB"in t&&(this._ageRangeYn=t.AGE_RANGE_YN_IOS_GB,"N"==this._ageRangeYn))return void(this._activated=!1);
- let s="2026-03-01T00:00:00.000Z";
- i.isGoogleClientKr()||i.isAppleClientKr()?"AGE_RANGE_START_DATE_KR"in t&&(s=t.AGE_RANGE_START_DATE_KR):"AGE_RANGE_START_DATE_GB"in t&&(s=t.AGE_RANGE_START_DATE_GB);
- try{
- this._ageRangeStartDate=new Date(s),gP.serverTime<this._ageRangeStartDate.getTime()?this._activated=!1:this._activated=!0}
- catch(n){
- this._activated=!1}
- let e=15;
- "AGE_RANGE_UPPER_LIMIT"in t&&(e=parseInt(t.AGE_RANGE_UPPER_LIMIT),isNaN(e)&&(e=15)),this._ageUpperLimit=e}
- updateConfig(){
- this.debug(""),this.debug("AgeRangeManager, updateConfig()"),this.debug(" -> this._ageRangeStartDate : "+this._ageRangeStartDate),this.debug(" -> 1 > this._activated : "+this._activated),this.debug(" -> UserInfoManager.regDate : "+_L.regTime),null!=this._ageRangeStartDate&&(this._activated&&new Date(_L.regTime).getTime()<this._ageRangeStartDate.getTime()&&(this._activated=!1),this.debug(" -> 2 > this._activated : "+this._activated),this.debug(""))}
- getObject(){
- const t=EL.getInstance();
- return t.isAppleClientKr()||t.isAppleClient()?iz.getInstance():t.isGoogleClientKr()||t.isGoogleClient()?QK.getInstance():null}
- checkApproved(){
- if(this.debug(""),this.debug("AgeRangeManager, checkApproved()"),this.debug(" -> this._activated : "+this._activated),this.debug(" -> this._ageRangeYn : "+this._ageRangeYn),this.debug(" -> this._ageRangeStartDate : "+this._ageRangeStartDate),this.debug(" -> this._ageUpperLimit : "+this._ageUpperLimit),this.debug(""),0==this._activated)return{
- approved:!0,errorMessage:""}
- ;
- const t=this.getObject();
- return t?t.checkApproved(this._ageUpperLimit):{
- approved:!0,errorMessage:""}
- }
- requestAgeRange(t){
- if(this.debug(""),this.debug("AgeRangeManager, requestAgeRange()"),this.debug(" -> this._activated : "+this._activated),0==this._activated)return this.debug("AgeRangeManager, requestAgeRange() - 1"),void(null!=t&&t(!1));
- const i=this.getObject();
- i?(this.debug("AgeRangeManager, requestAgeRange() - 2"),i.requestAgeRange(t)):(this.debug("AgeRangeManager, requestAgeRange() - 3"),null!=t&&t(!1))}
- async isEligibleForAgeFeatures(){
- if(this.debug(""),this.debug("AgeRangeManager, isEligibleForAgeFeatures()"),this.debug(" -> this._activated : "+this._activated),0==this._activated)return this.debug("AgeRangeManager, isEligibleForAgeFeatures() - 1"),null;
- const t=this.getObject();
- return t?(this.debug("AgeRangeManager, isEligibleForAgeFeatures() - 2"),await t.isEligibleForAgeFeatures()):(this.debug("AgeRangeManager, isEligibleForAgeFeatures() - 3"),null)}
- debug(t){
- TL.getInstance().development}
- }
- ;
- Kt(sz,"AgeRangeManager"),zt(sz,"_instance");
- let ez=sz;
- const nz=class t extends iP{
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- constructor(){
- super(),this.sp.x=.5*-this.sp.width,this.sp.y=.5*-this.sp.height}
- getTextures(){
- return ZA.getTextures("Loading","loading_circle_elf_60f_")}
- }
- ;
- Kt(nz,"PaymentLoadingEffect2"),zt(nz,"_instance");
- let hz=nz;
- const rz=class t extends aG{
- constructor(){
- super(),zt(this,"lblMessage",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"btnConfirm",new sG("확인")),zt(this,"onConfirm",null),this.title="",this.lblMessage.y=90,this.contentContainer.addChild(this.lblMessage,this.btnConfirm);
- let t=this.lblMessage.getStyle();
- t.align="center",this.lblMessage.setStyle(t),aD.setLabelWrapWidth(this.lblMessage,500),this.btnConfirm.onClick=this.onConfirmClick.bind(this)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- onConfirmClick(){
- this.hide();
- let t=this.onConfirm;
- this.onConfirm=null,null!==t&&t()}
- show(t,i=null){
- this.onConfirm=i,this.lblMessage.text=t,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
- hide(){
- super.hide(),this.title="",this.btnClose.visible=!0}
- 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}
- getDefaultPositionY(){
- return.3*KA.stageHeight}
- hideCloseBtn(){
- this.btnClose.visible=!1}
- onBackButton(){
- return this.onConfirmClick(),!0}
- }
- ;
- Kt(rz,"CommonMessagePopup"),zt(rz,"_instance");
- let oz=rz;
- const az=class t{
- constructor(){
- zt(this,"_productId",-1)}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- get productId(){
- return this._productId}
- async buyProduct(t){
- const i=hK.getInstance().getByProductId(t);
- if(!i)return;
- let s="",e="";
- const n=_L.currentServer,h=EL.getInstance();
- if(h.isGoogleClient()||h.isAppleClient()?2==n&&(s=AG.getText("COMMON_546","[오늘도 환생 2] 국내 버전에서 결제를 이용해 주세요."),e=h.isGoogleClient()?h.getGoogleKrLink():h.getAppleKrLink()):(h.isGoogleClientKr()||h.isAppleClientKr())&&3==n&&(s=AG.getText("COMMON_545","[Endless Frontier 2] 글로벌 버전에서 결제를 이용해 주세요."),e=h.isGoogleClientKr()?h.getGoogleGbLink():h.getAppleGbLink()),s){
- const t=oz.getInstance();
- return t.hideCloseBtn(),void t.show(s,()=>{
- e&&window.open(e,"_blank")}
- )}
- if(i.usdPrice>=90)try{
- const t=ez.getInstance().checkApproved();
- if(0==t.approved)return void mG.getInstance().show(t.errorMessage)}
- catch(r){
- const t=AG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다.");
- return void mG.getInstance().show(t)}
- if(-1==this._productId){
- hz.getInstance().show(),this._productId=t;
- try{
- const s=BL();
- if(0==s.supportsPurchase())return void(await this.testBuyProduct(t));
- let e=s.platformType;
- if("capacitor"==e){
- const{
- Capacitor:t}
- =await Jt(async()=>{
- const{
- Capacitor:t}
- =await Promise.resolve().then(()=>XK);
- return{
- Capacitor:t}
- }
- ,void 0);
- "ios"===t.getPlatform()?e="apple":"android"===t.getPlatform()&&(e="google")}
- const n=hK.getInstance().getStoreProductIdByProductId(this._productId);
- await hD.getInstance().shop.paymentAttempt(this._productId,e,n);
- const h="toss"===s.platformType?i.sku:String(i.productId);
- if(!h)return void this.onPaymentCancel();
- const o=await s.purchase(h,i.price);
- if(!o.success)return this.onPaymentCancel(),void("USER_CANCELED"!==o.error&&mG.getInstance().showError(o.error||"결제 실패"));
- this.trackPurchase(t);
- const a=this._productId;
- let c;
- try{
- c=structuredClone(i)}
- catch(r){
- c=JSON.parse(JSON.stringify(i))}
- if(this.onPaymentCancel(),o.serverData){
- const t=o.serverData;
- _L.setUserInfo(t,!1),UV.getInstance().updateAll(),t.products&&hK.getInstance().setProducts(t.products)}
- const l=hK.getInstance().getRewardMessage(o.rewardTypes);
- mG.getInstance().show(l),lS.getInstance().dispatchCustomEvent("PaymentSuccess",{
- productId:a,productVo:c}
- );
- let u=!1;
- for(const t of c.rewards)"instant"==t.type&&"petTicket"==t.subType&&(u=!0);
- u&&this.updatePetTicket()}
- catch(r){
- this.onPaymentCancel(),mG.getInstance().show((null==r?void 0:r.message)||"결제 오류")}
- }
- else mG.getInstance().show(AG.getText("COMMON_112","진행중인 결제가 완료된 후에 시도해 주세요."))}
- async trackPurchase(t){
- const i=hK.getInstance().getByProductId(t);
- if(!i)return;
- const s=EL.getInstance();
- if("capacitor"==s.envPlatform){
- const{
- appsFlyer:n,withTimeoutAf:h}
- =await Jt(async()=>{
- const{
- appsFlyer:t,withTimeoutAf:i}
- =await Promise.resolve().then(()=>Woi);
- return{
- appsFlyer:t,withTimeoutAf:i}
- }
- ,void 0),r=s.getTimeoutMilliSeconds();
- try{
- let s=i.usdPrice;
- 0==s&&(s=hK.getInstance().getUsdPriceByKrwPrice(i.price)),await h(n.trackPurchase(String(t),i.usdPrice,"USD"),"af_in_app_purchase",r)}
- catch(e){
- }
- const{
- AnalyticsManager:o}
- =await Jt(async()=>{
- const{
- AnalyticsManager:t}
- =await Promise.resolve().then(()=>qoi);
- return{
- AnalyticsManager:t}
- }
- ,void 0);
- o.getInstance().trackPurchase(i.productId,i.usdPrice,"USD")}
- }
- async testBuyProduct(t){
- var i;
- try{
- const e=await hD.getInstance().shop.testBuyProduct(t),n=this._productId,h=hK.getInstance().getByProductId(t);
- let r;
- try{
- r=structuredClone(h)}
- catch(s){
- r=JSON.parse(JSON.stringify(h))}
- if(this.onPaymentCancel(),!(null==e?void 0:e.success))return void mG.getInstance().show((null==e?void 0:e.error)||"테스트 구매 실패");
- e.body&&(_L.setUserInfo(e.body,!1),UV.getInstance().updateAll(),e.body.products&&hK.getInstance().setProducts(e.body.products));
- const o=hK.getInstance().getRewardMessage(null==(i=e.body)?void 0:i.rewardTypes);
- mG.getInstance().show(o),lS.getInstance().dispatchCustomEvent("PaymentSuccess",{
- productId:n,productVo:r}
- );
- let a=!1;
- for(const t of r.rewards)"instant"==t.type&&"petTicket"==t.subType&&(a=!0);
- a&&this.updatePetTicket()}
- catch(s){
- this.onPaymentCancel(),mG.getInstance().show((null==s?void 0:s.message)||"테스트 구매 오류")}
- }
- onPaymentCancel(){
- this._productId=-1,hz.getInstance().hide()}
- async updatePetTicket(){
- const{
- SpiritLandDataManager:t}
- =await Jt(async()=>{
- const{
- SpiritLandDataManager:t}
- =await Promise.resolve().then(()=>bL);
- return{
- SpiritLandDataManager:t}
- }
- ,void 0);
- t.getInstance().isDataLoaded=!1}
- }
- ;
- Kt(az,"InAppPurchaseManager"),zt(az,"instance");
- let cz=az;
- const lz=class extends Be{
- constructor(){
- super(),zt(this,"bg"),zt(this,"icon"),zt(this,"lbl"),zt(this,"line"),zt(this,"icon2"),zt(this,"lbl2"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_04"),leftWidth:12,topHeight:12,rightWidth:12,bottomHeight:12}
- ),this.bg.width=530,this.bg.height=100,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Ekkorr","UNIT_NPC_2")),this.icon.scale=.7,this.icon.x=10,this.icon.y=10,this.addChild(this.icon);
- const t=aD.DEFAULT_FONT_OPTION_17;
- t.fill=aD.DEFAULT_COLOR,t.fontWeight="normal",this.lbl=new YD("",t.fill,t),this.lbl.x=this.icon.x+this.icon.width+10,this.lbl.y=20,this.addChild(this.lbl),aD.setLabelWrapWidth(this.lbl,this.bg.width-this.lbl.x-10),this.line=new We(ZA.getTexture("UI_Ekkorr","blackRect")),this.line.width=this.bg.width-40,this.line.height=1,this.line.x=.5*(this.bg.width-this.line.width),this.addChild(this.line),this.icon2=new We(ZA.getTexture("UI_Ekkorr","UNIT_NPC_1")),this.icon2.scale=this.icon.scale,this.icon2.x=this.icon.x,this.icon2.y=this.icon.y,this.addChild(this.icon2),this.lbl2=new YD("",t.fill,t),this.lbl2.x=this.lbl.x,this.lbl2.y=this.lbl.y,this.addChild(this.lbl2),aD.setLabelWrapWidth(this.lbl2,this.bg.width-this.lbl2.x-10)}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- setData(){
- const t=Kt((t,i)=>AG.getText(t,i),"_t"),i=Kt((t,i,s)=>AG.getValueReplace(t,"##",i,s),"_tv"),s=[`# ${
- t("GAME_916","전문 비서 (이오스)")}
- `,`  - ${
- i("GAME_917",4,"영웅 모집 : 1시간마다 4명")}
- `,`  - ${
- t("GAME_918","영웅 슬롯 :")}
-  96`,`  - ${
- i("GAME_919","15~30","자원 : 1시간마다 15~30개의 보석과 명예코인 획득")}
- `];
- this.lbl.text=s.join("\n");
- const e=[`# ${
- t("GAME_915","일반 비서 (로라)")}
- `,`  - ${
- i("GAME_917",2,"영웅 모집 : 1시간마다 2명")}
- `,`  - ${
- t("GAME_918","영웅 슬롯 :")}
-  24`,`  - ${
- i("GAME_919","7~15","자원 : 1시간마다 7~15개의 보석과 명예코인 획득")}
- `];
- this.lbl2.text=e.join("\n"),this.line.y=this.lbl.y+this.lbl.height+20,this.icon2.y=this.lbl2.y=this.line.y+20;
- const n=Math.max(this.lbl2.y+this.lbl2.height+this.lbl.y,this.icon2.y+this.icon2.height+this.icon.y);
- this.bg.height=n}
- }
- ;
- Kt(lz,"ShopGuideSecretary");
- let uz=lz;
- const dz=class extends aG{
- constructor(){
- super(),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblDesc",new YD("",13421772,aD.DEFAULT_DESC_FONT_OPTION_16)),zt(this,"lblRewardsTitle",new YD("",16750848,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"rewardContainer",new Be),zt(this,"rewardPool",[]),zt(this,"activeCount",0),zt(this,"btnBuy"),zt(this,"btnRedGem"),zt(this,"guideSecretary"),zt(this,"data",null),zt(this,"purchasing",!1),zt(this,"requestPending",!1),this.outSideClickHide=!0;
- for(let t=0;
- t<5;
- t++){
- const t=new _K;
- t.visible=!1,this.rewardPool.push(t),this.rewardContainer.addChild(t)}
- this.contentContainer.addChild(this.lblName,this.lblDesc,this.lblRewardsTitle,this.rewardContainer),aD.setLabelWrapWidth(this.lblDesc,this.width-60),this.btnBuy=new aK("구매",120),this.btnBuy.color=QL.BROWN,this.btnBuy.height=55,this.btnBuy.width=120,this.addChild(this.btnBuy),this.btnBuy.onClick=this.onBuyClick.bind(this),this.btnRedGem=new UB("UI_RED_GEM_ICON","0"),this.btnRedGem.color=QL.BROWN,this.btnRedGem.height=this.btnBuy.height,this.btnRedGem.width=this.btnBuy.width,this.addChild(this.btnRedGem),this.btnRedGem.onClick=this.onRedGemClick.bind(this),this.btnBuy.visible=!1,this.btnRedGem.visible=!1}
- showProduct(t){
- this.data=null,this.outSideClickHide=!0,this.update(t),this.btnBuy.visible=!1,this.btnRedGem.visible=!1,this.updateLayout(),super.show()}
- buyProduct(t){
- this.data=t,this.outSideClickHide=!1,this.update(t);
- const i=hK.getInstance();
- this.btnBuy.text=i.getPriceStr(t.productId),this.btnRedGem.text=String(i.getRedGemPrice(t.productId)),this.btnBuy.visible=!0,this.btnRedGem.visible=!0,this.updateLayout(),super.show()}
- update(t){
- const i=AG.getText(`PRODUCT_NAME_${
- t.id}
- `,t.name??""),s=Math.max(60,this.width-60);
- if(aD.setLabelWrapWidth(this.lblName,s),aD.setLabelWrapWidth(this.lblDesc,s),this.title=i,this.lblName.text=i,t.descriptionLangIds){
- const i=t.descriptionLangIds.split("|").map(t=>AG.getText(t.trim(),""));
- this.lblDesc.text=i.filter(t=>t).join("\n")||t.descriptions||""}
- else this.lblDesc.text=(t.descriptions??"").replace(/\\n/g,"\n");
- const e=(t.rewards??[]).map(t=>"instant"===t.type&&"dungeonTicket"===t.subType?{
- ...t,type:"dungeonTicket"}
- :t).filter(t=>"buff"!==t.type&&"bonusGem"!==t.type&&"pass"!==t.type);
- this.buildRewards(e);
- const n=e.length>0;
- this.lblRewardsTitle.visible=!1,this.rewardContainer.visible=n,t.productId==eK.Secretary||t.productId==eK.Secretary_Day30?(this.guideSecretary||(this.guideSecretary=new uz,this.addChild(this.guideSecretary)),this.guideSecretary.setData(),this.guideSecretary.visible=!0):this.guideSecretary&&(this.guideSecretary.visible=!1)}
- buildRewards(t){
- for(const e of this.rewardPool)e.visible=!1;
- this.activeCount=Math.min(t.length,this.rewardPool.length);
- for(let e=0;
- e<this.activeCount;
- e++){
- const i=this.rewardPool[e];
- i.setDataFrom(t[e]),i.visible=!0}
- let i=0;
- for(let e=0;
- e<this.activeCount;
- e++)i+=this.rewardPool[e].width;
- i+=10*Math.max(0,this.activeCount-1);
- let s=.5*(this.width-i);
- for(let e=0;
- e<this.activeCount;
- e++)this.rewardPool[e].x=s,s+=this.rewardPool[e].width+10}
- updateLayout(){
- this.lblName.x=Math.max(30,.5*(this.width-this.lblName.width)),this.lblName.y=80,this.lblDesc.x=Math.max(30,.5*(this.width-this.lblDesc.width)),this.lblDesc.y=this.lblName.y+this.lblName.height+12,this.rewardContainer.y=this.lblDesc.y+this.lblDesc.height+20,this.btnRedGem.x=.5*(this.width-this.btnRedGem.width-this.btnBuy.width-20),this.btnBuy.x=this.btnRedGem.x+this.btnRedGem.width+20;
- const t=this.activeCount>0?this.rewardPool[0].height:0;
- let i=this.rewardContainer.y+t+45;
- this.guideSecretary&&this.guideSecretary.visible&&(this.guideSecretary.x=.5*(this.width-this.guideSecretary.width),this.guideSecretary.y=this.lblDesc.y+this.lblDesc.height+20,i+=this.guideSecretary.height),this.btnBuy.visible&&(this.btnBuy.y=i,this.btnRedGem.y=i,i+=this.btnBuy.height+40),this.height=i}
- async onBuyClick(){
- try{
- if(!this.data)return;
- if(this.purchasing)return;
- this.purchasing=!0,await cz.getInstance().buyProduct(this.data.productId),this.purchasing=!1}
- catch(_gt){
- this.purchasing=!1}
- finally{
- this.hide()}
- }
- async onRedGemClick(){
- if(!this.data)return;
- const t=hK.getInstance(),i=t.getRedGemPrice(this.data.productId);
- if(_L.redGem<i)return void mG.getInstance().show(AG.getText("GAME_952","붉은 보석이 부족합니다."));
- const s=AG.getValueReplace("GAME_950","##",t.getRedGemPrice(this.data.productId),"붉은 보석 ##개를 소모하여 상품을 구매하시겠습니까?"),e=dK.getInstance();
- e.setPositonRatioY(.45),e.show(s,this.onRedGemConfirm.bind(this))}
- async onRedGemConfirm(){
- var t;
- if(!this.data)return;
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- let i=await hD.getInstance().shop.confirmRedGemPayment(this.data.productId,!0);
- if(0==i.success)return this.setRequestPending(!1),void mG.getInstance().showError(i);
- this.hide(),this.setRequestPending(!1);
- const s=this.data.productId,e=hK.getInstance().getByProductId(s);
- let n;
- try{
- n=structuredClone(e)}
- catch(o){
- n=JSON.parse(JSON.stringify(e))}
- i.body&&(_L.setUserInfo(i.body,!1),i.body.products&&hK.getInstance().setProducts(i.body.products));
- const h=hK.getInstance().getRewardMessage(null==(t=i.body)?void 0:t.rewardTypes);
- mG.getInstance().show(h),lS.getInstance().dispatchCustomEvent("PaymentSuccess",{
- productId:s,productVo:n}
- );
- let r=!1;
- for(const a of n.rewards)"instant"==a.type&&"petTicket"==a.subType&&(r=!0);
- r&&this.updatePetTicket()}
- async updatePetTicket(){
- const{
- SpiritLandDataManager:t}
- =await Jt(async()=>{
- const{
- SpiritLandDataManager:t}
- =await Promise.resolve().then(()=>bL);
- return{
- SpiritLandDataManager:t}
- }
- ,void 0);
- t.getInstance().isDataLoaded=!1}
- setRequestPending(t){
- this.requestPending=t}
- }
- ;
- Kt(dz,"BaseShopProductPopup");
- let fz=dz;
- const pz=class t extends fz{
- constructor(){
- super(),zt(this,"image"),zt(this,"timeContainer"),zt(this,"timeBg"),zt(this,"timeIcon"),zt(this,"timeLbl"),zt(this,"endTime",-1),zt(this,"count",0),zt(this,"onEnterUpdate",Kt(()=>{
- ++this.count<60||(this.count=0,this.refresh())}
- ,"onEnterUpdate")),zt(this,"onPaymentSuccessBind"),this.timeContainer=new Be,this.addChild(this.timeContainer),this.timeBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Progress_Bar_Bg_LightGreen"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
- ),this.timeBg.alpha=.5,this.timeBg.width=160,this.timeContainer.addChild(this.timeBg),this.timeIcon=new We(ZA.getTexture("UI_Ekkorr","Icon_Time02")),this.timeIcon.x=20,this.timeContainer.addChild(this.timeIcon);
- const t=aD.DEFAULT_FONT_OPTION_18;
- t.fill=aD.COLOR_WHITE,t.stroke={
- color:"#000000",width:3,join:"round"}
- ,this.timeLbl=new YD("00:00:00",t.fill,t),this.timeLbl.x=this.timeIcon.x+this.timeIcon.width+10,this.timeLbl.y=.5*(this.timeBg.height-this.timeLbl.height),this.timeContainer.addChild(this.timeLbl)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async buyProduct2(t,i){
- const s=hK.getInstance().getByProductId(t);
- if(s){
- if(this.endTime=i,this.refresh(),GM.getInstance().add(this.onEnterUpdate,this),!this.image){
- this.image=new We,this.addChildAt(this.image,0);
- const{
- AssetPathManager:t}
- =await Jt(async()=>{
- const{
- AssetPathManager:t}
- =await Promise.resolve().then(()=>JA);
- return{
- AssetPathManager:t}
- }
- ,void 0),{
- Assets:i}
- =await Jt(async()=>{
- const{
- Assets:t}
- =await Promise.resolve().then(()=>xM);
- return{
- Assets:t}
- }
- ,void 0),s=t.getAssetPath("CharShopProduct.png"),e=await i.load(s);
- this.image.texture=e,this.image.x=.5*(this.width-this.image.width),this.image.y=-this.image.height}
- this.buyProduct(s),this.setPaymentSuccess(!0)}
- }
- refresh(){
- if(ix.time<this.endTime){
- this.timeLbl.text=uU.displayTime(.001*(this.endTime-ix.time));
- const t=this.timeBg.width-2*this.timeIcon.x-this.timeIcon.width;
- this.timeLbl.x=this.timeIcon.x+this.timeIcon.width+.5*(t-this.timeLbl.width)}
- else this.hide()}
- hide(){
- super.hide(),this.setPaymentSuccess(!1),GM.getInstance().remove(this.onEnterUpdate,this)}
- updateLayout(){
- super.updateLayout();
- const t=this.activeCount>0?this.rewardPool[0].height:0;
- let i=this.rewardContainer.y+t+30;
- this.guideSecretary&&this.guideSecretary.visible&&(this.guideSecretary.x=.5*(this.width-this.guideSecretary.width),this.guideSecretary.y=this.lblDesc.y+this.lblDesc.height+20,i+=this.guideSecretary.height),this.timeContainer&&(this.timeContainer.x=.5*(this.width-this.timeContainer.width),this.timeContainer.y=i,i+=this.timeContainer.height+45),this.btnBuy.visible&&(this.btnBuy.y=i,this.btnRedGem.y=i,i+=this.btnBuy.height+40),this.height=i}
- setPaymentSuccess(t){
- lS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),lS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
- onPaymentSuccess(t){
- var i;
- let s=-1;
- t&&t.detail&&"productId"in t.detail&&(s=t.detail.productId),s===(null==(i=this.data)?void 0:i.productId)&&this.hide()}
- }
- ;
- Kt(pz,"ShopProductPopupWithTimer"),zt(pz,"_instance");
- let gz=pz;
- const mz=class t extends Be{
- constructor(){
- super(),zt(this,"items",[]),zt(this,"itemPool",[]),zt(this,"onPaymentSuccessBind")}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- add(t,i){
- if(-1!==this.items.findIndex(i=>i.productId===t))return;
- let s;
- this.itemPool.length>0?(s=this.itemPool.pop(),s.reset()):s=new bz("Shop_Shortcut_01"),s.setData(t,i),s.onEndTime=()=>{
- this.onItemEndTime()}
- ,s.onClick=(t,i)=>{
- gz.getInstance().buyProduct2(t,i)}
- ,this.addChild(s),this.items.push(s),this.items.length>0&&this.setPaymentSuccess(!0),this.alignItems()}
- alignItems(){
- let t=0;
- const i=this.items.length;
- for(let s=0;
- s<i;
- ++s)this.items[s].y=t,t+=this.items[s].height+5}
- onItemEndTime(){
- this.update(-1),this.alignItems()}
- setPaymentSuccess(t){
- lS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),lS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
- onPaymentSuccess(t){
- let i=-1;
- t&&t.detail&&"productId"in t.detail&&(i=t.detail.productId),-1!==i&&this.update(i)}
- update(t){
- const i=this.items.findIndex(i=>i.productId===t);
- if(-1===i)return;
- const s=this.items[i];
- s.reset(),s.removeFromParent(),this.items.splice(i,1),this.itemPool.push(s),0==this.items.length&&this.setPaymentSuccess(!1)}
- }
- ;
- Kt(mz,"ShopProductGroup"),zt(mz,"instance");
- let wz=mz;
- const vz=class extends mB{
- constructor(t,i=1){
- super("UI_Ekkorr",t,i),zt(this,"container"),zt(this,"timeBg"),zt(this,"timeLbl"),zt(this,"_productId",-1),zt(this,"_endTime",-1),zt(this,"count",0),zt(this,"onEnterUpdate",Kt(()=>{
- ++this.count<60||(this.count=0,this.update())}
- ,"onEnterUpdate")),zt(this,"onEndTime",null),this.container=new Be,this.addChild(this.container),this.container.x=this.bg.x,this.container.y=this.bg.y,this.bg.x=0,this.bg.y=0,this.container.addChild(this.bg),this.timeBg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Progress_Bar_Bg"),leftWidth:20,topHeight:13,rightWidth:20,bottomHeight:13}
- ),this.timeBg.alpha=.7,this.timeBg.width=70,this.timeBg.x=this.bg.x-.5*this.timeBg.width,this.timeBg.y=this.bg.y+.5*this.bg.height-.75*this.timeBg.height,this.container.addChild(this.timeBg);
- const s=aD.DEFAULT_FONT_OPTION_15;
- s.fill=aD.COLOR_WHITE,s.stroke={
- color:"#000000",width:3,join:"round"}
- ,this.timeLbl=new YD("00:00:00",s.fill,s),this.timeLbl.x=this.timeBg.x+.5*(this.timeBg.width-this.timeLbl.width),this.timeLbl.y=this.timeBg.y+.5*(this.timeBg.height-this.timeLbl.height)-1,this.container.addChild(this.timeLbl)}
- get productId(){
- return this._productId}
- get endTime(){
- return this._endTime}
- setData(t,i){
- this._productId=t,this._endTime=i,this.update(),GM.getInstance().add(this.onEnterUpdate,this)}
- update(){
- if(ix.time<this._endTime)this.timeLbl.text=uU.displayTime(.001*(this._endTime-ix.time)),this.timeLbl.x=this.timeBg.x+.5*(this.timeBg.width-this.timeLbl.width);
- else{
- const t=this.onEndTime;
- this.reset(),t&&t()}
- }
- reset(){
- this._endTime=-1,this._productId=-1,this.onEndTime=null,GM.getInstance().remove(this.onEnterUpdate,this)}
- onDown(){
- this.container.scale.set(.9*this.iconScale)}
- onUp(){
- this.container.scale.set(1*this.iconScale),KL.getInstance().playSFX(KL.SFX_NORMAL_CLICK),WL(),this.onClick&&this.onClick(this._productId,this._endTime)}
- }
- ;
- Kt(vz,"ShopProductItem");
- let bz=vz;
- var yz=(t=>(t.ACCOUNT_CREATE="ACCOUNT_CREATE",t))(yz||{
- }
- );
- const _z=class t{
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- doAccountCreate(){
- const t=hK.getInstance(),i=t.getTargetingByType(yz.ACCOUNT_CREATE);
- if(!i)return;
- const s=t.getByProductId(i[0]);
- if(!s||!s.active)return;
- let e=new Date(_L.regTime);
- const n=EL.getInstance().getClientData("PRODUCT_START_TIME_29");
- if(n){
- let t=new Date(n);
- e.getTime()<t.getTime()&&(e=t)}
- const h=s.targeting.durationMinutes??0;
- let r=e.getTime()+60*h*1e3;
- r<ix.time||t.isAvailableForPurchase(s)&&wz.getInstance().add(s.productId,r)}
- }
- ;
- Kt(_z,"ShopProductTrigger"),zt(_z,"_instance");
- let Mz=_z;
- const Ez=class extends Be{
- constructor(){
- super(),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","UI_SKILL1_ON"))),zt(this,"iconOff",new We(ZA.getTexture("UI_Ekkorr","UI_SKILL1_OFF"))),zt(this,"lblTime",new YD("30",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_20)),zt(this,"container",new Be),zt(this,"w",0),zt(this,"onClick",Kt(()=>{
- }
- ,"onClick")),zt(this,"durationFrames",1350),zt(this,"remainingFrames",0),zt(this,"displayCount",0),zt(this,"id",0),zt(this,"canUse",!1),zt(this,"_enabled",!0),zt(this,"_started",!1),this.container.scale.set(.8),this.container.addChild(this.icon),this.icon.x=.5*-this.icon.width,this.icon.y=.5*-this.icon.height,this.container.addChild(this.iconOff),this.iconOff.x=.5*-this.iconOff.width,this.iconOff.y=.5*-this.iconOff.height,this.iconOff.visible=!1,this.container.x=.5*this.container.width,this.container.y=.5*this.container.height,this.addChild(this.container),this.lblTime.text="30",this.addChild(this.lblTime),this.w=this.container.width,this.lblTime.x=(this.w-this.lblTime.width)/2,this.lblTime.y=(this.container.height-this.lblTime.height)/2,this.lblTime.eventMode="none",this.icon.eventMode="static",this.icon.on("pointerdown",this.onDown,this),this.icon.on("pointerup",this.onUp,this),this.icon.on("pointerupoutside",this.onUp,this),this.alpha=.9}
- onDown(){
- 0!=this.enabled&&0!=this.canUse&&this.container.scale.set(.75)}
- onUp(){
- 0!=this.enabled&&0!=this.canUse&&(this.container.scale.set(.8),this.canUse=!1,this.iconOff.visible=!0,WL(),this.onClick&&this.onClick(),this.start())}
- start(){
- 0!=this.enabled&&(this.remainingFrames=this.durationFrames,this.displayCount=0,this.canUse=!1,this.iconOff.visible=!0,this.icon.visible=!1,this.lblTime.visible=!0,this.updateLabel(),WG.getInstance().add(this.onEnter,this))}
- onEnter(){
- if(this.remainingFrames--,this.remainingFrames<=0)return WG.getInstance().remove(this.onEnter,this),this.iconOff.visible=!1,this.icon.visible=!0,this.lblTime.visible=!1,void(this.canUse=!0);
- ++this.displayCount>=15&&(this.displayCount=0,this.updateLabel())}
- updateLabel(){
- const t=Math.ceil(this.remainingFrames/60);
- this.lblTime.text=t.toString(),this.lblTime.x=(this.w-this.lblTime.width)/2}
- setReady(){
- 0!=this._enabled&&(WG.getInstance().remove(this.onEnter,this),this.remainingFrames=0,this.displayCount=0,this.canUse=!0,this.iconOff.visible=!1,this.icon.visible=!0,this.lblTime.visible=!1,this._started=!0)}
- set enabled(t){
- this._enabled=t,t?(this.icon.visible=!0,this._started||(this._started=!0,this.start())):(this.iconOff.visible=!0,this.icon.visible=!1,this.lblTime.visible=!1,this.canUse=!1)}
- get enabled(){
- return this._enabled}
- setSkillIcon(t){
- this.icon.texture=ZA.getTexture("UI_Ekkorr",`UI_SKILL${
- t}
- _ON`),this.iconOff.texture=ZA.getTexture("UI_Ekkorr",`UI_SKILL${
- t}
- _OFF`)}
- }
- ;
- Kt(Ez,"ActiveSkillButton");
- let Az=Ez;
- var Sz=(t=>(t.DarkLightning="DarkLightning",t.DoomBringer="DoomBringer",t.Lightening="Lightening",t.HeavenSword="HeavenSword",t.ActiveLightning="ActiveLightning",t.ActiveRevive="ActiveRevive",t.ActiveAngel="ActiveAngel",t))(Sz||{
- }
- );
- const Tz=class extends Be{
- constructor(){
- super(),zt(this,"sp"),zt(this,"textures"),zt(this,"sheetName","ActiveSkill"),zt(this,"textureName",""),zt(this,"className",Sz.DarkLightning),zt(this,"count",0),zt(this,"incFrame",.6),zt(this,"endFrame",10),zt(this,"loop",!1),zt(this,"currentFrame",0),zt(this,"delay",0),zt(this,"onComplete",Kt(()=>{
- }
- ,"onComplete")),this.eventMode="none",this.initialize(),this.createUI()}
- initialize(){
- }
- async createUI(){
- ""===this.textureName&&(this.textureName=this.className),this.textures=ZA.getTextures(this.sheetName,this.textureName),this.sp=new We(this.textures[0]),this.addChild(this.sp),this.scale.set(1),this.endFrame=this.textures.length}
- start(t=-1){
- -1==t&&(t=this.endFrame),this.count=1*t/this.incFrame,this.currentFrame=0,this.visible=!1,WG.getInstance().add(this.onEnter,this)}
- onEnter(){
- if(this.delay-- >0)this.visible=!1;
- else{
- if(this.visible=!0,this.currentFrame+=this.incFrame,this.currentFrame>=this.endFrame){
- if(!this.loop)return void this.remove();
- this.currentFrame=0}
- this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.count--<0&&this.remove()}
- }
- remove(){
- this.onComplete(this.x,this.y),this.removeAllListeners(),this.removeFromParent(),WG.getInstance().remove(this.onEnter,this)}
- }
- ;
- Kt(Tz,"BaseActiveSkill");
- let Cz=Tz;
- const kz=class extends Cz{
- constructor(){
- super()}
- initialize(){
- this.className=Sz.DarkLightning}
- }
- ;
- Kt(kz,"DarkLightening");
- let Oz=kz;
- const Iz=class extends Be{
- constructor(){
- super(),zt(this,"className",Sz.DarkLightning),zt(this,"sheetName",""),zt(this,"currentFrame",0),zt(this,"duration",120),zt(this,"_uiCreated",!1),zt(this,"onComplete",Kt(()=>{
- }
- ,"onComplete")),zt(this,"onDealDamage",Kt(()=>{
- }
- ,"onDealDamage")),this.eventMode="none",this.initialize()}
- initialize(){
- }
- createUI(){
- }
- getTexture(t){
- return ZA.getTexture(this.sheetName,t)}
- getTextures(t){
- return ZA.getTextures(this.sheetName,t,!0)}
- start(){
- this._uiCreated||(this.createUI(),this._uiCreated=!0),this.currentFrame=0,this.visible=!0,this.onStart(),WG.getInstance().add(this.onEnter,this)}
- onStart(){
- }
- onEnter(){
- this.updateFrame(this.currentFrame),++this.currentFrame>=this.duration&&this.remove()}
- updateFrame(t){
- }
- remove(){
- this.onComplete(this.x,this.y),this.onComplete=()=>{
- }
- ,this.onDealDamage=()=>{
- }
- ,this.removeAllListeners(),this.removeFromParent(),WG.getInstance().remove(this.onEnter,this),fq.getInstance().addToRecycleList(this)}
- }
- ;
- Kt(Iz,"CompositeActiveSkill");
- let xz=Iz;
- const Nz=class extends xz{
- constructor(){
- super(...arguments),zt(this,"swordMain"),zt(this,"swordEnd"),zt(this,"crackedEarth"),zt(this,"lineEffect"),zt(this,"bottomEffect1"),zt(this,"bottomEffect2"),zt(this,"wave"),zt(this,"lineEffectTextures"),zt(this,"lineEffectTotal",5),zt(this,"waveStepScale",0),zt(this,"waveStepAlpha",0),zt(this,"waveDelay",0),zt(this,"waveActive",!1),zt(this,"shakeBaseX",0),zt(this,"shakeBaseY",0),zt(this,"hasDamaged",!1),zt(this,"lineFrame",0)}
- initialize(){
- this.className=Sz.DoomBringer,this.sheetName="DoomBringer",this.duration=125}
- createUI(){
- this.swordMain=new We(this.getTexture("SwordMain")),this.swordMain.pivot.set(50,156),this.swordMain.scale.set(2.2),this.swordMain.visible=!1,this.swordEnd=new We(this.getTexture("SwordEnd")),this.swordEnd.pivot.set(50,108),this.swordEnd.scale.set(2.2),this.swordEnd.visible=!1,this.crackedEarth=new We(this.getTexture("CrackedEarth")),this.crackedEarth.pivot.set(202,25),this.crackedEarth.scale.set(2),this.crackedEarth.alpha=0,this.lineEffectTextures=this.getTextures("LineBgEffect"),this.lineEffectTotal=this.lineEffectTextures.length-1,this.lineEffect=new We(this.lineEffectTextures[0]),this.lineEffect.pivot.set(118,76),this.lineEffect.scale.set(3),this.lineEffect.alpha=0,this.bottomEffect1=new We(this.getTexture("BottomEffect")),this.bottomEffect1.pivot.set(34,11),this.bottomEffect1.alpha=0,this.bottomEffect2=new We(this.getTexture("BottomEffect")),this.bottomEffect2.pivot.set(34,11),this.bottomEffect2.alpha=0,this.wave=new We(this.getTexture("ExWave")),this.wave.pivot.set(79,78),this.wave.alpha=0,this.addChild(this.crackedEarth),this.addChild(this.lineEffect),this.addChild(this.bottomEffect1),this.addChild(this.bottomEffect2),this.addChild(this.wave),this.addChild(this.swordMain),this.addChild(this.swordEnd)}
- onStart(){
- const t=DB.getInstance();
- this.shakeBaseX=t.x,this.shakeBaseY=t.y,zii.zoomEnabled=!1,this.waveStepScale=.24,this.waveStepAlpha=-.05,this.wave.scale.set(.2),this.wave.alpha=1,this.waveDelay=14,this.waveActive=!0,this.lineFrame=0,this.hasDamaged=!1}
- updateFrame(t){
- this.updateSword(t),this.updateEarthCrack(t),this.updateBottomEffect1(t),this.updateBottomEffect2(t),this.updateWave(t),this.updateScreenShake(t),this.updateCombat(t)}
- updateCombat(t){
- 15===t&&(this.onDealDamage("hit",this.x,this.y),this.hasDamaged||(this.hasDamaged=!0,this.onDealDamage("damage",this.x,this.y)))}
- remove(){
- DB.getInstance().x=this.shakeBaseX,DB.getInstance().y=this.shakeBaseY,zii.zoomEnabled=!0,super.remove()}
- updateScreenShake(t){
- const i=DB.getInstance(),s=this.shakeBaseX,e=this.shakeBaseY;
- t>=14&&t<34?(i.x=s+Math.floor(30*Math.random()-15),i.y=e+(Rz[t-14]??0)):t>=34&&t<84&&t%2==0?(i.x=s+Math.floor(20*Math.random()-10),i.y=e+Math.floor(20*Math.random()-10)):(i.x=s,i.y=e);
- const n=30;
- i.x<s-n&&(i.x=s-n),i.x>s+n&&(i.x=s+n),i.y<e-n&&(i.y=e-n),i.y>e+n&&(i.y=e+n)}
- updateSword(t){
- const i=Dz[t]??0,s=Gz[t]??0,e=Lz[t]??0;
- i>-10?this.swordMain.visible=!1:(this.swordMain.visible=!0,this.swordMain.y=i+175),this.swordEnd.alpha=s,this.swordEnd.visible=s>0,this.swordEnd.y=e}
- updateEarthCrack(t){
- ++this.lineFrame>this.lineEffectTotal&&(this.lineFrame=0),this.lineEffect.texture=this.lineEffectTextures[this.lineFrame],this.lineEffect.alpha=Bz[t]??0,this.crackedEarth.alpha=Uz[t]??0}
- updateBottomEffect1(t){
- const i=Fz[t]??0,s=Hz[t]??0;
- this.bottomEffect1.alpha=i,this.bottomEffect1.scale.set(s)}
- updateBottomEffect2(t){
- const i=Wz[t]??0,s=jz[t]??0;
- this.bottomEffect2.alpha=i,this.bottomEffect2.scale.set(s)}
- updateWave(t){
- if(this.waveActive){
- if(this.waveDelay>0)return this.waveDelay--,void(this.wave.alpha=0);
- this.wave.scale.x+=this.waveStepScale,this.wave.scale.y=this.wave.scale.x,this.wave.alpha+=this.waveStepAlpha,this.wave.alpha<=0&&(this.wave.alpha=0,this.waveActive=!1)}
- }
- }
- ;
- Kt(Nz,"DoomBringer");
- let Pz=Nz;
- const Rz=[30,0,-20,0,25,-20,0,20,-15,0,15,0,-10,0,10,0,-5,0,5,0],Dz=[-625.55,-619.45,-609.35,-595.15,-576.95,-554.7,-528.4,-498.05,-463.65,-425.2,-382.7,-336.2,-285.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Lz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-14,-14,-17,-17,-17,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-13,-11,-10,-9,-7,-6,-5,-3,-2,-1,1,2,0,0,0,0,0,0,0,0],Gz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.92578125,.8515625,.77734375,.69921875,.625,.55078125,.4765625,.40234375,.328125,.25,.17578125,.1015625,0,0,0,0,0,0,0,0],Bz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.15625,.21484375,.26953125,.328125,.3828125,.4375,.49609375,.55078125,.60546875,.6640625,.71875,.77734375,.83203125,.88671875,.9453125,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9453125,.890625,.83203125,.77734375,.72265625,.66796875,.609375,.5546875,.5,.4453125,.390625,.33203125,.27734375,.22265625,.16796875,.109375,.0546875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Uz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,.33984375,.54296875,.70703125,.8359375,.92578125,.98046875,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.921875,.84765625,.76953125,.69140625,.6171875,.5390625,.4609375,.3828125,.30859375,.23046875,.15234375,.078125,0,0,0],Fz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,.94140625,.87890625,.8203125,.7578125,.69921875,.63671875,.578125,.51953125,.4609375,.3984375,.33984375,.28125,.22265625,.16015625,.1015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Hz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.9040069580078125,4.4866485595703125,5.069183349609375,5.651763916015625,6.2342987060546875,6.8169403076171875,7.39947509765625,7.9821929931640625,8.564788818359375,9.147384643554688,9.729995727539062,10.312591552734375,10.895187377929688,11.477783203125,12.060150146484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Wz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.94140625,.87890625,.8203125,.76171875,.69921875,.640625,.58203125,.51953125,.4609375,.40234375,.33984375,.28125,.22265625,.16015625,.1015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],jz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.823974609375,4.3265380859375,4.8290557861328125,5.33160400390625,5.8341217041015625,6.3366241455078125,6.8391265869140625,7.341796875,7.84429931640625,8.34686279296875,8.849365234375,9.3519287109375,9.85443115234375,10.356948852539062,10.8594970703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],$z=class extends xz{
- constructor(){
- super(...arguments),zt(this,"mainImage"),zt(this,"waveImage"),zt(this,"fragmentImage"),zt(this,"mainTextures"),zt(this,"waveTextures"),zt(this,"fragmentTextures"),zt(this,"skillType",0),zt(this,"startFrame",0),zt(this,"endFrame",0),zt(this,"mainFrame",0),zt(this,"repeatCount",0),zt(this,"arrFrame",[[0,18],[19,37],[38,56],[57,75]]),zt(this,"waveFrame",0),zt(this,"waveActive",!1),zt(this,"waveKeyFrames",[0,1,4,5,8,9,12,13]),zt(this,"fragFrame",0),zt(this,"fragActive",!1),zt(this,"showFragments",!0),zt(this,"hasDamaged",!1),zt(this,"mainTriggerFrame",6)}
- initialize(){
- this.className=Sz.Lightening,this.sheetName="Lightening",this.duration=9999}
- createUI(){
- this.mainTextures=this.getTextures("LighteningSkillMain"),this.waveTextures=this.getTextures("LighteningWave"),this.fragmentTextures=this.getTextures("LighteningFragments"),this.waveImage=new We(this.waveTextures[0]),this.waveImage.pivot.set(this.waveImage.width/2,this.waveImage.height/2),this.waveImage.visible=!1,this.mainImage=new We(this.mainTextures[0]),this.mainImage.visible=!1,this.fragmentImage=new We(this.fragmentTextures[0]),this.fragmentImage.pivot.set(this.fragmentImage.width/2,this.fragmentImage.height/2),this.fragmentImage.visible=!1,this.addChild(this.waveImage),this.addChild(this.mainImage),this.addChild(this.fragmentImage);
- const t=this.mainImage.height;
- this.waveImage.position.set(15,t),this.fragmentImage.position.set(15,t-10)}
- onStart(){
- this.hasDamaged=!1,this.skillType=Math.floor(4*Math.random()),this.startFrame=this.arrFrame[this.skillType][0],this.endFrame=this.arrFrame[this.skillType][1],this.mainFrame=this.startFrame,this.repeatCount=0,this.mainImage.texture=this.mainTextures[Math.floor(this.mainFrame)],this.mainImage.visible=!0,this.showFragments=Math.random()<=.5,this.waveActive=!1,this.fragActive=!1,this.waveImage.visible=!1,this.fragmentImage.visible=!1}
- updateFrame(t){
- this.updateMain(),this.waveActive&&this.updateWave(),this.fragActive&&this.updateFragments(),this.updateCombat()}
- updateCombat(){
- !this.hasDamaged&&this.mainImage.visible&&(this.hasDamaged=!0,this.onDealDamage("damage",this.x,this.y))}
- updateMain(){
- this.mainFrame+=.5;
- const t=Math.floor(this.mainFrame);
- if(t!==this.startFrame+this.mainTriggerFrame||this.waveActive||(this.waveActive=!0,this.waveFrame=0,this.waveImage.visible=!1,this.showFragments&&(this.fragActive=!0,this.fragFrame=0,this.fragmentImage.visible=!0)),t>=0&&t<this.mainTextures.length&&(this.mainImage.texture=this.mainTextures[t]),this.mainFrame===this.endFrame)this.mainImage.visible=!1;
- else if(this.mainFrame>this.endFrame){
- if(this.changeType(),this.repeatCount++,this.repeatCount>=2)return void this.remove();
- this.mainImage.visible=!0}
- }
- changeType(){
- this.skillType=(this.skillType+1)%4,this.startFrame=this.arrFrame[this.skillType][0],this.endFrame=this.arrFrame[this.skillType][1],this.mainFrame=this.startFrame,this.mainImage.texture=this.mainTextures[Math.floor(this.mainFrame)],this.rotation=.4*Math.random()-.2,this.waveImage.rotation=-this.rotation,this.fragmentImage.rotation=-this.rotation,this.waveActive=!1,this.fragActive=!1,this.waveImage.visible=!1,this.fragmentImage.visible=!1}
- updateWave(){
- this.waveFrame+=.5;
- const t=Math.floor(this.waveFrame),i=this.waveKeyFrames.indexOf(t);
- -1===i?this.waveImage.visible=!1:(this.waveImage.visible=!0,i<this.waveTextures.length&&(this.waveImage.texture=this.waveTextures[i])),this.waveFrame>13&&(this.waveImage.visible=!1),this.waveFrame>=24&&(this.waveFrame=0)}
- updateFragments(){
- this.fragFrame+=.5;
- const t=Math.floor(this.fragFrame);
- t>=0&&t<this.fragmentTextures.length&&(this.fragmentImage.texture=this.fragmentTextures[t]),this.fragFrame>=19&&(this.fragFrame=0)}
- }
- ;
- Kt($z,"Lightening");
- let Vz=$z;
- const Kz=class extends xz{
- constructor(){
- super(...arguments),zt(this,"sword"),zt(this,"swordEnd"),zt(this,"swordBrighten"),zt(this,"bottomEffect"),zt(this,"crossEffect"),zt(this,"lineLight"),zt(this,"midEffect"),zt(this,"effectY",380)}
- initialize(){
- this.className=Sz.HeavenSword,this.sheetName="HeavenSword",this.duration=qz.length-3}
- createUI(){
- this.bottomEffect=new We(this.getTexture("HeavenBottomImpact")),this.bottomEffect.pivot.set(133,30),this.bottomEffect.position.set(0,this.effectY),this.sword=new We(this.getTexture("HeavenBaseSword")),this.sword.pivot.x=48.5,this.sword.position.set(0,this.effectY),this.swordEnd=new We(this.getTexture("HeavenBrokenSword")),this.swordEnd.pivot.set(63.5,-30),this.swordEnd.position.set(0,this.effectY-218.25),this.swordBrighten=new We(this.getTexture("HeavenBrightenSword")),this.swordBrighten.pivot.set(63.5,-30),this.swordBrighten.position.set(0,this.effectY-218.25),this.lineLight=new We(this.getTexture("HeavenLineLight")),this.lineLight.pivot.set(5.5,296),this.lineLight.position.set(0,this.effectY),this.crossEffect=new We(this.getTexture("HeavenCrossEffect")),this.crossEffect.pivot.set(68,103),this.crossEffect.position.set(0,this.effectY),this.midEffect=new We(this.getTexture("HeavenMidImpact")),this.midEffect.pivot.set(133,131),this.midEffect.position.set(0,this.effectY),this.addChild(this.bottomEffect),this.addChild(this.sword),this.addChild(this.swordEnd),this.addChild(this.swordBrighten),this.addChild(this.lineLight),this.addChild(this.crossEffect),this.addChild(this.midEffect)}
- onStart(){
- this.scale.set(.6),this.sword.visible=!1,this.swordEnd.alpha=0,this.swordBrighten.alpha=0,this.bottomEffect.alpha=0,this.bottomEffect.scale.set(0),this.crossEffect.alpha=0,this.crossEffect.scale.set(0),this.lineLight.alpha=0,this.lineLight.scale.set(0),this.midEffect.alpha=0,this.midEffect.scale.set(0)}
- updateFrame(t){
- this.updateSword(t),this.updateBottomEffect(t),this.updateCrossEffect(t),this.updateLineLight(t),this.updateMidEffect(t),this.updateCombat(t)}
- updateCombat(t){
- 23===t&&this.onDealDamage("hit",this.x,this.y),t>=23&&t<=71&&t%2==1&&this.onDealDamage("damage",this.x,this.y),44===t&&(this.onDealDamage("stun",this.x,this.y),KL.getInstance().playSFX(KL.SFX_HEAVEN_SWORD))}
- updateSword(t){
- const i=qz[t]??0;
- i>-10?this.sword.visible=!1:(this.sword.visible=!0,this.sword.y=this.effectY+i+175),this.swordEnd.alpha=Xz[t]??0,this.swordBrighten.alpha=Yz[t]??0}
- updateBottomEffect(t){
- this.bottomEffect.alpha=Jz[t]??0,this.bottomEffect.scale.set(Qz[t]??0)}
- updateCrossEffect(t){
- this.crossEffect.alpha=Zz[t]??0,this.crossEffect.scale.set(tq[t]??0)}
- updateLineLight(t){
- this.lineLight.alpha=iq[t]??0,this.lineLight.scale.set(sq[t]??0,eq[t]??0)}
- updateMidEffect(t){
- this.midEffect.alpha=Jz[t]??0,this.midEffect.scale.set(Qz[t]??0)}
- }
- ;
- Kt(Kz,"HeavenSword");
- let zz=Kz;
- const qz=[-1232.65,-1219.8,-1198.35,-1168.25,-1129.65,-1082.45,-1026.65,-962.25,-889.3,-807.75,-717.65,-618.9,-511.65,-395.75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Xz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Yz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.05859375,.1171875,.17578125,.234375,.29296875,.3515625,.41015625,.46875,.53125,.58984375,.6484375,.70703125,.765625,.82421875,.8828125,.94140625,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Jz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,.99609375,.98046875,.95703125,.92578125,.88671875,.8359375,.77734375,.70703125,.62890625,.54296875,.4453125,.33984375,.2265625,.1015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Qz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.5935821533203125,.7398834228515625,.8536834716796875,.934967041015625,.983734130859375,1,1.0004119873046875,1.0016326904296875,1.003692626953125,1.006561279296875,1.0102386474609375,1.0147552490234375,1.02008056640625,1.0262298583984375,1.0331878662109375,1.040985107421875,1.049591064453125,1.0590057373046875,1.0692596435546875,1.080322265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Zz=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,.921875,.84765625,.76953125,.69140625,.6171875,.5390625,.4609375,.3828125,.30859375,.23046875,.15234375,.078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],tq=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.054473876953125,1.1089630126953125,1.1634368896484375,1.2179107666015625,1.2723846435546875,1.326873779296875,1.38134765625,1.4019775390625,1.422576904296875,1.4431915283203125,1.463775634765625,1.4843902587890625,1.5050048828125,1.5256195068359375,1.546234130859375,1.5668487548828125,1.5874481201171875,1.608062744140625,1.6286773681640625,1.649261474609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],iq=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.99609375,.984375,.95703125,.91796875,.86328125,.7890625,.7109375,.63671875,.58203125,.54296875,.515625,.50390625,.5,.4609375,.421875,.3828125,.34765625,.30859375,.26953125,.23046875,.19140625,.15234375,.1171875,.078125,.0390625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],sq=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.30026122793837684,.3335952126277735,.39675032482356637,.49767195974920064,.643764062737707,.8336707137851995,1.0422970087736907,1.2306526365515582,1.3771682471450755,1.4791237303063594,1.5431527068085191,1.576976346364553,1.5871342001594657,1.7895547849862767,1.992073992810071,2.1945926088435197,2.397110252312608,2.599690781802945,2.8021588821253705,3.0046725437052557,3.207246838924801,3.4097764177405048,3.612290393249846,3.81478927257208,4.017318848019521,4.220001220703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],eq=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.7699432373046875,.7729644775390625,.7786865234375,.787872314453125,.80108642578125,.8182220458984375,.83709716796875,.8542327880859375,.867462158203125,.8766326904296875,.8823699951171875,.8853759765625,.8862762451171875,.87725830078125,.8682403564453125,.859222412109375,.850189208984375,.8411865234375,.8321685791015625,.823150634765625,.8141326904296875,.80511474609375,.79608154296875,.787078857421875,.7780609130859375,.76904296875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],nq=class extends xz{
- constructor(){
- super(...arguments),zt(this,"mainImage"),zt(this,"textures"),zt(this,"frame",0)}
- initialize(){
- this.className=Sz.ActiveLightning,this.sheetName="Lightening",this.duration=20}
- createUI(){
- this.textures=this.getTextures("LighteningSkillMain"),this.mainImage=new We(this.textures[0]),this.mainImage.anchor.set(.5,.95),this.addChild(this.mainImage)}
- onStart(){
- this.frame=0,this.mainImage.texture=this.textures[0],this.mainImage.visible=!0}
- updateFrame(t){
- this.frame+=.5;
- const i=Math.floor(this.frame);
- i<this.textures.length&&(this.mainImage.texture=this.textures[i])}
- }
- ;
- Kt(nq,"ActiveLightning");
- let hq=nq;
- const rq=class t{
- constructor(t,i=0,s=10){
- zt(this,"id",-1),zt(this,"value",0),zt(this,"count",0),zt(this,"canAccu",!1),this.id=t,this.value=i,this.count=s}
- static getVO(i,s=0,e=10){
- let n;
- return t.recycleList.length>0?(n=t.recycleList.pop(),n.id=i,n.value=s,n.count=e,n.canAccu=!1):n=new t(i,s,e),n}
- remove(){
- this.id=-1,this.value=0,this.count=0,this.canAccu=!1,t.recycleList.push(this)}
- reset(){
- this.value=0,this.count=0}
- }
- ;
- Kt(rq,"BaseActiveBuffVO"),zt(rq,"recycleList",[]);
- let oq=rq;
- const aq=class t extends xz{
- constructor(){
- super(...arguments),zt(this,"mainImage"),zt(this,"textures"),zt(this,"effectApplied",!1)}
- initialize(){
- this.className=Sz.ActiveRevive,this.sheetName="ActiveRevive",this.duration=59}
- createUI(){
- this.textures=this.getTextures("ActiveRevive"),this.mainImage=new We(this.textures[0]),this.addChild(this.mainImage)}
- onStart(){
- this.currentFrame=0,this.effectApplied=!1,this.mainImage.texture=this.textures[0],this.mainImage.visible=!0}
- updateFrame(t){
- const i=Math.min(t,this.textures.length-1);
- this.mainImage.texture=this.textures[i],!this.effectApplied&&t>=Math.floor(this.textures.length/2)&&(this.effectApplied=!0,this.applyReviveEffect())}
- applyReviveEffect(){
- const i=zii.getInstance().getFriendList();
- for(let s=0;
- s<i.length;
- s++){
- const e=i[s];
- if(0===s){
- const t=.5*e.maxHp;
- e.heal(t,null,!1)}
- else if(e.isAlive){
- const t=.5*e.maxHp;
- e.heal(t,null,!1)}
- else e.revive();
- e.isAlive&&(zii.getInstance().random.chance(.5)?e.showPhysicalShield(t.BUFF_DURATION):e.showMagicShield(t.BUFF_DURATION),s>0&&(e.activeDamageBuff.addBuff(oq.getVO(t.BUFF_ID,1,t.BUFF_DURATION),!0),e.addAttackSpeedBuff(t.BUFF_ID,2,t.BUFF_DURATION,!0),e.addMoveSpeedBuff(t.BUFF_ID,2,t.BUFF_DURATION,!0)))}
- }
- }
- ;
- Kt(aq,"ActiveRevive"),zt(aq,"BUFF_ID",9999),zt(aq,"BUFF_DURATION",300);
- let cq=aq;
- const lq=class t extends xz{
- constructor(){
- super(...arguments),zt(this,"arrAngelScale",[.7379608154296875,.77197265625,.801971435546875,.827972412109375,.8499755859375,.86798095703125,.8819732666015625,.8919830322265625,.897979736328125,.899993896484375,.9051513671875,.9103240966796875,.915496826171875,.9206695556640625,.92584228515625,.9310150146484375,.936187744140625,.9413604736328125,.946533203125,.9517059326171875,.956878662109375,.9620513916015625,.96722412109375,.9723968505859375,.9775543212890625,.98272705078125,.9878997802734375,.993072509765625,.9982452392578125,1.00341796875,1.0085906982421875,1.013763427734375,1.0189361572265625,1.02410888671875,1.0292816162109375,1.034454345703125,1.0396270751953125,1.0447998046875,1.04998779296875,1.0499420166015625,1.0499267578125,1.0499267578125,1.0499114990234375,1.0499267578125]),zt(this,"arrAngelAlpha",[.19140625,.359375,.51171875,.640625,.75,.83984375,.91015625,.9609375,.98828125,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),zt(this,"arrBGScale",[.3214263916015625,.342926025390625,.364471435546875,.3860321044921875,.4076080322265625,.429229736328125,.4508819580078125,.4725494384765625,.4942474365234375,.515960693359375,.5377044677734375,.5594482421875,.58123779296875,.6030426025390625,.6248626708984375,.646697998046875,.668548583984375,.6904296875,.712310791015625,.7342071533203125,.756103515625,.7780303955078125,.7999725341796875,.8032989501953125,.8066253662109375,.809967041015625,.813323974609375,.8166656494140625,.8200225830078125,.8233489990234375,.826690673828125,.830047607421875,.833404541015625,.8367462158203125,.8400726318359375,.843414306640625,.846771240234375,.8501129150390625,.8534393310546875,.856781005859375,.8601226806640625,.8634490966796875,.866790771484375,.8701019287109375,.873443603515625,.87677001953125,.880096435546875,.883392333984375,.88671875,.8900299072265625,.8933258056640625,.896636962890625,.89996337890625,.90447998046875,.909027099609375,.91357421875,.918121337890625,.92266845703125,.9272308349609375,.9317779541015625]),zt(this,"arrBGAlpha",[.04296875,.0859375,.12890625,.171875,.21484375,.2578125,.30078125,.34375,.38671875,.43359375,.4765625,.51953125,.5625,.60546875,.6484375,.6953125,.73828125,.78125,.82421875,.8671875,.9140625,.95703125,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.953125,.91015625,.86328125,.81640625,.7734375,.7265625,.68359375]),zt(this,"arrLightCircleScale",[2.88861083984375,2.77752685546875,2.666473388671875,2.555389404296875,2.4442901611328125,2.3332061767578125,2.2221221923828125,2.11102294921875,2,2,2,2,2,2,2,2,2,2]),zt(this,"arrLightCircleAlpha",[1,1,1,1,1,1,1,1,1,.890625,.77734375,.66796875,.5546875,.4453125,.33203125,.22265625,.109375,0]),zt(this,"goldCircle"),zt(this,"goddess"),zt(this,"goddessTextures"),zt(this,"lightRays"),zt(this,"lightSprites"),zt(this,"lightTextures"),zt(this,"lightCircle"),zt(this,"lightHeart"),zt(this,"lightHeartTextures"),zt(this,"lightCross"),zt(this,"lightCrossTextures"),zt(this,"effectApplied",!1)}
- initialize(){
- this.className=Sz.ActiveAngel,this.sheetName="ActiveAngel2",this.duration=79}
- createUI(){
- const i=this.getTexture("LightCircle");
- this.lightCircle=new We(i),this.lightCircle.visible=!1,this.addChild(this.lightCircle);
- const s=this.getTexture("GoldCircle");
- this.goldCircle=new We(s),this.goldCircle.visible=!1,this.addChild(this.goldCircle),this.goddessTextures=this.getTextures("Goddess"),this.goddess=new We(this.goddessTextures[0]),this.goddess.visible=!1,this.addChild(this.goddess),this.lightTextures=this.getTextures("LightX"),this.lightRays=new Be,this.lightSprites=[];
- for(let e=0;
- e<t.LIGHT_COUNT;
- e++){
- const i=new We(this.lightTextures[0]);
- i.scale.set(e%2==0?t.LIGHT_SCALE:4),i.rotation=2*Math.PI/t.LIGHT_COUNT*e,this.lightSprites.push(i),this.lightRays.addChild(i)}
- this.lightRays.visible=!1,this.addChild(this.lightRays),this.lightHeartTextures=this.getTextures("LightHeart"),this.lightHeart=new We(this.lightHeartTextures[0]),this.lightHeart.scale.set(t.HEART_CROSS_SCALE),this.lightHeart.visible=!1,this.addChild(this.lightHeart),this.lightCrossTextures=this.getTextures("LightCrossEffect"),this.lightCross=new We(this.lightCrossTextures[0]),this.lightCross.scale.set(t.HEART_CROSS_SCALE),this.lightCross.visible=!1,this.addChild(this.lightCross)}
- onStart(){
- this.currentFrame=0,this.effectApplied=!1,this.goldCircle.visible=!1,this.goldCircle.rotation=0,this.goddess.visible=!1,this.lightRays.visible=!1,this.lightCircle.visible=!1,this.lightHeart.visible=!1,this.lightCross.visible=!1}
- updateFrame(t){
- const i=t+1;
- this.updateGoldCircle(i),this.updateGoddess(i),this.updateLightRays(i),this.updateLightCircle(i),this.updateLightHeart(i),this.updateLightCross(i),!this.effectApplied&&i>=30&&(this.effectApplied=!0,this.applyAngelEffect())}
- updateGoldCircle(t){
- if(t<1||t>76)return void(this.goldCircle.visible=!1);
- const i=t-1;
- i<this.arrBGScale.length?(this.goldCircle.visible=!0,this.goldCircle.scale.set(2*this.arrBGScale[i]),this.goldCircle.alpha=this.arrBGAlpha[i]??0,this.goldCircle.rotation=t*(2*Math.PI/180)):i<76?(this.goldCircle.visible=!0,this.goldCircle.rotation=t*(2*Math.PI/180)):this.goldCircle.visible=!1}
- updateGoddess(t){
- if(t<10||t>54)return void(this.goddess.visible=!1);
- const i=t-10;
- this.goddess.visible=!0;
- const s=Math.floor(i/5)%this.goddessTextures.length;
- this.goddess.texture=this.goddessTextures[s],i<this.arrAngelScale.length&&(this.goddess.scale.set(this.arrAngelScale[i]),this.goddess.alpha=this.arrAngelAlpha[i])}
- updateLightRays(t){
- if(t<10||t>54)return void(this.lightRays.visible=!1);
- this.lightRays.visible=!0;
- const i=(t-10)%this.lightTextures.length;
- for(let s=0;
- s<this.lightSprites.length;
- s++)this.lightSprites[s].texture=this.lightTextures[i]}
- updateLightCircle(t){
- if(t<1||t>this.arrLightCircleScale.length)return void(this.lightCircle.visible=!1);
- const i=t-1;
- this.lightCircle.visible=!0,this.lightCircle.scale.set(4*this.arrLightCircleScale[i]),this.lightCircle.alpha=this.arrLightCircleAlpha[i]}
- updateLightHeart(t){
- if(t<54||t>78)return void(this.lightHeart.visible=!1);
- const i=t-54;
- this.lightHeart.visible=!0,i<this.lightHeartTextures.length&&(this.lightHeart.texture=this.lightHeartTextures[i])}
- updateLightCross(t){
- if(t<54||t>78)return void(this.lightCross.visible=!1);
- const i=t-54;
- this.lightCross.visible=!0,i<this.lightCrossTextures.length&&(this.lightCross.texture=this.lightCrossTextures[i])}
- applyAngelEffect(){
- const i=zii.getInstance().getFriendList();
- for(const s of i)s.isAlive&&(s.heal(s.maxHp,null,!1),s.showPhysicalShield(t.SHIELD_DURATION))}
- }
- ;
- Kt(lq,"ActiveAngel"),zt(lq,"SHIELD_DURATION",300),zt(lq,"LIGHT_COUNT",16),zt(lq,"LIGHT_SCALE",5),zt(lq,"HEART_CROSS_SCALE",4);
- let uq=lq;
- const dq=class t{
- constructor(){
- zt(this,"classMap",{
- [Sz.DarkLightning]:Oz,[Sz.DoomBringer]:Pz,[Sz.Lightening]:Vz,[Sz.HeavenSword]:zz,[Sz.ActiveLightning]:hq,[Sz.ActiveRevive]:cq,[Sz.ActiveAngel]:uq}
- )}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- getSkill(i){
- const s=this.classMap[i],e=i;
- let n;
- return t.activeSkillPool[e]||(t.activeSkillPool[e]=[]),n=t.activeSkillPool[e].length>0?t.activeSkillPool[e].pop():new s,n}
- addToRecycleList(i){
- const s=i.className;
- t.activeSkillPool[s]||(t.activeSkillPool[s]=[]),t.activeSkillPool[s].includes(i)||t.activeSkillPool[s].push(i)}
- }
- ;
- Kt(dq,"ActiveSkillFactory"),zt(dq,"instance"),zt(dq,"activeSkillPool",{
- }
- );
- let fq=dq;
- const pq=class t{
- static getSkillRatio(t,i){
- const s=i-t;
- return s<=0?1:s<=50?.95:s<=100?.9:s<=150?.85:s<=200?.8:s<=250?.7:s<=300?.6:s<=350?.5:s<=400?.4:s<=450?.3:s<=500?.2:s<=550?.1:s<=600?.05:s<=650?.01:s<=700?.005:s<=750?.001:0}
- static getBossSkillReduction(t){
- return 1===t.bossType?.25:2===t.bossType?.33:1}
- static dealDamage(i,s,e){
- for(let n=0;
- n<i.length;
- n++){
- const h=i[n];
- if(h.isAlive){
- const i=t.getBossSkillReduction(h);
- h.health-=h.maxHp*s*e*i}
- }
- }
- static blowAll(t,i,s,e){
- for(let n=0;
- n<t.length;
- n++){
- const h=t[n];
- if(h.isAlive){
- const t=h.x-i>=0?s:-s;
- h.blow(t,e)}
- }
- }
- static blowAllWithFalloff(t,i,s,e,n,h){
- for(let r=0;
- r<t.length;
- r++){
- const o=t[r];
- if(!o.isAlive)continue;
- const a=o.x-i,c=o.y-s,l=Math.sqrt(a*a+c*c);
- if(l>=e)continue;
- const u=1-l/e,d=a>=0?n*u:-n*u;
- o.blow(d,h*u)}
- }
- static blowAllRandom(t,i,s){
- const e=zii.getInstance().random;
- for(let n=0;
- n<t.length;
- n++){
- const h=t[n];
- if(h.isAlive){
- const t=e.next()*i*2-i;
- h.blow(t,s)}
- }
- }
- static stunAll(t,i){
- for(let s=0;
- s<t.length;
- s++){
- const e=t[s];
- e.isAlive&&e.stun(i)}
- }
- }
- ;
- Kt(pq,"ActiveSkillDamageHelper");
- let gq=pq;
- const mq=class t extends aG{
- constructor(){
- super(),zt(this,"slotIndex",0),zt(this,"isSelectMode",!1),zt(this,"lblSkillName",new YD("",16750848,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblSkillDesc",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblGuide",new YD("",6737151,aD.DEFAULT_FONT_OPTION_16)),zt(this,"btnAction",new kU("UI_GEM","100","스킬변경",.8,200,70)),zt(this,"btnCancel",new kU("","","취소",.8,150,70)),zt(this,"skillIcon",new We),zt(this,"selectContainer",new Be),zt(this,"slotIcons",[]),zt(this,"slotGlows",[]),zt(this,"slotLabels",[]),zt(this,"onSkillChanged",null),this.width=580,this.skillIcon.scale.set(.8),this.contentContainer.addChild(this.skillIcon),this.contentContainer.addChild(this.selectContainer);
- for(let t=0;
- t<3;
- t++){
- const i=new Be,s=new CM({
- texture:ZA.getTexture("UI_Ekkorr","UI_SELECT"),leftWidth:25,topHeight:25,rightWidth:25,bottomHeight:25}
- );
- s.anchor.set(.5,.28),s.width=140,s.height=140,s.alpha=.8,s.visible=!1,i.addChild(s),this.slotGlows.push(s);
- const e=new We;
- e.anchor.set(.5),e.scale.set(.85),e.eventMode="static",e.cursor="pointer";
- const n=t;
- e.on("pointertap",()=>this.onSlotSelect(n)),i.addChild(e),this.slotIcons.push(e);
- const h=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_18);
- i.addChild(h),this.slotLabels.push(h),this.selectContainer.addChild(i)}
- this.contentContainer.addChild(this.lblSkillName,this.lblSkillDesc,this.lblGuide,this.btnAction,this.btnCancel),aD.setLabelWrapWidth(this.lblSkillDesc,this.width-60),aD.setLabelWrapWidth(this.lblGuide,this.width-60),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=AG.getText("COMMON_2","취소"),this.btnCancel.color=kU.GRAY,this.btnAction.showIconLabel=!0,this.btnAction.showTextLabel=!0,this.btnAction.color=kU.GREEN,this.btnAction.onClick=this.onActionClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showSlot(t,i=null){
- this.isSelectMode=!1,this.slotIndex=t,this.onSkillChanged=i,this.skillIcon.visible=!0,this.selectContainer.visible=!1,this.title=AG.getText("GAME_199","액티브 스킬"),this.skillIcon.texture=ZA.getTexture("UI_Ekkorr","UI_SKILL_ADD"),this.lblSkillName.text=AG.getText("GAME_208","잠긴 슬롯"),this.lblSkillDesc.text=AG.getText("GAME_200","슬롯을 오픈하면 랜덤으로 스킬이 배정됩니다."),this.lblGuide.text=AG.getText("GAME_201","스킬은 자동으로 랜덤하게 선택되고, 보석 500개가 필요합니다.")+" "+AG.getText("GAME_202","슬롯을 오픈하시겠습니까?"),this.btnAction.iconText="500",this.btnAction.text=AG.getText("GAME_203","슬롯 오픈"),this.btnAction.color=kU.RED,this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
- showSelectSlot(t=null){
- this.isSelectMode=!0,this.onSkillChanged=t,this.updateSelectSlotUI(),super.show()}
- updateSelectSlotUI(){
- this.skillIcon.visible=!1,this.selectContainer.visible=!0,this.title=AG.getText("GAME_199","액티브 스킬");
- const t=_L.activeSkills,i=.5*(this.width-300);
- for(let s=0;
- s<3;
- s++){
- const e=t[s]??1,n=this.slotIcons[s],h=this.slotGlows[s],r=this.slotLabels[s];
- n.texture=ZA.getTexture("UI_Ekkorr",`UI_SKILL${
- e}
- _ON`);
- const o=i+150*s;
- n.x=o,n.y=15,h.x=o,h.y=0,h.visible=!1;
- const a=KN.getInstance().getGameplayTotal(kx.UndeadSecret),c=Math.max(30,Math.floor((30+15*s)*(1-.01*a)));
- r.text=uU.displayTime(c),r.x=o-.5*r.width,r.y=n.y+.5*n.height+8}
- this.selectContainer.y=100,this.selectSlot(0),this.btnAction.iconText="100",this.btnAction.text=AG.getText("GAME_206","스킬변경"),this.btnAction.color=kU.GREEN,this.btnCancel.text=AG.getText("COMMON_2","취소"),this.updateLayout()}
- onSlotSelect(t){
- this.selectSlot(t),this.updateLayout()}
- selectSlot(i){
- this.slotIndex=i;
- for(let t=0;
- t<3;
- t++)this.slotGlows[t].visible=t===i;
- const s=_L.activeSkills[i]??1,e=AG.getText("GAME_207","현재스킬"),n=AG.getText(`ACTIVE_SKILL_NAME_${
- s}
- `,t.SKILL_NAMES[s])||"";
- this.lblSkillName.text=`${
- e}
-  : ${
- n}
- `,this.lblSkillDesc.text=AG.getText(`ACTIVE_SKILL_DESC_${
- s}
- `,t.SKILL_DESCS[s])||"",this.lblGuide.text=AG.getText("GAME_204","스킬은 자동으로 랜덤하게 선택되고, 보석 100개가 필요합니다.")+" "+AG.getText("GAME_205","스킬을 변경하시겠습니까?")}
- async onActionClick(){
- const t=!this.isSelectMode&&-1===(_L.activeSkills[this.slotIndex]??-1),i=t?500:100;
- if(_L.gem<i)return void mG.getInstance().show(AG.getText("COMMON_352","보석이 부족합니다."));
- let s;
- if(_L.gem-=i,UV.getInstance().updateGem(),s=t?await hD.getInstance().user.openActiveSkillSlot(this.slotIndex,!0):await hD.getInstance().user.changeActiveSkill(this.slotIndex,!0),!1===s.success)return _L.gem+=i,UV.getInstance().updateGem(),void mG.getInstance().showError(s);
- _L.setUser(s.body),UV.getInstance().updateAll(),this.isSelectMode?(this.updateSelectSlotUI(),this.onSkillChanged&&this.onSkillChanged()):(this.hide(),this.onSkillChanged&&(this.onSkillChanged(),this.onSkillChanged=null))}
- onCancelClick(){
- this.hide()}
- updateLayout(){
- var t,i;
- let s;
- this.isSelectMode?s=this.selectContainer.y+((null==(t=this.slotLabels[0])?void 0:t.y)??0)+((null==(i=this.slotLabels[0])?void 0:i.height)??20)+40:(this.skillIcon.x=.5*(this.width-this.skillIcon.width),this.skillIcon.y=90,s=this.skillIcon.y+this.skillIcon.height+15),this.lblSkillName.x=30,this.lblSkillName.y=s,this.lblSkillDesc.x=30,this.lblSkillDesc.y=this.lblSkillName.y+this.lblSkillName.height+10,this.lblGuide.x=30,this.lblGuide.y=this.lblSkillDesc.y+this.lblSkillDesc.height+25;
- const e=this.btnAction.width+this.btnCancel.width+20,n=.5*(this.width-e);
- this.btnAction.x=n,this.btnAction.y=this.lblGuide.y+this.lblGuide.height+25,this.btnCancel.x=n+this.btnAction.width+20,this.btnCancel.y=this.btnAction.y,this.height=this.btnAction.y+this.btnAction.height+40}
- }
- ;
- Kt(mq,"ActiveSkillPopup"),zt(mq,"_instance"),zt(mq,"SKILL_NAMES",["","심판의 번개","천지폭렬","하늘의 검","신성한 기도","구원의 날개","총병 소환"]),zt(mq,"SKILL_DESCS",["","하늘에서 번개를 연속으로 내려, 적들에게 강력한 대미지를 줍니다. 최대 25마리의 적을 즉사시킵니다.","거대한 검을 소환하여 모든 적에게 현재 체력의 80%에 해당하는 대미지를 주고, 멀리 날려버립니다. 체력이 20% 이하인 적은 일정 확률로 즉사합니다.","하늘의 검을 소환하여, 모든 적을 일정시간동안 기절시킵니다. 최대 10마리의 적을 즉사시키고, 나머지 적들에게 현재 체력의 60%에 해당하는 대미지를 줍니다.","성을 치유하고, 쓰러진 영웅을 부활시키며, 살아있는 영웅의 체력을 회복시킵니다. 모든 아군에게 물리 또는 마법 보호막을 부여하고, 영웅의 공격력, 공속, 이속을 일정시간 크게 증가시킵니다.","천사를 소환하여 모든 아군과 성의 체력을 최대로 회복시키고, 일정시간동안 강력한 보호막을 부여합니다.","많은 수의 총병을 소환하여 일정시간 성을 방어합니다"]);
- let wq=mq;
- const vq=class{
- constructor(t,i){
- zt(this,"start",0),zt(this,"end",0),this.start=t,this.end=i}
- }
- ;
- Kt(vq,"AniFrame");
- let bq=vq;
- var yq=(t=>(t.MagicalHitEffect="MagicalHitEffect",t.PhysicalHitEffect="PhysicalHitEffect",t.CriticalEffect="CriticalEffect",t.MissEffect="MissEffect",t.BlockEffect="BlockEffect",t.EvadeEffect="EvadeEffect",t.AkEffect="AkEffect",t.HukEffect="HukEffect",t.PakEffect="PakEffect",t.YapEffect="YapEffect",t.StunImmuneEffect="StunImmuneEffect",t.FreezeImmuneEffect="FreezeImmuneEffect",t.KnockbackImmuneEffect="KnockbackImmuneEffect",t.MagicalImmuneEffect="MagicalImmuneEffect",t.PhysicalImmuneEffect="PhysicalImmuneEffect",t.HumanSkillEffect="HumanSkillEffect",t.ElfSkillEffect="ElfSkillEffect",t.UndeadSkillEffect="UndeadSkillEffect",t.OrcSkillEffect="OrcSkillEffect",t.CurseEffect="CurseEffect",t.PowerShieldEffect="PowerShieldEffect",t.PhysicalShieldEffect="PhysicalShieldEffect",t.MagicalShieldEffect="MagicalShieldEffect",t.SilenceEffect="SilenceEffect",t.FreezeEffectL="FreezeEffectL",t.FreezeEffectM="FreezeEffectM",t.FreezeEffectS="FreezeEffectS",t.StunEffect="StunEffect",t.PoisonGreenEffect="PoisonGreenEffect",t.DarkArcherSkillEffect1="DarkArcherSkillEffect1",t.OrcIceExplodeEffect="OrcIceExplodeEffect",t.DeathHandSkillEffect1="DeathHandSkillEffect1",t.BomberBigBombExplode1="BomberBigBombExplode1",t.BomberSmallBombExplode1="BomberSmallBombExplode1",t.BlackMageBallExplode1="BlackMageBallExplode1",t.OrcHunterEvadeBuff="OrcHunterEvadeBuff",t.AggroEffect="AggroEffect",t.PriestLightEffect="PriestLightEffect",t.PriestStartEffect="PriestStartEffect",t.PriestShieldEffect="PriestShieldEffect",t.FairyWingEffect="FairyWingEffect",t.BindingEffect="BindingEffect",t.RockExplode="RockExplode",t.Smoke="Smoke",t.EvolEffect="EvolEffect",t.EvolEffect2="EvolEffect2",t.CastleFire1="CastleFire1",t.CastleFire2="CastleFire2",t.StoneEffect1="StoneEffect1",t.FireBallExplode="FireBallExplode",t.PilotMissileSmoke1="PilotMissileSmoke1",t.FireExplode="FireExplode",t.AntRockExplode="AntRockExplode",t.IceExplode2="IceExplode2",t.HealYellow="HealYellow",t.ElectricEffect="ElectricEffect",t.RoboExplode="RoboExplode",t.SuccubusLove="SuccubusLove",t.SuccubusEffect1="SuccubusEffect1",t.FallInLoveEffect="FallInLoveEffect",t.Accelerate="Accelerate",t.ElfGlowing1="ElfGlowing1",t.ElfMagicCircle1="ElfMagicCircle1",t.ElfExplodeEffect1="ElfExplodeEffect1",t.ElfBindEffect1="ElfBindEffect1",t.AbyssLightning1="AbyssLightning1",t.AbyssSkillExplosion1="AbyssSkillExplosion1",t.JudegmentMarkEffect1="JudegmentMarkEffect1",t.UndeadLightningExplosion1="UndeadLightningExplosion1",t.FireExplosion1="FireExplosion1",t.FireExplosion2="FireExplosion2",t.AladinGenie1="AladinGenie1",t.DruidVine1="DruidVine1",t.CrowExplosion1="CrowExplosion1",t.BladeMasterAfterImage="BladeMasterAfterImage",t.PoisonExplodeEffect="PoisonExplodeEffect",t))(yq||{
- }
- );
- const _q=class extends Be{
- constructor(t=""){
- super(),zt(this,"effectType"),zt(this,"className",yq.MagicalHitEffect),zt(this,"sp",null),zt(this,"loop",!0),zt(this,"_textureName"),zt(this,"_sheetName","Game"),zt(this,"owner",null),zt(this,"textures"),zt(this,"centerPoint",new mi(-1,-1)),zt(this,"orgScale",1),zt(this,"currentFrame",0),zt(this,"endFrame",10),zt(this,"count",0),zt(this,"incFrame",.5),zt(this,"holdLastFrame",!1),zt(this,"holdLastFrameOffset",1),zt(this,"removed",!1),zt(this,"battleFrameController"),this._textureName=t||"BaseEffect",this.effectType=Symbol(t),this.battleFrameController=WG.getInstance(),this.eventMode="none"}
- getTextureName(){
- return this._textureName}
- getSheetName(){
- return this._sheetName}
- setBattleController(t){
- }
- async createUI(){
- if(!ZA.hasSheet(this._sheetName)){
- const t="ktx2";
- await ZA.generateTexture(this._sheetName,t,!1)}
- this.textures=ZA.getTextures(this._sheetName,this._textureName),this.sp=new jf(this.textures),this.addChild(this.sp),this.scale.set(this.orgScale),this.endFrame=this.textures.length}
- start(t){
- this.count=t,this.currentFrame=0,this.removed=!1,this.battleFrameController&&this.battleFrameController.add(this.onEnter,this)}
- execute(){
- this.removed||this.onEnter()}
- onEnter(){
- var t,i;
- if(this.holdLastFrame){
- const i=Math.max(0,this.endFrame-this.holdLastFrameOffset);
- if(this.currentFrame>=i)return this.currentFrame=i,null==(t=this.sp)||t.gotoAndStop(Math.floor(this.currentFrame)),void(this.count--<0&&this.remove())}
- if(this.currentFrame+=this.incFrame,this.currentFrame>=this.endFrame)if(this.loop)this.currentFrame=0;
- else{
- if(!this.holdLastFrame)return void this.remove();
- this.currentFrame=Math.max(0,this.endFrame-this.holdLastFrameOffset)}
- null==(i=this.sp)||i.gotoAndStop(Math.floor(this.currentFrame)),this.count--<0&&this.remove()}
- remove(){
- var t;
- if(this.removed=!0,this.removeAllListeners(),this.removeFromParent(),this.battleFrameController&&this.battleFrameController.remove(this.onEnter,this),mJ.addToRecycleList(this),null!=this.owner){
- const i=null==(t=this.owner.effectList)?void 0:t.indexOf(this);
- null!=i&&i>=0&&this.owner.effectList.splice(i,1),this.owner=null}
- }
- setDuration(t){
- this.count=t}
- }
- ;
- Kt(_q,"BaseEffect"),zt(_q,"TYPE_SYMBOL",Symbol("EffectType"));
- let Mq=_q;
- const Eq=class extends Mq{
- constructor(){
- super(yq.BindingEffect),zt(this,"grapEndFrame",59),zt(this,"endEffectFrame",10*this.incFrame),this.centerPoint.y=0,this.orgScale=1}
- onEnter(){
- var t;
- this.currentFrame+=this.incFrame,this.count>this.endEffectFrame&&this.currentFrame>=this.grapEndFrame&&(this.currentFrame=12),null==(t=this.sp)||t.gotoAndStop(Math.floor(this.currentFrame)),this.count--<0&&this.remove()}
- }
- ;
- Kt(Eq,"BindingEffect");
- let Aq=Eq;
- const Sq=class extends Mq{
- constructor(){
- super(yq.CurseEffect),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(Sq,"CurseEffect");
- let Tq=Sq;
- const Cq=class extends Mq{
- constructor(){
- super(yq.MagicalHitEffect),this.loop=!1,this.orgScale=1.3,this.incFrame=1}
- }
- ;
- Kt(Cq,"MagicalHitEffect");
- let kq=Cq;
- const Oq=class extends Mq{
- constructor(){
- super(yq.PhysicalHitEffect),this.loop=!1,this.incFrame=1,this.orgScale=1.3}
- }
- ;
- Kt(Oq,"PhysicalHitEffect");
- let Iq=Oq;
- const xq=class extends Mq{
- constructor(){
- super(yq.RockExplode),this.loop=!1,this.orgScale=1.3,this.incFrame=1,this._sheetName="KingSlime"}
- }
- ;
- Kt(xq,"RockExplode");
- let Nq=xq;
- const Pq=class extends Mq{
- constructor(){
- super(yq.Smoke),this.loop=!1,this.orgScale=1.3,this.incFrame=1,this._sheetName="DarkHermit"}
- }
- ;
- Kt(Pq,"Smoke");
- let Rq=Pq;
- const Dq=class extends Mq{
- constructor(){
- super(yq.MagicalShieldEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(Dq,"MagicalShieldEffect");
- let Lq=Dq;
- const Gq=class extends Mq{
- constructor(){
- super(yq.PhysicalShieldEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(Gq,"PhysicalShieldEffect");
- let Bq=Gq;
- const Uq=class extends Mq{
- constructor(){
- super(yq.PowerShieldEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(Uq,"PowerShieldEffect");
- let Fq=Uq;
- const Hq=class extends Mq{
- constructor(){
- super(yq.SilenceEffect),this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(Hq,"SilenceEffect");
- let Wq=Hq;
- const jq=class extends Mq{
- constructor(){
- super(yq.ElfSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
- }
- ;
- Kt(jq,"ElfSkillEffect");
- let $q=jq;
- const Vq=class extends Mq{
- constructor(){
- super(yq.HumanSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
- }
- ;
- Kt(Vq,"HumanSkillEffect");
- let Kq=Vq;
- const zq=class extends Mq{
- constructor(){
- super(yq.OrcSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
- }
- ;
- Kt(zq,"OrcSkillEffect");
- let qq=zq;
- const Xq=class extends Mq{
- constructor(){
- super(yq.UndeadSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
- }
- ;
- Kt(Xq,"UndeadSkillEffect");
- let Yq=Xq;
- const Jq=class extends Mq{
- constructor(t=""){
- super(t),zt(this,"vx",0),zt(this,"vy",-1),zt(this,"cnt",0),this.loop=!1}
- showAt(t,i,s){
- this.x=t,this.y=i,this.rotation=s,this.alpha=0,this.vx=2*Math.cos(s-.5*Math.PI),this.vy=2*Math.sin(s-.5*Math.PI),this.currentFrame=0,WG.getInstance().add(this.onEnter,this)}
- onEnter(){
- this.currentFrame<10&&(this.alpha+=.1,this.x+=this.vx,this.y+=this.vy),++this.currentFrame>25&&this.remove()}
- }
- ;
- Kt(Jq,"BaseTextEffect");
- let Qq=Jq;
- const Zq=class extends Qq{
- constructor(){
- super(yq.AkEffect)}
- }
- ;
- Kt(Zq,"AkEffect");
- let tX=Zq;
- const iX=class extends Qq{
- constructor(){
- super(yq.BlockEffect)}
- }
- ;
- Kt(iX,"BlockEffect");
- let sX=iX;
- const eX=class extends Qq{
- constructor(){
- super(yq.CriticalEffect)}
- }
- ;
- Kt(eX,"CriticalEffect");
- let nX=eX;
- const hX=class extends Qq{
- constructor(){
- super(yq.EvadeEffect)}
- }
- ;
- Kt(hX,"EvadeEffect");
- let rX=hX;
- const oX=class extends Qq{
- constructor(){
- super(yq.FreezeImmuneEffect)}
- }
- ;
- Kt(oX,"FreezeImmuneEffect");
- let aX=oX;
- const cX=class extends Qq{
- constructor(){
- super(yq.HukEffect)}
- }
- ;
- Kt(cX,"HukEffect");
- let lX=cX;
- const uX=class extends Qq{
- constructor(){
- super(yq.KnockbackImmuneEffect)}
- }
- ;
- Kt(uX,"KnockBackImmuneEffect");
- let dX=uX;
- const fX=class extends Qq{
- constructor(){
- super(yq.MagicalImmuneEffect)}
- }
- ;
- Kt(fX,"MagicalImmuneEffect");
- let pX=fX;
- const gX=class extends Qq{
- constructor(){
- super(yq.MissEffect)}
- }
- ;
- Kt(gX,"MissEffect");
- let mX=gX;
- const wX=class extends Qq{
- constructor(){
- super(yq.PakEffect)}
- }
- ;
- Kt(wX,"PakEffect");
- let vX=wX;
- const bX=class extends Qq{
- constructor(){
- super(yq.PhysicalImmuneEffect)}
- }
- ;
- Kt(bX,"PhysicalImmuneEffect");
- let yX=bX;
- const _X=class extends Qq{
- constructor(){
- super(yq.StunImmuneEffect)}
- }
- ;
- Kt(_X,"StunImmuneEffect");
- let MX=_X;
- const EX=class extends Qq{
- constructor(){
- super(yq.YapEffect)}
- }
- ;
- Kt(EX,"YapEffect");
- let AX=EX;
- const SX=class extends Mq{
- constructor(){
- super(yq.DarkArcherSkillEffect1),this.orgScale=1.2,this.loop=!0}
- }
- ;
- Kt(SX,"DarkArcherSkillEffect1");
- let TX=SX;
- const CX=class extends Mq{
- constructor(){
- super(yq.FairyWingEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(CX,"FairyWingEffect");
- let kX=CX;
- const OX=class extends Mq{
- constructor(){
- super(yq.PriestLightEffect),this._sheetName="HeroSkillEffect",this.loop=!1,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(OX,"PriestLightEffect");
- let IX=OX;
- const xX=class extends Mq{
- constructor(){
- super(yq.PriestShieldEffect),zt(this,"current",0),this.loop=!0,this.orgScale=1,this.incFrame=1}
- start(t){
- super.start(t),this.current=0,this.alpha=0}
- onEnter(){
- var t;
- this.current++,this.currentFrame+=this.incFrame,this.currentFrame>=this.endFrame&&(this.currentFrame=0),null==(t=this.sp)||t.gotoAndStop(Math.floor(this.currentFrame)),this.current<15?this.alpha+=.06:this.alpha=.85+.15*Math.sin(.2*this.current),this.count--<0&&this.remove()}
- }
- ;
- Kt(xX,"PriestShieldEffect");
- let NX=xX;
- const PX=class extends Mq{
- constructor(){
- super(yq.PriestStartEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
- remove(){
- null!=this.owner&&this.owner.showPriestShield(120),super.remove()}
- }
- ;
- Kt(PX,"PriestStartEffect");
- let RX=PX;
- const DX=class extends Mq{
- constructor(){
- super(yq.EvolEffect),this._sheetName="Game",this.loop=!0,this.orgScale=1.1,this.incFrame=.6}
- }
- ;
- Kt(DX,"EvolEffect");
- let LX=DX;
- const GX=class extends Mq{
- constructor(){
- super(yq.EvolEffect2),this._sheetName="Game",this.loop=!0,this.orgScale=1.1,this.incFrame=.6}
- }
- ;
- Kt(GX,"EvolEffect2");
- let BX=GX;
- const UX=class extends Mq{
- constructor(){
- super(yq.OrcIceExplodeEffect),this._sheetName="HeroSkillEffect",this.loop=!1,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(UX,"OrcIceExplodeEffect");
- let FX=UX;
- const HX=class extends Mq{
- constructor(){
- super(yq.FreezeEffectL),zt(this,"endDelay",0),this.orgScale=1.9,this.loop=!0}
- start(t){
- this.endDelay=20,this.alpha=1,Math.random()<.5?this.scale.x=Math.abs(this.scale.x):this.scale.x=-1*Math.abs(this.scale.x),super.start(t)}
- onEnter(){
- super.onEnter(),this.count<this.endDelay&&(this.alpha-=.05)}
- setDuration(t){
- this.count=t,this.alpha=1}
- }
- ;
- Kt(HX,"FreezeEffectL");
- let WX=HX;
- const jX=class extends Mq{
- constructor(){
- super(yq.FreezeEffectM),zt(this,"endDelay",0),this.orgScale=1.9,this.loop=!0}
- start(t){
- this.endDelay=20,this.alpha=1,Math.random()<.5?this.scale.x=Math.abs(this.scale.x):this.scale.x=-1*Math.abs(this.scale.x),super.start(t)}
- onEnter(){
- super.onEnter(),this.count<this.endDelay&&(this.alpha-=.05)}
- setDuration(t){
- this.count=t,this.alpha=1}
- }
- ;
- Kt(jX,"FreezeEffectM");
- let $X=jX;
- const VX=class extends Mq{
- constructor(){
- super(yq.FreezeEffectS),zt(this,"endDelay",0),this.orgScale=1.9,this.loop=!0}
- start(t){
- this.endDelay=20,this.alpha=1,Math.random()<.5?this.scale.x=Math.abs(this.scale.x):this.scale.x=-1*Math.abs(this.scale.x),super.start(t)}
- onEnter(){
- super.onEnter(),this.count<this.endDelay&&(this.alpha-=.05)}
- setDuration(t){
- this.count=t,this.alpha=1}
- }
- ;
- Kt(VX,"FreezeEffectS");
- let KX=VX;
- const zX=class extends Mq{
- constructor(){
- super(yq.StunEffect),this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(zX,"StunEffect");
- let qX=zX;
- const XX=class extends Mq{
- constructor(){
- super(yq.CastleFire1)}
- }
- ;
- Kt(XX,"CastleFire1");
- let YX=XX;
- const JX=class extends Mq{
- constructor(){
- super(yq.CastleFire2)}
- }
- ;
- Kt(JX,"CastleFire2");
- let QX=JX;
- const ZX=class extends Mq{
- constructor(){
- super(yq.StoneEffect1),this._sheetName="Game1",this.loop=!1,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(ZX,"StoneEffect1");
- let tY=ZX;
- const iY=class extends Mq{
- constructor(){
- super(yq.DeathHandSkillEffect1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(iY,"DeathHandSkillEffect1");
- let sY=iY;
- const eY=class extends Mq{
- constructor(){
- super(yq.BomberSmallBombExplode1),this._sheetName="HeroSkillEffect",this.orgScale=1.5,this.loop=!1}
- }
- ;
- Kt(eY,"BomberSmallBombExplode1");
- let nY=eY;
- const hY=class extends Mq{
- constructor(){
- super(yq.BlackMageBallExplode1),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(hY,"BlackMageBallExplode1");
- let rY=hY;
- const oY=class extends Mq{
- constructor(){
- super(yq.FireBallExplode),this.loop=!1,this.orgScale=3.8,this.incFrame=.8}
- }
- ;
- Kt(oY,"FireBallExplode");
- let aY=oY;
- const cY=class extends Mq{
- constructor(){
- super(yq.OrcHunterEvadeBuff),this._sheetName="HeroSkillEffect",this.loop=!0,this.orgScale=1,this.incFrame=1}
- }
- ;
- Kt(cY,"OrcHunterEvadeBuff");
- let lY=cY;
- const uY=class extends Mq{
- constructor(){
- super(yq.PoisonGreenEffect),this.loop=!0,this.orgScale=1,this.incFrame=.65}
- }
- ;
- Kt(uY,"PoisonGreenEffect");
- let dY=uY;
- const fY=class extends Mq{
- constructor(){
- super(yq.BomberBigBombExplode1),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!1,this.tint=0,this.incFrame=1.5}
- }
- ;
- Kt(fY,"BomberBigBombExplode1");
- let pY=fY;
- const gY=class extends Mq{
- constructor(){
- super(yq.AggroEffect),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(gY,"AggroEffect");
- let mY=gY;
- const wY=class extends Mq{
- constructor(){
- super(yq.PilotMissileSmoke1),zt(this,"life",0),zt(this,"maxLife",12),this.loop=!1,this.orgScale=1,this.incFrame=.5}
- }
- ;
- Kt(wY,"PilotMissileSmoke1");
- let vY=wY;
- const bY=class extends Mq{
- constructor(){
- super(yq.FireExplode),this.loop=!1,this.orgScale=2.5,this.incFrame=.3}
- }
- ;
- Kt(bY,"FireExplode");
- let yY=bY;
- const _Y=class extends Mq{
- constructor(){
- super(yq.AntRockExplode),this._sheetName="Game1",this.orgScale=2,this.loop=!1}
- }
- ;
- Kt(_Y,"AntRockExplode");
- let MY=_Y;
- const EY=class extends Mq{
- constructor(){
- super(yq.IceExplode2),this.loop=!1,this.orgScale=1.4,this.incFrame=.6,this._sheetName="Game1"}
- }
- ;
- Kt(EY,"IceExplode2");
- let AY=EY;
- const SY=class extends Mq{
- constructor(){
- super(yq.HealYellow),this.orgScale=1.3,this.loop=!1}
- }
- ;
- Kt(SY,"HealYellow");
- let TY=SY;
- const CY=class extends Mq{
- constructor(){
- super(yq.ElectricEffect),this.orgScale=1.2}
- }
- ;
- Kt(CY,"ElectricEffect");
- let kY=CY;
- const OY=class extends Mq{
- constructor(){
- super(yq.BomberBigBombExplode1),this._sheetName="HeroSkillEffect",this.orgScale=.9,this.loop=!1,this.tint=13408512}
- }
- ;
- Kt(OY,"RoboExplode");
- let IY=OY;
- const xY=class extends Mq{
- constructor(){
- super(yq.SuccubusLove),zt(this,"dir",0),zt(this,"numDelay",0),zt(this,"vy",0),zt(this,"vx",0),zt(this,"ground",300),this._sheetName="Game1",this.orgScale=1}
- start(t){
- this.alpha=1,this.vx=24*Math.random()-12+7*this.dir,this.vy=-3-5*Math.random(),this.rotation=.05*this.vx,super.start(t)}
- onEnter(){
- if(this.owner)if(this.vy+=1,this.y+=this.vy,this.y>this.ground+10){
- if(this.owner){
- let t,i=this.owner.enemyList.length;
- for(let s=0;
- s<i;
- s++)if(t=this.owner.enemyList[s],Math.abs(t.x-this.x)<40&&Math.abs(t.y-this.y)<40){
- "M"==t.sex&&t.fallInLove(this.numDelay);
- break}
- }
- this.remove()}
- else this.x+=this.vx,this.alpha-=.015;
- else this.remove()}
- }
- ;
- Kt(xY,"SuccubusLove");
- let NY=xY;
- const PY=class extends Mq{
- constructor(){
- super(yq.SuccubusEffect1),this._sheetName="HeroSkillEffect",this.orgScale=1}
- onEnter(){
- this.sp&&(this.sp.rotation+=.1),this.count--<0&&this.remove()}
- }
- ;
- Kt(PY,"SuccubusEffect1");
- let RY=PY;
- const DY=class extends Mq{
- constructor(){
- super(yq.FallInLoveEffect),this._sheetName="HeroSkillEffect"}
- onEnter(){
- this.sp&&this.sp.scale.set(.9),this.scale.x=.5*Math.cos(.1*this.count)+.5,this.count--<0&&this.remove()}
- }
- ;
- Kt(DY,"FallInLoveEffect");
- let LY=DY;
- const GY=class extends Mq{
- constructor(){
- super(yq.Accelerate),this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(GY,"Accelerate");
- let BY=GY;
- const UY=class extends Mq{
- constructor(){
- super(yq.ElfGlowing1),this._sheetName="Game1",this.loop=!1,this.orgScale=2.2,this.incFrame=.8}
- }
- ;
- Kt(UY,"ElfGlowing1");
- let FY=UY;
- const HY=class extends Mq{
- constructor(){
- super(yq.ElfMagicCircle1),this._sheetName="Game1",this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(HY,"ElfMagicCircle1");
- let WY=HY;
- const jY=class extends Mq{
- constructor(){
- super(yq.ElfBindEffect1),this._sheetName="Game1",this.orgScale=1.2,this.loop=!0}
- }
- ;
- Kt(jY,"ElfBindEffect1");
- let $Y=jY;
- const VY=class extends Mq{
- constructor(){
- super(yq.ElfExplodeEffect1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(VY,"ElfExplodeEffect1");
- let KY=VY;
- const zY=class extends Mq{
- constructor(){
- super(yq.AbyssLightning1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(zY,"AbyssLightning1");
- let qY=zY;
- const XY=class extends Mq{
- constructor(){
- super(yq.AbyssSkillExplosion1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(XY,"AbyssSkillExplosion1");
- let YY=XY;
- const JY=class extends Mq{
- constructor(){
- super(yq.JudegmentMarkEffect1),this._sheetName="Game1",this.orgScale=1,this.loop=!0}
- }
- ;
- Kt(JY,"JudegmentMarkEffect1");
- let QY=JY;
- const ZY=class extends Mq{
- constructor(){
- super(yq.UndeadLightningExplosion1),this._sheetName="Game1",this.loop=!1,this.orgScale=1.8,this.incFrame=.4}
- }
- ;
- Kt(ZY,"UndeadLightningExplosion1");
- let tJ=ZY;
- const iJ=class extends Mq{
- constructor(){
- super(yq.FireExplosion1),this._sheetName="Game1",this.orgScale=2,this.loop=!1}
- }
- ;
- Kt(iJ,"FireExplosion1");
- let sJ=iJ;
- const eJ=class extends Mq{
- constructor(){
- super(yq.FireExplosion2),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(eJ,"FireExplosion2");
- let nJ=eJ;
- const hJ=class extends Mq{
- constructor(){
- super(yq.AladinGenie1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(hJ,"AladinGenie1");
- let rJ=hJ;
- const oJ=class extends Mq{
- constructor(){
- super(yq.DruidVine1),this._sheetName="Game1",this.orgScale=1.5,this.loop=!1,this.holdLastFrame=!0,this.holdLastFrameOffset=4}
- }
- ;
- Kt(oJ,"DruidVine1");
- let aJ=oJ;
- const cJ=class extends Mq{
- constructor(){
- super(yq.CrowExplosion1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
- }
- ;
- Kt(cJ,"CrowExplosion1");
- let lJ=cJ;
- const uJ=class extends Mq{
- constructor(){
- super(yq.BladeMasterAfterImage),zt(this,"dynamicSp",null),zt(this,"life",0),zt(this,"maxLife",0),zt(this,"initAlpha",1),zt(this,"fromX",0),zt(this,"fromY",0),zt(this,"toX",null),zt(this,"toY",null),this.loop=!1,this.holdLastFrame=!1}
- async createUI(){
- this.dynamicSp||(this.dynamicSp=new We,this.dynamicSp.anchor.set(.5,1),this.addChild(this.dynamicSp))}
- setupAfterImage(t,i,s,e,n,h,r,o,a,c,l=null,u=null){
- this.dynamicSp||(this.dynamicSp=new We,this.addChild(this.dynamicSp)),this.dynamicSp.texture=t,this.dynamicSp.anchor.set(i,s),this.dynamicSp.scale.set(h,r),this.dynamicSp.rotation=o,this.x=e,this.y=n,this.scale.set(1),this.alpha=c,this.initAlpha=c,this.life=a,this.maxLife=a,this.fromX=e,this.fromY=n,this.toX=l,this.toY=u}
- onEnter(){
- if(this.removed)return;
- if(this.life--,this.life<=0)return void this.remove();
- const t=1-this.life/this.maxLife;
- this.alpha=(1-t)*this.initAlpha,null!==this.toX&&null!==this.toY&&(this.x=this.fromX+(this.toX-this.fromX)*t,this.y=this.fromY+(this.toY-this.fromY)*t)}
- }
- ;
- Kt(uJ,"BladeMasterAfterImage");
- let dJ=uJ;
- const fJ=class extends Mq{
- constructor(){
- super(yq.PoisonExplodeEffect),this._sheetName="RaidBattle",this.orgScale=1,this.loop=!1,this.incFrame=1.2}
- }
- ;
- Kt(fJ,"PoisonExplodeEffect");
- let pJ=fJ;
- const gJ=class{
- static getEffect(t){
- const i=t,s=this.classMap[i];
- if(!s)return new Mq(t);
- const e=i;
- let n;
- return this.effectPool[e]||(this.effectPool[e]=[]),this.effectPool[e].length>0?n=this.effectPool[e].pop():(n=new s,n.className=e,n.createUI()),n.owner=null,this.list.push(n),n}
- static addToRecycleList(t){
- const i=this.list.indexOf(t);
- -1!==i&&this.list.splice(i,1);
- const s=t.className;
- this.effectPool[s]||(this.effectPool[s]=[]),this.effectPool[s].includes(t)||this.effectPool[s].push(t)}
- static getActiveEffects(){
- return[...this.list]}
- static clear(){
- this.effectPool={
- }
- ,this.list=[]}
- }
- ;
- Kt(gJ,"EffectFactory"),zt(gJ,"effectPool",{
- }
- ),zt(gJ,"classMap",{
- [yq.MagicalHitEffect]:kq,[yq.PhysicalHitEffect]:Iq,[yq.CriticalEffect]:nX,[yq.MissEffect]:mX,[yq.BlockEffect]:sX,[yq.EvadeEffect]:rX,[yq.AkEffect]:tX,[yq.HukEffect]:lX,[yq.PakEffect]:vX,[yq.YapEffect]:AX,[yq.StunImmuneEffect]:MX,[yq.FreezeImmuneEffect]:aX,[yq.KnockbackImmuneEffect]:dX,[yq.MagicalImmuneEffect]:pX,[yq.PhysicalImmuneEffect]:yX,[yq.HumanSkillEffect]:Kq,[yq.ElfSkillEffect]:$q,[yq.UndeadSkillEffect]:Yq,[yq.OrcSkillEffect]:qq,[yq.CurseEffect]:Tq,[yq.PowerShieldEffect]:Fq,[yq.PhysicalShieldEffect]:Bq,[yq.MagicalShieldEffect]:Lq,[yq.SilenceEffect]:Wq,[yq.DarkArcherSkillEffect1]:TX,[yq.PriestLightEffect]:IX,[yq.PriestStartEffect]:RX,[yq.PriestShieldEffect]:NX,[yq.FairyWingEffect]:kX,[yq.BindingEffect]:Aq,[yq.RockExplode]:Nq,[yq.Smoke]:Rq,[yq.EvolEffect]:LX,[yq.EvolEffect2]:BX,[yq.OrcIceExplodeEffect]:FX,[yq.FreezeEffectL]:WX,[yq.FreezeEffectM]:$X,[yq.FreezeEffectS]:KX,[yq.StunEffect]:qX,[yq.CastleFire1]:YX,[yq.CastleFire2]:QX,[yq.StoneEffect1]:tY,[yq.DeathHandSkillEffect1]:sY,[yq.BomberBigBombExplode1]:pY,[yq.BomberSmallBombExplode1]:nY,[yq.BlackMageBallExplode1]:rY,[yq.FireBallExplode]:aY,[yq.PoisonGreenEffect]:dY,[yq.OrcHunterEvadeBuff]:lY,[yq.AggroEffect]:mY,[yq.PilotMissileSmoke1]:vY,[yq.FireExplode]:yY,[yq.AntRockExplode]:MY,[yq.IceExplode2]:AY,[yq.HealYellow]:TY,[yq.ElectricEffect]:kY,[yq.RoboExplode]:IY,[yq.SuccubusLove]:NY,[yq.SuccubusEffect1]:RY,[yq.FallInLoveEffect]:LY,[yq.Accelerate]:BY,[yq.ElfGlowing1]:FY,[yq.ElfMagicCircle1]:WY,[yq.ElfExplodeEffect1]:KY,[yq.ElfBindEffect1]:$Y,[yq.AbyssLightning1]:qY,[yq.AbyssSkillExplosion1]:YY,[yq.JudegmentMarkEffect1]:QY,[yq.UndeadLightningExplosion1]:tJ,[yq.FireExplosion1]:sJ,[yq.FireExplosion2]:nJ,[yq.AladinGenie1]:rJ,[yq.DruidVine1]:aJ,[yq.CrowExplosion1]:lJ,[yq.BladeMasterAfterImage]:dJ,[yq.PoisonExplodeEffect]:pJ}
- ),zt(gJ,"list",[]);
- let mJ=gJ;
- var wJ=(t=>(t.NormalArrow="NormalArrow",t.EnergyBall="EnergyBall",t.SpeedArrow="SpeedArrow",t.Bullet1="Bullet1",t.OrcSpearmanSpear1="OrcSpearmanSpear1",t.OrcIceMageFire1="OrcIceMageFire1",t.PoisonArcherArrow1="PoisonArcherArrow1",t.FireBirdBall1="FireBirdBall1",t.GreenEagleBall1="GreenEagleBall1",t.BlackMageBall1="BlackMageBall1",t.BlackMageDarkBall1="BlackMageDarkBall1",t.DarkMageBall1="DarkMageBall1",t.DarkMageSkillBall1="DarkMageSkillBall1",t.GreenEnergyBall="GreenEnergyBall",t.YellowEnergyBall="YellowEnergyBall",t.FairyMusicNote="FairyMusicNote",t.GhostBall1="GhostBall1",t.DarkArcherArrow1="DarkArcherArrow1",t.OrcWingBall1="OrcWingBall1",t.OrcAxeBall1="OrcAxeBall1",t.Twist="Twist",t.FlowerBullet="FlowerBullet",t.Rock="Rock",t.DarkHermitMissile="DarkHermitMissile",t.Pearl="Pearl",t.UniArrow="UniArrow",t.PowerArrow="PowerArrow",t.OrcBlizzardMageRain1="OrcBlizzardMageRain1",t.FireMagicBall1="FireMagicBall1",t.FireMageBird1="FireMageBird1",t.BomberSmallBomb1="BomberSmallBomb1",t.BomberBigBomb1="BomberBigBomb1",t.IceFlake="IceFlake",t.PoisonArcherArrowSkill1="PoisonArcherArrowSkill1",t.OrcIceMageFireSkill1="OrcIceMageFireSkill1",t.PilotMissile1="PilotMissile1",t.FireBullet="FireBullet",t.AntRock1="AntRock1",t.SpeedArrow2="SpeedArrow2",t.MoleFire="MoleFire",t.OrcRapterRiderSpear1="OrcRapterRiderSpear1",t.WyvernRiderThrowingKnife1="WyvernRiderThrowingKnife1",t.WyvernRiderThrowingKnifeS1="WyvernRiderThrowingKnifeS1",t.SuccubusBlade1="SuccubusBlade1",t.DarkChain1="DarkChain1",t.DruidTangle1="DruidTangle1",t.DruidDrill1="DruidDrill1",t.TigerRiderArrow1="TigerRiderArrow1",t.GriffinSpear1="GriffinSpear1",t.GriffinSuperSpear1="GriffinSuperSpear1",t.SteamFire1="SteamFire1",t.SteamMissile1="SteamMissile1",t.SylphidTornado1="SylphidTornado1",t.SylphidShuriken1="SylphidShuriken1",t.AladinCoin1="AladinCoin1",t.BladeWave1="BladeWave1",t.SpinBlade="SpinBlade",t.CrowKnightBullet1="CrowKnightBullet1",t.CrowCompanion1="CrowCompanion1",t.CrowGuidedBall1="CrowGuidedBall1",t.CrowFeatherShot1="CrowFeatherShot1",t.ScorpionPoisonBullet="ScorpionPoisonBullet",t.ScorpionPoisonArea="ScorpionPoisonArea",t.HarpyFeather="HarpyFeather",t.HarpyTornado="HarpyTornado",t.GolemStone="GolemStone",t.BerialLightning="BerialLightning",t.BerialLightningArea="BerialLightningArea",t.BerialFire="BerialFire",t.SummonDragon="SummonDragon",t))(wJ||{
- }
- );
- const vJ=class t extends Be{
- constructor(){
- super(),zt(this,"className",wJ.NormalArrow),zt(this,"owner",null),zt(this,"target",null),zt(this,"bounceCount",0),zt(this,"bounceRange",200),zt(this,"prevTarget",null),zt(this,"speed",10),zt(this,"vx",0),zt(this,"vy",0),zt(this,"g",0),zt(this,"orientToPath",!0),zt(this,"vr",0),zt(this,"t",0),zt(this,"T",0),zt(this,"minT",5),zt(this,"maxT",60),zt(this,"offsetX",0),zt(this,"offsetY",0),zt(this,"sp",null),zt(this,"textures",[]),zt(this,"textureName",""),zt(this,"sheetName","Game"),zt(this,"isActive",!1),zt(this,"removed",!1),zt(this,"battleController",null),zt(this,"damagePercent",1),zt(this,"flyEnd",0),zt(this,"incFrame",1),zt(this,"currentFrame",0),zt(this,"delay",0),zt(this,"weaponScale",1),zt(this,"hitClassName",""),zt(this,"resolvedHitClassName",""),this.initializeTextureName(),this.initializeData(),this.initialize(),this.generateSprite(),this.eventMode="none"}
- get random(){
- return(this.battleController||zii.getInstance()).random}
- initialize(){
- }
- initializeData(){
- }
- initializeTextureName(){
- }
- setBattleController(t){
- this.battleController=t}
- generateSprite(){
- ""===this.textureName&&(this.textureName=this.className),this.textures=ZA.getTextures(this.sheetName,this.textureName),this.textures.length>0&&(this.sp=new We(this.textures[0]),this.addChild(this.sp),this.sp.scale.set(this.weaponScale))}
- setData(t=1){
- this.damagePercent=t,this.alpha=1,this.currentFrame=0}
- play(){
- this.target&&(this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||this.getDefaultHitEffect(),this.isActive||(this.prevTarget=null),this.calculateTrajectory(),this.battleController?this.battleController.addWeapon(this):WG.getInstance().add(this.execute,this))}
- calculateTrajectory(){
- if(!this.target)return;
- const i=this.target.getHitCenter();
- this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.8,this.offsetY=-this.target.hitHeight*(.1+.4*this.random.next());
- const s=i.x+this.offsetX,e=i.y+this.offsetY,n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
- if(this.T=Math.max(this.minT,Math.min(this.maxT,r/this.speed)),r>0){
- const i=r/t.MIN_SPEED;
- this.T>i&&(this.T=Math.max(this.minT,i))}
- 0===this.g?(this.vx=n/this.T,this.vy=h/this.T):(this.vx=n/this.T,this.vy=h/this.T-this.g*(this.T-1)*.5),this.t=0}
- execute(){
- if(this.isActive&&!this.removed)if(--this.delay>0)this.visible=!1;
- else{
- if(this.visible=!0,this.t++,this.t<this.T&&this.target&&!this.target.removed){
- const i=this.target.getHitCenter(),s=i.x+this.offsetX-this.x,e=i.y+this.offsetY-this.y,n=this.T-this.t;
- this.vx=s/n,this.vy=e/n-this.g*(n-1)*.5;
- const h=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
- if(h>0&&h<t.MIN_SPEED){
- const i=t.MIN_SPEED/h;
- this.vx*=i,this.vy*=i}
- }
- else if(!this.target||this.target.removed){
- const t=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
- if(t<9)if(t>0){
- const i=9/t;
- this.vx*=i,this.vy*=i}
- else this.vx=9}
- if(this.x+=this.vx,this.y+=this.vy,0!==this.g&&(this.vy+=this.g),this.orientToPath&&(this.rotation=Math.atan2(this.vy,this.vx)),0!=this.vr&&(this.rotation+=this.vr),this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.checkEarlyCollision()){
- if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter();
- this.x=t.x+this.offsetX,this.y=t.y+this.offsetY}
- this.onHit()}
- else{
- if(this.t>=this.T){
- if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter();
- return this.x=t.x+this.offsetX,this.y=t.y+this.offsetY,void this.onHit()}
- if(this.t>=this.T+30)return void this.remove()}
- (!this.target||this.target.removed||!this.target.isAlive)&&(this.x<-200||this.x>840||this.y<-200||this.y>840)&&this.remove()}
- }
- }
- checkEarlyCollision(){
- if(!this.target||this.target.removed)return!1;
- const t=this.target.getHitCenter(),i=Math.abs(t.x-this.x),s=Math.abs(t.y-this.y),e=.3*this.target.hitWidth,n=.3*this.target.hitHeight;
- return i<e&&s<n}
- onHit(){
- if(this.owner&&this.target){
- if(this.target.isAlive&&this.owner.doDamage(this.target,this.damagePercent,!0)&&(this.onHitMain(),this.showHitEffect(this.resolvedHitClassName)),this.bounceCount>0&&(this.bounceCount>=1||this.random.chance(this.bounceCount))){
- const t=this.findNextBounceTarget();
- if(t)return this.bounceCount--,this.prevTarget=this.target,this.target=t,this.damagePercent*=.7,this.calculateTrajectory(),this.t=0,void(this.isActive=!0)}
- this.remove()}
- else this.remove()}
- onHitMain(){
- }
- findNextBounceTarget(){
- if(!this.owner)return null;
- const t=(this.battleController||this.owner.battleController||zii.getInstance()).getNearbyUnits(this.x,this.y,this.owner.enemyList);
- for(const i of t)if(i.isAlive&&i!==this.prevTarget&&!i.isUntagetable&&Math.abs(i.x-this.x)+Math.abs(i.y-this.y)<this.bounceRange)return i;
- return null}
- showHitEffect(t){
- if(!t)return;
- if(null==this.target||this.target.removed)return;
- let i=mJ.getEffect(t);
- i.x=this.offsetX,i.y=this.offsetY,i.start(10),this.target.addChild(i),i.owner=this.target,-1===this.target.effectList.indexOf(i)&&this.target.effectList.push(i)}
- getDefaultHitEffect(){
- return this.owner&&this.owner.dmgType===nx.MAGICAL?yq.MagicalHitEffect:yq.PhysicalHitEffect}
- remove(){
- this.isActive=!1,this.removed=!0,this.visible=!1,this.parent&&this.parent.removeChild(this),this.battleController||WG.getInstance().remove(this.execute,this),s0.addToRecycleList(this)}
- stop(){
- this.isActive=!1}
- }
- ;
- Kt(vJ,"BaseWeapon"),zt(vJ,"MIN_SPEED",4);
- let bJ=vJ;
- const yJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.FlowerBullet,this.sheetName="OrcFlower"}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=1,this.incFrame=1}
- onHitMain(){
- null!=this.target&&this.random.chance(.05)&&this.target.stun(100)}
- }
- ;
- Kt(yJ,"FlowerBullet");
- let _J=yJ;
- const MJ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"aimDuration",15),zt(this,"aimTimer",0),zt(this,"launched",!1),zt(this,"accel",1.08)}
- initializeTextureName(){
- this.className=wJ.DarkHermitMissile,this.sheetName="DarkHermit",this.textureName="HermitMissile"}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.hitClassName="Smoke",this.g=0,this.speed=35,this.flyEnd=2,this.incFrame=.1,this.orientToPath=!0}
- play(){
- this.target&&(this.x=this.target.x+(120*this.random.next()-60),this.y=this.target.y-280-50*this.random.next(),this.aimTimer=8+this.random.nextInt(15),this.launched=!1,this.scale.set(.6),super.play())}
- execute(){
- if(!this.removed){
- if(!this.launched){
- if(this.target&&this.target.isAlive){
- const t=this.target.x-this.x,i=this.target.y-this.y;
- this.rotation=Math.atan2(i,t)}
- return this.aimTimer--,void(this.aimTimer<=0&&(this.launched=!0,this.scale.set(1),this.calculateTrajectory()))}
- this.vx*=this.accel,this.vy*=this.accel,super.execute()}
- }
- }
- ;
- Kt(MJ,"DarkHermitMissile");
- let EJ=MJ;
- const AJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.Rock,this.sheetName="KingSlime"}
- initializeData(){
- this.hitClassName="RockExplode",this.g=0,this.speed=14,this.flyEnd=1,this.incFrame=1,this.vr=.2}
- onHitMain(){
- null!=this.target&&this.random.chance(.15)&&this.target.stun(60)}
- }
- ;
- Kt(AJ,"Rock");
- let SJ=AJ;
- const TJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.EnergyBall,this.textureName=wJ.EnergyBall}
- initializeData(){
- this.scale.set(1),this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(t/s,i/s,10)}
- }
- ;
- Kt(TJ,"EnergyBall");
- let CJ=TJ;
- const kJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.FairyMusicNote,this.textureName=wJ.FairyMusicNote}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1,this.weaponScale=.6}
- }
- ;
- Kt(kJ,"FairyMusicNote");
- let OJ=kJ;
- const IJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.GreenEagleBall1,this.textureName=wJ.GreenEagleBall1,this.scale=1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=1,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(2*t/s,2*i/s,15),this.random.chance(.5)&&this.target.poison(40)}
- }
- ;
- Kt(IJ,"GreenEagleBall1");
- let xJ=IJ;
- const NJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.GreenEnergyBall,this.textureName=wJ.GreenEnergyBall,this.scale=1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=9,this.flyEnd=2,this.incFrame=1}
- }
- ;
- Kt(NJ,"GreenEnergyBall");
- let PJ=NJ;
- const RJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.NormalArrow,this.textureName=wJ.NormalArrow}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.1,this.speed=10,this.flyEnd=2,this.incFrame=1}
- }
- ;
- Kt(RJ,"NormalArrow");
- let DJ=RJ;
- const LJ=class extends bJ{
- initializeTextureName(){
- this.textureName="PoisonArcherArrow1"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.03,this.speed=9,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- this.target&&this.target.poison(50)}
- }
- ;
- Kt(LJ,"PoisonArcherArrow1");
- let GJ=LJ;
- const BJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.SpeedArrow,this.textureName=wJ.SpeedArrow}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=8,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(t/s,i/s,10)}
- }
- ;
- Kt(BJ,"SpeedArrow");
- let UJ=BJ;
- const FJ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"whirlCnt",0),zt(this,"whirlTotal",70)}
- initializeTextureName(){
- this.className=wJ.Twist,this.textureName=wJ.Twist}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=1,this.flyEnd=16,this.incFrame=1,this.whirlCnt=0,this.whirlTotal=70,this.scale=1.5}
- calculateTrajectory(){
- }
- execute(){
- this.removed||(this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],null==this.owner||null==this.target||this.target.removed||(this.target.isImmovable||(this.target.x=this.x,this.target.y=this.y),this.target.isAlive&&this.whirlCnt%10==0&&(this.target.isImmovable||this.target.binding(12,!1),this.whirlCnt%30==0&&this.owner.doDamage(this.target,this.damagePercent))),(this.x<-50||this.x>690||this.y<-50||this.y>690)&&this.remove(),++this.whirlCnt>this.whirlTotal&&this.remove())}
- }
- ;
- Kt(FJ,"Twist");
- let HJ=FJ;
- const WJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.YellowEnergyBall,this.textureName=wJ.YellowEnergyBall}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1,this.weaponScale=.6}
- }
- ;
- Kt(WJ,"YellowEnergyBall");
- let jJ=WJ;
- const $J=class extends bJ{
- initializeTextureName(){
- this.className=wJ.Bullet1,this.textureName=wJ.Bullet1,this.scale=.8}
- initializeData(){
- this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- this.target&&this.random.chance(.2)&&this.target.stun(50)}
- }
- ;
- Kt($J,"Bullet1");
- let VJ=$J;
- const KJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcAxeBall1,this.textureName=wJ.OrcAxeBall1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.01,this.speed=9,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1,this.vr=.3}
- }
- ;
- Kt(KJ,"OrcAxeBall1");
- let zJ=KJ;
- const qJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcIceMageFire1,this.textureName=wJ.OrcIceMageFire1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=.02,this.speed=12,this.flyEnd=7,this.incFrame=1}
- }
- ;
- Kt(qJ,"OrcIceMageFire1");
- let XJ=qJ;
- const YJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcSpearmanSpear1,this.textureName=wJ.OrcSpearmanSpear1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.5,this.speed=16,this.flyEnd=2,this.incFrame=1}
- }
- ;
- Kt(YJ,"OrcSpearmanSpear1");
- let JJ=YJ;
- const QJ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcWingBall1,this.textureName=wJ.OrcWingBall1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
- }
- ;
- Kt(QJ,"OrcWingBall1");
- let ZJ=QJ;
- const tQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.BlackMageBall1,this.textureName=wJ.BlackMageBall1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
- }
- ;
- Kt(tQ,"BlackMageBall1");
- let iQ=tQ;
- const sQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.DarkArcherArrow1,this.textureName=wJ.DarkArcherArrow1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=1,this.incFrame=1,this.scale.set(1,.5)}
- }
- ;
- Kt(sQ,"DarkArcherArrow1");
- let eQ=sQ;
- const nQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.DarkMageBall1,this.textureName=wJ.DarkMageBall1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=9,this.flyEnd=4,this.incFrame=1}
- }
- ;
- Kt(nQ,"DarkMageBall1");
- let hQ=nQ;
- const rQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.DarkMageSkillBall1,this.textureName=wJ.DarkMageSkillBall1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
- }
- ;
- Kt(rQ,"DarkMageSkillBall1");
- let oQ=rQ;
- const aQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.GhostBall1,this.textureName=wJ.GhostBall1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.scale=.7,this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
- }
- ;
- Kt(aQ,"GhostBall1");
- let cQ=aQ;
- const lQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.Pearl,this.sheetName="DarkHermit"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=18,this.flyEnd=1,this.incFrame=1,this.vr=.2}
- onHitMain(){
- null!=this.target&&this.random.chance(.05)&&this.target.stun(100)}
- }
- ;
- Kt(lQ,"Pearl");
- let uQ=lQ;
- const dQ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"phase",0),zt(this,"phaseTimer",0),zt(this,"riseVx",0),zt(this,"riseVy",0),zt(this,"currentAngle",0),zt(this,"riseAngleDeg",45),zt(this,"launched",!1)}
- initializeTextureName(){
- this.className=wJ.UniArrow,this.textureName=wJ.UniArrow}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.scale=.8,this.speed=11,this.flyEnd=2,this.incFrame=1,this.g=0}
- setData(t=1){
- super.setData(t),this.launched=!1,this.riseAngleDeg=45}
- calculateTrajectory(){
- if(!this.target)return;
- const i=this.target.getHitCenter();
- this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.8,this.offsetY=-this.target.hitHeight*(.1+.4*this.random.next());
- const s=i.x+this.offsetX,e=i.y+this.offsetY;
- if(this.launched){
- this.phase=2,this.phaseTimer=0;
- const i=s-this.x,n=e-this.y,h=Math.sqrt(i*i+n*n);
- this.T=Math.max(5,Math.min(25,h/t.DIVE_SPEED))}
- else{
- this.launched=!0,this.phase=0,this.phaseTimer=0;
- const i=this.owner?this.owner.direction:1,n=this.riseAngleDeg*Math.PI/180,h=i>0?-n:-(Math.PI-n),r=8;
- this.riseVx=Math.cos(h)*r,this.riseVy=Math.sin(h)*r,this.currentAngle=h,this.rotation=h;
- const o=s-this.x,a=e-this.y,c=Math.sqrt(o*o+a*a),l=Math.max(5,Math.min(30,c/t.DIVE_SPEED));
- this.T=t.RISE_FRAMES+t.AIM_FRAMES+l}
- this.t=0}
- execute(){
- if(!this.removed){
- switch(this.t++,this.phaseTimer++,this.phase){
- case 0:this.executeRise();
- break;
- case 1:this.executeAim();
- break;
- case 2:if(this.executeDive(),this.removed)return}
- this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],(this.x<-50||this.x>690||this.y<-100||this.y>640)&&this.remove()}
- }
- executeRise(){
- this.x+=this.riseVx,this.y+=this.riseVy,this.orientToPath&&(this.rotation=Math.atan2(this.riseVy,this.riseVx),this.currentAngle=this.rotation),this.phaseTimer>=t.RISE_FRAMES&&(this.phase=1,this.phaseTimer=0)}
- executeAim(){
- let i,s;
- if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter();
- i=t.x+this.offsetX,s=t.y+this.offsetY}
- else i=this.x+100*Math.cos(this.currentAngle),s=this.y+100*Math.sin(this.currentAngle);
- let e=Math.atan2(s-this.y,i-this.x)-this.currentAngle;
- for(;
- e>Math.PI;
- )e-=2*Math.PI;
- for(;
- e<-Math.PI;
- )e+=2*Math.PI;
- for(this.currentAngle+=.3*e;
- this.currentAngle>Math.PI;
- )this.currentAngle-=2*Math.PI;
- for(;
- this.currentAngle<-Math.PI;
- )this.currentAngle+=2*Math.PI;
- const n=.05*Math.sin(1.5*this.phaseTimer);
- if(this.rotation=this.currentAngle+n,this.x+=.5*Math.cos(this.currentAngle),this.y+=.5*Math.sin(this.currentAngle),this.phaseTimer>=t.AIM_FRAMES){
- if(this.phase=2,this.phaseTimer=0,this.target&&!this.target.removed){
- const t=this.target.getHitCenter();
- i=t.x+this.offsetX,s=t.y+this.offsetY}
- const e=i-this.x,n=s-this.y,h=Math.sqrt(e*e+n*n);
- this.T=this.t+Math.max(5,Math.min(25,h/t.DIVE_SPEED))}
- }
- executeDive(){
- if(!this.target||this.target.removed)return this.vx=Math.cos(this.rotation)*t.DIVE_SPEED,this.vy=Math.sin(this.rotation)*t.DIVE_SPEED,this.x+=this.vx,void(this.y+=this.vy);
- const i=this.target.getHitCenter(),s=i.x+this.offsetX,e=i.y+this.offsetY,n=this.T-this.t;
- if(n>0){
- this.vx=(s-this.x)/n,this.vy=(e-this.y)/n;
- const t=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
- if(t>0&&t<bJ.MIN_SPEED){
- const i=bJ.MIN_SPEED/t;
- this.vx*=i,this.vy*=i}
- }
- this.x+=this.vx,this.y+=this.vy,this.orientToPath&&(this.rotation=Math.atan2(this.vy,this.vx)),this.checkEarlyCollision()?this.onHit():this.t>=this.T&&(this.x=s,this.y=e,this.onHit())}
- }
- ;
- Kt(dQ,"UniArrow"),zt(dQ,"RISE_FRAMES",16),zt(dQ,"AIM_FRAMES",10),zt(dQ,"DIVE_SPEED",14);
- let fQ=dQ;
- const pQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.PowerArrow,this.textureName=wJ.PowerArrow}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(t/s,i/s,10)}
- }
- ;
- Kt(pQ,"PowerArrow");
- let gQ=pQ;
- const mQ=class t extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcBlizzardMageRain1,this.textureName=wJ.OrcBlizzardMageRain1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.speed=10,this.flyEnd=7,this.incFrame=1,this.g=0,this.scale=1.2}
- calculateTrajectory(){
- if(!this.target)return;
- if(!this.owner)return;
- this.delay=25*this.random.next();
- const i=this.target.getHitCenter();
- this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.6,this.offsetY=-this.target.hitHeight*(.1+.3*this.random.next());
- const s=i.x+this.offsetX,e=i.y+this.offsetY;
- this.y=e-250-20*this.random.next(),this.owner.direction<0?this.x=s+30-60*this.random.next():this.x=s-30+60*this.random.next();
- const n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
- this.T=Math.max(8,Math.min(30,r/t.DIVE_SPEED)),this.t=0}
- execute(){
- if(this.removed)return;
- let t,i;
- if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
- {
- const s=this.target.getHitCenter();
- t=s.x+this.offsetX,i=s.y+this.offsetY}
- const s=this.T-this.t;
- if(s>0){
- this.vx=(t-this.x)/s,this.vy=(i-this.y)/s;
- const e=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
- if(e>0&&e<bJ.MIN_SPEED){
- const t=bJ.MIN_SPEED/e;
- this.vx*=t,this.vy*=t}
- }
- if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
- this.onHit()}
- onHitMain(){
- this.target&&this.target.isAlive&&this.random.chance(.2)&&this.target.freeze(60),this.displayExplodeEffect()}
- displayExplodeEffect(){
- const t=mJ.getEffect(yq.OrcIceExplodeEffect);
- t.scale.set(.5),t.x=this.x,t.y=this.y,t.start(60),tB.getInstance().addChild(t)}
- }
- ;
- Kt(mQ,"OrcBlizzardMageRain1"),zt(mQ,"DIVE_SPEED",22);
- let wQ=mQ;
- const vQ=class t extends bJ{
- initializeTextureName(){
- this.className=wJ.FireMagicBall1,this.textureName=wJ.FireMagicBall1}
- initializeData(){
- this.hitClassName=yq.FireBallExplode,this.g=0,this.speed=9,this.flyEnd=19,this.incFrame=1,this.weaponScale=2}
- calculateTrajectory(){
- if(!this.target||!this.owner)return;
- this.delay=10*this.random.next();
- const i=this.target.getHitCenter();
- this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.6,this.offsetY=-this.target.hitHeight*(.1+.3*this.random.next());
- const s=i.x+this.offsetX,e=i.y+this.offsetY;
- this.y=e-250-20*this.random.next(),this.owner.direction<0?this.x=s+30-60*this.random.next():this.x=s-30+60*this.random.next();
- const n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
- this.T=Math.max(8,Math.min(30,r/t.DIVE_SPEED)),this.t=0}
- execute(){
- if(this.removed)return;
- let t,i;
- if(this.t++,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
- {
- const s=this.target.getHitCenter();
- t=s.x+this.offsetX,i=s.y+this.offsetY}
- const s=this.T-this.t;
- if(s>0){
- this.vx=(t-this.x)/s,this.vy=(i-this.y)/s;
- const e=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
- if(e>0&&e<bJ.MIN_SPEED){
- const t=bJ.MIN_SPEED/e;
- this.vx*=t,this.vy*=t}
- }
- if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
- this.onHit()}
- onHitMain(){
- if(this.displayExplodeEffect(),!this.target||!this.owner)return;
- const t=this.vx>0?.5:-.5;
- this.target.blow(t,-7),this.target.stun(40);
- const i=this.owner.enemyList;
- if(!i)return;
- let s=0;
- for(const e of i){
- if(e===this.target||e.isAir)continue;
- if(!e.isAlive)continue;
- const t=this.x-e.x;
- if(t>40||t<-40)continue;
- const i=this.y-e.y;
- if(!(i>40||i<-40)&&(this.owner.doDamage(e,.8),e.blow(this.random.range(-.2,.2),-5),this.random.chance(.3)&&e.stun(50),++s>20))break}
- }
- displayExplodeEffect(){
- const t=mJ.getEffect(yq.FireBallExplode);
- t.scale.set(3),t.x=this.x,t.y=this.y,t.start(60),tB.getInstance().addChild(t)}
- }
- ;
- Kt(vQ,"FireMagicBall1"),zt(vQ,"DIVE_SPEED",20);
- let bQ=vQ;
- const yQ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"tx",0),zt(this,"ty",0),zt(this,"birdDirection",1),zt(this,"cnt",0),zt(this,"state",0),zt(this,"rushSpeed",9)}
- initializeTextureName(){
- this.className=wJ.FireMageBird1,this.textureName=wJ.FireMageBird1}
- initializeData(){
- this.g=0,this.speed=9,this.flyEnd=1,this.incFrame=1}
- calculateTrajectory(){
- }
- setData(i=1){
- super.setData(i),this.cnt=Math.floor(-1-20*this.random.next()),this.state=t.STATE_MAIN,this.visible=!1}
- play(){
- super.play(),this.visible=!1,this.tx=this.x+160*this.random.next()-80,this.ty=this.y-120-60*this.random.next()}
- execute(){
- if(!this.removed)switch(this.state){
- case t.STATE_MAIN:this.onMainPhase();
- break;
- case t.STATE_RUSH:this.onRushPhase();
- break;
- case t.STATE_EXPLODE:this.onExplodePhase()}
- }
- onMainPhase(){
- if(null!=this.owner){
- if(++this.cnt>=250){
- const t=this.cnt-250+41;
- return t<this.textures.length&&(this.sp.texture=this.textures[t]),void(t>=56&&this.remove())}
- if(!(this.cnt<0))if(0===this.cnt&&(this.visible=!0),this.currentFrame++,1!==this.cnt&&20!==this.cnt||this.updateFacing(),this.cnt<25)this.currentFrame>15&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.x+=.25*(this.tx-this.x),this.y+=.25*(this.ty-this.y);
- else if(null!=this.target&&this.target.isAlive)this.currentFrame<40&&this.currentFrame<this.textures.length?this.sp.texture=this.textures[Math.floor(this.currentFrame)]:this.currentFrame=40,this.currentFrame>=40&&(this.tx=this.target.x,this.ty=this.target.y-.6*this.target.hitHeight,this.currentFrame=0,this.state=t.STATE_RUSH);
- else if(this.currentFrame>15&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.random.chance(.05)){
- const t=this.findNewTarget();
- t&&(this.target=t)}
- }
- else this.remove()}
- onRushPhase(){
- this.currentFrame++,this.currentFrame>15&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.target&&this.target.isAlive&&(this.tx=this.target.x,this.ty=this.target.y-.6*this.target.hitHeight);
- const i=this.tx-this.x,s=this.ty-this.y,e=Math.atan2(s,i);
- this.vx=this.rushSpeed*Math.cos(e),this.vy=this.rushSpeed*Math.sin(e),this.rotation=e,this.scale.y=i>0?Math.abs(this.scale.y):-Math.abs(this.scale.y),this.x+=this.vx,this.y+=this.vy,Math.abs(i)<this.rushSpeed&&Math.abs(s)<this.rushSpeed&&(this.x=this.tx,this.y=this.ty,this.target&&this.target.isAlive&&this.owner&&(this.owner.doDamage(this.target,.3+.2*this.random.next()),this.random.chance(.3)&&this.target.stun(50)),this.currentFrame=41,this.state=t.STATE_EXPLODE)}
- onExplodePhase(){
- this.currentFrame<this.textures.length&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.currentFrame++,this.currentFrame>=57&&this.remove()}
- updateFacing(){
- this.birdDirection>0?(this.rotation=0,this.scale.y=Math.abs(this.scale.y)):(this.rotation=Math.PI,this.scale.y=-Math.abs(this.scale.y))}
- findNewTarget(){
- if(!this.owner)return null;
- const t=this.owner.enemyList;
- if(!t)return null;
- const i=[];
- for(const s of t)s.isAlive&&Math.abs(s.x-this.x)<1.3*this.owner.atkRange&&i.push(s);
- return i.length>0?i[this.random.nextInt(i.length)]:null}
- }
- ;
- Kt(yQ,"FireMageBird1"),zt(yQ,"STATE_MAIN",0),zt(yQ,"STATE_RUSH",1),zt(yQ,"STATE_EXPLODE",2);
- let _Q=yQ;
- const MQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.BomberSmallBomb1,this.textureName=wJ.BomberSmallBomb1}
- initializeData(){
- this.hitClassName="BomberSmallBombExplode1",this.g=0,this.speed=10,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1,this.weaponScale=1.3}
- }
- ;
- Kt(MQ,"BomberSmallBomb1");
- let EQ=MQ;
- const AQ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"lastTargetX",0),zt(this,"lastTargetY",0)}
- initializeTextureName(){
- this.className=wJ.BomberBigBomb1,this.textureName=wJ.BomberBigBomb1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.1,this.speed=12,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1}
- execute(){
- if(--this.delay>0)this.rotation=0;
- else{
- if(this.target&&!this.target.removed&&(this.lastTargetX=this.target.x,this.lastTargetY=this.target.y),this.t>=this.T&&this.target&&this.target.removed)return this.x=this.lastTargetX,this.y=this.lastTargetY,this.onHit(),void this.remove();
- super.execute()}
- }
- onHit(){
- this.owner?(this.target&&this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.showHitEffect(this.hitClassName)),this.onHitMain(),this.remove()):this.remove()}
- onHitMain(){
- if(this.displayExplodeEffect(),!this.owner)return;
- if(!this.owner.enemyList)return;
- let t=0;
- const i=this.owner.evolStage>=1?8:5;
- for(const s of this.owner.enemyList){
- if(null==s)continue;
- if(!s.isAlive)continue;
- if(s.isUntagetable)continue;
- const e=this.x-s.x,n=this.y-s.y;
- if(e*e+n*n<8100){
- if(this.owner.doDamage(s,1,!0),!s.isAlive)continue;
- const i=s.x-this.x>=0?6:-6;
- s.blow(i,-6),t++}
- if(t>=i)return}
- }
- displayExplodeEffect(){
- let t=mJ.getEffect(yq.BomberBigBombExplode1);
- t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||zii.getInstance()),t.start(60),YG.getInstance().addChild(t)}
- }
- ;
- Kt(AQ,"BomberBigBomb1");
- let SQ=AQ;
- const TQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.IceFlake,this.textureName=wJ.IceFlake}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.01,this.speed=8,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1,this.vr=.3}
- onHitMain(){
- if(null==this.target||!this.target.isAlive)return;
- const t=this.owner&&this.owner.evolStage>=1,i=t?.5:.4,s=t?90:75;
- this.random.chance(i)&&this.target.freeze(s)}
- }
- ;
- Kt(TQ,"IceFlake");
- let CQ=TQ;
- const kQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.FireBirdBall1,this.textureName=wJ.FireBirdBall1}
- initializeData(){
- this.g=0,this.speed=9,this.flyEnd=4,this.incFrame=1}
- }
- ;
- Kt(kQ,"FireBirdBall1");
- let OQ=kQ;
- const IQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.BlackMageDarkBall1,this.textureName=wJ.DarkMageBall1}
- initializeData(){
- this.hitClassName=yq.BlackMageBallExplode1,this.g=0,this.speed=8,this.flyEnd=4,this.incFrame=1}
- onHitMain(){
- if(!this.target)return;
- this.target.binding(120);
- const t=this.owner&&this.owner.evolStage>=1;
- this.random.chance(t?.8:.5)&&this.target.shock(t?80:60)}
- }
- ;
- Kt(IQ,"BlackMageDarkBall1");
- let xQ=IQ;
- const NQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcIceMageFireSkill1,this.textureName=wJ.OrcIceMageFire1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=7,this.incFrame=1,this.weaponScale=1.3}
- onHitMain(){
- this.target&&this.target.isAlive&&(this.owner&&this.owner.evolStage>=1||this.random.chance(.5))&&this.target.freeze(80)}
- }
- ;
- Kt(NQ,"OrcIceMageFireSkill1");
- let PQ=NQ;
- const RQ=class extends bJ{
- initializeTextureName(){
- this.textureName="PoisonArcherArrow1"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=.03,this.speed=9,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target||null==this.owner)return;
- const t=this.owner.evolStage>=1,i=t?70:50,s=t?60:50,e=t?30:20,n=t?6:4;
- this.target.poison(i);
- const h=this.owner.getEnemiesAtPos(this.x,this.y,s);
- let r=0;
- for(const o of h)if(o!=this.target&&0!=o.isAlive&&(o.poison(e),r++,r>=n))break}
- }
- ;
- Kt(RQ,"PoisonArcherArrowSkill1");
- let DQ=RQ;
- const LQ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"missileSpeed",12),zt(this,"turnRate",.12),zt(this,"maxAngleY",.54),zt(this,"maxLifeTime",120),zt(this,"heading",0)}
- initializeTextureName(){
- this.className=wJ.PilotMissile1,this.textureName=wJ.PilotMissile1}
- initializeData(){
- this.hitClassName="FireExplode",this.g=0,this.speed=this.missileSpeed,this.flyEnd=0,this.incFrame=1,this.orientToPath=!1}
- calculateTrajectory(){
- if(!this.target)return;
- const t=this.target.getHitCenter(),i=t.x-this.x,s=t.y-this.y;
- let e=Math.atan2(s,i);
- const n=i>=0?0:Math.PI;
- let h=e-n;
- for(;
- h>Math.PI;
- )h-=2*Math.PI;
- for(;
- h<-Math.PI;
- )h+=2*Math.PI;
- h>this.maxAngleY&&(h=this.maxAngleY),h<-this.maxAngleY&&(h=-this.maxAngleY),e=n+h,this.heading=i>=0?0:Math.PI,this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=0,this.rotation=this.heading,this.t=0,this.T=this.maxLifeTime}
- execute(){
- if(--this.delay>0)this.rotation=0;
- else{
- if(this.t++,this.t%2==0&&this.showSmoke(),this.target&&!this.target.removed&&this.target.isAlive||this.retarget(80),this.t<=5);
- else if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter(),i=t.x-this.x,s=t.y-this.y;
- let e=Math.atan2(s,i)-this.heading;
- for(;
- e>Math.PI;
- )e-=2*Math.PI;
- for(;
- e<-Math.PI;
- )e+=2*Math.PI;
- const n=this.t>.75*this.T?3*this.turnRate:this.turnRate;
- e>n&&(e=n),e<-n&&(e=-n),this.heading+=e}
- if(this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=Math.sin(this.heading)*this.missileSpeed,this.x+=this.vx,this.y+=this.vy,this.rotation=this.heading,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&this.textures.length>0&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.checkEarlyCollision())this.onHit();
- else if(this.t>=this.T){
- if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter();
- this.x=t.x,this.y=t.y}
- this.onHit()}
- }
- }
- retarget(t){
- if(!this.owner||!this.owner.enemyList)return;
- let i=null,s=t*t;
- for(const e of this.owner.enemyList){
- if(!e.isAlive)continue;
- if(e.isUntagetable)continue;
- const t=e.x-this.x,n=e.y-this.y,h=t*t+n*n;
- h<s&&(i=e,s=h)}
- i&&(this.target=i)}
- onHitMain(){
- if(this.target&&this.target.isAlive&&this.random.chance(.25)&&this.target.stun(10),!this.owner||!this.owner.enemyList)return;
- let t=0;
- for(const i of this.owner.enemyList){
- if(!i.isAlive)continue;
- if(i==this.target)continue;
- if(i.isUntagetable)continue;
- const s=this.x-i.x;
- if(Math.abs(s)>40)continue;
- const e=this.y-i.y;
- if(!(Math.abs(e)>40)&&s*s+e*e<900&&(this.random.chance(.35)&&i.stun(8),this.owner.doDamage(i,.5,!0),++t>=4))break}
- this.showSmoke()}
- showSmoke(){
- const t=mJ.getEffect(yq.PilotMissileSmoke1);
- t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||zii.getInstance()),t.start(30),YG.getInstance().addChild(t)}
- }
- ;
- Kt(LQ,"PilotMissile1");
- let GQ=LQ;
- const BQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.FireBullet,this.textureName=wJ.FireBullet,this.scale=1}
- initializeData(){
- this.g=0,this.speed=9,this.flyEnd=2,this.incFrame=1}
- }
- ;
- Kt(BQ,"FireBullet");
- let UQ=BQ;
- const FQ=class t extends bJ{
- initializeTextureName(){
- this.className=wJ.AntRock1,this.textureName=wJ.AntRock1,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName=yq.AntRockExplode,this.g=0,this.speed=11,this.flyEnd=0,this.incFrame=0,this.weaponScale=1.5,this.orientToPath=!1}
- calculateTrajectory(){
- if(!this.target||!this.owner)return;
- this.delay=8*this.random.next();
- const i=this.target.getHitCenter();
- this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.6,this.offsetY=-this.target.hitHeight*(.1+.3*this.random.next());
- const s=i.x+this.offsetX,e=i.y+this.offsetY;
- this.y=e-240-40*this.random.next(),this.x=s-20+40*this.random.next();
- const n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
- this.T=Math.max(6,Math.min(18,r/t.DIVE_SPEED)),this.t=0}
- execute(){
- if(this.removed)return;
- let t,i;
- if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
- {
- const s=this.target.getHitCenter();
- t=s.x+this.offsetX,i=s.y+this.offsetY}
- const s=this.T-this.t;
- if(s>0){
- this.vx=(t-this.x)/s,this.vy=(i-this.y)/s;
- const e=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
- if(e>0&&e<bJ.MIN_SPEED){
- const t=bJ.MIN_SPEED/e;
- this.vx*=t,this.vy*=t}
- }
- if(this.x+=this.vx,this.y+=this.vy,this.rotation+=.15,!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
- this.onHit()}
- onHitMain(){
- if(this.displayExplodeEffect(),!this.target||!this.owner)return;
- this.target.isAlive&&this.target.blow(0,-10);
- const t=this.owner.enemyList;
- if(!t)return;
- let i=0;
- for(const s of t){
- if(!s)continue;
- if(s===this.target||s.isAir)continue;
- if(!s.isAlive)continue;
- const t=this.x-s.x;
- if(t>50||t<-50)continue;
- const e=this.y-s.y;
- if(!(e>50||e<-50)&&(this.owner.doDamage(s,.5),s.isAlive&&s.blow(this.random.range(-.3,.3),-8),++i>4))break}
- }
- displayExplodeEffect(){
- const t=mJ.getEffect(yq.AntRockExplode);
- t.x=this.x,t.y=this.y,t.start(20),tB.getInstance().addChild(t)}
- }
- ;
- Kt(FQ,"AntRock1"),zt(FQ,"DIVE_SPEED",30);
- let HQ=FQ;
- const WQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.SpeedArrow2,this.textureName=wJ.SpeedArrow2}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(3*t/s,3*i/s,20)}
- }
- ;
- Kt(WQ,"SpeedArrow2");
- let jQ=WQ;
- const $Q=class extends bJ{
- initializeTextureName(){
- this.className=wJ.MoleFire,this.textureName="moleFire",this.sheetName="HammerMole"}
- initializeData(){
- this.g=.03,this.speed=14,this.flyEnd=1,this.incFrame=1,this.weaponScale=1.6}
- onHitMain(){
- this.target}
- }
- ;
- Kt($Q,"MoleFire2");
- let VQ=$Q;
- const KQ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"porkSp",null),zt(this,"tx",0),zt(this,"ty",0),zt(this,"grabbed",!1),zt(this,"cnt",0)}
- initializeTextureName(){
- this.className=wJ.DarkChain1,this.textureName=wJ.DarkChain1,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.scale=.9,this.g=0,this.speed=16,this.flyEnd=1,this.incFrame=1}
- calculateTrajectory(){
- if(!this.owner)return;
- if(!this.target)return;
- this.x=this.owner.x+10*this.owner.direction,this.y=this.owner.y-25,this.tx=this.target.x,this.ty=this.target.y-.7*this.target.hitHeight,this.target.isAirUnit&&(this.ty=this.target.y-this.target.airHeight);
- const t=this.tx-this.x,i=this.ty-this.y;
- this.rotation=Math.atan2(i,t),this.cnt=0,this.grabbed=!1}
- execute(){
- if(!this.target||!this.owner)return void this.remove();
- let t,i;
- this.cnt++,this.cnt<10?(t=this.tx,i=this.ty):10===this.cnt?(this.target.isAlive&&(this.grabbed=!0,this.target.stun(80),this.target.setAirToGroundFor(80)),t=this.target.x,i=this.target.y):(t=this.owner.x,i=this.owner.y,this.grabbed&&this.target.isAlive&&(this.target.isImmovable||(this.target.x+=.4*(this.owner.x-this.target.x),this.target.y+=.4*(this.owner.y-this.target.y)))),this.updateChain(t,i),this.cnt>18&&this.remove()}
- updateChain(t,i){
- const s=t-this.x,e=i-this.y;
- this.rotation=Math.atan2(e,s);
- const n=Math.sqrt(s*s+e*e);
- this.sp&&(this.sp.width=1.2*n,this.updatePork())}
- updatePork(){
- if(null==this.porkSp){
- const t=ZA.getTextures(this.sheetName,"DarkPork1");
- t.length>0&&(this.porkSp=new We(t[0]),this.sp&&(this.porkSp.x=this.sp.width),this.addChild(this.porkSp))}
- this.porkSp&&this.sp&&(this.porkSp.x=this.sp.width-25)}
- }
- ;
- Kt(KQ,"DarkChain1");
- let zQ=KQ;
- const qQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.SuccubusBlade1,this.textureName=wJ.SuccubusBlade1,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.scale=1,this.g=0,this.speed=16,this.flyEnd=1,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(2*t/s,2*i/s,15)}
- }
- ;
- Kt(qQ,"SuccubusBlade1");
- let XQ=qQ;
- const YQ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.WyvernRiderThrowingKnife1,this.textureName=wJ.WyvernRiderThrowingKnife1,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=21,this.incFrame=1,this.weaponScale=.7,this.minT=12}
- onHitMain(){
- null!=this.target&&this.random.chance(.35)&&this.target.freeze(50)}
- }
- ;
- Kt(YQ,"WyvernRiderThrowingKnife1");
- let JQ=YQ;
- const QQ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"phase","flying"),zt(this,"holdTimer",0),zt(this,"tendrilCount",4),zt(this,"trailEffectScale",1.2),zt(this,"tendrilList",[]),zt(this,"tendrilOwner",null),zt(this,"tendrilFreezeDuration",0),zt(this,"tendrilMaxDistSq",0),zt(this,"tendrilOriginX",0),zt(this,"tendrilOriginY",0),zt(this,"trailPositions",[]),zt(this,"effectDuration",0),zt(this,"globalHitEnemies",new Set),zt(this,"freezeCap",4)}
- initializeTextureName(){
- this.className=wJ.WyvernRiderThrowingKnifeS1,this.textureName=wJ.WyvernRiderThrowingKnifeS1,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=21,this.incFrame=1,this.weaponScale=.7,this.minT=12}
- setData(t=1){
- super.setData(t),this.phase="flying",this.holdTimer=0,this.tendrilCount=4,this.trailEffectScale=1.2,this.tendrilList.length=0,this.tendrilOwner=null,this.tendrilFreezeDuration=0,this.tendrilMaxDistSq=0,this.tendrilOriginX=0,this.tendrilOriginY=0,this.trailPositions.length=0,this.effectDuration=0,this.globalHitEnemies.clear(),this.freezeCap=4}
- execute(){
- if("flying"===this.phase)return void super.execute();
- const t=this.tendrilOwner;
- t&&t.isAlive?"spreading"===this.phase?this.tickSpreading(t):"holding"===this.phase&&(this.holdTimer--,this.holdTimer<=0&&(this.explodeAll(),super.remove())):super.remove()}
- remove(){
- "flying"===this.phase?super.remove():this.visible=!1}
- onHit(){
- this.owner&&this.target?(this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName)),this.onHitMain(),this.remove()):super.remove()}
- onHitMain(){
- if(null==this.target)return;
- if(null==this.owner)return;
- const i=this.owner.evolStage>0,s=i?160:120;
- this.tendrilCount=i?5:4,this.trailEffectScale=i?1.5:1.2,this.freezeCap=i?12:8,this.target.freeze(s),this.showBurst(this.target.x,this.target.y,.8),this.tendrilOwner=this.owner,this.tendrilFreezeDuration=s,this.tendrilOriginX=this.target.x,this.tendrilOriginY=this.target.y,this.tendrilMaxDistSq=1e4,this.trailPositions=[],this.tendrilList=[],this.globalHitEnemies=new Set([this.target]);
- const e=Math.ceil(100/t.TENDRIL_SPEED);
- this.effectDuration=e+t.HOLD_DURATION+20;
- for(let t=0;
- t<this.tendrilCount;
- t++){
- const i=t/this.tendrilCount*Math.PI*2;
- this.tendrilList.push({
- index:t,x:this.target.x,y:this.target.y,currentAngle:i,trailTick:0,done:!1,hitEnemies:new Set}
- )}
- this.phase="spreading"}
- tickSpreading(i){
- const s=t.TENDRIL_SPEED,e=t.MAX_TURN;
- for(const n of this.tendrilList){
- if(n.done)continue;
- if(n.trailTick++,n.currentAngle+=this.random.range(-e,e),n.x+=Math.cos(n.currentAngle)*s,n.y+=Math.sin(n.currentAngle)*s,n.trailTick%t.TRAIL_INTERVAL===0&&(this.placeTrailEffect(n.x,n.y),this.trailPositions.push({
- x:n.x,y:n.y}
- )),this.globalHitEnemies.size<this.freezeCap)for(const t of i.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- if(n.hitEnemies.has(t))continue;
- if(this.globalHitEnemies.has(t))continue;
- const i=t.x-n.x,s=t.y-n.y;
- if(i*i+s*s<625&&(t.freeze(this.tendrilFreezeDuration),this.showFreezeOnUnit(t,this.tendrilFreezeDuration),n.hitEnemies.add(t),this.globalHitEnemies.add(t),this.globalHitEnemies.size>=this.freezeCap))break}
- const h=n.x-this.tendrilOriginX,r=n.y-this.tendrilOriginY;
- h*h+r*r>=this.tendrilMaxDistSq&&(this.placeTrailEffect(n.x,n.y),this.trailPositions.push({
- x:n.x,y:n.y}
- ),n.done=!0)}
- this.tendrilList.every(t=>t.done)&&(this.phase="holding",this.holdTimer=t.HOLD_DURATION)}
- explodeAll(){
- const t=this.tendrilOwner,i=new Set;
- for(const s of this.trailPositions)if(this.showBurst(s.x,s.y,.5),t)for(const e of t.enemyList){
- if(!e.isAlive||e.isUntagetable)continue;
- if(i.has(e))continue;
- const n=e.x-s.x,h=e.y-s.y;
- n*n+h*h<400&&(t.doDamage(e,.3,!0),i.add(e))}
- }
- placeTrailEffect(t,i){
- const s=mJ.getEffect(yq.FreezeEffectS);
- s.scale.set(this.trailEffectScale),s.x=t,s.y=i,s.start(this.effectDuration),YG.getInstance().addChild(s)}
- showBurst(t,i,s){
- const e=mJ.getEffect(yq.OrcIceExplodeEffect);
- e.scale.set(s),e.x=t,e.y=i,e.start(20),YG.getInstance().addChild(e)}
- showFreezeOnUnit(t,i){
- const s=t.weight<=1?yq.FreezeEffectS:t.weight<=2?yq.FreezeEffectM:yq.FreezeEffectL;
- t.showEffect(s,i,new mi(0,0),!0)}
- }
- ;
- Kt(QQ,"WyvernRiderThrowingKnifeS1"),zt(QQ,"TENDRIL_SPEED",8),zt(QQ,"TRAIL_INTERVAL",3),zt(QQ,"HOLD_DURATION",25),zt(QQ,"MAX_TURN",.18);
- let ZQ=QQ;
- const tZ=class extends bJ{
- initializeTextureName(){
- this.className=wJ.OrcRapterRiderSpear1,this.textureName=wJ.OrcRapterRiderSpear1,this.sheetName="Game1",this.scale.set(.7)}
- initializeData(){
- this.hitClassName="IceExplode2",this.g=.05,this.speed=9,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(2*t/s,2*i/s,15);
- const e=this.owner&&this.owner.evolStage>=1,n=e?.35:.25,h=e?90:60;
- this.random.chance(n)&&this.target.freeze(h)}
- }
- ;
- Kt(tZ,"OrcRapterRiderSpear1");
- let iZ=tZ;
- const sZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"tangleTimer",0),zt(this,"origScaleX",1),zt(this,"origScaleY",1),zt(this,"boundOnce",!1)}
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.DruidTangle1,this.textureName=wJ.DruidTangle1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=0,this.flyEnd=1,this.incFrame=0,this.tangleTimer=0,this.boundOnce=!1}
- setData(t=1){
- super.setData(t),this.tangleTimer=0,this.boundOnce=!1,this.sp&&(this.origScaleX=this.sp.scale.x||1,this.origScaleY=this.sp.scale.y||1)}
- execute(){
- if(!this.removed){
- if(this.target&&!this.target.removed&&(this.x=this.target.x,this.y=this.target.y),this.tangleTimer++,this.tangleTimer<=t.BIND_DURATION)!this.boundOnce&&this.target&&this.target.isAlive&&(this.target.binding(t.BIND_DURATION),this.boundOnce=!0);
- else{
- const i=1-(this.tangleTimer-t.BIND_DURATION)/(t.TOTAL_LIFE-t.BIND_DURATION)*(1-t.MIN_SCALE);
- this.sp&&this.sp.scale.set(this.origScaleX*i,this.origScaleY*i),this.target&&this.target.isAlive&&this.target.poison(t.SLOW_DURATION)}
- this.tangleTimer%t.DMG_INTERVAL===0&&this.owner&&this.target&&!this.target.removed&&this.owner.doDamage(this.target,this.damagePercent),this.tangleTimer>=t.TOTAL_LIFE&&(this.sp&&this.sp.scale.set(this.origScaleX,this.origScaleY),this.remove())}
- }
- }
- ;
- Kt(sZ,"DruidTangle1"),zt(sZ,"BIND_DURATION",30),zt(sZ,"SLOW_DURATION",30),zt(sZ,"TOTAL_LIFE",120),zt(sZ,"DMG_INTERVAL",30),zt(sZ,"MIN_SCALE",.4);
- let eZ=sZ;
- const nZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"hitCooldowns",new Map),zt(this,"whirlCnt",0),zt(this,"whirlTotal",90)}
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.DruidDrill1,this.textureName=wJ.DruidDrill1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=20,this.incFrame=1,this.whirlCnt=0,this.whirlTotal=90,this.hitCooldowns=new Map}
- calculateTrajectory(){
- }
- execute(){
- if(!this.removed){
- this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)];
- for(const[t,i]of this.hitCooldowns)i<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,i-1);
- if(this.owner){
- const i=t.HIT_RADIUS*t.HIT_RADIUS,s=this.vx>=0?1:-1;
- for(const e of this.owner.enemyList){
- if(!e.isAlive||e.isUntagetable)continue;
- if(this.hitCooldowns.has(e))continue;
- const n=e.x-this.x,h=e.y-this.y;
- n*n+h*h<=i&&(this.owner.doDamage(e,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),e.isImmovable||e.knockBack(s*t.KNOCK_VX,t.KNOCK_VY,t.KNOCK_DUR),this.hitCooldowns.set(e,t.HIT_COOLDOWN))}
- }
- (this.x<-50||this.x>690||this.y<-50||this.y>690||++this.whirlCnt>this.whirlTotal)&&this.remove()}
- }
- }
- ;
- Kt(nZ,"DruidDrill1"),zt(nZ,"HIT_RADIUS",50),zt(nZ,"KNOCK_VX",6),zt(nZ,"KNOCK_VY",-2),zt(nZ,"KNOCK_DUR",24),zt(nZ,"HIT_COOLDOWN",24);
- let hZ=nZ;
- const rZ=class extends bJ{
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.TigerRiderArrow1,this.textureName=wJ.TigerRiderArrow1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- null!=this.target&&this.random.chance(.3)&&this.target.shock(45)}
- }
- ;
- Kt(rZ,"TigerRiderArrow1");
- let oZ=rZ;
- const aZ=class extends bJ{
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.GriffinSpear1,this.textureName=wJ.GriffinSpear1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(t/s,i/s,10),this.target.stun(30)}
- }
- ;
- Kt(aZ,"GriffinSpear1");
- let cZ=aZ;
- const lZ=class extends bJ{
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.GriffinSuperSpear1,this.textureName=wJ.GriffinSuperSpear1}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- onHitMain(){
- if(null==this.target)return;
- let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
- 0==s&&(s=1),this.target.knockBack(t/s,i/s,10),this.target.stun(30)}
- }
- ;
- Kt(lZ,"GriffinSuperSpear1");
- let uZ=lZ;
- const dZ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"missileSpeed",10),zt(this,"turnRate",.18),zt(this,"maxAngleY",.54),zt(this,"maxLifeTime",90),zt(this,"heading",0)}
- initializeTextureName(){
- this.className=wJ.SteamFire1,this.textureName=wJ.PilotMissile1,this.scale.set(.8)}
- initializeData(){
- this.hitClassName="FireExplode",this.g=0,this.speed=this.missileSpeed,this.flyEnd=0,this.incFrame=1,this.orientToPath=!1}
- calculateTrajectory(){
- if(!this.target)return;
- const t=this.target.getHitCenter().x-this.x;
- this.heading=t>=0?0:Math.PI,this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=0,this.rotation=this.heading,this.t=0,this.T=this.maxLifeTime}
- execute(){
- if(--this.delay>0)this.rotation=0;
- else{
- if(this.t++,this.t%2==0&&this.showSmoke(),this.target&&!this.target.removed&&this.target.isAlive||this.retarget(80),this.t<=3);
- else if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter(),i=t.x-this.x,s=t.y-this.y;
- let e=Math.atan2(s,i)-this.heading;
- for(;
- e>Math.PI;
- )e-=2*Math.PI;
- for(;
- e<-Math.PI;
- )e+=2*Math.PI;
- const n=this.t>.6*this.T?3*this.turnRate:this.turnRate;
- e>n&&(e=n),e<-n&&(e=-n),this.heading+=e}
- if(this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=Math.sin(this.heading)*this.missileSpeed,this.x+=this.vx,this.y+=this.vy,this.rotation=this.heading,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&this.textures.length>0&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.checkEarlyCollision())this.onHit();
- else if(this.t>=this.T){
- if(this.target&&!this.target.removed){
- const t=this.target.getHitCenter();
- this.x=t.x,this.y=t.y}
- this.onHit()}
- }
- }
- retarget(t){
- if(!this.owner||!this.owner.enemyList)return;
- let i=null,s=t*t;
- for(const e of this.owner.enemyList){
- if(!e.isAlive||e.isUntagetable)continue;
- const t=e.x-this.x,n=e.y-this.y,h=t*t+n*n;
- h<s&&(i=e,s=h)}
- i&&(this.target=i)}
- onHitMain(){
- if(this.target&&this.target.isAlive){
- const t=this.owner&&this.owner.evolStage>=1,i=t?.4:.3,s=t?50:40;
- this.random.chance(i)&&this.target.stun(s)}
- if(!this.owner||!this.owner.enemyList)return;
- let t=0;
- for(const i of this.owner.enemyList){
- if(!i.isAlive||i===this.target||i.isUntagetable)continue;
- const s=this.x-i.x;
- if(Math.abs(s)>35)continue;
- const e=this.y-i.y;
- if(!(Math.abs(e)>35)&&s*s+e*e<625&&(this.owner.doDamage(i,.4,!0),++t>=3))break}
- this.showSmoke()}
- showSmoke(){
- const t=mJ.getEffect(yq.PilotMissileSmoke1);
- t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||zii.getInstance()),t.start(25),YG.getInstance().addChild(t)}
- }
- ;
- Kt(dZ,"SteamFire1");
- let fZ=dZ;
- const pZ=class extends bJ{
- constructor(){
- super(...arguments),zt(this,"hitSet",new Set)}
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.SteamMissile1,this.textureName=wJ.SteamMissile1,this.scale.x=.5,this.scale.y=.2}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
- play(){
- this.hitSet.clear(),super.play()}
- onHit(){
- this.owner&&this.target?(this.target.isAlive&&!this.hitSet.has(this.target)&&(this.hitSet.add(this.target),this.owner.doDamage(this.target,this.damagePercent,!0)&&(this.onHitMain(),this.showHitEffect(this.resolvedHitClassName))),this.target=null):this.remove()}
- checkEarlyCollision(){
- if(this.target&&!this.target.removed)return super.checkEarlyCollision();
- if(!this.owner)return!1;
- for(const t of this.owner.enemyList){
- if(!t||!t.isAlive||this.hitSet.has(t))continue;
- const i=t.getHitCenter(),s=Math.abs(i.x-this.x),e=Math.abs(i.y-this.y),n=.3*t.hitWidth,h=.3*t.hitHeight;
- if(s<n&&e<h)return this.target=t,!0}
- return!1}
- remove(){
- this.hitSet.clear(),super.remove()}
- }
- ;
- Kt(pZ,"SteamMissile1");
- let gZ=pZ;
- const mZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"dirX",1),zt(this,"dirY",0)}
- initializeTextureName(){
- this.className=wJ.SylphidShuriken1,this.textureName="SylphidShuriken1"}
- initializeData(){
- this.sheetName="Game1",this.g=0,this.speed=t.FIXED_SPEED,this.minT=12,this.maxT=90,this.flyEnd=1,this.incFrame=1,this.weaponScale=1.4,this.orientToPath=!1,this.vr=.45,this.bounceRange=220}
- calculateTrajectory(){
- if(!this.target)return;
- const i=this.target.getHitCenter();
- this.offsetX=0,this.offsetY=.3*-this.target.hitHeight;
- const s=i.x+this.offsetX-this.x,e=i.y+this.offsetY-this.y,n=Math.sqrt(s*s+e*e)||1;
- this.dirX=s/n,this.dirY=e/n,this.T=Math.max(this.minT,Math.min(this.maxT,n/t.FIXED_SPEED)),this.vx=this.dirX*t.FIXED_SPEED,this.vy=this.dirY*t.FIXED_SPEED,this.t=0}
- execute(){
- if(!this.removed)if(this.t++,this.x+=this.dirX*t.FIXED_SPEED,this.y+=this.dirY*t.FIXED_SPEED,this.rotation+=this.vr,this.sp&&this.textures.length>0&&(this.sp.texture=this.textures[0]),this.checkEarlyCollision())this.onHit();
- else if(this.t>=this.T){
- if(this.target&&!this.target.removed&&this.target.isAlive)return void this.onHit();
- this.t>=this.T+30&&this.remove()}
- }
- onHitMain(){
- if(!this.target)return;
- const t=mJ.getEffect(yq.ElfGlowing1);
- t.x=this.target.x,t.y=this.target.y-.5*this.target.hitHeight,t.start(30),YG.getInstance().addChild(t);
- const i=this.owner;
- i&&i.isAlive&&"function"==typeof i.onShurikenHit&&i.onShurikenHit()}
- }
- ;
- Kt(mZ,"SylphidShuriken1"),zt(mZ,"FIXED_SPEED",8);
- let wZ=mZ;
- const vZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"lifeTimer",0),zt(this,"hitTimer",0),zt(this,"dirAngle",0),zt(this,"launched",!1),zt(this,"circleEffect",null)}
- initializeTextureName(){
- this.className=wJ.SylphidTornado1,this.textureName="ElfTornado1"}
- initializeData(){
- this.sheetName="Game1",this.g=0,this.speed=t.SPEED,this.incFrame=.4,this.weaponScale=1.6,this.orientToPath=!1,this.vr=0}
- generateSprite(){
- super.generateSprite(),this.flyEnd=Math.max(1,this.textures.length)}
- play(){
- this.lifeTimer=0,this.hitTimer=0,this.launched=!1,this.rotation=0,this.visible=!0,this.removed=!1,this.parent&&this.parent.removeChild(this),qG.getInstance().addChild(this),this.circleEffect=mJ.getEffect(yq.ElfMagicCircle1),this.circleEffect.x=this.x,this.circleEffect.y=this.y+10,this.circleEffect.scale.set(1.2),this.circleEffect.start(t.LIFETIME+10),qG.getInstance().addChild(this.circleEffect),(this.battleController||zii.getInstance()).addWeapon(this)}
- execute(){
- if(!this.removed)if(this.lifeTimer++,this.hitTimer++,this.lifeTimer>=t.LIFETIME)this.explodeAndRemove();
- else{
- if(this.launched)this.dirAngle+=2*(Math.random()-.5)*t.TURN_RATE;
- else if(this.launched=!0,this.target&&this.target.isAlive){
- const t=this.target.x-this.x,i=this.target.y-this.y;
- this.dirAngle=Math.atan2(i,t)}
- else this.dirAngle=Math.random()*Math.PI*2;
- this.x+=Math.cos(this.dirAngle)*t.SPEED,this.y+=Math.sin(this.dirAngle)*t.SPEED,this.circleEffect&&!this.circleEffect.removed&&(this.circleEffect.x=this.x,this.circleEffect.y=this.y+10),this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.suckNearby(),this.hitTimer>=t.HIT_INTERVAL&&(this.hitTimer=0,this.damageAndBindNearby())}
- }
- suckNearby(){
- if(!this.owner)return;
- const i=t.SUCK_RADIUS*t.SUCK_RADIUS;
- for(const s of this.owner.enemyList){
- if(s.removed||!s.isAlive||s.isUntagetable||s.isImmovable||s.knockImmune)continue;
- const e=s.x-this.x,n=s.y-this.y,h=e*e+n*n;
- if(h>i||h<1)continue;
- const r=Math.sqrt(h),o=t.SUCK_SPEED*(1-r/t.SUCK_RADIUS);
- s.x-=e/r*o,s.y-=n/r*o,s.tx=s.x,s.ty=s.y}
- }
- damageAndBindNearby(){
- if(!this.owner||!this.owner.isAlive)return;
- const i=t.HIT_RADIUS*t.HIT_RADIUS;
- for(const s of this.owner.enemyList){
- if(!s.isAlive||s.isUntagetable)continue;
- const e=s.x-this.x,n=s.y-this.y;
- e*e+n*n<=i&&(this.owner.doDamage(s,t.DMG_PER_TICK,!0),this.bindEnemy(s))}
- }
- bindEnemy(i){
- i.binding(t.BIND_DURATION,!1);
- const s=i.effectList;
- for(let n=0;
- n<s.length;
- n++)if(s[n].className===yq.ElfBindEffect1)return void s[n].setDuration(t.BIND_DURATION);
- const e=mJ.getEffect(yq.ElfBindEffect1);
- e.x=0,e.y=-2,e.start(t.BIND_DURATION),e.owner=i,i.addChild(e),i.effectList.push(e)}
- blowNearby(){
- if(!this.owner)return;
- const i=t.BLOW_RADIUS*t.BLOW_RADIUS;
- for(const s of this.owner.enemyList){
- if(!s.isAlive||s.isUntagetable)continue;
- const e=s.x-this.x,n=s.y-this.y,h=e*e+n*n;
- if(h>i||h<1)continue;
- const r=Math.sqrt(h),o=e/r*t.BLOW_SPEED,a=n/r*t.BLOW_SPEED;
- s.knockBack(o,a,t.BLOW_DURATION)}
- }
- explodeAndRemove(){
- if(this.removed)return;
- this.blowNearby();
- const t=mJ.getEffect(yq.ElfExplodeEffect1);
- t.x=this.x,t.y=this.y,t.scale.set(2),t.start(60),YG.getInstance().addChild(t),this.circleEffect&&!this.circleEffect.removed&&this.circleEffect.remove(),this.circleEffect=null,super.remove()}
- remove(){
- this.explodeAndRemove()}
- }
- ;
- Kt(vZ,"SylphidTornado1"),zt(vZ,"SPEED",1.2),zt(vZ,"LIFETIME",300),zt(vZ,"HIT_RADIUS",50),zt(vZ,"HIT_INTERVAL",30),zt(vZ,"DMG_PER_TICK",.6),zt(vZ,"BIND_DURATION",30),zt(vZ,"TURN_RATE",.08),zt(vZ,"SUCK_RADIUS",70),zt(vZ,"SUCK_SPEED",1.8),zt(vZ,"BLOW_RADIUS",90),zt(vZ,"BLOW_SPEED",12),zt(vZ,"BLOW_DURATION",10);
- let bZ=vZ;
- const yZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"orbitCenterX",0),zt(this,"orbitCenterY",0),zt(this,"orbitAngle",0),zt(this,"orbitRadius",0),zt(this,"orbitSpeed",.12),zt(this,"orbitOwner",null),zt(this,"orbitPhase",0),zt(this,"orbitTimer",0),zt(this,"orbitDir",1),zt(this,"hitCooldowns",new Map),zt(this,"flyStartX",0),zt(this,"flyStartY",0),zt(this,"flyTargetX",0),zt(this,"flyTargetY",0),zt(this,"burstVx",0),zt(this,"burstVy",0),zt(this,"burstTimer",0),zt(this,"lifeTimer",0),zt(this,"lifeDuration",1200),zt(this,"flying",!1),zt(this,"coinGravity",.18),zt(this,"landY",0)}
- initializeTextureName(){
- this.sheetName="Game1",this.className=wJ.AladinCoin1,this.textureName=wJ.AladinCoin1,this.scale.set(.8)}
- initializeData(){
- this.g=0,this.speed=0,this.flyEnd=1,this.incFrame=0,this.vx=0,this.vy=0,this.flying=!1,this.orbitRadius=0,this.orbitPhase=0,this.orbitTimer=0,this.hitCooldowns?this.hitCooldowns.clear():this.hitCooldowns=new Map,this.orbitOwner=null,this.burstTimer=0,this.lifeTimer=0}
- play(){
- this.visible=!0,this.removed=!1,this.resolvedHitClassName=this.hitClassName||"PhysicalHitEffect",(this.battleController||zii.getInstance()).addWeapon(this)}
- launch(t,i){
- this.landY=i;
- const s=t-this.x,e=i-this.y,n=Math.max(12,Math.floor(Math.abs(s)/4+Math.abs(e)/10));
- this.vx=s/n,this.vy=e/n-this.coinGravity*(n-1)*.6,this.flying=!0}
- get isOrbiting(){
- return 0!==this.orbitPhase}
- lift(){
- 0===this.orbitPhase&&(this.y-=4+4*Math.random())}
- joinPath(t,i,s,e,n){
- this.flying=!1,this.vx=0,this.vy=0,this.orbitCenterX=t,this.orbitCenterY=i,this.orbitSpeed=e,this.orbitDir=n,this.orbitRadius=s,this.orbitOwner=null,this.orbitTimer=0,this.lifeTimer=0;
- const h=this.x-t,r=this.y-i;
- this.orbitAngle=Math.atan2(r/.6,h),this.flyStartX=this.x,this.flyStartY=this.y,this.flyTargetX=t+Math.cos(this.orbitAngle)*s,this.flyTargetY=i+Math.sin(this.orbitAngle)*s*.6,this.orbitPhase=1}
- startLane(t,i,s,e,n){
- this.joinPath(t,i,s,e,n)}
- startOrbit(t,i,s,e,n=null){
- this.joinPath(t,i,120,e,Math.random()<.6?1:-1),this.orbitOwner=n}
- startCapture(t,i,s,e,n,h,r=null){
- this.joinPath(t,i,120,h,n),this.orbitOwner=r}
- execute(){
- if(!this.removed){
- if(1===this.orbitPhase){
- const i=this.orbitTimer/t.FLY_FRAMES,s=1-(1-i)*(1-i);
- return this.x=this.flyStartX+(this.flyTargetX-this.flyStartX)*s,this.y=this.flyStartY+(this.flyTargetY-this.flyStartY)*s,void(++this.orbitTimer>=t.FLY_FRAMES&&(this.x=this.flyTargetX,this.y=this.flyTargetY,this.orbitTimer=0,this.orbitPhase=2))}
- if(2!==this.orbitPhase)return 3===this.orbitPhase?(this.x+=this.burstVx,this.y+=this.burstVy,this.burstVx*=.95,this.burstVy=.95*this.burstVy+.2,this.x<t.MAP_MIN_X?(this.x=t.MAP_MIN_X,this.burstVx=0):this.x>t.MAP_MAX_X&&(this.x=t.MAP_MAX_X,this.burstVx=0),this.y<t.MAP_MIN_Y?(this.y=t.MAP_MIN_Y,this.burstVy=0):this.y>t.MAP_MAX_Y&&(this.y=t.MAP_MAX_Y,this.burstVy=0),this.checkOrbitHit(),void(++this.burstTimer>=t.BURST_FRAMES&&(this.orbitPhase=0,this.lifeTimer=0,this.landY=this.y,this.flying=!1))):this.flying?(this.x+=this.vx,this.y+=this.vy,this.vy+=this.coinGravity,void(this.vy>0&&this.y>=this.landY&&(this.y=this.landY,this.vx=0,this.vy=0,this.flying=!1))):void(++this.lifeTimer>=this.lifeDuration&&(this.owner&&"function"==typeof this.owner.onCoinExpired&&this.owner.onCoinExpired(),this.remove()));
- if(this.orbitAngle+=this.orbitSpeed*this.orbitDir,this.x=this.orbitCenterX+Math.cos(this.orbitAngle)*this.orbitRadius,this.y=this.orbitCenterY+Math.sin(this.orbitAngle)*this.orbitRadius*.6,this.checkOrbitHit(),++this.orbitTimer>=t.ORBIT_FRAMES){
- const t=12+6*Math.random(),i=-Math.sin(this.orbitAngle)*this.orbitDir,s=Math.cos(this.orbitAngle)*this.orbitDir*.6,e=Math.sqrt(i*i+s*s);
- this.burstVx=i/e*t,this.burstVy=s/e*t,this.orbitPhase=3,this.burstTimer=0}
- }
- }
- checkOrbitHit(){
- if(!this.owner)return;
- const i=this.owner,s="number"==typeof i.goldDmgMultiplier?i.goldDmgMultiplier:1,e=(this.damagePercent>0?this.damagePercent:.6)*s;
- for(const[t,n]of this.hitCooldowns)n<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,n-1);
- for(const n of i.enemyList){
- if(!n.isAlive||n.isUntagetable)continue;
- if(this.hitCooldowns.has(n))continue;
- const s=n.x-this.x,h=n.y-this.y;
- s*s+h*h<=400&&(i.doDamage(n,e,!0),this.hitCooldowns.set(n,t.HIT_COOLDOWN))}
- }
- }
- ;
- Kt(yZ,"AladinCoin1"),zt(yZ,"HIT_COOLDOWN",30),zt(yZ,"FLY_FRAMES",40),zt(yZ,"ORBIT_FRAMES",140),zt(yZ,"BURST_FRAMES",40),zt(yZ,"MAP_MIN_X",60),zt(yZ,"MAP_MAX_X",580),zt(yZ,"MAP_MIN_Y",60),zt(yZ,"MAP_MAX_Y",580);
- let _Z=yZ;
- const MZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"pierceTimer",0),zt(this,"hitCooldowns",new Map)}
- initializeTextureName(){
- this.className=wJ.BladeWave1,this.textureName="BladeWave10",this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=8,this.incFrame=1}
- setData(i=1){
- super.setData(i),this.pierceTimer=0,this.hitCooldowns.clear(),this.sp&&this.sp.scale.set(t.SCALE)}
- play(){
- this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"PhysicalHitEffect",this.battleController&&this.battleController.addWeapon(this)}
- calculateTrajectory(){
- }
- execute(){
- if(this.removed)return;
- if(this.pierceTimer++,this.pierceTimer>=t.LIFETIME)return void super.remove();
- this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0);
- const i=Math.floor(this.currentFrame);
- this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900?super.remove():this.checkPierceHit()}
- checkPierceHit(){
- if(!this.owner)return;
- const i=t.HIT_RADIUS*t.HIT_RADIUS;
- for(const[t,s]of this.hitCooldowns)s<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,s-1);
- for(const t of this.owner.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- if(this.hitCooldowns.has(t))continue;
- const s=t.x-this.x,e=t.y-this.y;
- if(s*s+e*e<=i){
- const i=this.owner.evolStage>=1;
- this.owner.doDamage(t,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),i&&t.knockBack(this.vx>0?2:-2,-1,20),this.hitCooldowns.set(t,20)}
- }
- }
- }
- ;
- Kt(MZ,"BladeWave1"),zt(MZ,"SCALE",3),zt(MZ,"HIT_RADIUS",35),zt(MZ,"LIFETIME",100);
- let EZ=MZ;
- const AZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"pierceTimer",0),zt(this,"hitCooldowns",new Map),zt(this,"uniqueTargets",new Set)}
- initializeTextureName(){
- this.className=wJ.SpinBlade,this.textureName=wJ.SpinBlade,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=6,this.incFrame=1}
- setData(i=1){
- super.setData(i),this.pierceTimer=0,this.hitCooldowns?this.hitCooldowns.clear():this.hitCooldowns=new Map,this.uniqueTargets?this.uniqueTargets.clear():this.uniqueTargets=new Set,this.sp&&this.sp.scale.set(t.SCALE)}
- play(){
- this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"PhysicalHitEffect",this.battleController&&this.battleController.addWeapon(this)}
- calculateTrajectory(){
- }
- execute(){
- if(this.removed)return;
- if(this.pierceTimer++,this.pierceTimer>=t.LIFETIME)return void super.remove();
- this.x+=this.vx,this.y+=this.vy,this.rotation+=.3,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0);
- const i=Math.floor(this.currentFrame);
- this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900?super.remove():this.checkPierceHit()}
- checkPierceHit(){
- if(!this.owner)return;
- const i=t.HIT_RADIUS*t.HIT_RADIUS;
- for(const[t,s]of this.hitCooldowns)s<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,s-1);
- for(const s of this.owner.enemyList){
- if(!s.isAlive||s.isUntagetable)continue;
- if(this.hitCooldowns.has(s))continue;
- const e=s.x-this.x,n=s.y-this.y;
- if(e*e+n*n<=i){
- if(!this.uniqueTargets.has(s)){
- if(this.uniqueTargets.size>=t.MAX_TARGETS)continue;
- this.uniqueTargets.add(s)}
- this.owner.doDamage(s,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),s.knockBack(this.vx>0?3:-3,-2,25),this.hitCooldowns.set(s,20)}
- }
- }
- }
- ;
- Kt(AZ,"SpinBlade"),zt(AZ,"SCALE",2),zt(AZ,"HIT_RADIUS",22),zt(AZ,"LIFETIME",100),zt(AZ,"MAX_TARGETS",8);
- let SZ=AZ;
- const TZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"flightTimer",0)}
- initializeTextureName(){
- this.className=wJ.CrowKnightBullet1,this.textureName=wJ.CrowKnightBullet1,this.sheetName="Game1",this.scale.set(.8)}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=16,this.flyEnd=1,this.incFrame=0,this.flightTimer=0}
- setData(t=1){
- super.setData(t),this.flightTimer=0,this.visible=!0,this.removed=!1,this.scale.set(.8)}
- play(){
- this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"MagicalHitEffect",(this.battleController||zii.getInstance()).addWeapon(this)}
- calculateTrajectory(){
- }
- execute(){
- if(this.removed)return;
- if(this.flightTimer++,this.flightTimer>=t.LIFETIME)return void super.remove();
- if(this.x+=this.vx,this.y+=this.vy,this.x<-100||this.x>900||this.y<-100||this.y>900)return void super.remove();
- if(!this.owner)return;
- const i=t.HIT_RADIUS*t.HIT_RADIUS;
- for(const t of this.owner.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- const s=t.x-this.x,e=t.y-this.y;
- if(s*s+e*e<=i)return this.owner.doDamage(t,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),this.owner.evolStage>=1&&t.stun(30),void super.remove()}
- }
- }
- ;
- Kt(TZ,"CrowKnightBullet1"),zt(TZ,"LIFETIME",60),zt(TZ,"HIT_RADIUS",18);
- let CZ=TZ;
- const kZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"explodeDmgBonus",0),zt(this,"explodeRangeBonus",0),zt(this,"isLordCrow",!1),zt(this,"flightTimer",0),zt(this,"hoverUntil",0),zt(this,"isDiving",!1),zt(this,"riseVx",0),zt(this,"riseVy",0)}
- initializeTextureName(){
- this.className=wJ.CrowCompanion1,this.textureName=wJ.CrowCompanion1,this.sheetName="Game1"}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=t.DIVE_SPEED,this.flyEnd=8,this.incFrame=1,this.weaponScale=1.3}
- setData(i=1){
- super.setData(i),this.flightTimer=0,this.isDiving=!1,this.explodeDmgBonus=0,this.explodeRangeBonus=0,this.isLordCrow=!1;
- const s=t.HOVER_FRAMES_MIN+Math.floor(Math.random()*(t.HOVER_FRAMES_MAX-t.HOVER_FRAMES_MIN+1));
- this.hoverUntil=t.RISE_FRAMES+s;
- const e=-Math.PI/2+(Math.random()-.5)*(2*Math.PI/3);
- this.riseVx=Math.cos(e)*t.RISE_SPEED,this.riseVy=Math.sin(e)*t.RISE_SPEED}
- calculateTrajectory(){
- }
- execute(){
- if(!this.removed)if(this.flightTimer++,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.flightTimer>=t.MAX_FLIGHT)this.explode();
- else{
- if(this.flightTimer<=t.RISE_FRAMES?(this.vx=this.riseVx,this.vy=this.riseVy):this.flightTimer<=this.hoverUntil?(this.vx=0,this.vy=0):this.isDiving=!0,this.isDiving&&this.target&&!this.target.removed){
- const i=this.target.x-this.x,s=this.target.y-this.y,e=Math.sqrt(i*i+s*s);
- if(e<t.DIVE_SPEED+2)return void this.explode();
- this.vx=i/e*t.DIVE_SPEED,this.vy=s/e*t.DIVE_SPEED}
- this.x+=this.vx,this.y+=this.vy,0===this.vx&&0===this.vy||(this.rotation=Math.atan2(this.vy,this.vx))}
- }
- explode(){
- var i;
- const s=this.owner,e=mJ.getEffect(yq.CrowExplosion1);
- if(e.scale.set(2.5),e.x=this.x,e.y=this.y,e.start(30),YG.getInstance().addChild(e),s){
- const e=t.EXPLODE_RANGE+this.explodeRangeBonus,n=e*e,h=t.EXPLODE_DMG+this.explodeDmgBonus;
- let r=0;
- for(const o of s.enemyList){
- if(r>=t.EXPLODE_MAX_TARGETS)break;
- if(!o.isAlive||o.isUntagetable)continue;
- const e=o.x-this.x,a=o.y-this.y;
- if(e*e+a*a<=n){
- const t=o.isAlive;
- s.doDamage(o,this.damagePercent*h,!0),r++,!t||o.isAlive||this.isLordCrow||null==(i=s.onCrowKill)||i.call(s)}
- }
- }
- super.remove()}
- remove(){
- this.explode()}
- }
- ;
- Kt(kZ,"CrowCompanion1"),zt(kZ,"EXPLODE_DMG",.5),zt(kZ,"EXPLODE_RANGE",75),zt(kZ,"EXPLODE_MAX_TARGETS",2),zt(kZ,"RISE_SPEED",9),zt(kZ,"RISE_FRAMES",14),zt(kZ,"HOVER_FRAMES_MIN",24),zt(kZ,"HOVER_FRAMES_MAX",36),zt(kZ,"DIVE_SPEED",13),zt(kZ,"MAX_FLIGHT",130);
- let OZ=kZ;
- const IZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"flightTimer",0),zt(this,"currentAngle",0),zt(this,"targetX",0),zt(this,"targetY",0)}
- initializeTextureName(){
- this.className=wJ.CrowGuidedBall1,this.textureName=wJ.DarkMageBall1}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=4,this.incFrame=1,this.weaponScale=1.6}
- setData(t=1){
- super.setData(t),this.flightTimer=0,this.currentAngle=Math.atan2(this.vy,this.vx),this.visible=!0,this.removed=!1,this.sp&&this.sp.scale.set(1.6)}
- calculateTrajectory(){
- }
- execute(){
- if(this.removed)return;
- if(this.flightTimer++,this.flightTimer>=t.LIFETIME)return void this.explode();
- if(this.flightTimer>t.DRIFT_FRAMES){
- let i=Math.atan2(this.targetY-this.y,this.targetX-this.x)-this.currentAngle;
- for(;
- i>Math.PI;
- )i-=2*Math.PI;
- for(;
- i<-Math.PI;
- )i+=2*Math.PI;
- const s=Math.min(1,(this.flightTimer-t.DRIFT_FRAMES)/t.TURN_ACCEL_F),e=t.TURN_RATE_BASE+(t.TURN_RATE_MAX-t.TURN_RATE_BASE)*s,n=Math.max(-e,Math.min(e,i));
- this.currentAngle+=n}
- this.vx=Math.cos(this.currentAngle)*this.speed,this.vy=Math.sin(this.currentAngle)*this.speed,this.rotation=this.currentAngle,this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0);
- const i=Math.floor(this.currentFrame);
- if(this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900)return void this.explode();
- const s=this.targetX-this.x,e=this.targetY-this.y;
- s*s+e*e<=t.ARRIVE_DIST*t.ARRIVE_DIST&&this.explode()}
- explode(){
- const i=mJ.getEffect(yq.AbyssSkillExplosion1);
- if(i.scale.set(1.7),i.x=this.x,i.y=this.y,i.start(20),YG.getInstance().addChild(i),this.owner){
- const i=t.EXPLODE_RANGE*t.EXPLODE_RANGE,s=[];
- for(const t of this.owner.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- const e=t.x-this.x,n=t.y-this.y;
- e*e+n*n<=i&&s.push(t)}
- s.sort((t,i)=>(t.x-this.x)**2+(t.y-this.y)**2-((i.x-this.x)**2+(i.y-this.y)**2));
- const e=Math.min(t.EXPLODE_MAX,s.length);
- for(let t=0;
- t<e;
- t++)this.owner.doDamage(s[t],this.damagePercent,!0)}
- super.remove()}
- remove(){
- this.explode()}
- }
- ;
- Kt(IZ,"CrowGuidedBall1"),zt(IZ,"LIFETIME",120),zt(IZ,"EXPLODE_RANGE",95),zt(IZ,"EXPLODE_MAX",3),zt(IZ,"ARRIVE_DIST",12),zt(IZ,"DRIFT_FRAMES",6),zt(IZ,"TURN_RATE_BASE",.05),zt(IZ,"TURN_RATE_MAX",.11),zt(IZ,"TURN_ACCEL_F",30);
- let xZ=IZ;
- const NZ=class t extends bJ{
- constructor(){
- super(...arguments),zt(this,"flightTimer",0)}
- initializeTextureName(){
- this.className=wJ.CrowFeatherShot1,this.textureName=wJ.CrowKnightBullet1,this.sheetName="Game1",this.scale.set(t.SCALE)}
- initializeData(){
- this.hitClassName="MagicalHitEffect",this.g=0,this.speed=14,this.flyEnd=1,this.incFrame=0,this.flightTimer=0}
- setData(i=1){
- super.setData(i),this.flightTimer=0,this.visible=!0,this.removed=!1,this.scale.set(t.SCALE)}
- play(){
- this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"MagicalHitEffect",(this.battleController||zii.getInstance()).addWeapon(this)}
- calculateTrajectory(){
- }
- execute(){
- if(this.removed)return;
- if(this.flightTimer++,this.flightTimer>=t.LIFETIME)return void super.remove();
- if(this.x+=this.vx,this.y+=this.vy,this.x<-100||this.x>900||this.y<-100||this.y>900)return void super.remove();
- if(!this.owner)return;
- const i=t.HIT_RADIUS*t.HIT_RADIUS;
- for(const t of this.owner.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- const s=t.x-this.x,e=t.y-this.y;
- if(s*s+e*e<=i)return this.owner.doDamage(t,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),void super.remove()}
- }
- }
- ;
- Kt(NZ,"CrowFeatherShot1"),zt(NZ,"LIFETIME",60),zt(NZ,"HIT_RADIUS",14),zt(NZ,"SCALE",.55);
- let PZ=NZ;
- var RZ=(t=>(t[t.NONE=0]="NONE",t[t.OrcHunter1_RANGEEVADE_BUFF=1]="OrcHunter1_RANGEEVADE_BUFF",t[t.OrcRapterRider1_MOVESPEED_DEBUFF=2]="OrcRapterRider1_MOVESPEED_DEBUFF",t[t.Succubus1_MOVESPEED_BUFF=3]="Succubus1_MOVESPEED_BUFF",t[t.Succubus1_ATTACKSPEED_BUFF=4]="Succubus1_ATTACKSPEED_BUFF",t[t.ScorpionPoisonBullet_MOVESPEED_DEBUFF=5]="ScorpionPoisonBullet_MOVESPEED_DEBUFF",t[t.ScorpionPoisonBullet_ATTACKSPEED_DEBUFF=6]="ScorpionPoisonBullet_ATTACKSPEED_DEBUFF",t[t.DrillSl1_PENETRATE_BUFF=11]="DrillSl1_PENETRATE_BUFF",t[t.DrillSl1_SKILL2_BUFF=12]="DrillSl1_SKILL2_BUFF",t[t.DrillSl1_SKILL3_BUFF=13]="DrillSl1_SKILL3_BUFF",t[t.DrillSl1_SKILL4_BUFF=14]="DrillSl1_SKILL4_BUFF",t[t.DrillSl1_ROSTER_BUFF=15]="DrillSl1_ROSTER_BUFF",t[t.BombSl1_SKILL2_BUFF=21]="BombSl1_SKILL2_BUFF",t[t.BombSl1_SKILL3_BUFF=22]="BombSl1_SKILL3_BUFF",t[t.BombSl1_SKILL4_BUFF=23]="BombSl1_SKILL4_BUFF",t[t.BombSl1_ROSTER_BUFF=24]="BombSl1_ROSTER_BUFF",t[t.NurSl1_SKILL2_BUFF=31]="NurSl1_SKILL2_BUFF",t[t.NurSl1_ROSTER_BUFF=32]="NurSl1_ROSTER_BUFF",t[t.MagmaSl1_SKILL2_BUFF=41]="MagmaSl1_SKILL2_BUFF",t[t.MagmaSl1_SKILL3_BUFF=42]="MagmaSl1_SKILL3_BUFF",t[t.MagmaSl1_ROSTER_BUFF=43]="MagmaSl1_ROSTER_BUFF",t[t.TreebarkSl1_SKILL2_BUFF=51]="TreebarkSl1_SKILL2_BUFF",t[t.TreebarkSl1_SKILL3_BUFF=52]="TreebarkSl1_SKILL3_BUFF",t[t.TreebarkSl1_ROSTER_BUFF=53]="TreebarkSl1_ROSTER_BUFF",t[t.IcespearSl1_SKILL2_BUFF=61]="IcespearSl1_SKILL2_BUFF",t[t.IcespearSl1_SKILL3_BUFF=62]="IcespearSl1_SKILL3_BUFF",t[t.IcespearSl1_SKILL4_BUFF=63]="IcespearSl1_SKILL4_BUFF",t[t.IcespearSl1_ROSTER_BUFF=64]="IcespearSl1_ROSTER_BUFF",t[t.VinewhipSl1_SKILL2_BUFF=71]="VinewhipSl1_SKILL2_BUFF",t[t.VinewhipSl1_SKILL3_BUFF=72]="VinewhipSl1_SKILL3_BUFF",t[t.VinewhipSl1_SKILL4_BUFF=73]="VinewhipSl1_SKILL4_BUFF",t[t.VinewhipSl1_ROSTER_BUFF=74]="VinewhipSl1_ROSTER_BUFF",t[t.FlamecannonSl1_SKILL2_BUFF=81]="FlamecannonSl1_SKILL2_BUFF",t[t.FlamecannonSl1_SKILL3_BUFF=82]="FlamecannonSl1_SKILL3_BUFF",t[t.FlamecannonSl1_SKILL4_BUFF=83]="FlamecannonSl1_SKILL4_BUFF",t[t.FlamecannonSl1_ROSTER_BUFF=84]="FlamecannonSl1_ROSTER_BUFF",t[t.IcebowSl1_SKILL2_BUFF=91]="IcebowSl1_SKILL2_BUFF",t[t.IcebowSl1_SKILL3_BUFF=92]="IcebowSl1_SKILL3_BUFF",t[t.IcebowSl1_SKILL4_BUFF=93]="IcebowSl1_SKILL4_BUFF",t[t.IcebowSl1_ROSTER_BUFF=94]="IcebowSl1_ROSTER_BUFF",t[t.FlowerSl1_SKILL2_BUFF=101]="FlowerSl1_SKILL2_BUFF",t[t.FlowerSl1_ROSTER_BUFF=102]="FlowerSl1_ROSTER_BUFF",t[t.HotpoolSl1_SKILL2_BUFF=111]="HotpoolSl1_SKILL2_BUFF",t[t.HotpoolSl1_ROSTER_BUFF=112]="HotpoolSl1_ROSTER_BUFF",t[t.HotpoolSl1_DAMAGE_BUFF=113]="HotpoolSl1_DAMAGE_BUFF",t[t.GlacierSl1_SKILL2_BUFF=114]="GlacierSl1_SKILL2_BUFF",t[t.GlacierSl1_SKILL3_BUFF=115]="GlacierSl1_SKILL3_BUFF",t[t.GlacierSl1_ROSTER_BUFF=116]="GlacierSl1_ROSTER_BUFF",t[t.GlacierSl1_SKILL4_BUFF=117]="GlacierSl1_SKILL4_BUFF",t[t.FladiatorSl1_SKILL2_BUFF=118]="FladiatorSl1_SKILL2_BUFF",t[t.FladiatorSl1_SKILL3_BUFF=119]="FladiatorSl1_SKILL3_BUFF",t[t.FladiatorSl1_SKILL4_BUFF=120]="FladiatorSl1_SKILL4_BUFF",t[t.FladiatorSl1_ROSTER_BUFF=121]="FladiatorSl1_ROSTER_BUFF",t[t.FladiatorSl1_CRTICAL_BUFF=122]="FladiatorSl1_CRTICAL_BUFF",t[t.ManaBloomSl1_SKILL2_BUFF=123]="ManaBloomSl1_SKILL2_BUFF",t[t.ManaBloomSl1_SKILL3_BUFF=124]="ManaBloomSl1_SKILL3_BUFF",t[t.ManaBloomSl1_SKILL4_BUFF=125]="ManaBloomSl1_SKILL4_BUFF",t[t.ManaBloomSl1_ROSTER_BUFF=126]="ManaBloomSl1_ROSTER_BUFF",t[t.ClearSl1_SKILL2_BUFF=127]="ClearSl1_SKILL2_BUFF",t[t.ClearSl1_ROSTER_BUFF=128]="ClearSl1_ROSTER_BUFF",t[t.SlimeRacing_DAMAGE_BUFF=129]="SlimeRacing_DAMAGE_BUFF",t[t.SlimeRacing_ATTACK_SPEED_BUFF=130]="SlimeRacing_ATTACK_SPEED_BUFF",t[t.SlimeRacing_MOVE_SPEED_BUFF=131]="SlimeRacing_MOVE_SPEED_BUFF",t[t.RACE_REVIVE_MOVE_SPEED_BUFF=132]="RACE_REVIVE_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_MOVE_SPEED_BUFF=133]="RACE_CHEERUP_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_ATTACK_SPEED_BUFF=134]="RACE_CHEERUP_ATTACK_SPEED_BUFF",t[t.EXCAVATION_ENCOUNTER_DEFENSE_BUFF=135]="EXCAVATION_ENCOUNTER_DEFENSE_BUFF",t[t.SteelbashSl1_SKILL2_BUFF=136]="SteelbashSl1_SKILL2_BUFF",t[t.SteelbashSl1_SKILL3_BUFF=137]="SteelbashSl1_SKILL3_BUFF",t[t.SteelbashSl1_ROSTER_BUFF=138]="SteelbashSl1_ROSTER_BUFF",t[t.FlamdancerSl1_SKILL2_BUFF=139]="FlamdancerSl1_SKILL2_BUFF",t[t.FlamdancerSl1_SKILL3_BUFF=140]="FlamdancerSl1_SKILL3_BUFF",t[t.FlamdancerSl1_ROSTER_BUFF=141]="FlamdancerSl1_ROSTER_BUFF",t[t.FrostreaverSl1_SKILL2_BUFF=142]="FrostreaverSl1_SKILL2_BUFF",t[t.FrostreaverSl1_SKILL3_BUFF=143]="FrostreaverSl1_SKILL3_BUFF",t[t.FrostreaverSl1_ROSTER_BUFF=144]="FrostreaverSl1_ROSTER_BUFF",t[t.ThornjaSl1_SKILL2_BUFF=145]="ThornjaSl1_SKILL2_BUFF",t[t.ThornjaSl1_SKILL3_BUFF=146]="ThornjaSl1_SKILL3_BUFF",t[t.ThornjaSl1_SKILL4_BUFF=147]="ThornjaSl1_SKILL4_BUFF",t[t.ThornjaSl1_ROSTER_BUFF=148]="ThornjaSl1_ROSTER_BUFF",t[t.RACE_MAPTYPE1_ATKSPD_BUFF=149]="RACE_MAPTYPE1_ATKSPD_BUFF",t[t.RACE_MAPTYPE1_MOVESPD_BUFF=150]="RACE_MAPTYPE1_MOVESPD_BUFF",t[t.GearbladeSl1_SKILL2_BUFF=151]="GearbladeSl1_SKILL2_BUFF",t[t.GearbladeSl1_SKILL3_BUFF=152]="GearbladeSl1_SKILL3_BUFF",t[t.GearbladeSl1_SKILL4_BUFF=153]="GearbladeSl1_SKILL4_BUFF",t[t.GearbladeSl1_ROSTER_BUFF=154]="GearbladeSl1_ROSTER_BUFF",t[t.EmbersageSl1_SKILL2_BUFF=155]="EmbersageSl1_SKILL2_BUFF",t[t.EmbersageSl1_ROSTER_BUFF=156]="EmbersageSl1_ROSTER_BUFF",t[t.TidecallerSl1_SKILL2_BUFF=157]="TidecallerSl1_SKILL2_BUFF",t[t.TidecallerSl1_ROSTER_BUFF=158]="TidecallerSl1_ROSTER_BUFF",t[t.GrovewardenSl1_SKILL2_BUFF=159]="GrovewardenSl1_SKILL2_BUFF",t[t.GrovewardenSl1_SKILL3_BUFF=160]="GrovewardenSl1_SKILL3_BUFF",t[t.GrovewardenSl1_ROSTER_BUFF=161]="GrovewardenSl1_ROSTER_BUFF",t[t.FrankenSl1_SKILL2_BUFF=162]="FrankenSl1_SKILL2_BUFF",t[t.FrankenSl1_ROSTER_BUFF=164]="FrankenSl1_ROSTER_BUFF",t[t.WolfSl1_SKILL2_BUFF=165]="WolfSl1_SKILL2_BUFF",t[t.WolfSl1_SKILL3_BUFF=166]="WolfSl1_SKILL3_BUFF",t[t.WolfSl1_SKILL4_BUFF=167]="WolfSl1_SKILL4_BUFF",t[t.WolfSl1_ROSTER_BUFF=168]="WolfSl1_ROSTER_BUFF",t[t.BatSl1_SKILL2_BUFF=169]="BatSl1_SKILL2_BUFF",t[t.BatSl1_SKILL3_BUFF=170]="BatSl1_SKILL3_BUFF",t[t.BatSl1_SKILL4_BUFF=171]="BatSl1_SKILL4_BUFF",t[t.BatSl1_ROSTER_BUFF=172]="BatSl1_ROSTER_BUFF",t[t.SkullSl1_SKILL2_BUFF=173]="SkullSl1_SKILL2_BUFF",t[t.SkullSl1_ROSTER_BUFF=174]="SkullSl1_ROSTER_BUFF",t[t.Bomber1_ATKSPD_BUFF=200]="Bomber1_ATKSPD_BUFF",t[t.Bomber1_MOVESPD_BUFF=201]="Bomber1_MOVESPD_BUFF",t[t.TigerRider1_ATKSPD_BUFF=210]="TigerRider1_ATKSPD_BUFF",t[t.TigerRider1_MOVESPD_BUFF=211]="TigerRider1_MOVESPD_BUFF",t[t.Sylphid1_ATKSPD_STACK=220]="Sylphid1_ATKSPD_STACK",t[t.WyvernRider1_ATKSPD_BUFF=230]="WyvernRider1_ATKSPD_BUFF",t[t.WyvernRider1_MOVESPD_BUFF=231]="WyvernRider1_MOVESPD_BUFF",t[t.WyvernRider1_ATKDMG_BUFF=232]="WyvernRider1_ATKDMG_BUFF",t[t.WingKnight1_FLASH_BUFF=240]="WingKnight1_FLASH_BUFF",t[t.WingKnight1_DASH_BUFF=241]="WingKnight1_DASH_BUFF",t[t.WingKnight1_BERSERK_ATKSPD=242]="WingKnight1_BERSERK_ATKSPD",t[t.WingKnight1_BERSERK_ATKDMG=243]="WingKnight1_BERSERK_ATKDMG",t[t.WingKnight1_FLASH_MOVSPD=244]="WingKnight1_FLASH_MOVSPD",t[t.WingKnight1_FLASH_ATKSPD=245]="WingKnight1_FLASH_ATKSPD",t[t.BladeMaster1_KILL_ATKSPD=250]="BladeMaster1_KILL_ATKSPD",t[t.BladeMaster1_KILL_ATKDMG=251]="BladeMaster1_KILL_ATKDMG",t[t.BladeMaster1_RANGE_ATKSPD=252]="BladeMaster1_RANGE_ATKSPD",t[t.BladeMaster1_MELEE_MOVESPD=253]="BladeMaster1_MELEE_MOVESPD",t[t.BladeMaster1_MELEE_ATKDMG=254]="BladeMaster1_MELEE_ATKDMG",t[t.BladeMaster1_RUSH_ATKSPD=255]="BladeMaster1_RUSH_ATKSPD",t[t.BladeMaster1_RUSH_MOVESPD=256]="BladeMaster1_RUSH_MOVESPD",t[t.Aladin1_SAND_SLOW=260]="Aladin1_SAND_SLOW",t[t.Aladin1_BLESSING_ATKDMG=261]="Aladin1_BLESSING_ATKDMG",t[t.Druid1_VINE_ATKDMG=270]="Druid1_VINE_ATKDMG",t[t.Druid1_VINE_DEFENSE=271]="Druid1_VINE_DEFENSE",t[t.CrowKnight1_ORBIT_ATKSPD=280]="CrowKnight1_ORBIT_ATKSPD",t[t.CrowKnight1_ORBIT_ATKDMG=281]="CrowKnight1_ORBIT_ATKDMG",t[t.RaidEmblemRogue_ACTIVE_ATKSPD=300]="RaidEmblemRogue_ACTIVE_ATKSPD",t[t.RaidEmblemRogue_ACTIVE_ATKDMG=301]="RaidEmblemRogue_ACTIVE_ATKDMG",t[t.RaidEmblemMage_BOSS_ATKSPD=302]="RaidEmblemMage_BOSS_ATKSPD",t[t.RaidEmblemMage_BOSS_DEFENSE=303]="RaidEmblemMage_BOSS_DEFENSE",t[t.BURN_DEBUFF=1001]="BURN_DEBUFF",t[t.BLOODY_DEBUFF=1002]="BLOODY_DEBUFF",t[t.RACE_ROLETYPE_MOVE_SPEED_DEBUFF=1003]="RACE_ROLETYPE_MOVE_SPEED_DEBUFF",t[t.RACE_ROLETYPE_DAMAGE_DEBUFF=1004]="RACE_ROLETYPE_DAMAGE_DEBUFF",t[t.EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF=1005]="EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF",t[t.RACE_MAPTYPE2_DEBUFF=1006]="RACE_MAPTYPE2_DEBUFF",t[t.TidecallerSl1_SKILL2_DEBUFF=1007]="TidecallerSl1_SKILL2_DEBUFF",t[t.RAID_BOSS1_DEBUFF=1008]="RAID_BOSS1_DEBUFF",t[t.MOSSGOLEM_DEFENSE_BUFF=1009]="MOSSGOLEM_DEFENSE_BUFF",t))(RZ||{
- }
- );
- const DZ=class t extends bJ{
- initializeTextureName(){
- this.className=wJ.ScorpionPoisonBullet,this.sheetName="RaidBattle",this.textureName="PoisonBullet"}
- initializeData(){
- this.hitClassName="",this.g=0,this.speed=18,this.flyEnd=2,this.incFrame=1,this.minT=8,this.maxT=42,this.orientToPath=!0,this.weaponScale=1}
- onHit(){
- this.owner&&this.target&&this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.target.isAlive&&(this.target.poison(t.POISON_DEBUFF_DURATION),this.target.addMoveSpeedBuff(RZ.ScorpionPoisonBullet_MOVESPEED_DEBUFF,t.POISON_MOVE_SPEED_DEBUFF,t.POISON_DEBUFF_DURATION,!0),this.target.addAttackSpeedBuff(RZ.ScorpionPoisonBullet_ATTACKSPEED_DEBUFF,t.POISON_ATTACK_SPEED_DEBUFF,t.POISON_DEBUFF_DURATION,!0))),this.displayExplodeEffect(),this.remove()}
- displayExplodeEffect(){
- const t=mJ.getEffect(yq.PoisonExplodeEffect);
- t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||zii.getInstance()),t.start(24),YG.getInstance().addChild(t)}
- }
- ;
- Kt(DZ,"ScorpionPoisonBullet"),zt(DZ,"POISON_DEBUFF_DURATION",420),zt(DZ,"POISON_MOVE_SPEED_DEBUFF",-.5),zt(DZ,"POISON_ATTACK_SPEED_DEBUFF",-.3);
- let LZ=DZ;
DetailPopupLayer 1 hunks, 3073 statements
+ var OU=(t=>(t.IDLE="idle",t.DUNGEON="dungeon",t.RAID="raid",t.PVP="pvp",t.PVP2="pvp2",t.TOWER="tower",t.GUILD_WAR="guildWar",t))(OU||{
+ }
+ ),xU=(t=>(t.RUNNING="running",t.PAUSED="paused",t.STOPPED="stopped",t))(xU||{
+ }
+ );
+ const RU=class extends oS{
+ constructor(){
+ super()}
+ removeAll(){
+ this.removeChildren()}
+ }
+ ;
+ Vt(RU,"DetailPopupLayer");
+ let NU=RU;
+ const PU=class extends Ge{
+ constructor(){
+ super(),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","UI_SKILL1_ON"))),Kt(this,"iconOff",new He(QA.getTexture("UI_Ekkorr","UI_SKILL1_OFF"))),Kt(this,"lblTime",new JD("30",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_20)),Kt(this,"container",new Ge),Kt(this,"w",0),Kt(this,"onClick",Vt(()=>{
+ }
+ ,"onClick")),Kt(this,"durationFrames",1350),Kt(this,"remainingFrames",0),Kt(this,"displayCount",0),Kt(this,"id",0),Kt(this,"canUse",!1),Kt(this,"_enabled",!0),Kt(this,"_started",!1),this.container.scale.set(.8),this.container.addChild(this.icon),this.icon.x=.5*-this.icon.width,this.icon.y=.5*-this.icon.height,this.container.addChild(this.iconOff),this.iconOff.x=.5*-this.iconOff.width,this.iconOff.y=.5*-this.iconOff.height,this.iconOff.visible=!1,this.container.x=.5*this.container.width,this.container.y=.5*this.container.height,this.addChild(this.container),this.lblTime.text="30",this.addChild(this.lblTime),this.w=this.container.width,this.lblTime.x=(this.w-this.lblTime.width)/2,this.lblTime.y=(this.container.height-this.lblTime.height)/2,this.lblTime.eventMode="none",this.icon.eventMode="static",this.icon.on("pointerdown",this.onDown,this),this.icon.on("pointerup",this.onUp,this),this.icon.on("pointerupoutside",this.onUp,this),this.alpha=.9}
+ onDown(){
+ 0!=this.enabled&&0!=this.canUse&&this.container.scale.set(.75)}
+ onUp(){
+ 0!=this.enabled&&0!=this.canUse&&(this.container.scale.set(.8),this.canUse=!1,this.iconOff.visible=!0,$L(),this.onClick&&this.onClick(),this.start())}
+ start(){
+ 0!=this.enabled&&(this.remainingFrames=this.durationFrames,this.displayCount=0,this.canUse=!1,this.iconOff.visible=!0,this.icon.visible=!1,this.lblTime.visible=!0,this.updateLabel(),qG.getInstance().add(this.onEnter,this))}
+ onEnter(){
+ if(this.remainingFrames--,this.remainingFrames<=0)return qG.getInstance().remove(this.onEnter,this),this.iconOff.visible=!1,this.icon.visible=!0,this.lblTime.visible=!1,void(this.canUse=!0);
+ ++this.displayCount>=15&&(this.displayCount=0,this.updateLabel())}
+ updateLabel(){
+ const t=Math.ceil(this.remainingFrames/60);
+ this.lblTime.text=t.toString(),this.lblTime.x=(this.w-this.lblTime.width)/2}
+ setReady(){
+ 0!=this._enabled&&(qG.getInstance().remove(this.onEnter,this),this.remainingFrames=0,this.displayCount=0,this.canUse=!0,this.iconOff.visible=!1,this.icon.visible=!0,this.lblTime.visible=!1,this._started=!0)}
+ set enabled(t){
+ this._enabled=t,t?(this.icon.visible=!0,this._started||(this._started=!0,this.start())):(this.iconOff.visible=!0,this.icon.visible=!1,this.lblTime.visible=!1,this.canUse=!1)}
+ get enabled(){
+ return this._enabled}
+ setSkillIcon(t){
+ this.icon.texture=QA.getTexture("UI_Ekkorr",`UI_SKILL${
+ t}
+ _ON`),this.iconOff.texture=QA.getTexture("UI_Ekkorr",`UI_SKILL${
+ t}
+ _OFF`)}
+ }
+ ;
+ Vt(PU,"ActiveSkillButton");
+ let DU=PU;
+ var LU=(t=>(t.DarkLightning="DarkLightning",t.DoomBringer="DoomBringer",t.Lightening="Lightening",t.HeavenSword="HeavenSword",t.ActiveLightning="ActiveLightning",t.ActiveRevive="ActiveRevive",t.ActiveAngel="ActiveAngel",t))(LU||{
+ }
+ );
+ const GU=class extends Ge{
+ constructor(){
+ super(),Kt(this,"sp"),Kt(this,"textures"),Kt(this,"sheetName","ActiveSkill"),Kt(this,"textureName",""),Kt(this,"className",LU.DarkLightning),Kt(this,"count",0),Kt(this,"incFrame",.6),Kt(this,"endFrame",10),Kt(this,"loop",!1),Kt(this,"currentFrame",0),Kt(this,"delay",0),Kt(this,"onComplete",Vt(()=>{
+ }
+ ,"onComplete")),this.eventMode="none",this.initialize(),this.createUI()}
+ initialize(){
+ }
+ async createUI(){
+ ""===this.textureName&&(this.textureName=this.className),this.textures=QA.getTextures(this.sheetName,this.textureName),this.sp=new He(this.textures[0]),this.addChild(this.sp),this.scale.set(1),this.endFrame=this.textures.length}
+ start(t=-1){
+ -1==t&&(t=this.endFrame),this.count=1*t/this.incFrame,this.currentFrame=0,this.visible=!1,qG.getInstance().add(this.onEnter,this)}
+ onEnter(){
+ if(this.delay-- >0)this.visible=!1;
+ else{
+ if(this.visible=!0,this.currentFrame+=this.incFrame,this.currentFrame>=this.endFrame){
+ if(!this.loop)return void this.remove();
+ this.currentFrame=0}
+ this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.count--<0&&this.remove()}
+ }
+ remove(){
+ this.onComplete(this.x,this.y),this.removeAllListeners(),this.removeFromParent(),qG.getInstance().remove(this.onEnter,this)}
+ }
+ ;
+ Vt(GU,"BaseActiveSkill");
+ let BU=GU;
+ const UU=class extends BU{
+ constructor(){
+ super()}
+ initialize(){
+ this.className=LU.DarkLightning}
+ }
+ ;
+ Vt(UU,"DarkLightening");
+ let FU=UU;
+ const HU=class extends Ge{
+ constructor(){
+ super(),Kt(this,"className",LU.DarkLightning),Kt(this,"sheetName",""),Kt(this,"currentFrame",0),Kt(this,"duration",120),Kt(this,"_uiCreated",!1),Kt(this,"onComplete",Vt(()=>{
+ }
+ ,"onComplete")),Kt(this,"onDealDamage",Vt(()=>{
+ }
+ ,"onDealDamage")),this.eventMode="none",this.initialize()}
+ initialize(){
+ }
+ createUI(){
+ }
+ getTexture(t){
+ return QA.getTexture(this.sheetName,t)}
+ getTextures(t){
+ return QA.getTextures(this.sheetName,t,!0)}
+ start(){
+ this._uiCreated||(this.createUI(),this._uiCreated=!0),this.currentFrame=0,this.visible=!0,this.onStart(),qG.getInstance().add(this.onEnter,this)}
+ onStart(){
+ }
+ onEnter(){
+ this.updateFrame(this.currentFrame),++this.currentFrame>=this.duration&&this.remove()}
+ updateFrame(t){
+ }
+ remove(){
+ this.onComplete(this.x,this.y),this.onComplete=()=>{
+ }
+ ,this.onDealDamage=()=>{
+ }
+ ,this.removeAllListeners(),this.removeFromParent(),qG.getInstance().remove(this.onEnter,this),AF.getInstance().addToRecycleList(this)}
+ }
+ ;
+ Vt(HU,"CompositeActiveSkill");
+ let WU=HU;
+ const $U=class extends WU{
+ constructor(){
+ super(...arguments),Kt(this,"swordMain"),Kt(this,"swordEnd"),Kt(this,"crackedEarth"),Kt(this,"lineEffect"),Kt(this,"bottomEffect1"),Kt(this,"bottomEffect2"),Kt(this,"wave"),Kt(this,"lineEffectTextures"),Kt(this,"lineEffectTotal",5),Kt(this,"waveStepScale",0),Kt(this,"waveStepAlpha",0),Kt(this,"waveDelay",0),Kt(this,"waveActive",!1),Kt(this,"shakeBaseX",0),Kt(this,"shakeBaseY",0),Kt(this,"hasDamaged",!1),Kt(this,"lineFrame",0)}
+ initialize(){
+ this.className=LU.DoomBringer,this.sheetName="DoomBringer",this.duration=125}
+ createUI(){
+ this.swordMain=new He(this.getTexture("SwordMain")),this.swordMain.pivot.set(50,156),this.swordMain.scale.set(2.2),this.swordMain.visible=!1,this.swordEnd=new He(this.getTexture("SwordEnd")),this.swordEnd.pivot.set(50,108),this.swordEnd.scale.set(2.2),this.swordEnd.visible=!1,this.crackedEarth=new He(this.getTexture("CrackedEarth")),this.crackedEarth.pivot.set(202,25),this.crackedEarth.scale.set(2),this.crackedEarth.alpha=0,this.lineEffectTextures=this.getTextures("LineBgEffect"),this.lineEffectTotal=this.lineEffectTextures.length-1,this.lineEffect=new He(this.lineEffectTextures[0]),this.lineEffect.pivot.set(118,76),this.lineEffect.scale.set(3),this.lineEffect.alpha=0,this.bottomEffect1=new He(this.getTexture("BottomEffect")),this.bottomEffect1.pivot.set(34,11),this.bottomEffect1.alpha=0,this.bottomEffect2=new He(this.getTexture("BottomEffect")),this.bottomEffect2.pivot.set(34,11),this.bottomEffect2.alpha=0,this.wave=new He(this.getTexture("ExWave")),this.wave.pivot.set(79,78),this.wave.alpha=0,this.addChild(this.crackedEarth),this.addChild(this.lineEffect),this.addChild(this.bottomEffect1),this.addChild(this.bottomEffect2),this.addChild(this.wave),this.addChild(this.swordMain),this.addChild(this.swordEnd)}
+ onStart(){
+ const t=HB.getInstance();
+ this.shakeBaseX=t.x,this.shakeBaseY=t.y,jhi.zoomEnabled=!1,this.waveStepScale=.24,this.waveStepAlpha=-.05,this.wave.scale.set(.2),this.wave.alpha=1,this.waveDelay=14,this.waveActive=!0,this.lineFrame=0,this.hasDamaged=!1}
+ updateFrame(t){
+ this.updateSword(t),this.updateEarthCrack(t),this.updateBottomEffect1(t),this.updateBottomEffect2(t),this.updateWave(t),this.updateScreenShake(t),this.updateCombat(t)}
+ updateCombat(t){
+ 15===t&&(this.onDealDamage("hit",this.x,this.y),this.hasDamaged||(this.hasDamaged=!0,this.onDealDamage("damage",this.x,this.y)))}
+ remove(){
+ HB.getInstance().x=this.shakeBaseX,HB.getInstance().y=this.shakeBaseY,jhi.zoomEnabled=!0,super.remove()}
+ updateScreenShake(t){
+ const i=HB.getInstance(),s=this.shakeBaseX,e=this.shakeBaseY;
+ t>=14&&t<34?(i.x=s+Math.floor(30*Math.random()-15),i.y=e+(VU[t-14]??0)):t>=34&&t<84&&t%2==0?(i.x=s+Math.floor(20*Math.random()-10),i.y=e+Math.floor(20*Math.random()-10)):(i.x=s,i.y=e);
+ const n=30;
+ i.x<s-n&&(i.x=s-n),i.x>s+n&&(i.x=s+n),i.y<e-n&&(i.y=e-n),i.y>e+n&&(i.y=e+n)}
+ updateSword(t){
+ const i=KU[t]??0,s=qU[t]??0,e=zU[t]??0;
+ i>-10?this.swordMain.visible=!1:(this.swordMain.visible=!0,this.swordMain.y=i+175),this.swordEnd.alpha=s,this.swordEnd.visible=s>0,this.swordEnd.y=e}
+ updateEarthCrack(t){
+ ++this.lineFrame>this.lineEffectTotal&&(this.lineFrame=0),this.lineEffect.texture=this.lineEffectTextures[this.lineFrame],this.lineEffect.alpha=YU[t]??0,this.crackedEarth.alpha=XU[t]??0}
+ updateBottomEffect1(t){
+ const i=JU[t]??0,s=QU[t]??0;
+ this.bottomEffect1.alpha=i,this.bottomEffect1.scale.set(s)}
+ updateBottomEffect2(t){
+ const i=ZU[t]??0,s=tF[t]??0;
+ this.bottomEffect2.alpha=i,this.bottomEffect2.scale.set(s)}
+ updateWave(t){
+ if(this.waveActive){
+ if(this.waveDelay>0)return this.waveDelay--,void(this.wave.alpha=0);
+ this.wave.scale.x+=this.waveStepScale,this.wave.scale.y=this.wave.scale.x,this.wave.alpha+=this.waveStepAlpha,this.wave.alpha<=0&&(this.wave.alpha=0,this.waveActive=!1)}
+ }
+ }
+ ;
+ Vt($U,"DoomBringer");
+ let jU=$U;
+ const VU=[30,0,-20,0,25,-20,0,20,-15,0,15,0,-10,0,10,0,-5,0,5,0],KU=[-625.55,-619.45,-609.35,-595.15,-576.95,-554.7,-528.4,-498.05,-463.65,-425.2,-382.7,-336.2,-285.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],zU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-14,-14,-17,-17,-17,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-13,-11,-10,-9,-7,-6,-5,-3,-2,-1,1,2,0,0,0,0,0,0,0,0],qU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.92578125,.8515625,.77734375,.69921875,.625,.55078125,.4765625,.40234375,.328125,.25,.17578125,.1015625,0,0,0,0,0,0,0,0],YU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.15625,.21484375,.26953125,.328125,.3828125,.4375,.49609375,.55078125,.60546875,.6640625,.71875,.77734375,.83203125,.88671875,.9453125,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9453125,.890625,.83203125,.77734375,.72265625,.66796875,.609375,.5546875,.5,.4453125,.390625,.33203125,.27734375,.22265625,.16796875,.109375,.0546875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],XU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,.33984375,.54296875,.70703125,.8359375,.92578125,.98046875,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.921875,.84765625,.76953125,.69140625,.6171875,.5390625,.4609375,.3828125,.30859375,.23046875,.15234375,.078125,0,0,0],JU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,.94140625,.87890625,.8203125,.7578125,.69921875,.63671875,.578125,.51953125,.4609375,.3984375,.33984375,.28125,.22265625,.16015625,.1015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],QU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.9040069580078125,4.4866485595703125,5.069183349609375,5.651763916015625,6.2342987060546875,6.8169403076171875,7.39947509765625,7.9821929931640625,8.564788818359375,9.147384643554688,9.729995727539062,10.312591552734375,10.895187377929688,11.477783203125,12.060150146484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],ZU=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.94140625,.87890625,.8203125,.76171875,.69921875,.640625,.58203125,.51953125,.4609375,.40234375,.33984375,.28125,.22265625,.16015625,.1015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],tF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.823974609375,4.3265380859375,4.8290557861328125,5.33160400390625,5.8341217041015625,6.3366241455078125,6.8391265869140625,7.341796875,7.84429931640625,8.34686279296875,8.849365234375,9.3519287109375,9.85443115234375,10.356948852539062,10.8594970703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],iF=class extends WU{
+ constructor(){
+ super(...arguments),Kt(this,"mainImage"),Kt(this,"waveImage"),Kt(this,"fragmentImage"),Kt(this,"mainTextures"),Kt(this,"waveTextures"),Kt(this,"fragmentTextures"),Kt(this,"skillType",0),Kt(this,"startFrame",0),Kt(this,"endFrame",0),Kt(this,"mainFrame",0),Kt(this,"repeatCount",0),Kt(this,"arrFrame",[[0,18],[19,37],[38,56],[57,75]]),Kt(this,"waveFrame",0),Kt(this,"waveActive",!1),Kt(this,"waveKeyFrames",[0,1,4,5,8,9,12,13]),Kt(this,"fragFrame",0),Kt(this,"fragActive",!1),Kt(this,"showFragments",!0),Kt(this,"hasDamaged",!1),Kt(this,"mainTriggerFrame",6)}
+ initialize(){
+ this.className=LU.Lightening,this.sheetName="Lightening",this.duration=9999}
+ createUI(){
+ this.mainTextures=this.getTextures("LighteningSkillMain"),this.waveTextures=this.getTextures("LighteningWave"),this.fragmentTextures=this.getTextures("LighteningFragments"),this.waveImage=new He(this.waveTextures[0]),this.waveImage.pivot.set(this.waveImage.width/2,this.waveImage.height/2),this.waveImage.visible=!1,this.mainImage=new He(this.mainTextures[0]),this.mainImage.visible=!1,this.fragmentImage=new He(this.fragmentTextures[0]),this.fragmentImage.pivot.set(this.fragmentImage.width/2,this.fragmentImage.height/2),this.fragmentImage.visible=!1,this.addChild(this.waveImage),this.addChild(this.mainImage),this.addChild(this.fragmentImage);
+ const t=this.mainImage.height;
+ this.waveImage.position.set(15,t),this.fragmentImage.position.set(15,t-10)}
+ onStart(){
+ this.hasDamaged=!1,this.skillType=Math.floor(4*Math.random()),this.startFrame=this.arrFrame[this.skillType][0],this.endFrame=this.arrFrame[this.skillType][1],this.mainFrame=this.startFrame,this.repeatCount=0,this.mainImage.texture=this.mainTextures[Math.floor(this.mainFrame)],this.mainImage.visible=!0,this.showFragments=Math.random()<=.5,this.waveActive=!1,this.fragActive=!1,this.waveImage.visible=!1,this.fragmentImage.visible=!1}
+ updateFrame(t){
+ this.updateMain(),this.waveActive&&this.updateWave(),this.fragActive&&this.updateFragments(),this.updateCombat()}
+ updateCombat(){
+ !this.hasDamaged&&this.mainImage.visible&&(this.hasDamaged=!0,this.onDealDamage("damage",this.x,this.y))}
+ updateMain(){
+ this.mainFrame+=.5;
+ const t=Math.floor(this.mainFrame);
+ if(t!==this.startFrame+this.mainTriggerFrame||this.waveActive||(this.waveActive=!0,this.waveFrame=0,this.waveImage.visible=!1,this.showFragments&&(this.fragActive=!0,this.fragFrame=0,this.fragmentImage.visible=!0)),t>=0&&t<this.mainTextures.length&&(this.mainImage.texture=this.mainTextures[t]),this.mainFrame===this.endFrame)this.mainImage.visible=!1;
+ else if(this.mainFrame>this.endFrame){
+ if(this.changeType(),this.repeatCount++,this.repeatCount>=2)return void this.remove();
+ this.mainImage.visible=!0}
+ }
+ changeType(){
+ this.skillType=(this.skillType+1)%4,this.startFrame=this.arrFrame[this.skillType][0],this.endFrame=this.arrFrame[this.skillType][1],this.mainFrame=this.startFrame,this.mainImage.texture=this.mainTextures[Math.floor(this.mainFrame)],this.rotation=.4*Math.random()-.2,this.waveImage.rotation=-this.rotation,this.fragmentImage.rotation=-this.rotation,this.waveActive=!1,this.fragActive=!1,this.waveImage.visible=!1,this.fragmentImage.visible=!1}
+ updateWave(){
+ this.waveFrame+=.5;
+ const t=Math.floor(this.waveFrame),i=this.waveKeyFrames.indexOf(t);
+ -1===i?this.waveImage.visible=!1:(this.waveImage.visible=!0,i<this.waveTextures.length&&(this.waveImage.texture=this.waveTextures[i])),this.waveFrame>13&&(this.waveImage.visible=!1),this.waveFrame>=24&&(this.waveFrame=0)}
+ updateFragments(){
+ this.fragFrame+=.5;
+ const t=Math.floor(this.fragFrame);
+ t>=0&&t<this.fragmentTextures.length&&(this.fragmentImage.texture=this.fragmentTextures[t]),this.fragFrame>=19&&(this.fragFrame=0)}
+ }
+ ;
+ Vt(iF,"Lightening");
+ let sF=iF;
+ const eF=class extends WU{
+ constructor(){
+ super(...arguments),Kt(this,"sword"),Kt(this,"swordEnd"),Kt(this,"swordBrighten"),Kt(this,"bottomEffect"),Kt(this,"crossEffect"),Kt(this,"lineLight"),Kt(this,"midEffect"),Kt(this,"effectY",380)}
+ initialize(){
+ this.className=LU.HeavenSword,this.sheetName="HeavenSword",this.duration=hF.length-3}
+ createUI(){
+ this.bottomEffect=new He(this.getTexture("HeavenBottomImpact")),this.bottomEffect.pivot.set(133,30),this.bottomEffect.position.set(0,this.effectY),this.sword=new He(this.getTexture("HeavenBaseSword")),this.sword.pivot.x=48.5,this.sword.position.set(0,this.effectY),this.swordEnd=new He(this.getTexture("HeavenBrokenSword")),this.swordEnd.pivot.set(63.5,-30),this.swordEnd.position.set(0,this.effectY-218.25),this.swordBrighten=new He(this.getTexture("HeavenBrightenSword")),this.swordBrighten.pivot.set(63.5,-30),this.swordBrighten.position.set(0,this.effectY-218.25),this.lineLight=new He(this.getTexture("HeavenLineLight")),this.lineLight.pivot.set(5.5,296),this.lineLight.position.set(0,this.effectY),this.crossEffect=new He(this.getTexture("HeavenCrossEffect")),this.crossEffect.pivot.set(68,103),this.crossEffect.position.set(0,this.effectY),this.midEffect=new He(this.getTexture("HeavenMidImpact")),this.midEffect.pivot.set(133,131),this.midEffect.position.set(0,this.effectY),this.addChild(this.bottomEffect),this.addChild(this.sword),this.addChild(this.swordEnd),this.addChild(this.swordBrighten),this.addChild(this.lineLight),this.addChild(this.crossEffect),this.addChild(this.midEffect)}
+ onStart(){
+ this.scale.set(.6),this.sword.visible=!1,this.swordEnd.alpha=0,this.swordBrighten.alpha=0,this.bottomEffect.alpha=0,this.bottomEffect.scale.set(0),this.crossEffect.alpha=0,this.crossEffect.scale.set(0),this.lineLight.alpha=0,this.lineLight.scale.set(0),this.midEffect.alpha=0,this.midEffect.scale.set(0)}
+ updateFrame(t){
+ this.updateSword(t),this.updateBottomEffect(t),this.updateCrossEffect(t),this.updateLineLight(t),this.updateMidEffect(t),this.updateCombat(t)}
+ updateCombat(t){
+ 23===t&&this.onDealDamage("hit",this.x,this.y),t>=23&&t<=71&&t%2==1&&this.onDealDamage("damage",this.x,this.y),44===t&&(this.onDealDamage("stun",this.x,this.y),zL.getInstance().playSFX(zL.SFX_HEAVEN_SWORD))}
+ updateSword(t){
+ const i=hF[t]??0;
+ i>-10?this.sword.visible=!1:(this.sword.visible=!0,this.sword.y=this.effectY+i+175),this.swordEnd.alpha=rF[t]??0,this.swordBrighten.alpha=oF[t]??0}
+ updateBottomEffect(t){
+ this.bottomEffect.alpha=aF[t]??0,this.bottomEffect.scale.set(cF[t]??0)}
+ updateCrossEffect(t){
+ this.crossEffect.alpha=lF[t]??0,this.crossEffect.scale.set(uF[t]??0)}
+ updateLineLight(t){
+ this.lineLight.alpha=dF[t]??0,this.lineLight.scale.set(fF[t]??0,pF[t]??0)}
+ updateMidEffect(t){
+ this.midEffect.alpha=aF[t]??0,this.midEffect.scale.set(cF[t]??0)}
+ }
+ ;
+ Vt(eF,"HeavenSword");
+ let nF=eF;
+ const hF=[-1232.65,-1219.8,-1198.35,-1168.25,-1129.65,-1082.45,-1026.65,-962.25,-889.3,-807.75,-717.65,-618.9,-511.65,-395.75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],rF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],oF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.05859375,.1171875,.17578125,.234375,.29296875,.3515625,.41015625,.46875,.53125,.58984375,.6484375,.70703125,.765625,.82421875,.8828125,.94140625,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],aF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,.99609375,.98046875,.95703125,.92578125,.88671875,.8359375,.77734375,.70703125,.62890625,.54296875,.4453125,.33984375,.2265625,.1015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],cF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.5935821533203125,.7398834228515625,.8536834716796875,.934967041015625,.983734130859375,1,1.0004119873046875,1.0016326904296875,1.003692626953125,1.006561279296875,1.0102386474609375,1.0147552490234375,1.02008056640625,1.0262298583984375,1.0331878662109375,1.040985107421875,1.049591064453125,1.0590057373046875,1.0692596435546875,1.080322265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],lF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,.921875,.84765625,.76953125,.69140625,.6171875,.5390625,.4609375,.3828125,.30859375,.23046875,.15234375,.078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],uF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.054473876953125,1.1089630126953125,1.1634368896484375,1.2179107666015625,1.2723846435546875,1.326873779296875,1.38134765625,1.4019775390625,1.422576904296875,1.4431915283203125,1.463775634765625,1.4843902587890625,1.5050048828125,1.5256195068359375,1.546234130859375,1.5668487548828125,1.5874481201171875,1.608062744140625,1.6286773681640625,1.649261474609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],dF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.99609375,.984375,.95703125,.91796875,.86328125,.7890625,.7109375,.63671875,.58203125,.54296875,.515625,.50390625,.5,.4609375,.421875,.3828125,.34765625,.30859375,.26953125,.23046875,.19140625,.15234375,.1171875,.078125,.0390625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],fF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.30026122793837684,.3335952126277735,.39675032482356637,.49767195974920064,.643764062737707,.8336707137851995,1.0422970087736907,1.2306526365515582,1.3771682471450755,1.4791237303063594,1.5431527068085191,1.576976346364553,1.5871342001594657,1.7895547849862767,1.992073992810071,2.1945926088435197,2.397110252312608,2.599690781802945,2.8021588821253705,3.0046725437052557,3.207246838924801,3.4097764177405048,3.612290393249846,3.81478927257208,4.017318848019521,4.220001220703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pF=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.7699432373046875,.7729644775390625,.7786865234375,.787872314453125,.80108642578125,.8182220458984375,.83709716796875,.8542327880859375,.867462158203125,.8766326904296875,.8823699951171875,.8853759765625,.8862762451171875,.87725830078125,.8682403564453125,.859222412109375,.850189208984375,.8411865234375,.8321685791015625,.823150634765625,.8141326904296875,.80511474609375,.79608154296875,.787078857421875,.7780609130859375,.76904296875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],gF=class extends WU{
+ constructor(){
+ super(...arguments),Kt(this,"mainImage"),Kt(this,"textures"),Kt(this,"frame",0)}
+ initialize(){
+ this.className=LU.ActiveLightning,this.sheetName="Lightening",this.duration=20}
+ createUI(){
+ this.textures=this.getTextures("LighteningSkillMain"),this.mainImage=new He(this.textures[0]),this.mainImage.anchor.set(.5,.95),this.addChild(this.mainImage)}
+ onStart(){
+ this.frame=0,this.mainImage.texture=this.textures[0],this.mainImage.visible=!0}
+ updateFrame(t){
+ this.frame+=.5;
+ const i=Math.floor(this.frame);
+ i<this.textures.length&&(this.mainImage.texture=this.textures[i])}
+ }
+ ;
+ Vt(gF,"ActiveLightning");
+ let mF=gF;
+ const wF=class t{
+ constructor(t,i=0,s=10){
+ Kt(this,"id",-1),Kt(this,"value",0),Kt(this,"count",0),Kt(this,"canAccu",!1),this.id=t,this.value=i,this.count=s}
+ static getVO(i,s=0,e=10){
+ let n;
+ return t.recycleList.length>0?(n=t.recycleList.pop(),n.id=i,n.value=s,n.count=e,n.canAccu=!1):n=new t(i,s,e),n}
+ remove(){
+ this.id=-1,this.value=0,this.count=0,this.canAccu=!1,t.recycleList.push(this)}
+ reset(){
+ this.value=0,this.count=0}
+ }
+ ;
+ Vt(wF,"BaseActiveBuffVO"),Kt(wF,"recycleList",[]);
+ let vF=wF;
+ const bF=class t extends WU{
+ constructor(){
+ super(...arguments),Kt(this,"mainImage"),Kt(this,"textures"),Kt(this,"effectApplied",!1)}
+ initialize(){
+ this.className=LU.ActiveRevive,this.sheetName="ActiveRevive",this.duration=59}
+ createUI(){
+ this.textures=this.getTextures("ActiveRevive"),this.mainImage=new He(this.textures[0]),this.addChild(this.mainImage)}
+ onStart(){
+ this.currentFrame=0,this.effectApplied=!1,this.mainImage.texture=this.textures[0],this.mainImage.visible=!0}
+ updateFrame(t){
+ const i=Math.min(t,this.textures.length-1);
+ this.mainImage.texture=this.textures[i],!this.effectApplied&&t>=Math.floor(this.textures.length/2)&&(this.effectApplied=!0,this.applyReviveEffect())}
+ applyReviveEffect(){
+ const i=jhi.getInstance().getFriendList();
+ for(let s=0;
+ s<i.length;
+ s++){
+ const e=i[s];
+ if(0===s){
+ const t=.5*e.maxHp;
+ e.heal(t,null,!1)}
+ else if(e.isAlive){
+ const t=.5*e.maxHp;
+ e.heal(t,null,!1)}
+ else e.revive();
+ e.isAlive&&(jhi.getInstance().random.chance(.5)?e.showPhysicalShield(t.BUFF_DURATION):e.showMagicShield(t.BUFF_DURATION),s>0&&(e.activeDamageBuff.addBuff(vF.getVO(t.BUFF_ID,1,t.BUFF_DURATION),!0),e.addAttackSpeedBuff(t.BUFF_ID,2,t.BUFF_DURATION,!0),e.addMoveSpeedBuff(t.BUFF_ID,2,t.BUFF_DURATION,!0)))}
+ }
+ }
+ ;
+ Vt(bF,"ActiveRevive"),Kt(bF,"BUFF_ID",9999),Kt(bF,"BUFF_DURATION",300);
+ let _F=bF;
+ const yF=class t extends WU{
+ constructor(){
+ super(...arguments),Kt(this,"arrAngelScale",[.7379608154296875,.77197265625,.801971435546875,.827972412109375,.8499755859375,.86798095703125,.8819732666015625,.8919830322265625,.897979736328125,.899993896484375,.9051513671875,.9103240966796875,.915496826171875,.9206695556640625,.92584228515625,.9310150146484375,.936187744140625,.9413604736328125,.946533203125,.9517059326171875,.956878662109375,.9620513916015625,.96722412109375,.9723968505859375,.9775543212890625,.98272705078125,.9878997802734375,.993072509765625,.9982452392578125,1.00341796875,1.0085906982421875,1.013763427734375,1.0189361572265625,1.02410888671875,1.0292816162109375,1.034454345703125,1.0396270751953125,1.0447998046875,1.04998779296875,1.0499420166015625,1.0499267578125,1.0499267578125,1.0499114990234375,1.0499267578125]),Kt(this,"arrAngelAlpha",[.19140625,.359375,.51171875,.640625,.75,.83984375,.91015625,.9609375,.98828125,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),Kt(this,"arrBGScale",[.3214263916015625,.342926025390625,.364471435546875,.3860321044921875,.4076080322265625,.429229736328125,.4508819580078125,.4725494384765625,.4942474365234375,.515960693359375,.5377044677734375,.5594482421875,.58123779296875,.6030426025390625,.6248626708984375,.646697998046875,.668548583984375,.6904296875,.712310791015625,.7342071533203125,.756103515625,.7780303955078125,.7999725341796875,.8032989501953125,.8066253662109375,.809967041015625,.813323974609375,.8166656494140625,.8200225830078125,.8233489990234375,.826690673828125,.830047607421875,.833404541015625,.8367462158203125,.8400726318359375,.843414306640625,.846771240234375,.8501129150390625,.8534393310546875,.856781005859375,.8601226806640625,.8634490966796875,.866790771484375,.8701019287109375,.873443603515625,.87677001953125,.880096435546875,.883392333984375,.88671875,.8900299072265625,.8933258056640625,.896636962890625,.89996337890625,.90447998046875,.909027099609375,.91357421875,.918121337890625,.92266845703125,.9272308349609375,.9317779541015625]),Kt(this,"arrBGAlpha",[.04296875,.0859375,.12890625,.171875,.21484375,.2578125,.30078125,.34375,.38671875,.43359375,.4765625,.51953125,.5625,.60546875,.6484375,.6953125,.73828125,.78125,.82421875,.8671875,.9140625,.95703125,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.953125,.91015625,.86328125,.81640625,.7734375,.7265625,.68359375]),Kt(this,"arrLightCircleScale",[2.88861083984375,2.77752685546875,2.666473388671875,2.555389404296875,2.4442901611328125,2.3332061767578125,2.2221221923828125,2.11102294921875,2,2,2,2,2,2,2,2,2,2]),Kt(this,"arrLightCircleAlpha",[1,1,1,1,1,1,1,1,1,.890625,.77734375,.66796875,.5546875,.4453125,.33203125,.22265625,.109375,0]),Kt(this,"goldCircle"),Kt(this,"goddess"),Kt(this,"goddessTextures"),Kt(this,"lightRays"),Kt(this,"lightSprites"),Kt(this,"lightTextures"),Kt(this,"lightCircle"),Kt(this,"lightHeart"),Kt(this,"lightHeartTextures"),Kt(this,"lightCross"),Kt(this,"lightCrossTextures"),Kt(this,"effectApplied",!1)}
+ initialize(){
+ this.className=LU.ActiveAngel,this.sheetName="ActiveAngel2",this.duration=79}
+ createUI(){
+ const i=this.getTexture("LightCircle");
+ this.lightCircle=new He(i),this.lightCircle.visible=!1,this.addChild(this.lightCircle);
+ const s=this.getTexture("GoldCircle");
+ this.goldCircle=new He(s),this.goldCircle.visible=!1,this.addChild(this.goldCircle),this.goddessTextures=this.getTextures("Goddess"),this.goddess=new He(this.goddessTextures[0]),this.goddess.visible=!1,this.addChild(this.goddess),this.lightTextures=this.getTextures("LightX"),this.lightRays=new Ge,this.lightSprites=[];
+ for(let e=0;
+ e<t.LIGHT_COUNT;
+ e++){
+ const i=new He(this.lightTextures[0]);
+ i.scale.set(e%2==0?t.LIGHT_SCALE:4),i.rotation=2*Math.PI/t.LIGHT_COUNT*e,this.lightSprites.push(i),this.lightRays.addChild(i)}
+ this.lightRays.visible=!1,this.addChild(this.lightRays),this.lightHeartTextures=this.getTextures("LightHeart"),this.lightHeart=new He(this.lightHeartTextures[0]),this.lightHeart.scale.set(t.HEART_CROSS_SCALE),this.lightHeart.visible=!1,this.addChild(this.lightHeart),this.lightCrossTextures=this.getTextures("LightCrossEffect"),this.lightCross=new He(this.lightCrossTextures[0]),this.lightCross.scale.set(t.HEART_CROSS_SCALE),this.lightCross.visible=!1,this.addChild(this.lightCross)}
+ onStart(){
+ this.currentFrame=0,this.effectApplied=!1,this.goldCircle.visible=!1,this.goldCircle.rotation=0,this.goddess.visible=!1,this.lightRays.visible=!1,this.lightCircle.visible=!1,this.lightHeart.visible=!1,this.lightCross.visible=!1}
+ updateFrame(t){
+ const i=t+1;
+ this.updateGoldCircle(i),this.updateGoddess(i),this.updateLightRays(i),this.updateLightCircle(i),this.updateLightHeart(i),this.updateLightCross(i),!this.effectApplied&&i>=30&&(this.effectApplied=!0,this.applyAngelEffect())}
+ updateGoldCircle(t){
+ if(t<1||t>76)return void(this.goldCircle.visible=!1);
+ const i=t-1;
+ i<this.arrBGScale.length?(this.goldCircle.visible=!0,this.goldCircle.scale.set(2*this.arrBGScale[i]),this.goldCircle.alpha=this.arrBGAlpha[i]??0,this.goldCircle.rotation=t*(2*Math.PI/180)):i<76?(this.goldCircle.visible=!0,this.goldCircle.rotation=t*(2*Math.PI/180)):this.goldCircle.visible=!1}
+ updateGoddess(t){
+ if(t<10||t>54)return void(this.goddess.visible=!1);
+ const i=t-10;
+ this.goddess.visible=!0;
+ const s=Math.floor(i/5)%this.goddessTextures.length;
+ this.goddess.texture=this.goddessTextures[s],i<this.arrAngelScale.length&&(this.goddess.scale.set(this.arrAngelScale[i]),this.goddess.alpha=this.arrAngelAlpha[i])}
+ updateLightRays(t){
+ if(t<10||t>54)return void(this.lightRays.visible=!1);
+ this.lightRays.visible=!0;
+ const i=(t-10)%this.lightTextures.length;
+ for(let s=0;
+ s<this.lightSprites.length;
+ s++)this.lightSprites[s].texture=this.lightTextures[i]}
+ updateLightCircle(t){
+ if(t<1||t>this.arrLightCircleScale.length)return void(this.lightCircle.visible=!1);
+ const i=t-1;
+ this.lightCircle.visible=!0,this.lightCircle.scale.set(4*this.arrLightCircleScale[i]),this.lightCircle.alpha=this.arrLightCircleAlpha[i]}
+ updateLightHeart(t){
+ if(t<54||t>78)return void(this.lightHeart.visible=!1);
+ const i=t-54;
+ this.lightHeart.visible=!0,i<this.lightHeartTextures.length&&(this.lightHeart.texture=this.lightHeartTextures[i])}
+ updateLightCross(t){
+ if(t<54||t>78)return void(this.lightCross.visible=!1);
+ const i=t-54;
+ this.lightCross.visible=!0,i<this.lightCrossTextures.length&&(this.lightCross.texture=this.lightCrossTextures[i])}
+ applyAngelEffect(){
+ const i=jhi.getInstance().getFriendList();
+ for(const s of i)s.isAlive&&(s.heal(s.maxHp,null,!1),s.showPhysicalShield(t.SHIELD_DURATION))}
+ }
+ ;
+ Vt(yF,"ActiveAngel"),Kt(yF,"SHIELD_DURATION",300),Kt(yF,"LIGHT_COUNT",16),Kt(yF,"LIGHT_SCALE",5),Kt(yF,"HEART_CROSS_SCALE",4);
+ let MF=yF;
+ const EF=class t{
+ constructor(){
+ Kt(this,"classMap",{
+ [LU.DarkLightning]:FU,[LU.DoomBringer]:jU,[LU.Lightening]:sF,[LU.HeavenSword]:nF,[LU.ActiveLightning]:mF,[LU.ActiveRevive]:_F,[LU.ActiveAngel]:MF}
+ )}
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ getSkill(i){
+ const s=this.classMap[i],e=i;
+ let n;
+ return t.activeSkillPool[e]||(t.activeSkillPool[e]=[]),n=t.activeSkillPool[e].length>0?t.activeSkillPool[e].pop():new s,n}
+ addToRecycleList(i){
+ const s=i.className;
+ t.activeSkillPool[s]||(t.activeSkillPool[s]=[]),t.activeSkillPool[s].includes(i)||t.activeSkillPool[s].push(i)}
+ }
+ ;
+ Vt(EF,"ActiveSkillFactory"),Kt(EF,"instance"),Kt(EF,"activeSkillPool",{
+ }
+ );
+ let AF=EF;
+ const SF=class t{
+ static getSkillRatio(t,i){
+ const s=i-t;
+ return s<=0?1:s<=50?.95:s<=100?.9:s<=150?.85:s<=200?.8:s<=250?.7:s<=300?.6:s<=350?.5:s<=400?.4:s<=450?.3:s<=500?.2:s<=550?.1:s<=600?.05:s<=650?.01:s<=700?.005:s<=750?.001:0}
+ static getBossSkillReduction(t){
+ return 1===t.bossType?.25:2===t.bossType?.33:1}
+ static dealDamage(i,s,e){
+ for(let n=0;
+ n<i.length;
+ n++){
+ const h=i[n];
+ if(h.isAlive){
+ const i=t.getBossSkillReduction(h);
+ h.health-=h.maxHp*s*e*i}
+ }
+ }
+ static blowAll(t,i,s,e){
+ for(let n=0;
+ n<t.length;
+ n++){
+ const h=t[n];
+ if(h.isAlive){
+ const t=h.x-i>=0?s:-s;
+ h.blow(t,e)}
+ }
+ }
+ static blowAllWithFalloff(t,i,s,e,n,h){
+ for(let r=0;
+ r<t.length;
+ r++){
+ const o=t[r];
+ if(!o.isAlive)continue;
+ const a=o.x-i,c=o.y-s,l=Math.sqrt(a*a+c*c);
+ if(l>=e)continue;
+ const u=1-l/e,d=a>=0?n*u:-n*u;
+ o.blow(d,h*u)}
+ }
+ static blowAllRandom(t,i,s){
+ const e=jhi.getInstance().random;
+ for(let n=0;
+ n<t.length;
+ n++){
+ const h=t[n];
+ if(h.isAlive){
+ const t=e.next()*i*2-i;
+ h.blow(t,s)}
+ }
+ }
+ static stunAll(t,i){
+ for(let s=0;
+ s<t.length;
+ s++){
+ const e=t[s];
+ e.isAlive&&e.stun(i)}
+ }
+ }
+ ;
+ Vt(SF,"ActiveSkillDamageHelper");
+ let TF=SF;
+ var CF=(t=>(t[t.NORMAL=0]="NORMAL",t[t.DUNGEON=1]="DUNGEON",t[t.TOWER=2]="TOWER",t[t.GUILD=3]="GUILD",t[t.TREASURE_DETAIL=4]="TREASURE_DETAIL",t))(CF||{
+ }
+ );
+ const IF=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg",new ZD),Kt(this,"lblGold",new $B("UI_GOLD","0",cD.COLOR_ORANGE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblGem",new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblMedal",new $B("UI_STAR_ICON","0",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblSpeed",new $B("UI_SPEED_ICON0","+0%",cD.COLOR_WHITE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblHonor",new $B("PVP_COIN_ON","0",cD.COLOR_PURPLE_PINK,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblGuildCoin",new $B("GUILD_COIN","0",cD.COLOR_BRIGHT_GREEN,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblRaidCoin",new $B("RaidCoin_on","0",cD.COLOR_ORANGE,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblCores",[]),Kt(this,"mode",0),Kt(this,"CORE_START_X",260),Kt(this,"CORE_GAP",100),Kt(this,"goldCountTween",null),Kt(this,"gemPoint",new gi),Kt(this,"gemPointInitialized",!1),Kt(this,"medalPoint",new gi),Kt(this,"medalPointInitialized",!1),Kt(this,"goldPoint",new gi),Kt(this,"goldPointInitialized",!1),Kt(this,"guildCoinPoint",new gi),Kt(this,"guildCoinPointInitialized",!1),this.bg.width=640,this.bg.height=40,this.addChild(this.bg),this.bg.alpha=.5,this.bg.setIndex(7),this.lblGem.x=260,this.lblGem.y=.5*(this.bg.height-this.lblGem.height),this.addChild(this.lblGem),this.lblMedal.x=390,this.lblMedal.y=.5*(this.bg.height-this.lblMedal.height),this.addChild(this.lblMedal),this.lblHonor.x=390,this.lblHonor.y=.5*(this.bg.height-this.lblHonor.height),this.lblHonor.visible=!1,this.addChild(this.lblHonor),this.lblGuildCoin.x=510,this.lblGuildCoin.y=.5*(this.bg.height-this.lblGuildCoin.height),this.lblGuildCoin.visible=!1,this.addChild(this.lblGuildCoin),this.lblRaidCoin.x=545,this.lblRaidCoin.y=.5*(this.bg.height-this.lblRaidCoin.height),this.lblRaidCoin.visible=!1,this.addChild(this.lblRaidCoin),this.lblSpeed.x=5,this.lblSpeed.y=.5*(this.bg.height-this.lblSpeed.height),this.lblSpeed.hitArea=new Ri(0,-this.lblSpeed.y,120,this.bg.height),this.lblSpeed.eventMode="static",this.lblSpeed.cursor="pointer",this.lblSpeed.on("pointertap",()=>{
+ Xt(async()=>{
+ const{
+ GameSpeedBuffPopup:t}
+ =await Promise.resolve().then(()=>Kui);
+ return{
+ GameSpeedBuffPopup:t}
+ }
+ ,void 0).then(({
+ GameSpeedBuffPopup:t}
+ )=>{
+ t.getInstance().showPopup()}
+ )}
+ ),this.addChild(this.lblSpeed);
+ for(let t=0;
+ t<4;
+ t++){
+ const i=new $B(`Core${
+ t+1}
+ `,"0",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_18);
+ i.x=this.CORE_START_X+t*this.CORE_GAP,i.y=.5*(this.bg.height-i.height),i.visible=!1,this.addChild(i),this.lblCores.push(i)}
+ this.lblGold.x=510,this.lblGold.y=.5*(this.bg.height-this.lblGold.height),this.addChild(this.lblGold)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ static ensureMounted(i){
+ const s=t.getInstance();
+ if(t.isVisibleInStageTree(s))return;
+ const e=NU.getInstance();
+ for(let t=e.children.length-1;
+ t>=0;
+ t--){
+ const i=e.children[t];
+ if(i instanceof Ge&&i.visible)return void i.addChild(s)}
+ i.addChild(s)}
+ static isVisibleInStageTree(t){
+ const i=VA.stage;
+ if(!i)return!0;
+ let s=t;
+ for(;
+ s;
+ ){
+ if(!s.visible)return!1;
+ if(s===i)return!0;
+ s=s.parent}
+ return!1}
+ updateGold(){
+ this.lblGold.text=VD.displayLargeNumberAsAlphabet(ML.gold)}
+ celebrateGold(t){
+ var i;
+ const s=ML.gold,e=Math.max(0,s-t);
+ null==(i=this.goldCountTween)||i.kill();
+ const n={
+ v:e}
+ ;
+ this.goldCountTween=FO.to(n,{
+ v:s,duration:.8,ease:"power1.out",onUpdate:Vt(()=>{
+ this.lblGold.text=VD.displayLargeNumberAsAlphabet(n.v)}
+ ,"onUpdate"),onComplete:Vt(()=>{
+ this.lblGold.text=VD.displayLargeNumberAsAlphabet(s),this.goldCountTween=null}
+ ,"onComplete")}
+ )}
+ updateMedal(){
+ this.lblMedal.text=VD.displayLargeNumberAsAlphabet(ML.medal)}
+ updateGem(){
+ this.lblGem.text=ML.gem.toFixed(0)}
+ updateHonor(){
+ this.lblHonor.text=VD.displayLargeNumberAsAlphabet(ML.honorCoin)}
+ updateGuildCoin(){
+ var t;
+ const i=(null==(t=AD.myMembershipVO)?void 0:t.coin)??0;
+ this.lblGuildCoin.text=VD.displayLargeNumberAsAlphabet(i)}
+ updateRaidCoin(){
+ var t;
+ const i=(null==(t=AD.myMembershipVO)?void 0:t.raidCoin)??AD.myRaidCoins??0;
+ this.lblRaidCoin.text=VD.displayLargeNumberAsAlphabet(i)}
+ updateSpeed(t){
+ this.lblSpeed.text="+"+Math.round(100*(t-1)).toFixed(0)+"%"}
+ updateCores(){
+ const t=Nx.getInstance();
+ for(let i=0;
+ i<4;
+ i++)this.lblCores[i].text=VD.displayLargeNumberAsAlphabet(t.userCores[i])}
+ updateAll(){
+ this.updateGold(),this.updateMedal(),this.updateGem(),this.updateHonor(),1===this.mode&&this.updateCores()}
+ getMode(){
+ return this.mode}
+ setMode(t){
+ if(this.mode!==t){
+ this.mode=t,this.lblSpeed.visible=!0,this.lblSpeed.x=5;
+ for(const t of this.lblCores)t.visible=!1;
+ switch(this.lblRaidCoin.visible=!1,t){
+ case 0:this.lblGem.visible=!0,this.lblGem.x=260,this.lblMedal.visible=!0,this.lblMedal.x=390,this.lblHonor.visible=!1,this.lblGuildCoin.visible=!1,this.lblGold.visible=!0,this.lblGold.x=510;
+ break;
+ case 1:this.lblGem.visible=!0,this.lblGem.x=140,this.lblMedal.visible=!1,this.lblHonor.visible=!1,this.lblGuildCoin.visible=!1,this.lblGold.visible=!1;
+ for(let t=0;
+ t<4;
+ t++)this.lblCores[t].visible=!0,this.lblCores[t].x=this.CORE_START_X+t*this.CORE_GAP;
+ this.updateCores();
+ break;
+ case 2:this.lblGem.visible=!0,this.lblGem.x=260,this.lblMedal.visible=!1,this.lblHonor.visible=!0,this.lblHonor.x=390,this.lblGold.visible=!0,this.lblGold.x=510,this.lblGuildCoin.visible=!1,this.updateHonor();
+ break;
+ case 3:this.lblGem.visible=!0,this.lblGem.x=230,this.lblMedal.visible=!1,this.lblHonor.visible=!0,this.lblHonor.x=335,this.lblGold.visible=!1,this.lblGuildCoin.visible=!0,this.lblGuildCoin.x=440,this.lblRaidCoin.visible=!0,this.lblRaidCoin.x=545,this.updateHonor(),this.updateGuildCoin(),this.updateRaidCoin();
+ break;
+ case 4:this.lblGem.visible=!0,this.lblGem.x=380,this.lblMedal.visible=!1,this.lblHonor.visible=!0,this.lblHonor.x=510,this.lblGold.visible=!1,this.lblGuildCoin.visible=!1,this.updateHonor()}
+ }
+ }
+ setDungeonMode(t){
+ this.setMode(t?1:0)}
+ setTowerMode(t){
+ this.setMode(t?2:0)}
+ setFlags(t){
+ const i=!!(1&t),s=!!(2&t),e=!!(4&t),n=!!(8&t),h=!!(16&t),r=!!(32&t);
+ this.lblSpeed.visible=i,this.lblGem.visible=s,this.lblMedal.visible=e,this.lblGold.visible=n,this.lblHonor.visible=h;
+ for(const c of this.lblCores)c.visible=r;
+ const o=i?120:0;
+ let a=o>0?o:10;
+ if(r){
+ this.lblGem.x=a,a+=120;
+ for(let t=0;
+ t<4;
+ t++)this.lblCores[t].x=a,a+=100;
+ r&&this.updateCores()}
+ else{
+ const t=[];
+ s&&t.push(this.lblGem),e&&t.push(this.lblMedal),h&&t.push(this.lblHonor);
+ const i=510,n=i-a,r=t.length>0?n/t.length:0;
+ for(let s=0;
+ s<t.length;
+ s++)t[s].x=a+s*r;
+ this.lblGold.x=i}
+ h&&this.updateHonor()}
+ getGemPoint(){
+ return 0==this.gemPointInitialized&&(this.gemPointInitialized=!0,this.gemPoint.x=this.x+this.lblGem.x+12,this.gemPoint.y=this.y+this.lblGem.y+.5*this.lblGem.height),this.gemPoint}
+ getMedalPoint(){
+ return 0==this.medalPointInitialized&&(this.medalPointInitialized=!0,this.medalPoint.x=this.x+this.lblMedal.x+12,this.medalPoint.y=this.y+this.lblMedal.y+.5*this.lblMedal.height),this.medalPoint}
+ getGoldPoint(){
+ return 0==this.goldPointInitialized&&(this.goldPointInitialized=!0,this.goldPoint.x=this.x+this.lblGold.x+12,this.goldPoint.y=this.y+this.lblGold.y+.5*this.lblGold.height),this.goldPoint}
+ getGuildCoinPoint(){
+ return 0==this.guildCoinPointInitialized&&(this.guildCoinPointInitialized=!0,this.guildCoinPoint.x=this.x+this.lblGuildCoin.x+12,this.guildCoinPoint.y=this.y+this.lblGuildCoin.y+.5*this.lblGuildCoin.height),this.guildCoinPoint}
+ startGemMotion(t=null,i=1.2){
+ this.lblGem.startMotion(t,i)}
+ startMedalMotion(t=null,i=1.2){
+ this.lblMedal.startMotion(t,i)}
+ startGoldMotion(t=null,i=1.2){
+ this.lblGold.startMotion(t,i)}
+ startGuildCoinMotion(t=null,i=1.2){
+ this.lblGuildCoin.startMotion(t,i)}
+ }
+ ;
+ Vt(IF,"ResourceInfo"),Kt(IF,"instance");
+ let kF=IF;
+ const OF=class t extends cG{
+ constructor(){
+ super(),Kt(this,"slotIndex",0),Kt(this,"isSelectMode",!1),Kt(this,"lblSkillName",new JD("",16750848,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblSkillDesc",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblGuide",new JD("",6737151,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"btnAction",new kU("UI_GEM","100","스킬변경",.8,200,70)),Kt(this,"btnCancel",new kU("","","취소",.8,150,70)),Kt(this,"skillIcon",new He),Kt(this,"selectContainer",new Ge),Kt(this,"slotIcons",[]),Kt(this,"slotGlows",[]),Kt(this,"slotLabels",[]),Kt(this,"onSkillChanged",null),this.width=580,this.skillIcon.scale.set(.8),this.contentContainer.addChild(this.skillIcon),this.contentContainer.addChild(this.selectContainer);
+ for(let t=0;
+ t<3;
+ t++){
+ const i=new Ge,s=new TM({
+ texture:QA.getTexture("UI_Ekkorr","UI_SELECT"),leftWidth:25,topHeight:25,rightWidth:25,bottomHeight:25}
+ );
+ s.anchor.set(.5,.28),s.width=140,s.height=140,s.alpha=.8,s.visible=!1,i.addChild(s),this.slotGlows.push(s);
+ const e=new He;
+ e.anchor.set(.5),e.scale.set(.85),e.eventMode="static",e.cursor="pointer";
+ const n=t;
+ e.on("pointertap",()=>this.onSlotSelect(n)),i.addChild(e),this.slotIcons.push(e);
+ const h=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ i.addChild(h),this.slotLabels.push(h),this.selectContainer.addChild(i)}
+ this.contentContainer.addChild(this.lblSkillName,this.lblSkillDesc,this.lblGuide,this.btnAction,this.btnCancel),cD.setLabelWrapWidth(this.lblSkillDesc,this.width-60),cD.setLabelWrapWidth(this.lblGuide,this.width-60),this.btnCancel.showIconLabel=!1,this.btnCancel.showTextLabel=!0,this.btnCancel.text=SG.getText("COMMON_2","취소"),this.btnCancel.color=kU.GRAY,this.btnAction.showIconLabel=!0,this.btnAction.showTextLabel=!0,this.btnAction.color=kU.GREEN,this.btnAction.onClick=this.onActionClick.bind(this),this.btnCancel.onClick=this.onCancelClick.bind(this),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showSlot(t,i=null){
+ this.isSelectMode=!1,this.slotIndex=t,this.onSkillChanged=i,this.skillIcon.visible=!0,this.selectContainer.visible=!1,this.title=SG.getText("GAME_199","액티브 스킬"),this.skillIcon.texture=QA.getTexture("UI_Ekkorr","UI_SKILL_ADD"),this.lblSkillName.text=SG.getText("GAME_208","잠긴 슬롯"),this.lblSkillDesc.text=SG.getText("GAME_200","슬롯을 오픈하면 랜덤으로 스킬이 배정됩니다."),this.lblGuide.text=SG.getText("GAME_201","스킬은 자동으로 랜덤하게 선택되고, 보석 500개가 필요합니다.")+" "+SG.getText("GAME_202","슬롯을 오픈하시겠습니까?"),this.btnAction.iconText="500",this.btnAction.text=SG.getText("GAME_203","슬롯 오픈"),this.btnAction.color=kU.RED,this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout(),super.show()}
+ showSelectSlot(t=null){
+ this.isSelectMode=!0,this.onSkillChanged=t,this.updateSelectSlotUI(),super.show()}
+ updateSelectSlotUI(){
+ this.skillIcon.visible=!1,this.selectContainer.visible=!0,this.title=SG.getText("GAME_199","액티브 스킬");
+ const t=ML.activeSkills,i=.5*(this.width-300);
+ for(let s=0;
+ s<3;
+ s++){
+ const e=t[s]??1,n=this.slotIcons[s],h=this.slotGlows[s],r=this.slotLabels[s];
+ n.texture=QA.getTexture("UI_Ekkorr",`UI_SKILL${
+ e}
+ _ON`);
+ const o=i+150*s;
+ n.x=o,n.y=15,h.x=o,h.y=0,h.visible=!1;
+ const a=VR.getInstance().getGameplayTotal(Cx.UndeadSecret),c=Math.max(30,Math.floor((30+15*s)*(1-.01*a)));
+ r.text=wU.displayTime(c),r.x=o-.5*r.width,r.y=n.y+.5*n.height+8}
+ this.selectContainer.y=100,this.selectSlot(0),this.btnAction.iconText="100",this.btnAction.text=SG.getText("GAME_206","스킬변경"),this.btnAction.color=kU.GREEN,this.btnCancel.text=SG.getText("COMMON_2","취소"),this.updateLayout()}
+ onSlotSelect(t){
+ this.selectSlot(t),this.updateLayout()}
+ selectSlot(i){
+ this.slotIndex=i;
+ for(let t=0;
+ t<3;
+ t++)this.slotGlows[t].visible=t===i;
+ const s=ML.activeSkills[i]??1,e=SG.getText("GAME_207","현재스킬"),n=SG.getText(`ACTIVE_SKILL_NAME_${
+ s}
+ `,t.SKILL_NAMES[s])||"";
+ this.lblSkillName.text=`${
+ e}
+  : ${
+ n}
+ `,this.lblSkillDesc.text=SG.getText(`ACTIVE_SKILL_DESC_${
+ s}
+ `,t.SKILL_DESCS[s])||"",this.lblGuide.text=SG.getText("GAME_204","스킬은 자동으로 랜덤하게 선택되고, 보석 100개가 필요합니다.")+" "+SG.getText("GAME_205","스킬을 변경하시겠습니까?")}
+ async onActionClick(){
+ const t=!this.isSelectMode&&-1===(ML.activeSkills[this.slotIndex]??-1),i=t?500:100;
+ if(ML.gem<i)return void wG.getInstance().show(SG.getText("COMMON_352","보석이 부족합니다."));
+ let s;
+ if(ML.gem-=i,kF.getInstance().updateGem(),s=t?await rD.getInstance().user.openActiveSkillSlot(this.slotIndex,!0):await rD.getInstance().user.changeActiveSkill(this.slotIndex,!0),!1===s.success)return ML.gem+=i,kF.getInstance().updateGem(),void wG.getInstance().showError(s);
+ ML.setUser(s.body),kF.getInstance().updateAll(),this.isSelectMode?(this.updateSelectSlotUI(),this.onSkillChanged&&this.onSkillChanged()):(this.hide(),this.onSkillChanged&&(this.onSkillChanged(),this.onSkillChanged=null))}
+ onCancelClick(){
+ this.hide()}
+ updateLayout(){
+ var t,i;
+ let s;
+ this.isSelectMode?s=this.selectContainer.y+((null==(t=this.slotLabels[0])?void 0:t.y)??0)+((null==(i=this.slotLabels[0])?void 0:i.height)??20)+40:(this.skillIcon.x=.5*(this.width-this.skillIcon.width),this.skillIcon.y=90,s=this.skillIcon.y+this.skillIcon.height+15),this.lblSkillName.x=30,this.lblSkillName.y=s,this.lblSkillDesc.x=30,this.lblSkillDesc.y=this.lblSkillName.y+this.lblSkillName.height+10,this.lblGuide.x=30,this.lblGuide.y=this.lblSkillDesc.y+this.lblSkillDesc.height+25;
+ const e=this.btnAction.width+this.btnCancel.width+20,n=.5*(this.width-e);
+ this.btnAction.x=n,this.btnAction.y=this.lblGuide.y+this.lblGuide.height+25,this.btnCancel.x=n+this.btnAction.width+20,this.btnCancel.y=this.btnAction.y,this.height=this.btnAction.y+this.btnAction.height+40}
+ }
+ ;
+ Vt(OF,"ActiveSkillPopup"),Kt(OF,"_instance"),Kt(OF,"SKILL_NAMES",["","심판의 번개","천지폭렬","하늘의 검","신성한 기도","구원의 날개","총병 소환"]),Kt(OF,"SKILL_DESCS",["","하늘에서 번개를 연속으로 내려, 적들에게 강력한 대미지를 줍니다. 최대 25마리의 적을 즉사시킵니다.","거대한 검을 소환하여 모든 적에게 현재 체력의 80%에 해당하는 대미지를 주고, 멀리 날려버립니다. 체력이 20% 이하인 적은 일정 확률로 즉사합니다.","하늘의 검을 소환하여, 모든 적을 일정시간동안 기절시킵니다. 최대 10마리의 적을 즉사시키고, 나머지 적들에게 현재 체력의 60%에 해당하는 대미지를 줍니다.","성을 치유하고, 쓰러진 영웅을 부활시키며, 살아있는 영웅의 체력을 회복시킵니다. 모든 아군에게 물리 또는 마법 보호막을 부여하고, 영웅의 공격력, 공속, 이속을 일정시간 크게 증가시킵니다.","천사를 소환하여 모든 아군과 성의 체력을 최대로 회복시키고, 일정시간동안 강력한 보호막을 부여합니다.","많은 수의 총병을 소환하여 일정시간 성을 방어합니다"]);
+ let xF=OF;
+ const RF=class{
+ constructor(t,i){
+ Kt(this,"start",0),Kt(this,"end",0),this.start=t,this.end=i}
+ }
+ ;
+ Vt(RF,"AniFrame");
+ let NF=RF;
+ var PF=(t=>(t.MagicalHitEffect="MagicalHitEffect",t.PhysicalHitEffect="PhysicalHitEffect",t.CriticalEffect="CriticalEffect",t.MissEffect="MissEffect",t.BlockEffect="BlockEffect",t.EvadeEffect="EvadeEffect",t.AkEffect="AkEffect",t.HukEffect="HukEffect",t.PakEffect="PakEffect",t.YapEffect="YapEffect",t.StunImmuneEffect="StunImmuneEffect",t.FreezeImmuneEffect="FreezeImmuneEffect",t.KnockbackImmuneEffect="KnockbackImmuneEffect",t.MagicalImmuneEffect="MagicalImmuneEffect",t.PhysicalImmuneEffect="PhysicalImmuneEffect",t.HumanSkillEffect="HumanSkillEffect",t.ElfSkillEffect="ElfSkillEffect",t.UndeadSkillEffect="UndeadSkillEffect",t.OrcSkillEffect="OrcSkillEffect",t.CurseEffect="CurseEffect",t.PowerShieldEffect="PowerShieldEffect",t.PhysicalShieldEffect="PhysicalShieldEffect",t.MagicalShieldEffect="MagicalShieldEffect",t.SilenceEffect="SilenceEffect",t.FreezeEffectL="FreezeEffectL",t.FreezeEffectM="FreezeEffectM",t.FreezeEffectS="FreezeEffectS",t.StunEffect="StunEffect",t.PoisonGreenEffect="PoisonGreenEffect",t.DarkArcherSkillEffect1="DarkArcherSkillEffect1",t.OrcIceExplodeEffect="OrcIceExplodeEffect",t.DeathHandSkillEffect1="DeathHandSkillEffect1",t.BomberBigBombExplode1="BomberBigBombExplode1",t.BomberSmallBombExplode1="BomberSmallBombExplode1",t.BlackMageBallExplode1="BlackMageBallExplode1",t.OrcHunterEvadeBuff="OrcHunterEvadeBuff",t.AggroEffect="AggroEffect",t.PriestLightEffect="PriestLightEffect",t.PriestStartEffect="PriestStartEffect",t.PriestShieldEffect="PriestShieldEffect",t.FairyWingEffect="FairyWingEffect",t.BindingEffect="BindingEffect",t.RockExplode="RockExplode",t.Smoke="Smoke",t.EvolEffect="EvolEffect",t.EvolEffect2="EvolEffect2",t.CastleFire1="CastleFire1",t.CastleFire2="CastleFire2",t.StoneEffect1="StoneEffect1",t.FireBallExplode="FireBallExplode",t.PilotMissileSmoke1="PilotMissileSmoke1",t.FireExplode="FireExplode",t.AntRockExplode="AntRockExplode",t.IceExplode2="IceExplode2",t.HealYellow="HealYellow",t.ElectricEffect="ElectricEffect",t.RoboExplode="RoboExplode",t.SuccubusLove="SuccubusLove",t.SuccubusEffect1="SuccubusEffect1",t.FallInLoveEffect="FallInLoveEffect",t.Accelerate="Accelerate",t.ElfGlowing1="ElfGlowing1",t.ElfMagicCircle1="ElfMagicCircle1",t.ElfExplodeEffect1="ElfExplodeEffect1",t.ElfBindEffect1="ElfBindEffect1",t.AbyssLightning1="AbyssLightning1",t.AbyssSkillExplosion1="AbyssSkillExplosion1",t.JudegmentMarkEffect1="JudegmentMarkEffect1",t.UndeadLightningExplosion1="UndeadLightningExplosion1",t.FireExplosion1="FireExplosion1",t.FireExplosion2="FireExplosion2",t.AladinGenie1="AladinGenie1",t.DruidVine1="DruidVine1",t.CrowExplosion1="CrowExplosion1",t.BladeMasterAfterImage="BladeMasterAfterImage",t.PoisonExplodeEffect="PoisonExplodeEffect",t.BackAttackEffect="BackAttackEffect",t.HeroAura1Effect="HeroAura1Effect",t.HeroAura2Effect="HeroAura2Effect",t.HeroAura3Effect="HeroAura3Effect",t.HeroAura4Effect="HeroAura4Effect",t.HeroAura5Effect="HeroAura5Effect",t.HeroAura6Effect="HeroAura6Effect",t.RaidBuffSkillEffect1="RaidBuffSkillEffect1",t.RaidBuffSkillEffect2="RaidBuffSkillEffect2",t.RaidBuffSkillEffect3="RaidBuffSkillEffect3",t.RaidBuffSkillEffect4="RaidBuffSkillEffect4",t.RaidBuffSkillEffect5="RaidBuffSkillEffect5",t))(PF||{
+ }
+ );
+ const DF=class extends Ge{
+ constructor(t=""){
+ super(),Kt(this,"effectType"),Kt(this,"className",PF.MagicalHitEffect),Kt(this,"sp",null),Kt(this,"loop",!0),Kt(this,"_textureName"),Kt(this,"_sheetName","Game"),Kt(this,"owner",null),Kt(this,"textures"),Kt(this,"centerPoint",new gi(-1,-1)),Kt(this,"orgScale",1),Kt(this,"currentFrame",0),Kt(this,"endFrame",10),Kt(this,"count",0),Kt(this,"incFrame",.5),Kt(this,"holdLastFrame",!1),Kt(this,"holdLastFrameOffset",1),Kt(this,"removed",!1),Kt(this,"battleFrameController"),this._textureName=t||"BaseEffect",this.effectType=Symbol(t),this.battleFrameController=qG.getInstance(),this.eventMode="none"}
+ getTextureName(){
+ return this._textureName}
+ getSheetName(){
+ return this._sheetName}
+ setBattleController(t){
+ }
+ async createUI(){
+ if(!QA.hasSheet(this._sheetName)){
+ const t="ktx2";
+ await QA.generateTexture(this._sheetName,t,!1)}
+ this.textures=QA.getTextures(this._sheetName,this._textureName),this.sp=new Wf(this.textures),this.addChild(this.sp),this.scale.set(this.orgScale),this.endFrame=this.textures.length}
+ start(t){
+ this.count=t,this.currentFrame=0,this.removed=!1,this.battleFrameController&&this.battleFrameController.add(this.onEnter,this)}
+ execute(){
+ this.removed||this.onEnter()}
+ onEnter(){
+ var t,i;
+ if(this.holdLastFrame){
+ const i=Math.max(0,this.endFrame-this.holdLastFrameOffset);
+ if(this.currentFrame>=i)return this.currentFrame=i,null==(t=this.sp)||t.gotoAndStop(Math.floor(this.currentFrame)),void(this.count--<0&&this.remove())}
+ if(this.currentFrame+=this.incFrame,this.currentFrame>=this.endFrame)if(this.loop)this.currentFrame=0;
+ else{
+ if(!this.holdLastFrame)return void this.remove();
+ this.currentFrame=Math.max(0,this.endFrame-this.holdLastFrameOffset)}
+ null==(i=this.sp)||i.gotoAndStop(Math.floor(this.currentFrame)),this.count--<0&&this.remove()}
+ remove(){
+ var t;
+ if(this.removed=!0,this.removeAllListeners(),this.removeFromParent(),this.battleFrameController&&this.battleFrameController.remove(this.onEnter,this),ej.addToRecycleList(this),null!=this.owner){
+ const i=null==(t=this.owner.effectList)?void 0:t.indexOf(this);
+ null!=i&&i>=0&&this.owner.effectList.splice(i,1),this.owner=null}
+ }
+ setDuration(t){
+ this.count=t}
+ }
+ ;
+ Vt(DF,"BaseEffect"),Kt(DF,"TYPE_SYMBOL",Symbol("EffectType"));
+ let LF=DF;
+ const GF=class extends LF{
+ constructor(){
+ super(PF.BindingEffect),Kt(this,"grapEndFrame",59),Kt(this,"endEffectFrame",10*this.incFrame),this.centerPoint.y=0,this.orgScale=1}
+ onEnter(){
+ var t;
+ this.currentFrame+=this.incFrame,this.count>this.endEffectFrame&&this.currentFrame>=this.grapEndFrame&&(this.currentFrame=12),null==(t=this.sp)||t.gotoAndStop(Math.floor(this.currentFrame)),this.count--<0&&this.remove()}
+ }
+ ;
+ Vt(GF,"BindingEffect");
+ let BF=GF;
+ const UF=class extends LF{
+ constructor(){
+ super(PF.CurseEffect),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(UF,"CurseEffect");
+ let FF=UF;
+ const HF=class extends LF{
+ constructor(){
+ super(PF.MagicalHitEffect),this.loop=!1,this.orgScale=1.3,this.incFrame=1}
+ }
+ ;
+ Vt(HF,"MagicalHitEffect");
+ let WF=HF;
+ const $F=class extends LF{
+ constructor(){
+ super(PF.PhysicalHitEffect),this.loop=!1,this.incFrame=1,this.orgScale=1.3}
+ }
+ ;
+ Vt($F,"PhysicalHitEffect");
+ let jF=$F;
+ const VF=class extends LF{
+ constructor(){
+ super(PF.RockExplode),this.loop=!1,this.orgScale=1.3,this.incFrame=1,this._sheetName="KingSlime"}
+ }
+ ;
+ Vt(VF,"RockExplode");
+ let KF=VF;
+ const zF=class extends LF{
+ constructor(){
+ super(PF.Smoke),this.loop=!1,this.orgScale=1.3,this.incFrame=1,this._sheetName="DarkHermit"}
+ }
+ ;
+ Vt(zF,"Smoke");
+ let qF=zF;
+ const YF=class extends LF{
+ constructor(){
+ super(PF.MagicalShieldEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(YF,"MagicalShieldEffect");
+ let XF=YF;
+ const JF=class extends LF{
+ constructor(){
+ super(PF.PhysicalShieldEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(JF,"PhysicalShieldEffect");
+ let QF=JF;
+ const ZF=class extends LF{
+ constructor(){
+ super(PF.PowerShieldEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(ZF,"PowerShieldEffect");
+ let tH=ZF;
+ const iH=class extends LF{
+ constructor(){
+ super(PF.SilenceEffect),this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(iH,"SilenceEffect");
+ let sH=iH;
+ const eH=class extends LF{
+ constructor(){
+ super(PF.ElfSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
+ }
+ ;
+ Vt(eH,"ElfSkillEffect");
+ let nH=eH;
+ const hH=class extends LF{
+ constructor(){
+ super(PF.HumanSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
+ }
+ ;
+ Vt(hH,"HumanSkillEffect");
+ let rH=hH;
+ const oH=class extends LF{
+ constructor(){
+ super(PF.OrcSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
+ }
+ ;
+ Vt(oH,"OrcSkillEffect");
+ let aH=oH;
+ const cH=class extends LF{
+ constructor(){
+ super(PF.UndeadSkillEffect),this.loop=!1,this.orgScale=1.5,this.incFrame=1}
+ }
+ ;
+ Vt(cH,"UndeadSkillEffect");
+ let lH=cH;
+ const uH=class extends LF{
+ constructor(t=""){
+ super(t),Kt(this,"vx",0),Kt(this,"vy",-1),Kt(this,"cnt",0),this.loop=!1}
+ showAt(t,i,s){
+ this.x=t,this.y=i,this.rotation=s,this.alpha=0,this.vx=2*Math.cos(s-.5*Math.PI),this.vy=2*Math.sin(s-.5*Math.PI),this.currentFrame=0,qG.getInstance().add(this.onEnter,this)}
+ onEnter(){
+ this.currentFrame<10&&(this.alpha+=.1,this.x+=this.vx,this.y+=this.vy),++this.currentFrame>25&&this.remove()}
+ }
+ ;
+ Vt(uH,"BaseTextEffect");
+ let dH=uH;
+ const fH=class extends dH{
+ constructor(){
+ super(PF.AkEffect)}
+ }
+ ;
+ Vt(fH,"AkEffect");
+ let pH=fH;
+ const gH=class extends dH{
+ constructor(){
+ super(PF.BlockEffect)}
+ }
+ ;
+ Vt(gH,"BlockEffect");
+ let mH=gH;
+ const wH=class extends dH{
+ constructor(){
+ super(PF.CriticalEffect)}
+ }
+ ;
+ Vt(wH,"CriticalEffect");
+ let vH=wH;
+ const bH=class extends dH{
+ constructor(){
+ super(PF.EvadeEffect)}
+ }
+ ;
+ Vt(bH,"EvadeEffect");
+ let _H=bH;
+ const yH=class extends dH{
+ constructor(){
+ super(PF.FreezeImmuneEffect)}
+ }
+ ;
+ Vt(yH,"FreezeImmuneEffect");
+ let MH=yH;
+ const EH=class extends dH{
+ constructor(){
+ super(PF.HukEffect)}
+ }
+ ;
+ Vt(EH,"HukEffect");
+ let AH=EH;
+ const SH=class extends dH{
+ constructor(){
+ super(PF.KnockbackImmuneEffect)}
+ }
+ ;
+ Vt(SH,"KnockBackImmuneEffect");
+ let TH=SH;
+ const CH=class extends dH{
+ constructor(){
+ super(PF.MagicalImmuneEffect)}
+ }
+ ;
+ Vt(CH,"MagicalImmuneEffect");
+ let IH=CH;
+ const kH=class extends dH{
+ constructor(){
+ super(PF.MissEffect)}
+ }
+ ;
+ Vt(kH,"MissEffect");
+ let OH=kH;
+ const xH=class extends dH{
+ constructor(){
+ super(PF.PakEffect)}
+ }
+ ;
+ Vt(xH,"PakEffect");
+ let RH=xH;
+ const NH=class extends dH{
+ constructor(){
+ super(PF.PhysicalImmuneEffect)}
+ }
+ ;
+ Vt(NH,"PhysicalImmuneEffect");
+ let PH=NH;
+ const DH=class extends dH{
+ constructor(){
+ super(PF.StunImmuneEffect)}
+ }
+ ;
+ Vt(DH,"StunImmuneEffect");
+ let LH=DH;
+ const GH=class extends dH{
+ constructor(){
+ super(PF.YapEffect)}
+ }
+ ;
+ Vt(GH,"YapEffect");
+ let BH=GH;
+ const UH=class extends LF{
+ constructor(){
+ super(PF.DarkArcherSkillEffect1),this.orgScale=1.2,this.loop=!0}
+ }
+ ;
+ Vt(UH,"DarkArcherSkillEffect1");
+ let FH=UH;
+ const HH=class extends LF{
+ constructor(){
+ super(PF.FairyWingEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(HH,"FairyWingEffect");
+ let WH=HH;
+ const $H=class extends LF{
+ constructor(){
+ super(PF.PriestLightEffect),this._sheetName="HeroSkillEffect",this.loop=!1,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt($H,"PriestLightEffect");
+ let jH=$H;
+ const VH=class extends LF{
+ constructor(){
+ super(PF.PriestShieldEffect),Kt(this,"current",0),this.loop=!0,this.orgScale=1,this.incFrame=1}
+ start(t){
+ super.start(t),this.current=0,this.alpha=0}
+ onEnter(){
+ var t;
+ this.current++,this.currentFrame+=this.incFrame,this.currentFrame>=this.endFrame&&(this.currentFrame=0),null==(t=this.sp)||t.gotoAndStop(Math.floor(this.currentFrame)),this.current<15?this.alpha+=.06:this.alpha=.85+.15*Math.sin(.2*this.current),this.count--<0&&this.remove()}
+ }
+ ;
+ Vt(VH,"PriestShieldEffect");
+ let KH=VH;
+ const zH=class extends LF{
+ constructor(){
+ super(PF.PriestStartEffect),this.loop=!0,this.orgScale=1,this.incFrame=1}
+ remove(){
+ null!=this.owner&&this.owner.showPriestShield(120),super.remove()}
+ }
+ ;
+ Vt(zH,"PriestStartEffect");
+ let qH=zH;
+ const YH=class extends LF{
+ constructor(){
+ super(PF.EvolEffect),this._sheetName="Game",this.loop=!0,this.orgScale=1.1,this.incFrame=.6}
+ }
+ ;
+ Vt(YH,"EvolEffect");
+ let XH=YH;
+ const JH=class extends LF{
+ constructor(){
+ super(PF.EvolEffect2),this._sheetName="Game",this.loop=!0,this.orgScale=1.1,this.incFrame=.6}
+ }
+ ;
+ Vt(JH,"EvolEffect2");
+ let QH=JH;
+ const ZH=class extends LF{
+ constructor(){
+ super(PF.OrcIceExplodeEffect),this._sheetName="HeroSkillEffect",this.loop=!1,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(ZH,"OrcIceExplodeEffect");
+ let tW=ZH;
+ const iW=class extends LF{
+ constructor(){
+ super(PF.FreezeEffectL),Kt(this,"endDelay",0),this.orgScale=1.9,this.loop=!0}
+ start(t){
+ this.endDelay=20,this.alpha=1,Math.random()<.5?this.scale.x=Math.abs(this.scale.x):this.scale.x=-1*Math.abs(this.scale.x),super.start(t)}
+ onEnter(){
+ super.onEnter(),this.count<this.endDelay&&(this.alpha-=.05)}
+ setDuration(t){
+ this.count=t,this.alpha=1}
+ }
+ ;
+ Vt(iW,"FreezeEffectL");
+ let sW=iW;
+ const eW=class extends LF{
+ constructor(){
+ super(PF.FreezeEffectM),Kt(this,"endDelay",0),this.orgScale=1.9,this.loop=!0}
+ start(t){
+ this.endDelay=20,this.alpha=1,Math.random()<.5?this.scale.x=Math.abs(this.scale.x):this.scale.x=-1*Math.abs(this.scale.x),super.start(t)}
+ onEnter(){
+ super.onEnter(),this.count<this.endDelay&&(this.alpha-=.05)}
+ setDuration(t){
+ this.count=t,this.alpha=1}
+ }
+ ;
+ Vt(eW,"FreezeEffectM");
+ let nW=eW;
+ const hW=class extends LF{
+ constructor(){
+ super(PF.FreezeEffectS),Kt(this,"endDelay",0),this.orgScale=1.9,this.loop=!0}
+ start(t){
+ this.endDelay=20,this.alpha=1,Math.random()<.5?this.scale.x=Math.abs(this.scale.x):this.scale.x=-1*Math.abs(this.scale.x),super.start(t)}
+ onEnter(){
+ super.onEnter(),this.count<this.endDelay&&(this.alpha-=.05)}
+ setDuration(t){
+ this.count=t,this.alpha=1}
+ }
+ ;
+ Vt(hW,"FreezeEffectS");
+ let rW=hW;
+ const oW=class extends LF{
+ constructor(){
+ super(PF.StunEffect),this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(oW,"StunEffect");
+ let aW=oW;
+ const cW=class extends LF{
+ constructor(){
+ super(PF.CastleFire1)}
+ }
+ ;
+ Vt(cW,"CastleFire1");
+ let lW=cW;
+ const uW=class extends LF{
+ constructor(){
+ super(PF.CastleFire2)}
+ }
+ ;
+ Vt(uW,"CastleFire2");
+ let dW=uW;
+ const fW=class extends LF{
+ constructor(){
+ super(PF.StoneEffect1),this._sheetName="Game1",this.loop=!1,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(fW,"StoneEffect1");
+ let pW=fW;
+ const gW=class extends LF{
+ constructor(){
+ super(PF.DeathHandSkillEffect1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(gW,"DeathHandSkillEffect1");
+ let mW=gW;
+ const wW=class extends LF{
+ constructor(){
+ super(PF.BomberSmallBombExplode1),this._sheetName="HeroSkillEffect",this.orgScale=1.5,this.loop=!1}
+ }
+ ;
+ Vt(wW,"BomberSmallBombExplode1");
+ let vW=wW;
+ const bW=class extends LF{
+ constructor(){
+ super(PF.BlackMageBallExplode1),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(bW,"BlackMageBallExplode1");
+ let _W=bW;
+ const yW=class extends LF{
+ constructor(){
+ super(PF.FireBallExplode),this.loop=!1,this.orgScale=3.8,this.incFrame=.8}
+ }
+ ;
+ Vt(yW,"FireBallExplode");
+ let MW=yW;
+ const EW=class extends LF{
+ constructor(){
+ super(PF.OrcHunterEvadeBuff),this._sheetName="HeroSkillEffect",this.loop=!0,this.orgScale=1,this.incFrame=1}
+ }
+ ;
+ Vt(EW,"OrcHunterEvadeBuff");
+ let AW=EW;
+ const SW=class extends LF{
+ constructor(){
+ super(PF.PoisonGreenEffect),this.loop=!0,this.orgScale=1,this.incFrame=.65}
+ }
+ ;
+ Vt(SW,"PoisonGreenEffect");
+ let TW=SW;
+ const CW=class extends LF{
+ constructor(){
+ super(PF.BomberBigBombExplode1),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!1,this.tint=0,this.incFrame=1.5}
+ }
+ ;
+ Vt(CW,"BomberBigBombExplode1");
+ let IW=CW;
+ const kW=class extends LF{
+ constructor(){
+ super(PF.AggroEffect),this._sheetName="HeroSkillEffect",this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(kW,"AggroEffect");
+ let OW=kW;
+ const xW=class extends LF{
+ constructor(){
+ super(PF.PilotMissileSmoke1),Kt(this,"life",0),Kt(this,"maxLife",12),this.loop=!1,this.orgScale=1,this.incFrame=.5}
+ }
+ ;
+ Vt(xW,"PilotMissileSmoke1");
+ let RW=xW;
+ const NW=class extends LF{
+ constructor(){
+ super(PF.FireExplode),this.loop=!1,this.orgScale=2.5,this.incFrame=.3}
+ }
+ ;
+ Vt(NW,"FireExplode");
+ let PW=NW;
+ const DW=class extends LF{
+ constructor(){
+ super(PF.AntRockExplode),this._sheetName="Game1",this.orgScale=2,this.loop=!1}
+ }
+ ;
+ Vt(DW,"AntRockExplode");
+ let LW=DW;
+ const GW=class extends LF{
+ constructor(){
+ super(PF.IceExplode2),this.loop=!1,this.orgScale=1.4,this.incFrame=.6,this._sheetName="Game1"}
+ }
+ ;
+ Vt(GW,"IceExplode2");
+ let BW=GW;
+ const UW=class extends LF{
+ constructor(){
+ super(PF.HealYellow),this.orgScale=1.3,this.loop=!1}
+ }
+ ;
+ Vt(UW,"HealYellow");
+ let FW=UW;
+ const HW=class extends LF{
+ constructor(){
+ super(PF.ElectricEffect),this.orgScale=1.2}
+ }
+ ;
+ Vt(HW,"ElectricEffect");
+ let WW=HW;
+ const $W=class extends LF{
+ constructor(){
+ super(PF.BomberBigBombExplode1),this._sheetName="HeroSkillEffect",this.orgScale=.9,this.loop=!1,this.tint=13408512}
+ }
+ ;
+ Vt($W,"RoboExplode");
+ let jW=$W;
+ const VW=class extends LF{
+ constructor(){
+ super(PF.SuccubusLove),Kt(this,"dir",0),Kt(this,"numDelay",0),Kt(this,"vy",0),Kt(this,"vx",0),Kt(this,"ground",300),this._sheetName="Game1",this.orgScale=1}
+ start(t){
+ this.alpha=1,this.vx=24*Math.random()-12+7*this.dir,this.vy=-3-5*Math.random(),this.rotation=.05*this.vx,super.start(t)}
+ onEnter(){
+ if(this.owner)if(this.vy+=1,this.y+=this.vy,this.y>this.ground+10){
+ if(this.owner){
+ let t,i=this.owner.enemyList.length;
+ for(let s=0;
+ s<i;
+ s++)if(t=this.owner.enemyList[s],Math.abs(t.x-this.x)<40&&Math.abs(t.y-this.y)<40){
+ "M"==t.sex&&t.fallInLove(this.numDelay,this.owner);
+ break}
+ }
+ this.remove()}
+ else this.x+=this.vx,this.alpha-=.015;
+ else this.remove()}
+ }
+ ;
+ Vt(VW,"SuccubusLove");
+ let KW=VW;
+ const zW=class extends LF{
+ constructor(){
+ super(PF.SuccubusEffect1),this._sheetName="HeroSkillEffect",this.orgScale=1}
+ onEnter(){
+ this.sp&&(this.sp.rotation+=.1),this.count--<0&&this.remove()}
+ }
+ ;
+ Vt(zW,"SuccubusEffect1");
+ let qW=zW;
+ const YW=class extends LF{
+ constructor(){
+ super(PF.FallInLoveEffect),this._sheetName="HeroSkillEffect"}
+ onEnter(){
+ this.sp&&this.sp.scale.set(.9),this.scale.x=.5*Math.cos(.1*this.count)+.5,this.count--<0&&this.remove()}
+ }
+ ;
+ Vt(YW,"FallInLoveEffect");
+ let XW=YW;
+ const JW=class extends LF{
+ constructor(){
+ super(PF.Accelerate),this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(JW,"Accelerate");
+ let QW=JW;
+ const ZW=class extends LF{
+ constructor(){
+ super(PF.ElfGlowing1),this._sheetName="Game1",this.loop=!1,this.orgScale=2.2,this.incFrame=.8}
+ }
+ ;
+ Vt(ZW,"ElfGlowing1");
+ let t$=ZW;
+ const i$=class extends LF{
+ constructor(){
+ super(PF.ElfMagicCircle1),this._sheetName="Game1",this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(i$,"ElfMagicCircle1");
+ let s$=i$;
+ const e$=class extends LF{
+ constructor(){
+ super(PF.ElfBindEffect1),this._sheetName="Game1",this.orgScale=1.2,this.loop=!0}
+ }
+ ;
+ Vt(e$,"ElfBindEffect1");
+ let n$=e$;
+ const h$=class extends LF{
+ constructor(){
+ super(PF.ElfExplodeEffect1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(h$,"ElfExplodeEffect1");
+ let r$=h$;
+ const o$=class extends LF{
+ constructor(){
+ super(PF.AbyssLightning1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(o$,"AbyssLightning1");
+ let a$=o$;
+ const c$=class extends LF{
+ constructor(){
+ super(PF.AbyssSkillExplosion1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(c$,"AbyssSkillExplosion1");
+ let l$=c$;
+ const u$=class extends LF{
+ constructor(){
+ super(PF.JudegmentMarkEffect1),this._sheetName="Game1",this.orgScale=1,this.loop=!0}
+ }
+ ;
+ Vt(u$,"JudegmentMarkEffect1");
+ let d$=u$;
+ const f$=class extends LF{
+ constructor(){
+ super(PF.UndeadLightningExplosion1),this._sheetName="Game1",this.loop=!1,this.orgScale=1.8,this.incFrame=.4}
+ }
+ ;
+ Vt(f$,"UndeadLightningExplosion1");
+ let p$=f$;
+ const g$=class extends LF{
+ constructor(){
+ super(PF.FireExplosion1),this._sheetName="Game1",this.orgScale=2,this.loop=!1}
+ }
+ ;
+ Vt(g$,"FireExplosion1");
+ let m$=g$;
+ const w$=class extends LF{
+ constructor(){
+ super(PF.FireExplosion2),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(w$,"FireExplosion2");
+ let v$=w$;
+ const b$=class extends LF{
+ constructor(){
+ super(PF.AladinGenie1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(b$,"AladinGenie1");
+ let _$=b$;
+ const y$=class t extends LF{
+ constructor(){
+ super(PF.DruidVine1),this._sheetName="Game1",this.orgScale=1.9,this.loop=!1}
+ onEnter(){
+ var i;
+ if(this.removed)return;
+ const s=this.endFrame-1,e=(s-t.PEAK_FRAME)/this.incFrame;
+ this.currentFrame<t.PEAK_FRAME?(this.currentFrame+=this.incFrame,this.currentFrame>t.PEAK_FRAME&&(this.currentFrame=t.PEAK_FRAME)):this.count<=e&&this.currentFrame<s&&(this.currentFrame+=this.incFrame,this.currentFrame>s&&(this.currentFrame=s)),null==(i=this.sp)||i.gotoAndStop(Math.floor(this.currentFrame)),this.count--<0&&this.remove()}
+ }
+ ;
+ Vt(y$,"DruidVine1"),Kt(y$,"PEAK_FRAME",19);
+ let M$=y$;
+ const E$=class extends LF{
+ constructor(){
+ super(PF.CrowExplosion1),this._sheetName="Game1",this.orgScale=1,this.loop=!1}
+ }
+ ;
+ Vt(E$,"CrowExplosion1");
+ let A$=E$;
+ const S$=class extends LF{
+ constructor(){
+ super(PF.BladeMasterAfterImage),Kt(this,"dynamicSp",null),Kt(this,"life",0),Kt(this,"maxLife",0),Kt(this,"initAlpha",1),Kt(this,"fromX",0),Kt(this,"fromY",0),Kt(this,"toX",null),Kt(this,"toY",null),this.loop=!1,this.holdLastFrame=!1}
+ async createUI(){
+ this.dynamicSp||(this.dynamicSp=new He,this.dynamicSp.anchor.set(.5,1),this.addChild(this.dynamicSp))}
+ setupAfterImage(t,i,s,e,n,h,r,o,a,c,l=null,u=null){
+ this.dynamicSp||(this.dynamicSp=new He,this.addChild(this.dynamicSp)),this.dynamicSp.texture=t,this.dynamicSp.anchor.set(i,s),this.dynamicSp.scale.set(h,r),this.dynamicSp.rotation=o,this.x=e,this.y=n,this.scale.set(1),this.alpha=c,this.initAlpha=c,this.life=a,this.maxLife=a,this.fromX=e,this.fromY=n,this.toX=l,this.toY=u}
+ onEnter(){
+ if(this.removed)return;
+ if(this.life--,this.life<=0)return void this.remove();
+ const t=1-this.life/this.maxLife;
+ this.alpha=(1-t)*this.initAlpha,null!==this.toX&&null!==this.toY&&(this.x=this.fromX+(this.toX-this.fromX)*t,this.y=this.fromY+(this.toY-this.fromY)*t)}
+ }
+ ;
+ Vt(S$,"BladeMasterAfterImage");
+ let T$=S$;
+ const C$=class extends LF{
+ constructor(){
+ super(PF.PoisonExplodeEffect),this._sheetName="RaidBattle",this.orgScale=1,this.loop=!1,this.incFrame=1.2}
+ }
+ ;
+ Vt(C$,"PoisonExplodeEffect");
+ let I$=C$;
+ const k$=class extends dH{
+ constructor(){
+ super("BackAttack"),this.orgScale=.4}
+ }
+ ;
+ Vt(k$,"BackAttackEffect");
+ let O$=k$;
+ const x$=class extends LF{
+ constructor(){
+ super("HeroAura1"),this.loop=!0,this.incFrame=.5}
+ }
+ ;
+ Vt(x$,"HeroAura1Effect");
+ let R$=x$;
+ const N$=class extends LF{
+ constructor(){
+ super("HeroAura2"),this.loop=!0,this.incFrame=.5}
+ }
+ ;
+ Vt(N$,"HeroAura2Effect");
+ let P$=N$;
+ const D$=class extends LF{
+ constructor(){
+ super("HeroAura3"),this.loop=!0,this.incFrame=.5}
+ }
+ ;
+ Vt(D$,"HeroAura3Effect");
+ let L$=D$;
+ const G$=class extends LF{
+ constructor(){
+ super("HeroAura4"),this.loop=!0,this.incFrame=.5}
+ }
+ ;
+ Vt(G$,"HeroAura4Effect");
+ let B$=G$;
+ const U$=class extends LF{
+ constructor(){
+ super("HeroAura5"),this.loop=!0,this.incFrame=.5}
+ }
+ ;
+ Vt(U$,"HeroAura5Effect");
+ let F$=U$;
+ const H$=class extends LF{
+ constructor(){
+ super("HeroAura6"),this.loop=!0,this.incFrame=.5}
+ }
+ ;
+ Vt(H$,"HeroAura6Effect");
+ let W$=H$;
+ const $$=class t extends dH{
+ constructor(t=""){
+ super(t),Kt(this,"holdFrames",60),this.orgScale=.7}
+ showAt(t,i,s){
+ super.showAt(t,i,s),this.vx=0,this.vy=-1}
+ async createUI(){
+ var t;
+ await super.createUI(),null==(t=this.sp)||t.anchor.set(.5,1)}
+ onEnter(){
+ const i=t.RISE_FRAMES,s=i+this.holdFrames;
+ if(this.currentFrame<i)this.alpha=Math.min(1,this.alpha+.1),this.x+=this.vx,this.y+=this.vy;
+ else if(this.currentFrame>=s&&(this.alpha-=1/t.FADE_FRAMES,this.y+=.5*this.vy,this.alpha<=0))return void this.remove();
+ this.currentFrame++}
+ }
+ ;
+ Vt($$,"BaseRaidBuffSkillEffect"),Kt($$,"RISE_FRAMES",10),Kt($$,"FADE_FRAMES",10);
+ let j$=$$;
+ const V$=class extends j${
+ constructor(){
+ super("RaidBuffSkill1")}
+ }
+ ;
+ Vt(V$,"RaidBuffSkillEffect1");
+ let K$=V$;
+ const z$=class extends j${
+ constructor(){
+ super("RaidBuffSkill2")}
+ }
+ ;
+ Vt(z$,"RaidBuffSkillEffect2");
+ let q$=z$;
+ const Y$=class extends j${
+ constructor(){
+ super("RaidBuffSkill3")}
+ }
+ ;
+ Vt(Y$,"RaidBuffSkillEffect3");
+ let X$=Y$;
+ const J$=class extends j${
+ constructor(){
+ super("RaidBuffSkill4")}
+ }
+ ;
+ Vt(J$,"RaidBuffSkillEffect4");
+ let Q$=J$;
+ const Z$=class extends j${
+ constructor(){
+ super("RaidBuffSkill5")}
+ }
+ ;
+ Vt(Z$,"RaidBuffSkillEffect5");
+ let tj=Z$;
+ const ij=[PF.RaidBuffSkillEffect1,PF.RaidBuffSkillEffect2,PF.RaidBuffSkillEffect3,PF.RaidBuffSkillEffect4,PF.RaidBuffSkillEffect5],sj=class{
+ static getEffect(t){
+ const i=t,s=this.classMap[i];
+ if(!s)return new LF(t);
+ const e=i;
+ let n;
+ return this.effectPool[e]||(this.effectPool[e]=[]),this.effectPool[e].length>0?n=this.effectPool[e].pop():(n=new s,n.className=e,n.createUI()),n.owner=null,this.list.push(n),n}
+ static addToRecycleList(t){
+ const i=this.list.indexOf(t);
+ -1!==i&&this.list.splice(i,1);
+ const s=t.className;
+ this.effectPool[s]||(this.effectPool[s]=[]),this.effectPool[s].includes(t)||this.effectPool[s].push(t)}
+ static getActiveEffects(){
+ return[...this.list]}
+ static clear(){
+ this.effectPool={
+ }
+ ,this.list=[]}
+ }
+ ;
+ Vt(sj,"EffectFactory"),Kt(sj,"effectPool",{
+ }
+ ),Kt(sj,"classMap",{
+ [PF.MagicalHitEffect]:WF,[PF.PhysicalHitEffect]:jF,[PF.CriticalEffect]:vH,[PF.MissEffect]:OH,[PF.BlockEffect]:mH,[PF.EvadeEffect]:_H,[PF.AkEffect]:pH,[PF.HukEffect]:AH,[PF.PakEffect]:RH,[PF.YapEffect]:BH,[PF.StunImmuneEffect]:LH,[PF.FreezeImmuneEffect]:MH,[PF.KnockbackImmuneEffect]:TH,[PF.MagicalImmuneEffect]:IH,[PF.PhysicalImmuneEffect]:PH,[PF.HumanSkillEffect]:rH,[PF.ElfSkillEffect]:nH,[PF.UndeadSkillEffect]:lH,[PF.OrcSkillEffect]:aH,[PF.CurseEffect]:FF,[PF.PowerShieldEffect]:tH,[PF.PhysicalShieldEffect]:QF,[PF.MagicalShieldEffect]:XF,[PF.SilenceEffect]:sH,[PF.DarkArcherSkillEffect1]:FH,[PF.PriestLightEffect]:jH,[PF.PriestStartEffect]:qH,[PF.PriestShieldEffect]:KH,[PF.FairyWingEffect]:WH,[PF.BindingEffect]:BF,[PF.RockExplode]:KF,[PF.Smoke]:qF,[PF.EvolEffect]:XH,[PF.EvolEffect2]:QH,[PF.OrcIceExplodeEffect]:tW,[PF.FreezeEffectL]:sW,[PF.FreezeEffectM]:nW,[PF.FreezeEffectS]:rW,[PF.StunEffect]:aW,[PF.CastleFire1]:lW,[PF.CastleFire2]:dW,[PF.StoneEffect1]:pW,[PF.DeathHandSkillEffect1]:mW,[PF.BomberBigBombExplode1]:IW,[PF.BomberSmallBombExplode1]:vW,[PF.BlackMageBallExplode1]:_W,[PF.FireBallExplode]:MW,[PF.PoisonGreenEffect]:TW,[PF.OrcHunterEvadeBuff]:AW,[PF.AggroEffect]:OW,[PF.PilotMissileSmoke1]:RW,[PF.FireExplode]:PW,[PF.AntRockExplode]:LW,[PF.IceExplode2]:BW,[PF.HealYellow]:FW,[PF.ElectricEffect]:WW,[PF.RoboExplode]:jW,[PF.SuccubusLove]:KW,[PF.SuccubusEffect1]:qW,[PF.FallInLoveEffect]:XW,[PF.Accelerate]:QW,[PF.ElfGlowing1]:t$,[PF.ElfMagicCircle1]:s$,[PF.ElfExplodeEffect1]:r$,[PF.ElfBindEffect1]:n$,[PF.AbyssLightning1]:a$,[PF.AbyssSkillExplosion1]:l$,[PF.JudegmentMarkEffect1]:d$,[PF.UndeadLightningExplosion1]:p$,[PF.FireExplosion1]:m$,[PF.FireExplosion2]:v$,[PF.AladinGenie1]:_$,[PF.DruidVine1]:M$,[PF.CrowExplosion1]:A$,[PF.BladeMasterAfterImage]:T$,[PF.PoisonExplodeEffect]:I$,[PF.BackAttackEffect]:O$,[PF.HeroAura1Effect]:R$,[PF.HeroAura2Effect]:P$,[PF.HeroAura3Effect]:L$,[PF.HeroAura4Effect]:B$,[PF.HeroAura5Effect]:F$,[PF.HeroAura6Effect]:W$,[PF.RaidBuffSkillEffect1]:K$,[PF.RaidBuffSkillEffect2]:q$,[PF.RaidBuffSkillEffect3]:X$,[PF.RaidBuffSkillEffect4]:Q$,[PF.RaidBuffSkillEffect5]:tj}
+ ),Kt(sj,"list",[]);
+ let ej=sj;
+ var nj=(t=>(t.NormalArrow="NormalArrow",t.EnergyBall="EnergyBall",t.SpeedArrow="SpeedArrow",t.Bullet1="Bullet1",t.OrcSpearmanSpear1="OrcSpearmanSpear1",t.OrcIceMageFire1="OrcIceMageFire1",t.PoisonArcherArrow1="PoisonArcherArrow1",t.FireBirdBall1="FireBirdBall1",t.GreenEagleBall1="GreenEagleBall1",t.BlackMageBall1="BlackMageBall1",t.BlackMageDarkBall1="BlackMageDarkBall1",t.DarkMageBall1="DarkMageBall1",t.DarkMageSkillBall1="DarkMageSkillBall1",t.GreenEnergyBall="GreenEnergyBall",t.YellowEnergyBall="YellowEnergyBall",t.FairyMusicNote="FairyMusicNote",t.GhostBall1="GhostBall1",t.DarkArcherArrow1="DarkArcherArrow1",t.OrcWingBall1="OrcWingBall1",t.OrcAxeBall1="OrcAxeBall1",t.Twist="Twist",t.FlowerBullet="FlowerBullet",t.Rock="Rock",t.DarkHermitMissile="DarkHermitMissile",t.Pearl="Pearl",t.UniArrow="UniArrow",t.PowerArrow="PowerArrow",t.OrcBlizzardMageRain1="OrcBlizzardMageRain1",t.FireMagicBall1="FireMagicBall1",t.FireMageBird1="FireMageBird1",t.BomberSmallBomb1="BomberSmallBomb1",t.BomberBigBomb1="BomberBigBomb1",t.IceFlake="IceFlake",t.PoisonArcherArrowSkill1="PoisonArcherArrowSkill1",t.OrcIceMageFireSkill1="OrcIceMageFireSkill1",t.PilotMissile1="PilotMissile1",t.FireBullet="FireBullet",t.AntRock1="AntRock1",t.SpeedArrow2="SpeedArrow2",t.MoleFire="MoleFire",t.OrcRapterRiderSpear1="OrcRapterRiderSpear1",t.WyvernRiderThrowingKnife1="WyvernRiderThrowingKnife1",t.WyvernRiderThrowingKnifeS1="WyvernRiderThrowingKnifeS1",t.SuccubusBlade1="SuccubusBlade1",t.DarkChain1="DarkChain1",t.DruidTangle1="DruidTangle1",t.DruidDrill1="DruidDrill1",t.TigerRiderArrow1="TigerRiderArrow1",t.GriffinSpear1="GriffinSpear1",t.GriffinSuperSpear1="GriffinSuperSpear1",t.SteamFire1="SteamFire1",t.SteamMissile1="SteamMissile1",t.SylphidTornado1="SylphidTornado1",t.SylphidShuriken1="SylphidShuriken1",t.AladinCoin1="AladinCoin1",t.BladeWave1="BladeWave1",t.SpinBlade="SpinBlade",t.CrowKnightBullet1="CrowKnightBullet1",t.CrowCompanion1="CrowCompanion1",t.CrowGuidedBall1="CrowGuidedBall1",t.CrowFeatherShot1="CrowFeatherShot1",t.ScorpionPoisonBullet="ScorpionPoisonBullet",t.ScorpionPoisonArea="ScorpionPoisonArea",t.HarpyFeather="HarpyFeather",t.HarpyTornado="HarpyTornado",t.GolemStone="GolemStone",t.BerialLightning="BerialLightning",t.BerialLightningArea="BerialLightningArea",t.BerialFire="BerialFire",t.SummonDragon="SummonDragon",t.DKSpear="DKSpear",t))(nj||{
+ }
+ );
+ const hj=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"className",nj.NormalArrow),Kt(this,"owner",null),Kt(this,"target",null),Kt(this,"bounceCount",0),Kt(this,"bounceRange",200),Kt(this,"prevTarget",null),Kt(this,"speed",10),Kt(this,"vx",0),Kt(this,"vy",0),Kt(this,"g",0),Kt(this,"orientToPath",!0),Kt(this,"vr",0),Kt(this,"t",0),Kt(this,"T",0),Kt(this,"minT",5),Kt(this,"maxT",60),Kt(this,"offsetX",0),Kt(this,"offsetY",0),Kt(this,"sp",null),Kt(this,"textures",[]),Kt(this,"textureName",""),Kt(this,"sheetName","Game"),Kt(this,"isActive",!1),Kt(this,"removed",!1),Kt(this,"battleController",null),Kt(this,"damagePercent",1),Kt(this,"flyEnd",0),Kt(this,"incFrame",1),Kt(this,"currentFrame",0),Kt(this,"delay",0),Kt(this,"weaponScale",1),Kt(this,"hitClassName",""),Kt(this,"resolvedHitClassName",""),this.initializeTextureName(),this.initializeData(),this.initialize(),this.generateSprite(),this.eventMode="none"}
+ get random(){
+ return(this.battleController||jhi.getInstance()).random}
+ initialize(){
+ }
+ initializeData(){
+ }
+ initializeTextureName(){
+ }
+ setBattleController(t){
+ this.battleController=t}
+ generateSprite(){
+ ""===this.textureName&&(this.textureName=this.className),this.textures=QA.getTextures(this.sheetName,this.textureName),this.textures.length>0&&(this.sp=new He(this.textures[0]),this.addChild(this.sp),this.sp.scale.set(this.weaponScale))}
+ setData(t=1){
+ this.damagePercent=t,this.alpha=1,this.currentFrame=0}
+ play(){
+ this.target&&(this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||this.getDefaultHitEffect(),this.isActive||(this.prevTarget=null),this.calculateTrajectory(),this.battleController?this.battleController.addWeapon(this):qG.getInstance().add(this.execute,this))}
+ calculateTrajectory(){
+ if(!this.target)return;
+ const i=this.target.getHitCenter();
+ this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.8,this.offsetY=this.target.getAimOffsetY(this.random.next());
+ const s=i.x+this.offsetX,e=i.y+this.offsetY,n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
+ if(this.T=Math.max(this.minT,Math.min(this.maxT,r/this.speed)),r>0){
+ const i=r/t.MIN_SPEED;
+ this.T>i&&(this.T=Math.max(this.minT,i))}
+ 0===this.g?(this.vx=n/this.T,this.vy=h/this.T):(this.vx=n/this.T,this.vy=h/this.T-this.g*(this.T-1)*.5),this.t=0}
+ execute(){
+ if(this.isActive&&!this.removed)if(--this.delay>0)this.visible=!1;
+ else{
+ if(this.visible=!0,this.t++,this.t<this.T&&this.target&&!this.target.removed){
+ const i=this.target.getHitCenter(),s=i.x+this.offsetX-this.x,e=i.y+this.offsetY-this.y,n=this.T-this.t;
+ this.vx=s/n,this.vy=e/n-this.g*(n-1)*.5;
+ const h=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
+ if(h>0&&h<t.MIN_SPEED){
+ const i=t.MIN_SPEED/h;
+ this.vx*=i,this.vy*=i}
+ }
+ else if(!this.target||this.target.removed){
+ const t=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
+ if(t<9)if(t>0){
+ const i=9/t;
+ this.vx*=i,this.vy*=i}
+ else this.vx=9}
+ if(this.x+=this.vx,this.y+=this.vy,0!==this.g&&(this.vy+=this.g),this.orientToPath&&(this.rotation=Math.atan2(this.vy,this.vx)),0!=this.vr&&(this.rotation+=this.vr),this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.checkEarlyCollision()){
+ if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter();
+ this.x=t.x+this.offsetX,this.y=t.y+this.offsetY}
+ this.onHit()}
+ else{
+ if(this.t>=this.T){
+ if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter();
+ return this.x=t.x+this.offsetX,this.y=t.y+this.offsetY,void this.onHit()}
+ if(this.t>=this.T+30)return void this.remove()}
+ (!this.target||this.target.removed||!this.target.isAlive)&&(this.x<-200||this.x>840||this.y<-200||this.y>840)&&this.remove()}
+ }
+ }
+ checkEarlyCollision(){
+ if(!this.target||this.target.removed)return!1;
+ const t=this.target.getHitCenter(),i=Math.abs(t.x-this.x),s=Math.abs(t.y-this.y),e=.3*this.target.hitWidth,n=.3*this.target.hitHeight;
+ return i<e&&s<n}
+ onHit(){
+ if(this.owner&&this.target){
+ if(this.target.isAlive&&this.owner.doDamage(this.target,this.damagePercent,!0)&&(this.onHitMain(),this.showHitEffect(this.resolvedHitClassName)),this.bounceCount>0&&(this.bounceCount>=1||this.random.chance(this.bounceCount))){
+ const t=this.findNextBounceTarget();
+ if(t)return this.bounceCount--,this.prevTarget=this.target,this.target=t,this.damagePercent*=.7,this.calculateTrajectory(),this.t=0,void(this.isActive=!0)}
+ this.remove()}
+ else this.remove()}
+ onHitMain(){
+ }
+ findNextBounceTarget(){
+ if(!this.owner)return null;
+ const t=(this.battleController||this.owner.battleController||jhi.getInstance()).getNearbyUnits(this.x,this.y,this.owner.enemyList);
+ for(const i of t)if(i.isAlive&&i!==this.prevTarget&&!i.isUntagetable&&Math.abs(i.x-this.x)+Math.abs(i.y-this.y)<this.bounceRange)return i;
+ return null}
+ showHitEffect(t){
+ if(!t)return;
+ if(null==this.target||this.target.removed)return;
+ let i=ej.getEffect(t);
+ i.x=this.offsetX,i.y=this.offsetY-.5*this.target.hitHeight-this.target.airHeight,i.start(10),this.target.addChild(i),i.owner=this.target,-1===this.target.effectList.indexOf(i)&&this.target.effectList.push(i)}
+ getDefaultHitEffect(){
+ return this.owner&&this.owner.dmgType===ex.MAGICAL?PF.MagicalHitEffect:PF.PhysicalHitEffect}
+ remove(){
+ this.isActive=!1,this.removed=!0,this.visible=!1,this.parent&&this.parent.removeChild(this),this.battleController||qG.getInstance().remove(this.execute,this),bQ.addToRecycleList(this)}
+ stop(){
+ this.isActive=!1}
+ }
+ ;
+ Vt(hj,"BaseWeapon"),Kt(hj,"MIN_SPEED",4);
+ let rj=hj;
+ const oj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.FlowerBullet,this.sheetName="OrcFlower"}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=1,this.incFrame=1}
+ onHitMain(){
+ null!=this.target&&this.random.chance(.05)&&this.target.stun(100)}
+ }
+ ;
+ Vt(oj,"FlowerBullet");
+ let aj=oj;
+ const cj=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"aimDuration",15),Kt(this,"aimTimer",0),Kt(this,"launched",!1),Kt(this,"accel",1.08)}
+ initializeTextureName(){
+ this.className=nj.DarkHermitMissile,this.sheetName="DarkHermit",this.textureName="HermitMissile"}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.hitClassName="Smoke",this.g=0,this.speed=35,this.flyEnd=2,this.incFrame=.1,this.orientToPath=!0}
+ play(){
+ this.target&&(this.x=this.target.x+(120*this.random.next()-60),this.y=this.target.y-280-50*this.random.next(),this.aimTimer=8+this.random.nextInt(15),this.launched=!1,this.scale.set(.6),super.play())}
+ execute(){
+ if(!this.removed){
+ if(!this.launched){
+ if(this.target&&this.target.isAlive){
+ const t=this.target.x-this.x,i=this.target.y-this.y;
+ this.rotation=Math.atan2(i,t)}
+ return this.aimTimer--,void(this.aimTimer<=0&&(this.launched=!0,this.scale.set(1),this.calculateTrajectory()))}
+ this.vx*=this.accel,this.vy*=this.accel,super.execute()}
+ }
+ }
+ ;
+ Vt(cj,"DarkHermitMissile");
+ let lj=cj;
+ const uj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.Rock,this.sheetName="KingSlime"}
+ initializeData(){
+ this.hitClassName="RockExplode",this.g=0,this.speed=14,this.flyEnd=1,this.incFrame=1,this.vr=.2}
+ onHitMain(){
+ null!=this.target&&this.random.chance(.15)&&this.target.stun(60)}
+ }
+ ;
+ Vt(uj,"Rock");
+ let dj=uj;
+ const fj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.EnergyBall,this.textureName=nj.EnergyBall}
+ initializeData(){
+ this.scale.set(1),this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(t/s,i/s,10)}
+ }
+ ;
+ Vt(fj,"EnergyBall");
+ let pj=fj;
+ const gj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.FairyMusicNote,this.textureName=nj.FairyMusicNote}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1,this.weaponScale=.6}
+ }
+ ;
+ Vt(gj,"FairyMusicNote");
+ let mj=gj;
+ const wj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.GreenEagleBall1,this.textureName=nj.GreenEagleBall1,this.scale=1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=1,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(2*t/s,2*i/s,15),this.random.chance(.5)&&this.target.poison(40,this.owner??void 0)}
+ }
+ ;
+ Vt(wj,"GreenEagleBall1");
+ let vj=wj;
+ const bj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.GreenEnergyBall,this.textureName=nj.GreenEnergyBall,this.scale=1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=9,this.flyEnd=2,this.incFrame=1}
+ }
+ ;
+ Vt(bj,"GreenEnergyBall");
+ let _j=bj;
+ const yj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.NormalArrow,this.textureName=nj.NormalArrow}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.1,this.speed=10,this.flyEnd=2,this.incFrame=1}
+ }
+ ;
+ Vt(yj,"NormalArrow");
+ let Mj=yj;
+ const Ej=class extends rj{
+ initializeTextureName(){
+ this.textureName="PoisonArcherArrow1"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.03,this.speed=9,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ this.target&&this.target.poison(50,this.owner??void 0)}
+ }
+ ;
+ Vt(Ej,"PoisonArcherArrow1");
+ let Aj=Ej;
+ const Sj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.SpeedArrow,this.textureName=nj.SpeedArrow}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=8,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(t/s,i/s,10)}
+ }
+ ;
+ Vt(Sj,"SpeedArrow");
+ let Tj=Sj;
+ const Cj=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"whirlCnt",0),Kt(this,"whirlTotal",70)}
+ initializeTextureName(){
+ this.className=nj.Twist,this.textureName=nj.Twist}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=1,this.flyEnd=16,this.incFrame=1,this.whirlCnt=0,this.whirlTotal=70,this.scale=1.5}
+ calculateTrajectory(){
+ }
+ execute(){
+ this.removed||(this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],null==this.owner||null==this.target||this.target.removed||(this.target.isImmovable||(this.target.x=this.x,this.target.y=this.y),this.target.isAlive&&this.whirlCnt%10==0&&(this.target.isImmovable||this.target.binding(12,!1,this.owner??void 0),this.whirlCnt%30==0&&this.owner.doDamage(this.target,this.damagePercent))),(this.x<-50||this.x>690||this.y<-50||this.y>690)&&this.remove(),++this.whirlCnt>this.whirlTotal&&this.remove())}
+ }
+ ;
+ Vt(Cj,"Twist");
+ let Ij=Cj;
+ const kj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.YellowEnergyBall,this.textureName=nj.YellowEnergyBall}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1,this.weaponScale=.6}
+ }
+ ;
+ Vt(kj,"YellowEnergyBall");
+ let Oj=kj;
+ const xj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.Bullet1,this.textureName=nj.Bullet1,this.scale=.8}
+ initializeData(){
+ this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ this.target&&this.random.chance(.2)&&this.target.stun(50,this.owner??void 0)}
+ }
+ ;
+ Vt(xj,"Bullet1");
+ let Rj=xj;
+ const Nj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcAxeBall1,this.textureName=nj.OrcAxeBall1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.01,this.speed=9,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1,this.vr=.3}
+ }
+ ;
+ Vt(Nj,"OrcAxeBall1");
+ let Pj=Nj;
+ const Dj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcIceMageFire1,this.textureName=nj.OrcIceMageFire1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=.02,this.speed=12,this.flyEnd=7,this.incFrame=1}
+ }
+ ;
+ Vt(Dj,"OrcIceMageFire1");
+ let Lj=Dj;
+ const Gj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcSpearmanSpear1,this.textureName=nj.OrcSpearmanSpear1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.5,this.speed=16,this.flyEnd=2,this.incFrame=1}
+ }
+ ;
+ Vt(Gj,"OrcSpearmanSpear1");
+ let Bj=Gj;
+ const Uj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcWingBall1,this.textureName=nj.OrcWingBall1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
+ onHitMain(){
+ var t,i;
+ this.damagePercent>=2&&(null==(t=this.target)?void 0:t.isAlive)&&Math.random()<(((null==(i=this.owner)?void 0:i.evolStage)??0)>=1?.5:.35)&&this.target.poison(50,this.owner??void 0)}
+ }
+ ;
+ Vt(Uj,"OrcWingBall1");
+ let Fj=Uj;
+ const Hj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.BlackMageBall1,this.textureName=nj.BlackMageBall1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
+ }
+ ;
+ Vt(Hj,"BlackMageBall1");
+ let Wj=Hj;
+ const $j=class extends rj{
+ initializeTextureName(){
+ this.className=nj.DarkArcherArrow1,this.textureName=nj.DarkArcherArrow1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=1,this.incFrame=1,this.scale.set(1,.5)}
+ }
+ ;
+ Vt($j,"DarkArcherArrow1");
+ let jj=$j;
+ const Vj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.DarkMageBall1,this.textureName=nj.DarkMageBall1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=9,this.flyEnd=4,this.incFrame=1}
+ }
+ ;
+ Vt(Vj,"DarkMageBall1");
+ let Kj=Vj;
+ const zj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.DarkMageSkillBall1,this.textureName=nj.DarkMageSkillBall1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
+ }
+ ;
+ Vt(zj,"DarkMageSkillBall1");
+ let qj=zj;
+ const Yj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.GhostBall1,this.textureName=nj.GhostBall1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.scale=.7,this.g=0,this.speed=8,this.flyEnd=1,this.incFrame=1}
+ }
+ ;
+ Vt(Yj,"GhostBall1");
+ let Xj=Yj;
+ const Jj=class extends rj{
+ initializeTextureName(){
+ this.className=nj.Pearl,this.sheetName="DarkHermit"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=18,this.flyEnd=1,this.incFrame=1,this.vr=.2}
+ onHitMain(){
+ null!=this.target&&this.random.chance(.05)&&this.target.stun(100)}
+ }
+ ;
+ Vt(Jj,"Pearl");
+ let Qj=Jj;
+ const Zj=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"phase",0),Kt(this,"phaseTimer",0),Kt(this,"riseVx",0),Kt(this,"riseVy",0),Kt(this,"currentAngle",0),Kt(this,"riseAngleDeg",45),Kt(this,"launched",!1)}
+ initializeTextureName(){
+ this.className=nj.UniArrow,this.textureName=nj.UniArrow}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.scale=.8,this.speed=11,this.flyEnd=2,this.incFrame=1,this.g=0}
+ setData(t=1){
+ super.setData(t),this.launched=!1,this.riseAngleDeg=45}
+ calculateTrajectory(){
+ if(!this.target)return;
+ const i=this.target.getHitCenter();
+ this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.8,this.offsetY=-this.target.hitHeight*(.1+.4*this.random.next());
+ const s=i.x+this.offsetX,e=i.y+this.offsetY;
+ if(this.launched){
+ this.phase=2,this.phaseTimer=0;
+ const i=s-this.x,n=e-this.y,h=Math.sqrt(i*i+n*n);
+ this.T=Math.max(5,Math.min(25,h/t.DIVE_SPEED))}
+ else{
+ this.launched=!0,this.phase=0,this.phaseTimer=0;
+ const i=this.owner?this.owner.direction:1,n=this.riseAngleDeg*Math.PI/180,h=i>0?-n:-(Math.PI-n),r=8;
+ this.riseVx=Math.cos(h)*r,this.riseVy=Math.sin(h)*r,this.currentAngle=h,this.rotation=h;
+ const o=s-this.x,a=e-this.y,c=Math.sqrt(o*o+a*a),l=Math.max(5,Math.min(30,c/t.DIVE_SPEED));
+ this.T=t.RISE_FRAMES+t.AIM_FRAMES+l}
+ this.t=0}
+ execute(){
+ if(!this.removed){
+ switch(this.t++,this.phaseTimer++,this.phase){
+ case 0:this.executeRise();
+ break;
+ case 1:this.executeAim();
+ break;
+ case 2:if(this.executeDive(),this.removed)return}
+ this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],(this.x<-50||this.x>690||this.y<-100||this.y>640)&&this.remove()}
+ }
+ executeRise(){
+ this.x+=this.riseVx,this.y+=this.riseVy,this.orientToPath&&(this.rotation=Math.atan2(this.riseVy,this.riseVx),this.currentAngle=this.rotation),this.phaseTimer>=t.RISE_FRAMES&&(this.phase=1,this.phaseTimer=0)}
+ executeAim(){
+ let i,s;
+ if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter();
+ i=t.x+this.offsetX,s=t.y+this.offsetY}
+ else i=this.x+100*Math.cos(this.currentAngle),s=this.y+100*Math.sin(this.currentAngle);
+ let e=Math.atan2(s-this.y,i-this.x)-this.currentAngle;
+ for(;
+ e>Math.PI;
+ )e-=2*Math.PI;
+ for(;
+ e<-Math.PI;
+ )e+=2*Math.PI;
+ for(this.currentAngle+=.3*e;
+ this.currentAngle>Math.PI;
+ )this.currentAngle-=2*Math.PI;
+ for(;
+ this.currentAngle<-Math.PI;
+ )this.currentAngle+=2*Math.PI;
+ const n=.05*Math.sin(1.5*this.phaseTimer);
+ if(this.rotation=this.currentAngle+n,this.x+=.5*Math.cos(this.currentAngle),this.y+=.5*Math.sin(this.currentAngle),this.phaseTimer>=t.AIM_FRAMES){
+ if(this.phase=2,this.phaseTimer=0,this.target&&!this.target.removed){
+ const t=this.target.getHitCenter();
+ i=t.x+this.offsetX,s=t.y+this.offsetY}
+ const e=i-this.x,n=s-this.y,h=Math.sqrt(e*e+n*n);
+ this.T=this.t+Math.max(5,Math.min(25,h/t.DIVE_SPEED))}
+ }
+ executeDive(){
+ if(!this.target||this.target.removed)return this.vx=Math.cos(this.rotation)*t.DIVE_SPEED,this.vy=Math.sin(this.rotation)*t.DIVE_SPEED,this.x+=this.vx,void(this.y+=this.vy);
+ const i=this.target.getHitCenter(),s=i.x+this.offsetX,e=i.y+this.offsetY,n=this.T-this.t;
+ if(n>0){
+ this.vx=(s-this.x)/n,this.vy=(e-this.y)/n;
+ const t=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
+ if(t>0&&t<rj.MIN_SPEED){
+ const i=rj.MIN_SPEED/t;
+ this.vx*=i,this.vy*=i}
+ }
+ this.x+=this.vx,this.y+=this.vy,this.orientToPath&&(this.rotation=Math.atan2(this.vy,this.vx)),this.checkEarlyCollision()?this.onHit():this.t>=this.T&&(this.x=s,this.y=e,this.onHit())}
+ }
+ ;
+ Vt(Zj,"UniArrow"),Kt(Zj,"RISE_FRAMES",16),Kt(Zj,"AIM_FRAMES",10),Kt(Zj,"DIVE_SPEED",14);
+ let tV=Zj;
+ const iV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.PowerArrow,this.textureName=nj.PowerArrow}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(t/s,i/s,10)}
+ }
+ ;
+ Vt(iV,"PowerArrow");
+ let sV=iV;
+ const eV=class t extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcBlizzardMageRain1,this.textureName=nj.OrcBlizzardMageRain1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.speed=10,this.flyEnd=7,this.incFrame=1,this.g=0,this.scale=1.2}
+ calculateTrajectory(){
+ if(!this.target)return;
+ if(!this.owner)return;
+ this.delay=25*this.random.next();
+ const i=this.target.getHitCenter();
+ this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.6,this.offsetY=-this.target.hitHeight*(.1+.3*this.random.next());
+ const s=i.x+this.offsetX,e=i.y+this.offsetY;
+ this.y=e-250-20*this.random.next(),this.owner.direction<0?this.x=s+30-60*this.random.next():this.x=s-30+60*this.random.next();
+ const n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
+ this.T=Math.max(8,Math.min(30,r/t.DIVE_SPEED)),this.t=0}
+ execute(){
+ if(this.removed)return;
+ let t,i;
+ if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ {
+ const s=this.target.getHitCenter();
+ t=s.x+this.offsetX,i=s.y+this.offsetY}
+ const s=this.T-this.t;
+ if(s>0){
+ this.vx=(t-this.x)/s,this.vy=(i-this.y)/s;
+ const e=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
+ if(e>0&&e<rj.MIN_SPEED){
+ const t=rj.MIN_SPEED/e;
+ this.vx*=t,this.vy*=t}
+ }
+ if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ this.onHit()}
+ onHitMain(){
+ this.target&&this.target.isAlive&&this.random.chance(.2)&&this.target.freeze(60,this.owner??void 0),this.displayExplodeEffect()}
+ displayExplodeEffect(){
+ const t=ej.getEffect(PF.OrcIceExplodeEffect);
+ t.scale.set(.5),t.x=this.x,t.y=this.y,t.start(60),rB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(eV,"OrcBlizzardMageRain1"),Kt(eV,"DIVE_SPEED",22);
+ let nV=eV;
+ const hV=class t extends rj{
+ initializeTextureName(){
+ this.className=nj.FireMagicBall1,this.textureName=nj.FireMagicBall1}
+ initializeData(){
+ this.hitClassName=PF.FireBallExplode,this.g=0,this.speed=9,this.flyEnd=19,this.incFrame=1,this.weaponScale=2}
+ calculateTrajectory(){
+ if(!this.target||!this.owner)return;
+ this.delay=10*this.random.next();
+ const i=this.target.getHitCenter();
+ this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.6,this.offsetY=-this.target.hitHeight*(.1+.3*this.random.next());
+ const s=i.x+this.offsetX,e=i.y+this.offsetY;
+ this.y=e-250-20*this.random.next(),this.owner.direction<0?this.x=s+30-60*this.random.next():this.x=s-30+60*this.random.next();
+ const n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
+ this.T=Math.max(8,Math.min(30,r/t.DIVE_SPEED)),this.t=0}
+ execute(){
+ if(this.removed)return;
+ let t,i;
+ if(this.t++,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ {
+ const s=this.target.getHitCenter();
+ t=s.x+this.offsetX,i=s.y+this.offsetY}
+ const s=this.T-this.t;
+ if(s>0){
+ this.vx=(t-this.x)/s,this.vy=(i-this.y)/s;
+ const e=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
+ if(e>0&&e<rj.MIN_SPEED){
+ const t=rj.MIN_SPEED/e;
+ this.vx*=t,this.vy*=t}
+ }
+ if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ this.onHit()}
+ onHitMain(){
+ if(this.displayExplodeEffect(),!this.target||!this.owner)return;
+ const t=this.vx>0?.5:-.5;
+ this.target.blow(t,-7),this.target.stun(40,this.owner??void 0);
+ const i=this.owner.enemyList;
+ if(!i)return;
+ let s=0;
+ for(const e of i){
+ if(e===this.target||e.isAir)continue;
+ if(!e.isAlive)continue;
+ const t=this.x-e.x;
+ if(t>40||t<-40)continue;
+ const i=this.y-e.y;
+ if(!(i>40||i<-40)&&(this.owner.doDamage(e,.8),e.blow(this.random.range(-.2,.2),-5),this.random.chance(.3)&&e.stun(50,this.owner??void 0),++s>20))break}
+ }
+ displayExplodeEffect(){
+ const t=ej.getEffect(PF.FireBallExplode);
+ t.scale.set(3),t.x=this.x,t.y=this.y,t.start(60),rB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(hV,"FireMagicBall1"),Kt(hV,"DIVE_SPEED",20);
+ let rV=hV;
+ const oV=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"tx",0),Kt(this,"ty",0),Kt(this,"birdDirection",1),Kt(this,"cnt",0),Kt(this,"state",0),Kt(this,"rushSpeed",9)}
+ initializeTextureName(){
+ this.className=nj.FireMageBird1,this.textureName=nj.FireMageBird1}
+ initializeData(){
+ this.g=0,this.speed=9,this.flyEnd=1,this.incFrame=1}
+ calculateTrajectory(){
+ }
+ setData(i=1){
+ super.setData(i),this.cnt=Math.floor(-1-20*this.random.next()),this.state=t.STATE_MAIN,this.visible=!1}
+ play(){
+ super.play(),this.visible=!1,this.tx=this.x+160*this.random.next()-80,this.ty=this.y-120-60*this.random.next()}
+ execute(){
+ if(!this.removed)switch(this.state){
+ case t.STATE_MAIN:this.onMainPhase();
+ break;
+ case t.STATE_RUSH:this.onRushPhase();
+ break;
+ case t.STATE_EXPLODE:this.onExplodePhase()}
+ }
+ onMainPhase(){
+ if(null!=this.owner){
+ if(++this.cnt>=250){
+ const t=this.cnt-250+41;
+ return t<this.textures.length&&(this.sp.texture=this.textures[t]),void(t>=56&&this.remove())}
+ if(!(this.cnt<0))if(0===this.cnt&&(this.visible=!0),this.currentFrame++,1!==this.cnt&&20!==this.cnt||this.updateFacing(),this.cnt<25)this.currentFrame>15&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.x+=.25*(this.tx-this.x),this.y+=.25*(this.ty-this.y);
+ else if(null!=this.target&&this.target.isAlive)this.currentFrame<40&&this.currentFrame<this.textures.length?this.sp.texture=this.textures[Math.floor(this.currentFrame)]:this.currentFrame=40,this.currentFrame>=40&&(this.tx=this.target.x,this.ty=this.target.y-.6*this.target.hitHeight,this.currentFrame=0,this.state=t.STATE_RUSH);
+ else if(this.currentFrame>15&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.random.chance(.05)){
+ const t=this.findNewTarget();
+ t&&(this.target=t)}
+ }
+ else this.remove()}
+ onRushPhase(){
+ this.currentFrame++,this.currentFrame>15&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.target&&this.target.isAlive&&(this.tx=this.target.x,this.ty=this.target.y-.6*this.target.hitHeight);
+ const i=this.tx-this.x,s=this.ty-this.y,e=Math.atan2(s,i);
+ this.vx=this.rushSpeed*Math.cos(e),this.vy=this.rushSpeed*Math.sin(e),this.rotation=e,this.scale.y=i>0?Math.abs(this.scale.y):-Math.abs(this.scale.y),this.x+=this.vx,this.y+=this.vy,Math.abs(i)<this.rushSpeed&&Math.abs(s)<this.rushSpeed&&(this.x=this.tx,this.y=this.ty,this.target&&this.target.isAlive&&this.owner&&(this.owner.doDamage(this.target,.3+.2*this.random.next()),this.random.chance(.3)&&this.target.stun(50,this.owner??void 0)),this.currentFrame=41,this.state=t.STATE_EXPLODE)}
+ onExplodePhase(){
+ this.currentFrame<this.textures.length&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.currentFrame++,this.currentFrame>=57&&this.remove()}
+ updateFacing(){
+ this.birdDirection>0?(this.rotation=0,this.scale.y=Math.abs(this.scale.y)):(this.rotation=Math.PI,this.scale.y=-Math.abs(this.scale.y))}
+ findNewTarget(){
+ if(!this.owner)return null;
+ const t=this.owner.enemyList;
+ if(!t)return null;
+ const i=[];
+ for(const s of t)s.isAlive&&Math.abs(s.x-this.x)<1.3*this.owner.atkRange&&i.push(s);
+ return i.length>0?i[this.random.nextInt(i.length)]:null}
+ }
+ ;
+ Vt(oV,"FireMageBird1"),Kt(oV,"STATE_MAIN",0),Kt(oV,"STATE_RUSH",1),Kt(oV,"STATE_EXPLODE",2);
+ let aV=oV;
+ const cV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.BomberSmallBomb1,this.textureName=nj.BomberSmallBomb1}
+ initializeData(){
+ this.hitClassName="BomberSmallBombExplode1",this.g=0,this.speed=10,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1,this.weaponScale=1.3}
+ }
+ ;
+ Vt(cV,"BomberSmallBomb1");
+ let lV=cV;
+ const uV=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"lastTargetX",0),Kt(this,"lastTargetY",0)}
+ initializeTextureName(){
+ this.className=nj.BomberBigBomb1,this.textureName=nj.BomberBigBomb1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.1,this.speed=12,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1}
+ execute(){
+ if(--this.delay>0)this.rotation=0;
+ else{
+ if(this.target&&!this.target.removed&&(this.lastTargetX=this.target.x,this.lastTargetY=this.target.y),this.t>=this.T&&this.target&&this.target.removed)return this.x=this.lastTargetX,this.y=this.lastTargetY,this.onHit(),void this.remove();
+ super.execute()}
+ }
+ onHit(){
+ this.owner?(this.target&&this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.showHitEffect(this.hitClassName)),this.onHitMain(),this.remove()):this.remove()}
+ onHitMain(){
+ if(this.displayExplodeEffect(),!this.owner)return;
+ if(!this.owner.enemyList)return;
+ let t=0;
+ const i=this.owner.evolStage>=1?8:5;
+ for(const s of this.owner.enemyList){
+ if(null==s)continue;
+ if(!s.isAlive)continue;
+ if(s.isUntagetable)continue;
+ const e=this.x-s.x,n=this.y-s.y;
+ if(e*e+n*n<8100){
+ if(this.owner.doDamage(s,1,!0),!s.isAlive)continue;
+ const i=s.x-this.x>=0?6:-6;
+ s.blow(i,-6),t++}
+ if(t>=i)return}
+ }
+ displayExplodeEffect(){
+ let t=ej.getEffect(PF.BomberBigBombExplode1);
+ t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||jhi.getInstance()),t.start(60),sB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(uV,"BomberBigBomb1");
+ let dV=uV;
+ const fV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.IceFlake,this.textureName=nj.IceFlake}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.01,this.speed=8,this.flyEnd=1,this.incFrame=1,this.orientToPath=!1,this.vr=.3}
+ onHitMain(){
+ if(null==this.target||!this.target.isAlive)return;
+ const t=this.owner&&this.owner.evolStage>=1,i=t?.5:.4,s=t?90:75;
+ this.random.chance(i)&&this.target.freeze(s,this.owner??void 0)}
+ }
+ ;
+ Vt(fV,"IceFlake");
+ let pV=fV;
+ const gV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.FireBirdBall1,this.textureName=nj.FireBirdBall1}
+ initializeData(){
+ this.g=0,this.speed=9,this.flyEnd=4,this.incFrame=1}
+ }
+ ;
+ Vt(gV,"FireBirdBall1");
+ let mV=gV;
+ const wV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.BlackMageDarkBall1,this.textureName=nj.DarkMageBall1}
+ initializeData(){
+ this.hitClassName=PF.BlackMageBallExplode1,this.g=0,this.speed=8,this.flyEnd=4,this.incFrame=1}
+ onHitMain(){
+ if(!this.target)return;
+ this.target.binding(120,!0,this.owner??void 0);
+ const t=this.owner&&this.owner.evolStage>=1;
+ this.random.chance(t?.8:.5)&&this.target.shock(t?80:60,this.owner??void 0)}
+ }
+ ;
+ Vt(wV,"BlackMageDarkBall1");
+ let vV=wV;
+ const bV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcIceMageFireSkill1,this.textureName=nj.OrcIceMageFire1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=8,this.flyEnd=7,this.incFrame=1,this.weaponScale=1.3}
+ onHitMain(){
+ this.target&&this.target.isAlive&&(this.owner&&this.owner.evolStage>=1||this.random.chance(.5))&&this.target.freeze(80,this.owner??void 0)}
+ }
+ ;
+ Vt(bV,"OrcIceMageFireSkill1");
+ let _V=bV;
+ const yV=class extends rj{
+ initializeTextureName(){
+ this.textureName="PoisonArcherArrow1"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=.03,this.speed=9,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target||null==this.owner)return;
+ const t=this.owner.evolStage>=1,i=t?70:50,s=t?60:50,e=t?30:20,n=t?6:4;
+ this.target.poison(i,this.owner??void 0);
+ const h=this.owner.getEnemiesAtPos(this.x,this.y,s);
+ let r=0;
+ for(const o of h)if(o!=this.target&&0!=o.isAlive&&(o.poison(e,this.owner??void 0),r++,r>=n))break}
+ }
+ ;
+ Vt(yV,"PoisonArcherArrowSkill1");
+ let MV=yV;
+ const EV=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"missileSpeed",12),Kt(this,"turnRate",.12),Kt(this,"maxAngleY",.54),Kt(this,"maxLifeTime",120),Kt(this,"heading",0)}
+ initializeTextureName(){
+ this.className=nj.PilotMissile1,this.textureName=nj.PilotMissile1}
+ initializeData(){
+ this.hitClassName="FireExplode",this.g=0,this.speed=this.missileSpeed,this.flyEnd=0,this.incFrame=1,this.orientToPath=!1}
+ calculateTrajectory(){
+ if(!this.target)return;
+ const t=this.target.getHitCenter(),i=t.x-this.x,s=t.y-this.y;
+ let e=Math.atan2(s,i);
+ const n=i>=0?0:Math.PI;
+ let h=e-n;
+ for(;
+ h>Math.PI;
+ )h-=2*Math.PI;
+ for(;
+ h<-Math.PI;
+ )h+=2*Math.PI;
+ h>this.maxAngleY&&(h=this.maxAngleY),h<-this.maxAngleY&&(h=-this.maxAngleY),e=n+h,this.heading=i>=0?0:Math.PI,this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=0,this.rotation=this.heading,this.t=0,this.T=this.maxLifeTime}
+ execute(){
+ if(--this.delay>0)this.rotation=0;
+ else{
+ if(this.t++,this.t%2==0&&this.showSmoke(),this.target&&!this.target.removed&&this.target.isAlive||this.retarget(80),this.t<=5);
+ else if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter(),i=t.x-this.x,s=t.y-this.y;
+ let e=Math.atan2(s,i)-this.heading;
+ for(;
+ e>Math.PI;
+ )e-=2*Math.PI;
+ for(;
+ e<-Math.PI;
+ )e+=2*Math.PI;
+ const n=this.t>.75*this.T?3*this.turnRate:this.turnRate;
+ e>n&&(e=n),e<-n&&(e=-n),this.heading+=e}
+ if(this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=Math.sin(this.heading)*this.missileSpeed,this.x+=this.vx,this.y+=this.vy,this.rotation=this.heading,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&this.textures.length>0&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.checkEarlyCollision())this.onHit();
+ else if(this.t>=this.T){
+ if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter();
+ this.x=t.x,this.y=t.y}
+ this.onHit()}
+ }
+ }
+ retarget(t){
+ if(!this.owner||!this.owner.enemyList)return;
+ let i=null,s=t*t;
+ for(const e of this.owner.enemyList){
+ if(!e.isAlive)continue;
+ if(e.isUntagetable)continue;
+ const t=e.x-this.x,n=e.y-this.y,h=t*t+n*n;
+ h<s&&(i=e,s=h)}
+ i&&(this.target=i)}
+ onHitMain(){
+ if(this.target&&this.target.isAlive&&this.random.chance(.25)&&this.target.stun(10,this.owner??void 0),!this.owner||!this.owner.enemyList)return;
+ let t=0;
+ for(const i of this.owner.enemyList){
+ if(!i.isAlive)continue;
+ if(i==this.target)continue;
+ if(i.isUntagetable)continue;
+ const s=this.x-i.x;
+ if(Math.abs(s)>40)continue;
+ const e=this.y-i.y;
+ if(!(Math.abs(e)>40)&&s*s+e*e<900&&(this.random.chance(.35)&&i.stun(8,this.owner??void 0),this.owner.doDamage(i,.5,!0),++t>=4))break}
+ this.showSmoke()}
+ showSmoke(){
+ const t=ej.getEffect(PF.PilotMissileSmoke1);
+ t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||jhi.getInstance()),t.start(30),sB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(EV,"PilotMissile1");
+ let AV=EV;
+ const SV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.FireBullet,this.textureName=nj.FireBullet,this.scale=1}
+ initializeData(){
+ this.g=0,this.speed=9,this.flyEnd=2,this.incFrame=1}
+ }
+ ;
+ Vt(SV,"FireBullet");
+ let TV=SV;
+ const CV=class t extends rj{
+ initializeTextureName(){
+ this.className=nj.AntRock1,this.textureName=nj.AntRock1,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName=PF.AntRockExplode,this.g=0,this.speed=11,this.flyEnd=0,this.incFrame=0,this.weaponScale=1.5,this.orientToPath=!1}
+ calculateTrajectory(){
+ if(!this.target||!this.owner)return;
+ this.delay=8*this.random.next();
+ const i=this.target.getHitCenter();
+ this.offsetX=this.target.hitWidth*(this.random.next()-.5)*.6,this.offsetY=-this.target.hitHeight*(.1+.3*this.random.next());
+ const s=i.x+this.offsetX,e=i.y+this.offsetY;
+ this.y=e-240-40*this.random.next(),this.x=s-20+40*this.random.next();
+ const n=s-this.x,h=e-this.y,r=Math.sqrt(n*n+h*h);
+ this.T=Math.max(6,Math.min(18,r/t.DIVE_SPEED)),this.t=0}
+ execute(){
+ if(this.removed)return;
+ let t,i;
+ if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ {
+ const s=this.target.getHitCenter();
+ t=s.x+this.offsetX,i=s.y+this.offsetY}
+ const s=this.T-this.t;
+ if(s>0){
+ this.vx=(t-this.x)/s,this.vy=(i-this.y)/s;
+ const e=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
+ if(e>0&&e<rj.MIN_SPEED){
+ const t=rj.MIN_SPEED/e;
+ this.vx*=t,this.vy*=t}
+ }
+ if(this.x+=this.vx,this.y+=this.vy,this.rotation+=.15,!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ this.onHit()}
+ onHitMain(){
+ if(this.displayExplodeEffect(),!this.target||!this.owner)return;
+ this.target.isAlive&&this.target.blow(0,-10);
+ const t=this.owner.enemyList;
+ if(!t)return;
+ let i=0;
+ for(const s of t){
+ if(!s)continue;
+ if(s===this.target||s.isAir)continue;
+ if(!s.isAlive)continue;
+ const t=this.x-s.x;
+ if(t>50||t<-50)continue;
+ const e=this.y-s.y;
+ if(!(e>50||e<-50)&&(this.owner.doDamage(s,.5),s.isAlive&&s.blow(this.random.range(-.3,.3),-8),++i>4))break}
+ }
+ displayExplodeEffect(){
+ const t=ej.getEffect(PF.AntRockExplode);
+ t.x=this.x,t.y=this.y,t.start(20),rB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(CV,"AntRock1"),Kt(CV,"DIVE_SPEED",30);
+ let IV=CV;
+ const kV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.SpeedArrow2,this.textureName=nj.SpeedArrow2}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(3*t/s,3*i/s,20)}
+ }
+ ;
+ Vt(kV,"SpeedArrow2");
+ let OV=kV;
+ const xV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.MoleFire,this.textureName="moleFire",this.sheetName="HammerMole"}
+ initializeData(){
+ this.g=.03,this.speed=14,this.flyEnd=1,this.incFrame=1,this.weaponScale=1.6}
+ onHitMain(){
+ this.target}
+ }
+ ;
+ Vt(xV,"MoleFire2");
+ let RV=xV;
+ const NV=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"porkSp",null),Kt(this,"tx",0),Kt(this,"ty",0),Kt(this,"grabbed",!1),Kt(this,"cnt",0)}
+ initializeTextureName(){
+ this.className=nj.DarkChain1,this.textureName=nj.DarkChain1,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.scale=.9,this.g=0,this.speed=16,this.flyEnd=1,this.incFrame=1}
+ calculateTrajectory(){
+ if(!this.owner)return;
+ if(!this.target)return;
+ this.x=this.owner.x+10*this.owner.direction,this.y=this.owner.y-25,this.tx=this.target.x,this.ty=this.target.y-.7*this.target.hitHeight,this.target.isAirUnit&&(this.ty=this.target.y-this.target.airHeight);
+ const t=this.tx-this.x,i=this.ty-this.y;
+ this.rotation=Math.atan2(i,t),this.cnt=0,this.grabbed=!1}
+ execute(){
+ if(!this.target||!this.owner)return void this.remove();
+ let t,i;
+ this.cnt++,this.cnt<10?(t=this.tx,i=this.ty):10===this.cnt?(this.target.isAlive&&(this.grabbed=!0,this.target.stun(80,this.owner??void 0),this.target.setAirToGroundFor(80)),t=this.target.x,i=this.target.y):(t=this.owner.x,i=this.owner.y,this.grabbed&&this.target.isAlive&&(this.target.isImmovable||(this.target.x+=.4*(this.owner.x-this.target.x),this.target.y+=.4*(this.owner.y-this.target.y)))),this.updateChain(t,i),this.cnt>18&&this.remove()}
+ updateChain(t,i){
+ const s=t-this.x,e=i-this.y;
+ this.rotation=Math.atan2(e,s);
+ const n=Math.sqrt(s*s+e*e);
+ this.sp&&(this.sp.width=1.2*n,this.updatePork())}
+ updatePork(){
+ if(null==this.porkSp){
+ const t=QA.getTextures(this.sheetName,"DarkPork1");
+ t.length>0&&(this.porkSp=new He(t[0]),this.sp&&(this.porkSp.x=this.sp.width),this.addChild(this.porkSp))}
+ this.porkSp&&this.sp&&(this.porkSp.x=this.sp.width-25)}
+ }
+ ;
+ Vt(NV,"DarkChain1");
+ let PV=NV;
+ const DV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.SuccubusBlade1,this.textureName=nj.SuccubusBlade1,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.scale=1,this.g=0,this.speed=16,this.flyEnd=1,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(2*t/s,2*i/s,15)}
+ }
+ ;
+ Vt(DV,"SuccubusBlade1");
+ let LV=DV;
+ const GV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.WyvernRiderThrowingKnife1,this.textureName=nj.WyvernRiderThrowingKnife1,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=21,this.incFrame=1,this.weaponScale=.7,this.minT=12}
+ onHitMain(){
+ null!=this.target&&this.random.chance(.35)&&this.target.freeze(50,this.owner??void 0)}
+ }
+ ;
+ Vt(GV,"WyvernRiderThrowingKnife1");
+ let BV=GV;
+ const UV=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"phase","flying"),Kt(this,"holdTimer",0),Kt(this,"tendrilCount",4),Kt(this,"trailEffectScale",1.2),Kt(this,"tendrilList",[]),Kt(this,"tendrilOwner",null),Kt(this,"tendrilFreezeDuration",0),Kt(this,"tendrilMaxDistSq",0),Kt(this,"tendrilOriginX",0),Kt(this,"tendrilOriginY",0),Kt(this,"trailPositions",[]),Kt(this,"effectDuration",0),Kt(this,"globalHitEnemies",new Set),Kt(this,"freezeCap",4)}
+ initializeTextureName(){
+ this.className=nj.WyvernRiderThrowingKnifeS1,this.textureName=nj.WyvernRiderThrowingKnifeS1,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=8,this.flyEnd=21,this.incFrame=1,this.weaponScale=.7,this.minT=12}
+ setData(t=1){
+ super.setData(t),this.phase="flying",this.holdTimer=0,this.tendrilCount=4,this.trailEffectScale=1.2,this.tendrilList.length=0,this.tendrilOwner=null,this.tendrilFreezeDuration=0,this.tendrilMaxDistSq=0,this.tendrilOriginX=0,this.tendrilOriginY=0,this.trailPositions.length=0,this.effectDuration=0,this.globalHitEnemies.clear(),this.freezeCap=4}
+ execute(){
+ if("flying"===this.phase)return void super.execute();
+ const t=this.tendrilOwner;
+ t&&t.isAlive?"spreading"===this.phase?this.tickSpreading(t):"holding"===this.phase&&(this.holdTimer--,this.holdTimer<=0&&(this.explodeAll(),super.remove())):super.remove()}
+ remove(){
+ "flying"===this.phase?super.remove():this.visible=!1}
+ onHit(){
+ this.owner&&this.target?(this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName)),this.onHitMain(),this.remove()):super.remove()}
+ onHitMain(){
+ if(null==this.target)return;
+ if(null==this.owner)return;
+ const i=this.owner.evolStage>0,s=i?160:120;
+ this.tendrilCount=i?5:4,this.trailEffectScale=i?1.5:1.2,this.freezeCap=i?12:8,this.target.freeze(s,this.owner??void 0),this.showBurst(this.target.x,this.target.y,.8),this.tendrilOwner=this.owner,this.tendrilFreezeDuration=s,this.tendrilOriginX=this.target.x,this.tendrilOriginY=this.target.y,this.tendrilMaxDistSq=1e4,this.trailPositions=[],this.tendrilList=[],this.globalHitEnemies=new Set([this.target]);
+ const e=Math.ceil(100/t.TENDRIL_SPEED);
+ this.effectDuration=e+t.HOLD_DURATION+20;
+ for(let t=0;
+ t<this.tendrilCount;
+ t++){
+ const i=t/this.tendrilCount*Math.PI*2;
+ this.tendrilList.push({
+ index:t,x:this.target.x,y:this.target.y,currentAngle:i,trailTick:0,done:!1,hitEnemies:new Set}
+ )}
+ this.phase="spreading"}
+ tickSpreading(i){
+ const s=t.TENDRIL_SPEED,e=t.MAX_TURN;
+ for(const n of this.tendrilList){
+ if(n.done)continue;
+ if(n.trailTick++,n.currentAngle+=this.random.range(-e,e),n.x+=Math.cos(n.currentAngle)*s,n.y+=Math.sin(n.currentAngle)*s,n.trailTick%t.TRAIL_INTERVAL===0&&(this.placeTrailEffect(n.x,n.y),this.trailPositions.push({
+ x:n.x,y:n.y}
+ )),this.globalHitEnemies.size<this.freezeCap)for(const t of i.enemyList){
+ if(!t.isAlive||t.isUntagetable)continue;
+ if(n.hitEnemies.has(t))continue;
+ if(this.globalHitEnemies.has(t))continue;
+ const i=t.x-n.x,s=t.y-n.y;
+ if(i*i+s*s<625&&(t.freeze(this.tendrilFreezeDuration,this.owner??void 0),this.showFreezeOnUnit(t,this.tendrilFreezeDuration),n.hitEnemies.add(t),this.globalHitEnemies.add(t),this.globalHitEnemies.size>=this.freezeCap))break}
+ const h=n.x-this.tendrilOriginX,r=n.y-this.tendrilOriginY;
+ h*h+r*r>=this.tendrilMaxDistSq&&(this.placeTrailEffect(n.x,n.y),this.trailPositions.push({
+ x:n.x,y:n.y}
+ ),n.done=!0)}
+ this.tendrilList.every(t=>t.done)&&(this.phase="holding",this.holdTimer=t.HOLD_DURATION)}
+ explodeAll(){
+ const t=this.tendrilOwner,i=new Set;
+ for(const s of this.trailPositions)if(this.showBurst(s.x,s.y,.5),t)for(const e of t.enemyList){
+ if(!e.isAlive||e.isUntagetable)continue;
+ if(i.has(e))continue;
+ const n=e.x-s.x,h=e.y-s.y;
+ n*n+h*h<400&&(t.doDamage(e,.3,!0),i.add(e))}
+ }
+ placeTrailEffect(t,i){
+ const s=ej.getEffect(PF.FreezeEffectS);
+ s.scale.set(this.trailEffectScale),s.x=t,s.y=i,s.start(this.effectDuration),sB.getInstance().addChild(s)}
+ showBurst(t,i,s){
+ const e=ej.getEffect(PF.OrcIceExplodeEffect);
+ e.scale.set(s),e.x=t,e.y=i,e.start(20),sB.getInstance().addChild(e)}
+ showFreezeOnUnit(t,i){
+ const s=t.weight<=1?PF.FreezeEffectS:t.weight<=2?PF.FreezeEffectM:PF.FreezeEffectL;
+ t.showEffect(s,i,new gi(0,0),!0)}
+ }
+ ;
+ Vt(UV,"WyvernRiderThrowingKnifeS1"),Kt(UV,"TENDRIL_SPEED",8),Kt(UV,"TRAIL_INTERVAL",3),Kt(UV,"HOLD_DURATION",25),Kt(UV,"MAX_TURN",.18);
+ let FV=UV;
+ const HV=class extends rj{
+ initializeTextureName(){
+ this.className=nj.OrcRapterRiderSpear1,this.textureName=nj.OrcRapterRiderSpear1,this.sheetName="Game1",this.scale.set(.7)}
+ initializeData(){
+ this.hitClassName="IceExplode2",this.g=.05,this.speed=9,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(2*t/s,2*i/s,15);
+ const e=this.owner&&this.owner.evolStage>=1,n=e?.35:.25,h=e?90:60;
+ this.random.chance(n)&&this.target.freeze(h,this.owner??void 0)}
+ }
+ ;
+ Vt(HV,"OrcRapterRiderSpear1");
+ let WV=HV;
+ const $V=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"tangleTimer",0),Kt(this,"origScaleX",1),Kt(this,"origScaleY",1),Kt(this,"boundOnce",!1)}
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.DruidTangle1,this.textureName=nj.DruidTangle1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=0,this.flyEnd=1,this.incFrame=0,this.tangleTimer=0,this.boundOnce=!1}
+ setData(t=1){
+ super.setData(t),this.tangleTimer=0,this.boundOnce=!1,this.sp&&(this.origScaleX=this.sp.scale.x||1,this.origScaleY=this.sp.scale.y||1)}
+ execute(){
+ if(!this.removed){
+ if(this.target&&!this.target.removed&&(this.x=this.target.x,this.y=this.target.y),this.tangleTimer++,this.tangleTimer<=t.BIND_DURATION)!this.boundOnce&&this.target&&this.target.isAlive&&(this.target.binding(t.BIND_DURATION,!0,this.owner??void 0),this.boundOnce=!0);
+ else{
+ const i=1-(this.tangleTimer-t.BIND_DURATION)/(t.TOTAL_LIFE-t.BIND_DURATION)*(1-t.MIN_SCALE);
+ this.sp&&this.sp.scale.set(this.origScaleX*i,this.origScaleY*i),this.target&&this.target.isAlive&&this.target.poison(t.SLOW_DURATION,this.owner??void 0)}
+ this.tangleTimer%t.DMG_INTERVAL===0&&this.owner&&this.target&&!this.target.removed&&this.owner.doDamage(this.target,this.damagePercent),this.tangleTimer>=t.TOTAL_LIFE&&(this.sp&&this.sp.scale.set(this.origScaleX,this.origScaleY),this.remove())}
+ }
+ }
+ ;
+ Vt($V,"DruidTangle1"),Kt($V,"BIND_DURATION",30),Kt($V,"SLOW_DURATION",30),Kt($V,"TOTAL_LIFE",120),Kt($V,"DMG_INTERVAL",30),Kt($V,"MIN_SCALE",.4);
+ let jV=$V;
+ const VV=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"generation",0),Kt(this,"whirlCnt",0),Kt(this,"whirlTotal",60)}
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.DruidDrill1,this.textureName=nj.DruidDrill1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=20,this.incFrame=1,this.whirlCnt=0,this.whirlTotal=70,this.generation=0}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(!this.removed){
+ if(this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.owner){
+ const i=t.HIT_RADIUS*t.HIT_RADIUS,s=this.vx>=0?1:-1;
+ for(const e of this.owner.enemyList){
+ if(!e.isAlive||e.isUntagetable)continue;
+ if(e.isAirUnit)continue;
+ const n=e.x-this.x,h=e.y-this.y;
+ if(n*n+h*h<=i){
+ if(this.owner.doDamage(e,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),e.isImmovable||e.knockBack(s*t.GEN_KNOCK[this.generation],t.KNOCK_VY,t.KNOCK_DUR),this.generation<t.MAX_GENERATION){
+ const t=this.owner;
+ "function"==typeof t.onDrillSplit&&t.onDrillSplit(this.x,this.y,this.vx,this.vy,this.generation,e)}
+ return void this.remove()}
+ }
+ }
+ (this.x<-50||this.x>690||this.y<-50||this.y>690||++this.whirlCnt>this.whirlTotal)&&this.remove()}
+ }
+ static getGenScale(i){
+ const s=Math.max(0,Math.min(i,t.MAX_GENERATION));
+ return t.GEN_SCALE[s]}
+ static getGenDmg(i){
+ const s=Math.max(0,Math.min(i,t.MAX_GENERATION));
+ return t.GEN_DMG[s]}
+ }
+ ;
+ Vt(VV,"DruidDrill1"),Kt(VV,"HIT_RADIUS",60),Kt(VV,"KNOCK_VY",-3),Kt(VV,"KNOCK_DUR",32),Kt(VV,"MAX_GENERATION",2),Kt(VV,"GEN_SCALE",[2.5,1.5,.9]),Kt(VV,"GEN_DMG",[1.3,.7,.4]),Kt(VV,"GEN_KNOCK",[10,5,3]);
+ let KV=VV;
+ const zV=class extends rj{
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.TigerRiderArrow1,this.textureName=nj.TigerRiderArrow1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ null!=this.target&&this.random.chance(.3)&&this.target.shock(45,this.owner??void 0)}
+ }
+ ;
+ Vt(zV,"TigerRiderArrow1");
+ let qV=zV;
+ const YV=class extends rj{
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.GriffinSpear1,this.textureName=nj.GriffinSpear1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(t/s,i/s,10),this.target.stun(30,this.owner??void 0)}
+ }
+ ;
+ Vt(YV,"GriffinSpear1");
+ let XV=YV;
+ const JV=class extends rj{
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.GriffinSuperSpear1,this.textureName=nj.GriffinSuperSpear1}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ onHitMain(){
+ if(null==this.target)return;
+ let t=this.vx,i=this.vy,s=Math.sqrt(t*t+i*i);
+ 0==s&&(s=1),this.target.knockBack(t/s,i/s,10),this.target.stun(30,this.owner??void 0)}
+ }
+ ;
+ Vt(JV,"GriffinSuperSpear1");
+ let QV=JV;
+ const ZV=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"missileSpeed",10),Kt(this,"turnRate",.18),Kt(this,"maxAngleY",.54),Kt(this,"maxLifeTime",90),Kt(this,"heading",0)}
+ initializeTextureName(){
+ this.className=nj.SteamFire1,this.textureName=nj.PilotMissile1,this.scale.set(.8)}
+ initializeData(){
+ this.hitClassName="FireExplode",this.g=0,this.speed=this.missileSpeed,this.flyEnd=0,this.incFrame=1,this.orientToPath=!1}
+ calculateTrajectory(){
+ if(!this.target)return;
+ const t=this.target.getHitCenter().x-this.x;
+ this.heading=t>=0?0:Math.PI,this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=0,this.rotation=this.heading,this.t=0,this.T=this.maxLifeTime}
+ execute(){
+ if(--this.delay>0)this.rotation=0;
+ else{
+ if(this.t++,this.t%2==0&&this.showSmoke(),this.target&&!this.target.removed&&this.target.isAlive||this.retarget(80),this.t<=3);
+ else if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter(),i=t.x-this.x,s=t.y-this.y;
+ let e=Math.atan2(s,i)-this.heading;
+ for(;
+ e>Math.PI;
+ )e-=2*Math.PI;
+ for(;
+ e<-Math.PI;
+ )e+=2*Math.PI;
+ const n=this.t>.6*this.T?3*this.turnRate:this.turnRate;
+ e>n&&(e=n),e<-n&&(e=-n),this.heading+=e}
+ if(this.vx=Math.cos(this.heading)*this.missileSpeed,this.vy=Math.sin(this.heading)*this.missileSpeed,this.x+=this.vx,this.y+=this.vy,this.rotation=this.heading,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&this.textures.length>0&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.checkEarlyCollision())this.onHit();
+ else if(this.t>=this.T){
+ if(this.target&&!this.target.removed){
+ const t=this.target.getHitCenter();
+ this.x=t.x,this.y=t.y}
+ this.onHit()}
+ }
+ }
+ retarget(t){
+ if(!this.owner||!this.owner.enemyList)return;
+ let i=null,s=t*t;
+ for(const e of this.owner.enemyList){
+ if(!e.isAlive||e.isUntagetable)continue;
+ const t=e.x-this.x,n=e.y-this.y,h=t*t+n*n;
+ h<s&&(i=e,s=h)}
+ i&&(this.target=i)}
+ onHitMain(){
+ if(this.target&&this.target.isAlive){
+ const t=this.owner&&this.owner.evolStage>=1,i=t?.4:.3,s=t?50:40;
+ this.random.chance(i)&&this.target.stun(s,this.owner??void 0)}
+ if(!this.owner||!this.owner.enemyList)return;
+ let t=0;
+ for(const i of this.owner.enemyList){
+ if(!i.isAlive||i===this.target||i.isUntagetable)continue;
+ const s=this.x-i.x;
+ if(Math.abs(s)>35)continue;
+ const e=this.y-i.y;
+ if(!(Math.abs(e)>35)&&s*s+e*e<625&&(this.owner.doDamage(i,.4,!0),++t>=3))break}
+ this.showSmoke()}
+ showSmoke(){
+ const t=ej.getEffect(PF.PilotMissileSmoke1);
+ t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||jhi.getInstance()),t.start(25),sB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(ZV,"SteamFire1");
+ let tK=ZV;
+ const iK=class extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"hitSet",new Set)}
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.SteamMissile1,this.textureName=nj.SteamMissile1,this.scale.x=.5,this.scale.y=.2}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=11,this.flyEnd=2,this.incFrame=1}
+ play(){
+ this.hitSet.clear(),super.play()}
+ onHit(){
+ this.owner&&this.target?(this.target.isAlive&&!this.hitSet.has(this.target)&&(this.hitSet.add(this.target),this.owner.doDamage(this.target,this.damagePercent,!0)&&(this.onHitMain(),this.showHitEffect(this.resolvedHitClassName))),this.target=null):this.remove()}
+ checkEarlyCollision(){
+ if(this.target&&!this.target.removed)return super.checkEarlyCollision();
+ if(!this.owner)return!1;
+ for(const t of this.owner.enemyList){
+ if(!t||!t.isAlive||this.hitSet.has(t))continue;
+ const i=t.getHitCenter(),s=Math.abs(i.x-this.x),e=Math.abs(i.y-this.y),n=.3*t.hitWidth,h=.3*t.hitHeight;
+ if(s<n&&e<h)return this.target=t,!0}
+ return!1}
+ remove(){
+ this.hitSet.clear(),super.remove()}
+ }
+ ;
+ Vt(iK,"SteamMissile1");
+ let sK=iK;
+ const eK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"dirX",1),Kt(this,"dirY",0)}
+ initializeTextureName(){
+ this.className=nj.SylphidShuriken1,this.textureName="SylphidShuriken1"}
+ initializeData(){
+ this.sheetName="Game1",this.g=0,this.speed=t.FIXED_SPEED,this.minT=12,this.maxT=90,this.flyEnd=1,this.incFrame=1,this.weaponScale=1.4,this.orientToPath=!1,this.vr=.45,this.bounceRange=220}
+ calculateTrajectory(){
+ if(!this.target)return;
+ const i=this.target.getHitCenter();
+ this.offsetX=0,this.offsetY=.3*-this.target.hitHeight;
+ const s=i.x+this.offsetX-this.x,e=i.y+this.offsetY-this.y,n=Math.sqrt(s*s+e*e)||1;
+ this.dirX=s/n,this.dirY=e/n,this.T=Math.max(this.minT,Math.min(this.maxT,n/t.FIXED_SPEED)),this.vx=this.dirX*t.FIXED_SPEED,this.vy=this.dirY*t.FIXED_SPEED,this.t=0}
+ execute(){
+ if(!this.removed)if(this.t++,this.x+=this.dirX*t.FIXED_SPEED,this.y+=this.dirY*t.FIXED_SPEED,this.rotation+=this.vr,this.sp&&this.textures.length>0&&(this.sp.texture=this.textures[0]),this.checkEarlyCollision())this.onHit();
+ else if(this.t>=this.T){
+ if(this.target&&!this.target.removed&&this.target.isAlive)return void this.onHit();
+ this.t>=this.T+30&&this.remove()}
+ }
+ onHitMain(){
+ if(!this.target)return;
+ const t=ej.getEffect(PF.ElfGlowing1);
+ t.x=this.target.x,t.y=this.target.y-.5*this.target.hitHeight,t.start(30),sB.getInstance().addChild(t);
+ const i=this.owner;
+ i&&i.isAlive&&"function"==typeof i.onShurikenHit&&i.onShurikenHit()}
+ }
+ ;
+ Vt(eK,"SylphidShuriken1"),Kt(eK,"FIXED_SPEED",8);
+ let nK=eK;
+ const hK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"lifeTimer",0),Kt(this,"hitTimer",0),Kt(this,"dirAngle",0),Kt(this,"launched",!1),Kt(this,"circleEffect",null)}
+ initializeTextureName(){
+ this.className=nj.SylphidTornado1,this.textureName="ElfTornado1"}
+ initializeData(){
+ this.sheetName="Game1",this.g=0,this.speed=t.SPEED,this.incFrame=.4,this.weaponScale=1.6,this.orientToPath=!1,this.vr=0}
+ generateSprite(){
+ super.generateSprite(),this.flyEnd=Math.max(1,this.textures.length)}
+ play(){
+ this.lifeTimer=0,this.hitTimer=0,this.launched=!1,this.rotation=0,this.visible=!0,this.removed=!1,this.parent&&this.parent.removeChild(this),tB.getInstance().addChild(this),this.circleEffect=ej.getEffect(PF.ElfMagicCircle1),this.circleEffect.x=this.x,this.circleEffect.y=this.y+10,this.circleEffect.scale.set(1.2),this.circleEffect.start(t.LIFETIME+10),tB.getInstance().addChild(this.circleEffect),(this.battleController||jhi.getInstance()).addWeapon(this)}
+ execute(){
+ if(!this.removed)if(this.lifeTimer++,this.hitTimer++,this.lifeTimer>=t.LIFETIME)this.explodeAndRemove();
+ else{
+ if(this.launched)this.dirAngle+=2*(Math.random()-.5)*t.TURN_RATE;
+ else if(this.launched=!0,this.target&&this.target.isAlive){
+ const t=this.target.x-this.x,i=this.target.y-this.y;
+ this.dirAngle=Math.atan2(i,t)}
+ else this.dirAngle=Math.random()*Math.PI*2;
+ this.x+=Math.cos(this.dirAngle)*t.SPEED,this.y+=Math.sin(this.dirAngle)*t.SPEED,this.circleEffect&&!this.circleEffect.removed&&(this.circleEffect.x=this.x,this.circleEffect.y=this.y+10),this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.suckNearby(),this.hitTimer>=t.HIT_INTERVAL&&(this.hitTimer=0,this.damageAndBindNearby())}
+ }
+ suckNearby(){
+ if(!this.owner)return;
+ const i=t.SUCK_RADIUS*t.SUCK_RADIUS;
+ for(const s of this.owner.enemyList){
+ if(s.removed||!s.isAlive||s.isUntagetable||s.isImmovable||s.knockImmune)continue;
+ const e=s.x-this.x,n=s.y-this.y,h=e*e+n*n;
+ if(h>i||h<1)continue;
+ const r=Math.sqrt(h),o=t.SUCK_SPEED*(1-r/t.SUCK_RADIUS);
+ s.x-=e/r*o,s.y-=n/r*o,s.tx=s.x,s.ty=s.y}
+ }
+ damageAndBindNearby(){
+ if(!this.owner||!this.owner.isAlive)return;
+ const i=t.HIT_RADIUS*t.HIT_RADIUS;
+ for(const s of this.owner.enemyList){
+ if(!s.isAlive||s.isUntagetable)continue;
+ const e=s.x-this.x,n=s.y-this.y;
+ e*e+n*n<=i&&(this.owner.doDamage(s,t.DMG_PER_TICK,!0),this.bindEnemy(s))}
+ }
+ bindEnemy(i){
+ i.binding(t.BIND_DURATION,!1,this.owner??void 0);
+ const s=i.effectList;
+ for(let n=0;
+ n<s.length;
+ n++)if(s[n].className===PF.ElfBindEffect1)return void s[n].setDuration(t.BIND_DURATION);
+ const e=ej.getEffect(PF.ElfBindEffect1);
+ e.x=0,e.y=-2,e.start(t.BIND_DURATION),e.owner=i,i.addChild(e),i.effectList.push(e)}
+ blowNearby(){
+ if(!this.owner)return;
+ const i=t.BLOW_RADIUS*t.BLOW_RADIUS;
+ for(const s of this.owner.enemyList){
+ if(!s.isAlive||s.isUntagetable)continue;
+ const e=s.x-this.x,n=s.y-this.y,h=e*e+n*n;
+ if(h>i||h<1)continue;
+ const r=Math.sqrt(h),o=e/r*t.BLOW_SPEED,a=n/r*t.BLOW_SPEED;
+ s.knockBack(o,a,t.BLOW_DURATION)}
+ }
+ explodeAndRemove(){
+ if(this.removed)return;
+ this.blowNearby();
+ const t=ej.getEffect(PF.ElfExplodeEffect1);
+ t.x=this.x,t.y=this.y,t.scale.set(2),t.start(60),sB.getInstance().addChild(t),this.circleEffect&&!this.circleEffect.removed&&this.circleEffect.remove(),this.circleEffect=null,super.remove()}
+ remove(){
+ this.explodeAndRemove()}
+ }
+ ;
+ Vt(hK,"SylphidTornado1"),Kt(hK,"SPEED",1.2),Kt(hK,"LIFETIME",300),Kt(hK,"HIT_RADIUS",50),Kt(hK,"HIT_INTERVAL",30),Kt(hK,"DMG_PER_TICK",.6),Kt(hK,"BIND_DURATION",30),Kt(hK,"TURN_RATE",.08),Kt(hK,"SUCK_RADIUS",70),Kt(hK,"SUCK_SPEED",1.8),Kt(hK,"BLOW_RADIUS",90),Kt(hK,"BLOW_SPEED",12),Kt(hK,"BLOW_DURATION",10);
+ let rK=hK;
+ const oK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"orbitCenterX",0),Kt(this,"orbitCenterY",0),Kt(this,"orbitAngle",0),Kt(this,"orbitRadius",0),Kt(this,"orbitSpeed",.12),Kt(this,"orbitOwner",null),Kt(this,"orbitPhase",0),Kt(this,"orbitTimer",0),Kt(this,"orbitDir",1),Kt(this,"inStorm",!1),Kt(this,"hitCooldowns",new Map),Kt(this,"flyStartX",0),Kt(this,"flyStartY",0),Kt(this,"flyTargetX",0),Kt(this,"flyTargetY",0),Kt(this,"burstVx",0),Kt(this,"burstVy",0),Kt(this,"burstTimer",0),Kt(this,"lifeTimer",0),Kt(this,"lifeDuration",1200),Kt(this,"flying",!1),Kt(this,"coinGravity",.18),Kt(this,"landY",0)}
+ initializeTextureName(){
+ this.sheetName="Game1",this.className=nj.AladinCoin1,this.textureName=nj.AladinCoin1,this.scale.set(.8)}
+ initializeData(){
+ this.g=0,this.speed=0,this.flyEnd=1,this.incFrame=0,this.vx=0,this.vy=0,this.flying=!1,this.orbitRadius=0,this.orbitPhase=0,this.orbitTimer=0,this.hitCooldowns?this.hitCooldowns.clear():this.hitCooldowns=new Map,this.orbitOwner=null,this.burstTimer=0,this.lifeTimer=0,this.inStorm=!1}
+ play(){
+ this.visible=!0,this.removed=!1,this.resolvedHitClassName=this.hitClassName||"PhysicalHitEffect",(this.battleController||jhi.getInstance()).addWeapon(this)}
+ launch(t,i){
+ this.landY=i;
+ const s=t-this.x,e=i-this.y,n=Math.max(12,Math.floor(Math.abs(s)/4+Math.abs(e)/10));
+ this.vx=s/n,this.vy=e/n-this.coinGravity*(n-1)*.6,this.flying=!0}
+ get isOrbiting(){
+ return 0!==this.orbitPhase}
+ get isStormOrbiting(){
+ return 4===this.orbitPhase}
+ absorbIntoStorm(t,i,s,e,n){
+ if(0!==this.orbitPhase)return!1;
+ if(this.removed)return!1;
+ this.inStorm=!0,this.flying=!1,this.vx=0,this.vy=0,this.orbitCenterX=t,this.orbitCenterY=i;
+ const h=this.x-t,r=(this.y-i)/.6;
+ return this.orbitAngle=h*h+r*r>1?Math.atan2(r,h):0,this.orbitRadius=s,this.orbitSpeed=e,this.orbitDir=n,this.orbitPhase=4,this.orbitTimer=0,this.lifeTimer=0,!0}
+ releaseFromStorm(){
+ if(4!==this.orbitPhase)return;
+ const t=16+6*Math.random();
+ this.burstVx=Math.cos(this.orbitAngle)*t,this.burstVy=Math.sin(this.orbitAngle)*t*.9;
+ const i=Math.sin(this.orbitAngle);
+ this.landY=this.orbitCenterY+115+110*Math.max(0,i),this.orbitPhase=3,this.burstTimer=0,this.inStorm=!1}
+ lift(){
+ 0===this.orbitPhase&&(this.y-=4+4*Math.random())}
+ joinPath(t,i,s,e,n){
+ this.flying=!1,this.vx=0,this.vy=0,this.orbitCenterX=t,this.orbitCenterY=i,this.orbitSpeed=e,this.orbitDir=n,this.orbitRadius=s,this.orbitOwner=null,this.orbitTimer=0,this.lifeTimer=0;
+ const h=this.x-t,r=this.y-i;
+ this.orbitAngle=Math.atan2(r/.6,h),this.flyStartX=this.x,this.flyStartY=this.y,this.flyTargetX=t+Math.cos(this.orbitAngle)*s,this.flyTargetY=i+Math.sin(this.orbitAngle)*s*.6,this.orbitPhase=1}
+ startLane(t,i,s,e,n){
+ this.joinPath(t,i,s,e,n)}
+ startOrbit(t,i,s,e,n=null){
+ this.joinPath(t,i,120,e,Math.random()<.6?1:-1),this.orbitOwner=n}
+ startCapture(t,i,s,e,n,h,r=null){
+ this.joinPath(t,i,120,h,n),this.orbitOwner=r}
+ execute(){
+ if(!this.removed){
+ if(1===this.orbitPhase){
+ const i=this.orbitTimer/t.FLY_FRAMES,s=1-(1-i)*(1-i);
+ return this.x=this.flyStartX+(this.flyTargetX-this.flyStartX)*s,this.y=this.flyStartY+(this.flyTargetY-this.flyStartY)*s,void(++this.orbitTimer>=t.FLY_FRAMES&&(this.x=this.flyTargetX,this.y=this.flyTargetY,this.orbitTimer=0,this.orbitPhase=2))}
+ if(2!==this.orbitPhase)return 4===this.orbitPhase?(this.orbitAngle+=this.orbitSpeed*this.orbitDir,this.x=this.orbitCenterX+Math.cos(this.orbitAngle)*this.orbitRadius,void(this.y=this.orbitCenterY+Math.sin(this.orbitAngle)*this.orbitRadius*.6)):3===this.orbitPhase?(this.x+=this.burstVx,this.y+=this.burstVy,this.burstVx*=.95,this.burstVy=.95*this.burstVy+.8,this.checkOrbitHit(),this.burstVy>0&&this.y>=this.landY?(this.y=this.landY,this.orbitPhase=0,this.lifeTimer=0,void(this.flying=!1)):void(++this.burstTimer>=t.BURST_FRAMES&&(this.orbitPhase=0,this.lifeTimer=0,this.landY=this.y,this.flying=!1))):this.flying?(this.x+=this.vx,this.y+=this.vy,this.vy+=this.coinGravity,void(this.vy>0&&this.y>=this.landY&&(this.y=this.landY,this.vx=0,this.vy=0,this.flying=!1))):void(++this.lifeTimer>=this.lifeDuration&&(this.owner&&"function"==typeof this.owner.onCoinExpired&&this.owner.onCoinExpired(),this.remove()));
+ if(this.orbitAngle+=this.orbitSpeed*this.orbitDir,this.x=this.orbitCenterX+Math.cos(this.orbitAngle)*this.orbitRadius,this.y=this.orbitCenterY+Math.sin(this.orbitAngle)*this.orbitRadius*.6,this.checkOrbitHit(),++this.orbitTimer>=t.ORBIT_FRAMES)if(this.inStorm)this.orbitPhase=4,this.orbitTimer=0;
+ else{
+ const t=12+6*Math.random(),i=-Math.sin(this.orbitAngle)*this.orbitDir,s=Math.cos(this.orbitAngle)*this.orbitDir*.6,e=Math.sqrt(i*i+s*s);
+ this.burstVx=i/e*t,this.burstVy=s/e*t,this.landY=this.orbitCenterY+115,this.orbitPhase=3,this.burstTimer=0}
+ }
+ }
+ checkOrbitHit(){
+ if(!this.owner)return;
+ const i=this.owner,s=4===this.orbitPhase||3===this.orbitPhase,e=s?22:20,n=s?250:20,h=e*e,r=n*n,o="number"==typeof i.goldDmgMultiplier?i.goldDmgMultiplier:1,a=(this.damagePercent>0?this.damagePercent:.6)*o;
+ for(const[t,c]of this.hitCooldowns)c<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,c-1);
+ for(const c of i.enemyList){
+ if(s&&t.burstHitCount>=t.BURST_TOTAL_HIT_CAP)break;
+ if(!c.isAlive||c.isUntagetable)continue;
+ if(this.hitCooldowns.has(c))continue;
+ const e=c.x-this.x,n=c.y-this.y;
+ e*e/h+n*n/r<=1&&(i.doDamage(c,a,!0),this.hitCooldowns.set(c,t.HIT_COOLDOWN),s&&t.burstHitCount++)}
+ }
+ }
+ ;
+ Vt(oK,"AladinCoin1"),Kt(oK,"HIT_COOLDOWN",30),Kt(oK,"BURST_TOTAL_HIT_CAP",10),Kt(oK,"burstHitCount",0),Kt(oK,"FLY_FRAMES",40),Kt(oK,"ORBIT_FRAMES",140),Kt(oK,"BURST_FRAMES",60),Kt(oK,"MAP_MIN_X",60),Kt(oK,"MAP_MAX_X",580),Kt(oK,"MAP_MIN_Y",60),Kt(oK,"MAP_MAX_Y",580);
+ let aK=oK;
+ const cK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"pierceTimer",0),Kt(this,"hitCooldowns",new Map)}
+ initializeTextureName(){
+ this.className=nj.BladeWave1,this.textureName="BladeWave10",this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=8,this.incFrame=1}
+ setData(i=1){
+ super.setData(i),this.pierceTimer=0,this.hitCooldowns.clear(),this.sp&&this.sp.scale.set(t.SCALE)}
+ play(){
+ this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"PhysicalHitEffect",this.battleController&&this.battleController.addWeapon(this)}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(this.removed)return;
+ if(this.pierceTimer++,this.pierceTimer>=t.LIFETIME)return void super.remove();
+ this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0);
+ const i=Math.floor(this.currentFrame);
+ this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900?super.remove():this.checkPierceHit()}
+ checkPierceHit(){
+ if(!this.owner)return;
+ const i=t.HIT_RADIUS*t.HIT_RADIUS;
+ for(const[t,s]of this.hitCooldowns)s<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,s-1);
+ for(const t of this.owner.enemyList){
+ if(!t.isAlive||t.isUntagetable)continue;
+ if(this.hitCooldowns.has(t))continue;
+ const s=t.x-this.x,e=t.y-this.y;
+ if(s*s+e*e<=i){
+ const i=this.owner.evolStage>=1;
+ this.owner.doDamage(t,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),i&&t.knockBack(this.vx>0?2:-2,-1,20),this.hitCooldowns.set(t,20)}
+ }
+ }
+ }
+ ;
+ Vt(cK,"BladeWave1"),Kt(cK,"SCALE",3),Kt(cK,"HIT_RADIUS",35),Kt(cK,"LIFETIME",100);
+ let lK=cK;
+ const uK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"pierceTimer",0),Kt(this,"hitCooldowns",new Map),Kt(this,"uniqueTargets",new Set)}
+ initializeTextureName(){
+ this.className=nj.SpinBlade,this.textureName=nj.SpinBlade,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="PhysicalHitEffect",this.g=0,this.speed=9,this.flyEnd=6,this.incFrame=1}
+ setData(i=1){
+ super.setData(i),this.pierceTimer=0,this.hitCooldowns?this.hitCooldowns.clear():this.hitCooldowns=new Map,this.uniqueTargets?this.uniqueTargets.clear():this.uniqueTargets=new Set,this.sp&&this.sp.scale.set(t.SCALE)}
+ play(){
+ this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"PhysicalHitEffect",this.battleController&&this.battleController.addWeapon(this)}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(this.removed)return;
+ if(this.pierceTimer++,this.pierceTimer>=t.LIFETIME)return void super.remove();
+ this.x+=this.vx,this.y+=this.vy,this.rotation+=.3,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0);
+ const i=Math.floor(this.currentFrame);
+ this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900?super.remove():this.checkPierceHit()}
+ checkPierceHit(){
+ if(!this.owner)return;
+ const i=t.HIT_RADIUS*t.HIT_RADIUS;
+ for(const[t,s]of this.hitCooldowns)s<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,s-1);
+ for(const s of this.owner.enemyList){
+ if(!s.isAlive||s.isUntagetable)continue;
+ if(this.hitCooldowns.has(s))continue;
+ const e=s.x-this.x,n=s.y-this.y;
+ if(e*e+n*n<=i){
+ if(!this.uniqueTargets.has(s)){
+ if(this.uniqueTargets.size>=t.MAX_TARGETS)continue;
+ this.uniqueTargets.add(s)}
+ this.owner.doDamage(s,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),s.knockBack(this.vx>0?3:-3,-2,25),this.hitCooldowns.set(s,20)}
+ }
+ }
+ }
+ ;
+ Vt(uK,"SpinBlade"),Kt(uK,"SCALE",2),Kt(uK,"HIT_RADIUS",22),Kt(uK,"LIFETIME",100),Kt(uK,"MAX_TARGETS",8);
+ let dK=uK;
+ const fK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"flightTimer",0),Kt(this,"hasHit",!1)}
+ initializeTextureName(){
+ this.className=nj.CrowKnightBullet1,this.textureName=nj.CrowKnightBullet1,this.sheetName="Game1",this.scale.set(.8)}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=16,this.flyEnd=1,this.incFrame=0,this.flightTimer=0}
+ setData(t=1){
+ super.setData(t),this.flightTimer=0,this.hasHit=!1,this.visible=!0,this.removed=!1,this.scale.set(.8)}
+ play(){
+ this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"MagicalHitEffect",(this.battleController||jhi.getInstance()).addWeapon(this)}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(this.removed||this.hasHit)return;
+ if(this.flightTimer++,this.flightTimer>=t.LIFETIME)return void super.remove();
+ if(this.x+=this.vx,this.y+=this.vy,this.x<-100||this.x>900||this.y<-100||this.y>900)return void super.remove();
+ if(!this.owner)return;
+ const i=t.HIT_RADIUS*t.HIT_RADIUS;
+ for(const t of this.owner.enemyList){
+ if(!t.isAlive||t.isUntagetable)continue;
+ const s=t.getHitCenter(),e=s.x-this.x,n=s.y-this.y;
+ if(e*e+n*n<=i)return this.hasHit=!0,this.vx=0,this.vy=0,this.visible=!1,this.owner.doDamage(t,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),this.owner.evolStage>=1&&t.stun(30),void this.remove()}
+ }
+ }
+ ;
+ Vt(fK,"CrowKnightBullet1"),Kt(fK,"LIFETIME",60),Kt(fK,"HIT_RADIUS",40);
+ let pK=fK;
+ const gK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"explodeDmgBonus",0),Kt(this,"explodeRangeBonus",0),Kt(this,"isLordCrow",!1),Kt(this,"flightTimer",0),Kt(this,"hoverUntil",0),Kt(this,"isDiving",!1),Kt(this,"riseVx",0),Kt(this,"riseVy",0)}
+ initializeTextureName(){
+ this.className=nj.CrowCompanion1,this.textureName=nj.CrowCompanion1,this.sheetName="Game1"}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=t.DIVE_SPEED,this.flyEnd=8,this.incFrame=1,this.weaponScale=1.3}
+ setData(i=1){
+ super.setData(i),this.flightTimer=0,this.isDiving=!1,this.explodeDmgBonus=0,this.explodeRangeBonus=0,this.isLordCrow=!1;
+ const s=t.HOVER_FRAMES_MIN+Math.floor(Math.random()*(t.HOVER_FRAMES_MAX-t.HOVER_FRAMES_MIN+1));
+ this.hoverUntil=t.RISE_FRAMES+s;
+ const e=-Math.PI/2+(Math.random()-.5)*(2*Math.PI/3);
+ this.riseVx=Math.cos(e)*t.RISE_SPEED,this.riseVy=Math.sin(e)*t.RISE_SPEED}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(!this.removed)if(this.flightTimer++,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.flightTimer>=t.MAX_FLIGHT)this.explode();
+ else{
+ if(this.flightTimer<=t.RISE_FRAMES?(this.vx=this.riseVx,this.vy=this.riseVy):this.flightTimer<=this.hoverUntil?(this.vx=0,this.vy=0):this.isDiving=!0,this.isDiving&&this.target&&!this.target.removed){
+ const i=this.target.x-this.x,s=this.target.y-this.y,e=Math.sqrt(i*i+s*s);
+ if(e<t.DIVE_SPEED+2)return void this.explode();
+ this.vx=i/e*t.DIVE_SPEED,this.vy=s/e*t.DIVE_SPEED}
+ this.x+=this.vx,this.y+=this.vy,0===this.vx&&0===this.vy||(this.rotation=Math.atan2(this.vy,this.vx))}
+ }
+ explode(){
+ var i;
+ const s=this.owner,e=ej.getEffect(PF.CrowExplosion1);
+ if(e.scale.set(2.5),e.x=this.x,e.y=this.y,e.start(30),sB.getInstance().addChild(e),s){
+ const e=t.EXPLODE_RANGE+this.explodeRangeBonus,n=e*e,h=t.EXPLODE_DMG+this.explodeDmgBonus;
+ let r=0;
+ for(const o of s.enemyList){
+ if(r>=t.EXPLODE_MAX_TARGETS)break;
+ if(!o.isAlive||o.isUntagetable)continue;
+ const e=o.x-this.x,a=o.y-this.y;
+ if(e*e+a*a<=n){
+ const t=o.isAlive;
+ s.doDamage(o,this.damagePercent*h,!0),r++,!t||o.isAlive||this.isLordCrow||null==(i=s.onCrowKill)||i.call(s)}
+ }
+ }
+ super.remove()}
+ remove(){
+ this.explode()}
+ }
+ ;
+ Vt(gK,"CrowCompanion1"),Kt(gK,"EXPLODE_DMG",.5),Kt(gK,"EXPLODE_RANGE",75),Kt(gK,"EXPLODE_MAX_TARGETS",2),Kt(gK,"RISE_SPEED",9),Kt(gK,"RISE_FRAMES",14),Kt(gK,"HOVER_FRAMES_MIN",24),Kt(gK,"HOVER_FRAMES_MAX",36),Kt(gK,"DIVE_SPEED",13),Kt(gK,"MAX_FLIGHT",130);
+ let mK=gK;
+ const wK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"flightTimer",0),Kt(this,"currentAngle",0),Kt(this,"targetX",0),Kt(this,"targetY",0)}
+ initializeTextureName(){
+ this.className=nj.CrowGuidedBall1,this.textureName=nj.DarkMageBall1}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=10,this.flyEnd=4,this.incFrame=1,this.weaponScale=1.6}
+ setData(t=1){
+ super.setData(t),this.flightTimer=0,this.currentAngle=Math.atan2(this.vy,this.vx),this.visible=!0,this.removed=!1,this.sp&&this.sp.scale.set(1.6)}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(this.removed)return;
+ if(this.flightTimer++,this.flightTimer>=t.LIFETIME)return void this.explode();
+ if(this.flightTimer>t.DRIFT_FRAMES){
+ let i=Math.atan2(this.targetY-this.y,this.targetX-this.x)-this.currentAngle;
+ for(;
+ i>Math.PI;
+ )i-=2*Math.PI;
+ for(;
+ i<-Math.PI;
+ )i+=2*Math.PI;
+ const s=Math.min(1,(this.flightTimer-t.DRIFT_FRAMES)/t.TURN_ACCEL_F),e=t.TURN_RATE_BASE+(t.TURN_RATE_MAX-t.TURN_RATE_BASE)*s,n=Math.max(-e,Math.min(e,i));
+ this.currentAngle+=n}
+ this.vx=Math.cos(this.currentAngle)*this.speed,this.vy=Math.sin(this.currentAngle)*this.speed,this.rotation=this.currentAngle,this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0);
+ const i=Math.floor(this.currentFrame);
+ if(this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900)return void this.explode();
+ const s=this.targetX-this.x,e=this.targetY-this.y;
+ s*s+e*e<=t.ARRIVE_DIST*t.ARRIVE_DIST&&this.explode()}
+ explode(){
+ const i=ej.getEffect(PF.AbyssSkillExplosion1);
+ if(i.scale.set(1.7),i.x=this.x,i.y=this.y,i.start(20),sB.getInstance().addChild(i),this.owner){
+ const i=t.EXPLODE_RANGE*t.EXPLODE_RANGE,s=[];
+ for(const t of this.owner.enemyList){
+ if(!t.isAlive||t.isUntagetable)continue;
+ const e=t.x-this.x,n=t.y-this.y;
+ e*e+n*n<=i&&s.push(t)}
+ s.sort((t,i)=>(t.x-this.x)**2+(t.y-this.y)**2-((i.x-this.x)**2+(i.y-this.y)**2));
+ const e=Math.min(t.EXPLODE_MAX,s.length);
+ for(let t=0;
+ t<e;
+ t++)this.owner.doDamage(s[t],this.damagePercent,!0)}
+ super.remove()}
+ remove(){
+ this.explode()}
+ }
+ ;
+ Vt(wK,"CrowGuidedBall1"),Kt(wK,"LIFETIME",120),Kt(wK,"EXPLODE_RANGE",95),Kt(wK,"EXPLODE_MAX",3),Kt(wK,"ARRIVE_DIST",12),Kt(wK,"DRIFT_FRAMES",6),Kt(wK,"TURN_RATE_BASE",.05),Kt(wK,"TURN_RATE_MAX",.11),Kt(wK,"TURN_ACCEL_F",30);
+ let vK=wK;
+ const bK=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"flightTimer",0)}
+ initializeTextureName(){
+ this.className=nj.CrowFeatherShot1,this.textureName=nj.CrowKnightBullet1,this.sheetName="Game1",this.scale.set(t.SCALE)}
+ initializeData(){
+ this.hitClassName="MagicalHitEffect",this.g=0,this.speed=14,this.flyEnd=1,this.incFrame=0,this.flightTimer=0}
+ setData(i=1){
+ super.setData(i),this.flightTimer=0,this.visible=!0,this.removed=!1,this.scale.set(t.SCALE)}
+ play(){
+ this.visible=!0,this.removed=!1,this.isActive=!0,this.resolvedHitClassName=this.hitClassName||"MagicalHitEffect",(this.battleController||jhi.getInstance()).addWeapon(this)}
+ calculateTrajectory(){
+ }
+ execute(){
+ if(this.removed)return;
+ if(this.flightTimer++,this.flightTimer>=t.LIFETIME)return void super.remove();
+ if(this.x+=this.vx,this.y+=this.vy,this.x<-100||this.x>900||this.y<-100||this.y>900)return void super.remove();
+ if(!this.owner)return;
+ const i=t.HIT_RADIUS*t.HIT_RADIUS;
+ for(const t of this.owner.enemyList){
+ if(!t.isAlive||t.isUntagetable)continue;
+ const s=t.x-this.x,e=t.y-this.y;
+ if(s*s+e*e<=i)return this.owner.doDamage(t,this.damagePercent,!0),this.showHitEffect(this.resolvedHitClassName),void super.remove()}
+ }
+ }
+ ;
+ Vt(bK,"CrowFeatherShot1"),Kt(bK,"LIFETIME",60),Kt(bK,"HIT_RADIUS",14),Kt(bK,"SCALE",.55);
+ let _K=bK;
+ var yK=(t=>(t[t.NONE=0]="NONE",t[t.OrcHunter1_RANGEEVADE_BUFF=1]="OrcHunter1_RANGEEVADE_BUFF",t[t.OrcRapterRider1_MOVESPEED_DEBUFF=2]="OrcRapterRider1_MOVESPEED_DEBUFF",t[t.Succubus1_MOVESPEED_BUFF=3]="Succubus1_MOVESPEED_BUFF",t[t.Succubus1_ATTACKSPEED_BUFF=4]="Succubus1_ATTACKSPEED_BUFF",t[t.ScorpionPoisonBullet_MOVESPEED_DEBUFF=5]="ScorpionPoisonBullet_MOVESPEED_DEBUFF",t[t.ScorpionPoisonBullet_ATTACKSPEED_DEBUFF=6]="ScorpionPoisonBullet_ATTACKSPEED_DEBUFF",t[t.DrillSl1_PENETRATE_BUFF=11]="DrillSl1_PENETRATE_BUFF",t[t.DrillSl1_SKILL2_BUFF=12]="DrillSl1_SKILL2_BUFF",t[t.DrillSl1_SKILL3_BUFF=13]="DrillSl1_SKILL3_BUFF",t[t.DrillSl1_SKILL4_BUFF=14]="DrillSl1_SKILL4_BUFF",t[t.DrillSl1_ROSTER_BUFF=15]="DrillSl1_ROSTER_BUFF",t[t.BombSl1_SKILL2_BUFF=21]="BombSl1_SKILL2_BUFF",t[t.BombSl1_SKILL3_BUFF=22]="BombSl1_SKILL3_BUFF",t[t.BombSl1_SKILL4_BUFF=23]="BombSl1_SKILL4_BUFF",t[t.BombSl1_ROSTER_BUFF=24]="BombSl1_ROSTER_BUFF",t[t.NurSl1_SKILL2_BUFF=31]="NurSl1_SKILL2_BUFF",t[t.NurSl1_ROSTER_BUFF=32]="NurSl1_ROSTER_BUFF",t[t.MagmaSl1_SKILL2_BUFF=41]="MagmaSl1_SKILL2_BUFF",t[t.MagmaSl1_SKILL3_BUFF=42]="MagmaSl1_SKILL3_BUFF",t[t.MagmaSl1_ROSTER_BUFF=43]="MagmaSl1_ROSTER_BUFF",t[t.TreebarkSl1_SKILL2_BUFF=51]="TreebarkSl1_SKILL2_BUFF",t[t.TreebarkSl1_SKILL3_BUFF=52]="TreebarkSl1_SKILL3_BUFF",t[t.TreebarkSl1_ROSTER_BUFF=53]="TreebarkSl1_ROSTER_BUFF",t[t.IcespearSl1_SKILL2_BUFF=61]="IcespearSl1_SKILL2_BUFF",t[t.IcespearSl1_SKILL3_BUFF=62]="IcespearSl1_SKILL3_BUFF",t[t.IcespearSl1_SKILL4_BUFF=63]="IcespearSl1_SKILL4_BUFF",t[t.IcespearSl1_ROSTER_BUFF=64]="IcespearSl1_ROSTER_BUFF",t[t.VinewhipSl1_SKILL2_BUFF=71]="VinewhipSl1_SKILL2_BUFF",t[t.VinewhipSl1_SKILL3_BUFF=72]="VinewhipSl1_SKILL3_BUFF",t[t.VinewhipSl1_SKILL4_BUFF=73]="VinewhipSl1_SKILL4_BUFF",t[t.VinewhipSl1_ROSTER_BUFF=74]="VinewhipSl1_ROSTER_BUFF",t[t.FlamecannonSl1_SKILL2_BUFF=81]="FlamecannonSl1_SKILL2_BUFF",t[t.FlamecannonSl1_SKILL3_BUFF=82]="FlamecannonSl1_SKILL3_BUFF",t[t.FlamecannonSl1_SKILL4_BUFF=83]="FlamecannonSl1_SKILL4_BUFF",t[t.FlamecannonSl1_ROSTER_BUFF=84]="FlamecannonSl1_ROSTER_BUFF",t[t.IcebowSl1_SKILL2_BUFF=91]="IcebowSl1_SKILL2_BUFF",t[t.IcebowSl1_SKILL3_BUFF=92]="IcebowSl1_SKILL3_BUFF",t[t.IcebowSl1_SKILL4_BUFF=93]="IcebowSl1_SKILL4_BUFF",t[t.IcebowSl1_ROSTER_BUFF=94]="IcebowSl1_ROSTER_BUFF",t[t.FlowerSl1_SKILL2_BUFF=101]="FlowerSl1_SKILL2_BUFF",t[t.FlowerSl1_ROSTER_BUFF=102]="FlowerSl1_ROSTER_BUFF",t[t.HotpoolSl1_SKILL2_BUFF=111]="HotpoolSl1_SKILL2_BUFF",t[t.HotpoolSl1_ROSTER_BUFF=112]="HotpoolSl1_ROSTER_BUFF",t[t.HotpoolSl1_DAMAGE_BUFF=113]="HotpoolSl1_DAMAGE_BUFF",t[t.GlacierSl1_SKILL2_BUFF=114]="GlacierSl1_SKILL2_BUFF",t[t.GlacierSl1_SKILL3_BUFF=115]="GlacierSl1_SKILL3_BUFF",t[t.GlacierSl1_ROSTER_BUFF=116]="GlacierSl1_ROSTER_BUFF",t[t.GlacierSl1_SKILL4_BUFF=117]="GlacierSl1_SKILL4_BUFF",t[t.FladiatorSl1_SKILL2_BUFF=118]="FladiatorSl1_SKILL2_BUFF",t[t.FladiatorSl1_SKILL3_BUFF=119]="FladiatorSl1_SKILL3_BUFF",t[t.FladiatorSl1_SKILL4_BUFF=120]="FladiatorSl1_SKILL4_BUFF",t[t.FladiatorSl1_ROSTER_BUFF=121]="FladiatorSl1_ROSTER_BUFF",t[t.FladiatorSl1_CRTICAL_BUFF=122]="FladiatorSl1_CRTICAL_BUFF",t[t.ManaBloomSl1_SKILL2_BUFF=123]="ManaBloomSl1_SKILL2_BUFF",t[t.ManaBloomSl1_SKILL3_BUFF=124]="ManaBloomSl1_SKILL3_BUFF",t[t.ManaBloomSl1_SKILL4_BUFF=125]="ManaBloomSl1_SKILL4_BUFF",t[t.ManaBloomSl1_ROSTER_BUFF=126]="ManaBloomSl1_ROSTER_BUFF",t[t.ClearSl1_SKILL2_BUFF=127]="ClearSl1_SKILL2_BUFF",t[t.ClearSl1_ROSTER_BUFF=128]="ClearSl1_ROSTER_BUFF",t[t.SlimeRacing_DAMAGE_BUFF=129]="SlimeRacing_DAMAGE_BUFF",t[t.SlimeRacing_ATTACK_SPEED_BUFF=130]="SlimeRacing_ATTACK_SPEED_BUFF",t[t.SlimeRacing_MOVE_SPEED_BUFF=131]="SlimeRacing_MOVE_SPEED_BUFF",t[t.RACE_REVIVE_MOVE_SPEED_BUFF=132]="RACE_REVIVE_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_MOVE_SPEED_BUFF=133]="RACE_CHEERUP_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_ATTACK_SPEED_BUFF=134]="RACE_CHEERUP_ATTACK_SPEED_BUFF",t[t.EXCAVATION_ENCOUNTER_DEFENSE_BUFF=135]="EXCAVATION_ENCOUNTER_DEFENSE_BUFF",t[t.SteelbashSl1_SKILL2_BUFF=136]="SteelbashSl1_SKILL2_BUFF",t[t.SteelbashSl1_SKILL3_BUFF=137]="SteelbashSl1_SKILL3_BUFF",t[t.SteelbashSl1_ROSTER_BUFF=138]="SteelbashSl1_ROSTER_BUFF",t[t.FlamdancerSl1_SKILL2_BUFF=139]="FlamdancerSl1_SKILL2_BUFF",t[t.FlamdancerSl1_SKILL3_BUFF=140]="FlamdancerSl1_SKILL3_BUFF",t[t.FlamdancerSl1_ROSTER_BUFF=141]="FlamdancerSl1_ROSTER_BUFF",t[t.FrostreaverSl1_SKILL2_BUFF=142]="FrostreaverSl1_SKILL2_BUFF",t[t.FrostreaverSl1_SKILL3_BUFF=143]="FrostreaverSl1_SKILL3_BUFF",t[t.FrostreaverSl1_ROSTER_BUFF=144]="FrostreaverSl1_ROSTER_BUFF",t[t.ThornjaSl1_SKILL2_BUFF=145]="ThornjaSl1_SKILL2_BUFF",t[t.ThornjaSl1_SKILL3_BUFF=146]="ThornjaSl1_SKILL3_BUFF",t[t.ThornjaSl1_SKILL4_BUFF=147]="ThornjaSl1_SKILL4_BUFF",t[t.ThornjaSl1_ROSTER_BUFF=148]="ThornjaSl1_ROSTER_BUFF",t[t.RACE_MAPTYPE1_ATKSPD_BUFF=149]="RACE_MAPTYPE1_ATKSPD_BUFF",t[t.RACE_MAPTYPE1_MOVESPD_BUFF=150]="RACE_MAPTYPE1_MOVESPD_BUFF",t[t.GearbladeSl1_SKILL2_BUFF=151]="GearbladeSl1_SKILL2_BUFF",t[t.GearbladeSl1_SKILL3_BUFF=152]="GearbladeSl1_SKILL3_BUFF",t[t.GearbladeSl1_SKILL4_BUFF=153]="GearbladeSl1_SKILL4_BUFF",t[t.GearbladeSl1_ROSTER_BUFF=154]="GearbladeSl1_ROSTER_BUFF",t[t.EmbersageSl1_SKILL2_BUFF=155]="EmbersageSl1_SKILL2_BUFF",t[t.EmbersageSl1_ROSTER_BUFF=156]="EmbersageSl1_ROSTER_BUFF",t[t.TidecallerSl1_SKILL2_BUFF=157]="TidecallerSl1_SKILL2_BUFF",t[t.TidecallerSl1_ROSTER_BUFF=158]="TidecallerSl1_ROSTER_BUFF",t[t.GrovewardenSl1_SKILL2_BUFF=159]="GrovewardenSl1_SKILL2_BUFF",t[t.GrovewardenSl1_SKILL3_BUFF=160]="GrovewardenSl1_SKILL3_BUFF",t[t.GrovewardenSl1_ROSTER_BUFF=161]="GrovewardenSl1_ROSTER_BUFF",t[t.FrankenSl1_SKILL2_BUFF=162]="FrankenSl1_SKILL2_BUFF",t[t.FrankenSl1_ROSTER_BUFF=164]="FrankenSl1_ROSTER_BUFF",t[t.WolfSl1_SKILL2_BUFF=165]="WolfSl1_SKILL2_BUFF",t[t.WolfSl1_SKILL3_BUFF=166]="WolfSl1_SKILL3_BUFF",t[t.WolfSl1_SKILL4_BUFF=167]="WolfSl1_SKILL4_BUFF",t[t.WolfSl1_ROSTER_BUFF=168]="WolfSl1_ROSTER_BUFF",t[t.BatSl1_SKILL2_BUFF=169]="BatSl1_SKILL2_BUFF",t[t.BatSl1_SKILL3_BUFF=170]="BatSl1_SKILL3_BUFF",t[t.BatSl1_SKILL4_BUFF=171]="BatSl1_SKILL4_BUFF",t[t.BatSl1_ROSTER_BUFF=172]="BatSl1_ROSTER_BUFF",t[t.SkullSl1_SKILL2_BUFF=173]="SkullSl1_SKILL2_BUFF",t[t.SkullSl1_ROSTER_BUFF=174]="SkullSl1_ROSTER_BUFF",t[t.Bomber1_ATKSPD_BUFF=200]="Bomber1_ATKSPD_BUFF",t[t.Bomber1_MOVESPD_BUFF=201]="Bomber1_MOVESPD_BUFF",t[t.TigerRider1_ATKSPD_BUFF=210]="TigerRider1_ATKSPD_BUFF",t[t.TigerRider1_MOVESPD_BUFF=211]="TigerRider1_MOVESPD_BUFF",t[t.Sylphid1_ATKSPD_STACK=220]="Sylphid1_ATKSPD_STACK",t[t.WyvernRider1_ATKSPD_BUFF=230]="WyvernRider1_ATKSPD_BUFF",t[t.WyvernRider1_MOVESPD_BUFF=231]="WyvernRider1_MOVESPD_BUFF",t[t.WyvernRider1_ATKDMG_BUFF=232]="WyvernRider1_ATKDMG_BUFF",t[t.WingKnight1_FLASH_BUFF=240]="WingKnight1_FLASH_BUFF",t[t.WingKnight1_DASH_BUFF=241]="WingKnight1_DASH_BUFF",t[t.WingKnight1_BERSERK_ATKSPD=242]="WingKnight1_BERSERK_ATKSPD",t[t.WingKnight1_BERSERK_ATKDMG=243]="WingKnight1_BERSERK_ATKDMG",t[t.WingKnight1_FLASH_MOVSPD=244]="WingKnight1_FLASH_MOVSPD",t[t.WingKnight1_FLASH_ATKSPD=245]="WingKnight1_FLASH_ATKSPD",t[t.BladeMaster1_KILL_ATKSPD=250]="BladeMaster1_KILL_ATKSPD",t[t.BladeMaster1_KILL_ATKDMG=251]="BladeMaster1_KILL_ATKDMG",t[t.BladeMaster1_RANGE_ATKSPD=252]="BladeMaster1_RANGE_ATKSPD",t[t.BladeMaster1_MELEE_MOVESPD=253]="BladeMaster1_MELEE_MOVESPD",t[t.BladeMaster1_MELEE_ATKDMG=254]="BladeMaster1_MELEE_ATKDMG",t[t.BladeMaster1_RUSH_ATKSPD=255]="BladeMaster1_RUSH_ATKSPD",t[t.BladeMaster1_RUSH_MOVESPD=256]="BladeMaster1_RUSH_MOVESPD",t[t.Aladin1_SAND_SLOW=260]="Aladin1_SAND_SLOW",t[t.Aladin1_BLESSING_ATKDMG=261]="Aladin1_BLESSING_ATKDMG",t[t.Druid1_VINE_ATKDMG=270]="Druid1_VINE_ATKDMG",t[t.Druid1_VINE_DEFENSE=271]="Druid1_VINE_DEFENSE",t[t.Druid1_VINE_ATKSPD=272]="Druid1_VINE_ATKSPD",t[t.CrowKnight1_ORBIT_ATKSPD=280]="CrowKnight1_ORBIT_ATKSPD",t[t.CrowKnight1_ORBIT_ATKDMG=281]="CrowKnight1_ORBIT_ATKDMG",t[t.RaidEmblemRogue_ACTIVE_ATKSPD=300]="RaidEmblemRogue_ACTIVE_ATKSPD",t[t.RaidEmblemRogue_ACTIVE_ATKDMG=301]="RaidEmblemRogue_ACTIVE_ATKDMG",t[t.RaidEmblemMage_BOSS_ATKSPD=302]="RaidEmblemMage_BOSS_ATKSPD",t[t.RaidEmblemMage_BOSS_DEFENSE=303]="RaidEmblemMage_BOSS_DEFENSE",t[t.RaidWeakpoint_BOSS_DEFENSE=304]="RaidWeakpoint_BOSS_DEFENSE",t[t.RaidWeakpoint_BOSS_ATKSPD=305]="RaidWeakpoint_BOSS_ATKSPD",t[t.RaidWeakpoint_BOSS_MOVESPD=306]="RaidWeakpoint_BOSS_MOVESPD",t[t.RaidRune_ACTIVE_ATKSPD=310]="RaidRune_ACTIVE_ATKSPD",t[t.RaidRune_ACTIVE_ATKDMG=311]="RaidRune_ACTIVE_ATKDMG",t[t.RaidRune_PULSE_ATKDMG=312]="RaidRune_PULSE_ATKDMG",t[t.RaidRune_PULSE_ATKSPD=313]="RaidRune_PULSE_ATKSPD",t[t.RaidRune_PULSE_DEFENSE=314]="RaidRune_PULSE_DEFENSE",t[t.RaidRune_ALLOUT_ATKDMG=315]="RaidRune_ALLOUT_ATKDMG",t[t.RaidRune_ALLOUT_ATKSPD=316]="RaidRune_ALLOUT_ATKSPD",t[t.RaidRune_BOSS_ATKSPD=320]="RaidRune_BOSS_ATKSPD",t[t.RaidRune_BOSS_DEFENSE=321]="RaidRune_BOSS_DEFENSE",t[t.RaidRune_BOSS_ATKDMG=322]="RaidRune_BOSS_ATKDMG",t[t.RaidRune_ARROW_DEFENSE=323]="RaidRune_ARROW_DEFENSE",t[t.RaidRune_COMBO_DEFENSE=324]="RaidRune_COMBO_DEFENSE",t[t.BURN_DEBUFF=1001]="BURN_DEBUFF",t[t.BLOODY_DEBUFF=1002]="BLOODY_DEBUFF",t[t.RACE_ROLETYPE_MOVE_SPEED_DEBUFF=1003]="RACE_ROLETYPE_MOVE_SPEED_DEBUFF",t[t.RACE_ROLETYPE_DAMAGE_DEBUFF=1004]="RACE_ROLETYPE_DAMAGE_DEBUFF",t[t.EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF=1005]="EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF",t[t.RACE_MAPTYPE2_DEBUFF=1006]="RACE_MAPTYPE2_DEBUFF",t[t.TidecallerSl1_SKILL2_DEBUFF=1007]="TidecallerSl1_SKILL2_DEBUFF",t[t.RAID_BOSS1_DEBUFF=1008]="RAID_BOSS1_DEBUFF",t[t.MOSSGOLEM_DEFENSE_BUFF=1009]="MOSSGOLEM_DEFENSE_BUFF",t))(yK||{
+ }
+ );
+ const MK=class t extends rj{
+ initializeTextureName(){
+ this.className=nj.ScorpionPoisonBullet,this.sheetName="RaidBattle",this.textureName="PoisonBullet"}
+ initializeData(){
+ this.hitClassName="",this.g=0,this.speed=18,this.flyEnd=2,this.incFrame=1,this.minT=8,this.maxT=42,this.orientToPath=!0,this.weaponScale=1}
+ onHit(){
+ this.owner&&this.target&&this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.target.isAlive&&(this.target.poison(t.POISON_DEBUFF_DURATION),this.target.addMoveSpeedBuff(yK.ScorpionPoisonBullet_MOVESPEED_DEBUFF,t.POISON_MOVE_SPEED_DEBUFF,t.POISON_DEBUFF_DURATION,!0),this.target.addAttackSpeedBuff(yK.ScorpionPoisonBullet_ATTACKSPEED_DEBUFF,t.POISON_ATTACK_SPEED_DEBUFF,t.POISON_DEBUFF_DURATION,!0))),this.displayExplodeEffect(),this.remove()}
+ displayExplodeEffect(){
+ const t=ej.getEffect(PF.PoisonExplodeEffect);
+ t.x=this.x,t.y=this.y,t.setBattleController(this.battleController||jhi.getInstance()),t.start(24),sB.getInstance().addChild(t)}
+ }
+ ;
+ Vt(MK,"ScorpionPoisonBullet"),Kt(MK,"POISON_DEBUFF_DURATION",420),Kt(MK,"POISON_MOVE_SPEED_DEBUFF",-.5),Kt(MK,"POISON_ATTACK_SPEED_DEBUFF",-.3);
+ let EK=MK;
+ const AK=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"g",new Lf),Kt(this,"radius",0),Kt(this,"aspectY",1),Kt(this,"fillColor",t.DEFAULT_FILL_COLOR),Kt(this,"strokeColor",t.DEFAULT_STROKE_COLOR),Kt(this,"fillAlphaScale",1),Kt(this,"crater",null),Kt(this,"craterTextures",[]),Kt(this,"fire",null),Kt(this,"fireTextures",[]),Kt(this,"craterTick",0),Kt(this,"craterOnly",!1),Kt(this,"fadeOutLeft",-1),Kt(this,"fadeOutTotal",0),this.eventMode="none",this.addChild(this.g)}
+ show(i,s,e,n=1){
+ this.x=i,this.y=s,this.radius=e,this.aspectY=n,this.fillColor=t.DEFAULT_FILL_COLOR,this.strokeColor=t.DEFAULT_STROKE_COLOR,this.fillAlphaScale=1,this.craterOnly=!1,this.fadeOutLeft=-1,this.fadeOutTotal=0,this.crater&&(this.crater.visible=!1),this.fire&&(this.fire.visible=!1),this.draw(.3,0),tB.getInstance().addChild(this)}
+ showCrater(){
+ if(this.craterOnly=!0,this.g.clear(),QA.hasSheet("RaidBattle")){
+ this.craterTextures=[];
+ for(let i=1;
+ i<=t.CRATER_FRAME_COUNT;
+ i++){
+ const t=QA.getTexture("RaidBattle",`Crater${
+ String(i).padStart(4,"0")}
+ `);
+ t&&this.craterTextures.push(t)}
+ if(0!==this.craterTextures.length){
+ this.crater||(this.crater=new He(this.craterTextures[0]),this.crater.anchor.set(.5),this.addChildAt(this.crater,0)),this.crater.texture=this.craterTextures[0],this.craterTick=0,this.crater.width=2*this.radius,this.crater.height=this.radius*this.aspectY*2,this.crater.alpha=0,this.crater.visible=!0,this.fireTextures=[];
+ for(let i=1;
+ i<=t.FIRE_FRAME_COUNT;
+ i++){
+ const t=QA.getTexture("RaidBattle",`FireArea${
+ String(i).padStart(4,"0")}
+ `);
+ t&&this.fireTextures.push(t)}
+ this.fireTextures.length>0&&(this.fire||(this.fire=new He(this.fireTextures[0]),this.fire.anchor.set(.5),this.addChildAt(this.fire,1)),this.fire.texture=this.fireTextures[0],this.fire.alpha=0,this.fire.visible=!0)}
+ }
+ }
+ setStyle(t,i,s=1){
+ this.fillColor=t,this.strokeColor=i,this.fillAlphaScale=s}
+ startFadeOut(t){
+ this.fadeOutLeft>=0||(this.fadeOutTotal=Math.max(1,t),this.fadeOutLeft=this.fadeOutTotal)}
+ update(i){
+ var s,e;
+ if(!this.craterOnly){
+ const t=Math.max(0,Math.min(1,i)),s=.22+.18*(.5+.5*Math.sin(t*Math.PI*8));
+ this.draw(s,t)}
+ if((null==(s=this.crater)?void 0:s.visible)&&this.craterTextures.length>0){
+ this.craterTick++;
+ const i=Math.floor(this.craterTick/t.CRATER_ANIM_DIV)%this.craterTextures.length;
+ this.crater.texture=this.craterTextures[i];
+ const s=Math.min(1,this.craterTick/t.CRATER_FADE_IN_FRAMES),n=1-(1-s)*(1-s);
+ let h=n;
+ const r=.92+.08*n;
+ if(this.crater.width=2*this.radius*r,this.crater.height=this.radius*this.aspectY*2*r,this.fadeOutLeft>=0&&(this.fadeOutLeft>0&&this.fadeOutLeft--,h=Math.min(h,this.fadeOutLeft/this.fadeOutTotal)),this.crater.alpha=h,(null==(e=this.fire)?void 0:e.visible)&&this.fireTextures.length>0){
+ const s=2*this.radius*r,e=this.radius*this.aspectY*2*r;
+ this.fire.texture=this.fireTextures[i%this.fireTextures.length],this.fire.width=s*t.FIRE_SCALE,this.fire.height=e*t.FIRE_SCALE,this.fire.x=s*t.FIRE_OFFSET_X_RATIO,this.fire.y=e*t.FIRE_OFFSET_Y_RATIO,this.fire.alpha=h}
+ }
+ }
+ draw(t,i){
+ const s=this.g,e=this.radius,n=this.radius*this.aspectY;
+ s.clear(),s.ellipse(0,0,e,n).fill({
+ color:this.fillColor,alpha:.5*t*this.fillAlphaScale}
+ ),s.ellipse(0,0,e,n).stroke({
+ width:4,color:this.strokeColor,alpha:.9}
+ ),i>0&&s.ellipse(0,0,e*i,n*i).stroke({
+ width:2,color:16777215,alpha:.55}
+ )}
+ dispose(){
+ this.g.clear(),this.crater&&(this.crater.visible=!1),this.fire&&(this.fire.visible=!1),this.parent&&this.parent.removeChild(this)}
+ }
+ ;
+ Vt(AK,"RaidWarningCircle"),Kt(AK,"CRATER_ASPECT_Y",65/148),Kt(AK,"CRATER_FRAME_COUNT",20),Kt(AK,"CRATER_ANIM_DIV",2),Kt(AK,"CRATER_FADE_IN_FRAMES",24),Kt(AK,"FIRE_FRAME_COUNT",8),Kt(AK,"FIRE_SCALE",.8),Kt(AK,"FIRE_OFFSET_X_RATIO",.024),Kt(AK,"FIRE_OFFSET_Y_RATIO",-.047),Kt(AK,"DEFAULT_FILL_COLOR",16719904),Kt(AK,"DEFAULT_STROKE_COLOR",16732240);
+ let SK=AK;
GuildRaidEmblemSubMenu 2 hunks, 774 statements
- this.setTitle(AG.getText("GAME_630","길드레이드"))}
+ this.setTitle(SG.getText("GAME_1260","휘장"))}
- Kt(w4t,"GuildRaidSubMenu"),zt(w4t,"instance");
+ Vt(D9t,"GuildRaidEmblemSubMenu"),Kt(D9t,"instance");
+ let L9t=D9t;
+ const G9t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"badges",[]),Kt(this,"lblRuneTitle"),Kt(this,"btnMerge"),Kt(this,"runeList");
+ const i=L9t.getInstance(),s=i.height+16,e=t9t.W*t.BADGE_SCALE,n=t9t.H*t.BADGE_SCALE,h=.5*(640-(t.COLS*e+(t.COLS-1)*t.GAP_X));
+ for(let c=0;
+ c<KQt.SLOT_COUNT;
+ c++){
+ const i=new t9t;
+ i.scale.set(t.BADGE_SCALE);
+ const r=c%t.COLS,o=Math.floor(c/t.COLS);
+ i.x=h+r*(e+t.GAP_X),i.y=s+o*(n+t.GAP_Y),i.onTap=t=>{
+ wti.getInstance().goEmblemDetail(t)}
+ ,this.addChild(i),this.badges.push(i)}
+ const r=s+2*n+t.GAP_Y;
+ this.lblRuneTitle=new JD(SG.getText("GAME_1294","크리스탈 목록"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblRuneTitle.x=s9t.START_X,this.lblRuneTitle.y=r+18,this.addChild(this.lblRuneTitle),this.btnMerge=new ZL(SG.getText("GAME_1328","합성")),this.btnMerge.color=ZL.BROWN,this.btnMerge.width=100,this.btnMerge.height=40,this.btnMerge.x=640-s9t.START_X-this.btnMerge.width,this.btnMerge.y=this.lblRuneTitle.y+.5*(this.lblRuneTitle.height-this.btnMerge.height),this.btnMerge.onClick=()=>P9t.getInstance().open(-1,()=>{
+ wti.getInstance().goEmblem()}
+ ),this.addChild(this.btnMerge);
+ const o=this.lblRuneTitle.y+32,a=Math.max(200,wti.getInstance().listHeight-o+i.height);
+ this.runeList=new d5(s9t,640,a),this.runeList.x=0,this.runeList.y=o,this.addChild(this.runeList),this.addChild(i)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ async setData(){
+ L9t.getInstance().updateLanguage(),await OQt.getInstance().ensureLoaded(),await KQt.getInstance().ensureLoaded(),this.parent&&(this.refreshAll(),QA.hasSheet("UI_RAID")||t9t.ensureUiRaidSheet().then(t=>{
+ t&&this.parent&&this.refreshAll()}
+ ))}
+ refreshAll(){
+ for(let s=0;
+ s<this.badges.length;
+ s++)this.badges[s].setData(DJt[s]);
+ const t=this.buildRows(),i=t.reduce((t,i)=>t+i.cells.length,0);
+ this.lblRuneTitle.text=`${
+ SG.getText("GAME_1294","크리스탈 목록")}
+  (${
+ i}
+ )`,this.runeList.dataProvider=t}
+ buildRows(){
+ const t=KQt.getInstance(),i=[];
+ for(const e of DJt){
+ const s=e+1,n=new Set(t.getSlotRuneVOs(s-1).map(t=>t.id));
+ for(const e of t.getRunesByBand(s))i.push({
+ kindNum:e.kindNum,grade:e.grade,subId:e.subId,vos:[e],uid:String(e.id),equipped:n.has(e.id),onTap:Vt(t=>{
+ wti.getInstance().goEmblemDetail(Math.floor(t.kindNum/100)-1)}
+ ,"onTap")}
+ )}
+ const s=[];
+ for(let e=0;
+ e<i.length;
+ e+=s9t.COLS)s.push({
+ cells:i.slice(e,e+s9t.COLS)}
+ );
+ return s}
+ updateLanguage(){
+ L9t.getInstance().updateLanguage()}
+ get className(){
+ return"GuildRaidEmblemSubView"}
+ }
+ ;
+ Vt(G9t,"GuildRaidEmblemSubView"),Kt(G9t,"instance"),Kt(G9t,"COLS",3),Kt(G9t,"BADGE_SCALE",.9),Kt(G9t,"GAP_X",30),Kt(G9t,"GAP_Y",12);
+ let B9t=G9t;
+ const U9t=class extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lblRank"),Kt(this,"lblName"),Kt(this,"lblDamage"),Kt(this,"detailIcons",[]),Kt(this,"detailLabels",[]),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=630,this.bg.height=72,this.addChild(this.bg),this.lblRank=new JD("",11768152,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblRank.y=12,this.addChild(this.lblRank),this.lblName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.lblName.y=10,this.addChild(this.lblName),this.lblDamage=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblDamage.y=10,this.addChild(this.lblDamage);
+ for(let t=0;
+ t<4;
+ t++){
+ const t=new He;
+ t.visible=!1,this.detailIcons.push(t),this.addChild(t);
+ const i=new JD("",10129539,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ i.textSize=13,i.visible=!1,this.detailLabels.push(i),this.addChild(i)}
+ }
+ setData(t){
+ 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;
+ const i=t.isNoShow?.45:1;
+ let s=145;
+ for(let e=0;
+ e<4;
+ e++){
+ const n=this.detailIcons[e],h=this.detailLabels[e],r=t.details[e];
+ if(!r){
+ n.visible=!1,h.visible=!1;
+ continue}
+ const o=r.main>0&&r.sub>0?XQt(r.main,r.sub,!0):null;
+ n.visible=!!o,o&&(n.texture=o,n.width=24,n.height=24,n.x=s,n.y=40,n.alpha=i,s+=28),h.text=r.text,h.x=s,h.y=44,h.visible=!0,h.alpha=i,s+=h.width+12}
+ this.bg.alpha=t.isNoShow?.55:1,this.lblRank.alpha=i,this.lblName.alpha=i,this.lblDamage.alpha=i}
+ get height(){
+ return 74}
+ }
+ ;
+ Vt(U9t,"GuildRaidRecordUserItemRenderer");
+ let F9t=U9t;
+ const H9t=class t extends u4t{
+ constructor(){
+ super(),Kt(this,"lblInfo"),this.lblInfo=new JD(SG.getText("GAME_1360","최근 14일"),11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblInfo.textSize=14,this.lblInfo.x=this.bg.width-this.lblInfo.width-14,this.lblInfo.y=.5*(this.bg.height-this.lblInfo.height),this.addChild(this.lblInfo),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_1359","길드원 기록"))}
+ }
+ ;
+ Vt(H9t,"GuildRaidRecordSubMenu"),Kt(H9t,"instance");
+ let W9t=H9t;
+ const $9t={
+ OPEN:["GAME_938","진행중"],CLEAR:["COMMON_377","클리어"],GIVEUP:["GAME_1271","포기"],EXPIRED:["GAME_1282","시간 초과"]}
+ ;
+ function j9t(t){
+ const i=$9t[t];
+ return i?SG.getText(i[0],i[1]):t}
+ Vt(j9t,"statusText");
+ const V9t={
+ OPEN:16737894,CLEAR:10410858,GIVEUP:10066329,EXPIRED:10066329}
+ ,K9t=[["GAME_1369","일"],["GAME_1370","월"],["GAME_1371","화"],["GAME_1372","수"],["GAME_1373","목"],["GAME_1374","금"],["GAME_1375","토"]];
+ function z9t(t){
+ const i=K9t[t];
+ return i?SG.getText(i[0],i[1]):""}
+ Vt(z9t,"weekdayText");
+ const q9t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"lblName"),Kt(this,"lblState"),Kt(this,"selMark"),Kt(this,"raidId",0),Kt(this,"onSelect"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=t.W,this.bg.height=t.H,this.addChild(this.bg),this.icon=new He(QA.getTexture("UI_Guild","Guild_Quest_Raid")),this.icon.x=2,this.icon.y=.5*(t.H-this.icon.height),this.addChild(this.icon),this.lblName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=135,this.lblName.y=14,this.addChild(this.lblName),this.lblState=new JD("",16737894,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblState.textSize=13,this.lblState.x=135,this.lblState.y=44,this.addChild(this.lblState),this.selMark=new jO(t.W-8,4,16765033),this.selMark.x=4,this.selMark.y=t.H-6,this.selMark.visible=!1,this.addChild(this.selMark),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ri(0,0,t.W,t.H),this.on("pointertap",()=>{
+ var t;
+ return null==(t=this.onSelect)?void 0:t.call(this,this.raidId)}
+ )}
+ setData(t,i){
+ this.raidId=t.raidId;
+ const s=PJt.getInstance();
+ this.lblName.text=`${
+ s.getMainName(t.main)}
+ ( ${
+ t.difficult}
+  )`,this.lblState.text=j9t(t.status),this.lblState.textColor=V9t[t.status]??10066329,this.selMark.visible=i,this.bg.tint=i?16777215:10132122,this.icon.alpha=i?1:.7,this.lblName.textColor=i?16765033:16777215}
+ }
+ ;
+ Vt(q9t,"RecordRaidCard"),Kt(q9t,"W",310),Kt(q9t,"H",80);
+ let Y9t=q9t;
+ const X9t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"icon"),Kt(this,"lblName"),Kt(this,"sub",0),Kt(this,"onSelect"),this.bg=new jO(100,t.H,16777215),this.addChild(this.bg),this.icon=new He,this.addChild(this.icon),this.lblName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblName.textSize=12,this.addChild(this.lblName),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ri(0,0,100,t.H),this.on("pointertap",()=>{
+ var t;
+ return null==(t=this.onSelect)?void 0:t.call(this,this.sub)}
+ )}
+ setData(i){
+ if(this.sub=i.sub,this.bg.width=i.width,this.bg.tint=i.selected?4864540:1841170,this.hitArea.width=i.width,0===i.sub)this.icon.visible=!1,this.lblName.visible=!0,this.lblName.textSize=16,this.lblName.text=i.name,this.lblName.y=.5*(t.H-this.lblName.height);
+ else{
+ const s=XQt(i.main,i.sub,i.reached);
+ this.icon.visible=!!s,this.lblName.visible=!s,s?(this.icon.texture=s,this.icon.width=48,this.icon.height=48,this.icon.x=.5*(i.width-48),this.icon.y=.5*(t.H-48),this.icon.alpha=i.reached?1:.5):(this.lblName.textSize=12,this.lblName.text=i.name,this.lblName.y=.5*(t.H-this.lblName.height))}
+ this.lblName.visible&&(this.lblName.x=.5*(i.width-this.lblName.width),this.lblName.textColor=i.selected?16765033:13421772,this.lblName.alpha=0===i.sub||i.reached?1:.5)}
+ }
+ ;
+ Vt(X9t,"RecordBossChip"),Kt(X9t,"H",68);
+ let J9t=X9t;
+ const Q9t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"btnNewer"),Kt(this,"btnOlder"),Kt(this,"lblDate"),Kt(this,"cardsContainer",new Ge),Kt(this,"cards",[]),Kt(this,"stripContainer",new Ge),Kt(this,"chips",[]),Kt(this,"lblCaption"),Kt(this,"btnSortDamage"),Kt(this,"btnSortRecent"),Kt(this,"list"),Kt(this,"lblEmpty"),Kt(this,"requestSeq",0),Kt(this,"days",[]),Kt(this,"dayIdx",0),Kt(this,"curRaidId",0),Kt(this,"selBoss",0),Kt(this,"sortMode","damage"),Kt(this,"detailCache",new Map);
+ const t=W9t.getInstance().height+6;
+ this.btnNewer=new M2t("left"),this.btnNewer.x=12,this.btnNewer.y=t+.5*(44-this.btnNewer.height),this.btnNewer.onClick=()=>this.moveDay(-1),this.addChild(this.btnNewer),this.btnOlder=new M2t("right"),this.btnOlder.x=628-this.btnOlder.width,this.btnOlder.y=t+.5*(44-this.btnOlder.height),this.btnOlder.onClick=()=>this.moveDay(1),this.addChild(this.btnOlder),this.lblDate=new JD("",16765033,cD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblDate.y=t+10,this.addChild(this.lblDate),this.addChild(this.cardsContainer),this.addChild(this.stripContainer),this.lblCaption=new JD("",10129539,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblCaption.textSize=13,this.addChild(this.lblCaption),this.btnSortDamage=new gzt(SG.getText("GAME_1361","데미지순"),100,30),this.btnSortDamage.height=40,this.btnSortDamage.onClick=()=>this.setSortMode("damage"),this.addChild(this.btnSortDamage),this.btnSortRecent=new gzt(SG.getText("GAME_1362","최근순"),100,30),this.btnSortRecent.height=40,this.btnSortRecent.onClick=()=>this.setSortMode("recent"),this.addChild(this.btnSortRecent),this.list=new d5(F9t,640,300),this.list.x=5,this.addChild(this.list),this.lblEmpty=new JD("",10129539,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblEmpty.visible=!1,this.addChild(this.lblEmpty),this.addChild(W9t.getInstance())}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ async setData(){
+ var t;
+ const i=++this.requestSeq;
+ this.detailCache.clear(),await PJt.getInstance().ensureLoaded();
+ const s=await rD.getInstance().guildRaid.getRecords();
+ (null==s?void 0:s.success)?i===this.requestSeq&&this.parent&&(this.days=this.buildDays((null==(t=s.body)?void 0:t.raids)??[]),this.dayIdx=0,this.selBoss=0,this.sortMode="damage",0!==this.days.length?this.selectDay(0):this.showEmptyAll()):wG.getInstance().show(SG.getErrorMessage(String((null==s?void 0:s.error)??"ERROR"))||String((null==s?void 0:s.error)??"ERROR"))}
+ buildDays(t){
+ const i=new Date(tx.time),s=`${
+ i.getMonth()+1}
+ -${
+ i.getDate()}
+ `,e=[];
+ let n="";
+ for(const h of t){
+ const t=h.startTime?new Date(h.startTime).getTime():0,i=new Date(t),r=`${
+ i.getMonth()+1}
+ -${
+ i.getDate()}
+ `;
+ r!==n&&(n=r,e.push({
+ label:SG.getValueReplaceMulti("GAME_1368",["\\{
+ 0\\}
+ ","\\{
+ 1\\}
+ ","\\{
+ 2\\}
+ "],[i.getMonth()+1,i.getDate(),z9t(i.getDay())],`${
+ i.getMonth()+1}
+ 월 ${
+ i.getDate()}
+ 일 (${
+ z9t(i.getDay())}
+ )`),today:r===s,raids:[]}
+ )),e[e.length-1].raids.push({
+ raidId:Number(h.raidId)||0,main:Number(h.main)||0,difficult:Number(h.difficult)||0,currentSub:Number(h.currentSub)||0,status:String(h.status??"OPEN"),startTimeMs:t,userCount:Number(h.userCount)||0,battleCount:Number(h.battleCount)||0}
+ )}
+ return e}
+ async selectDay(t){
+ this.dayIdx=t;
+ const i=this.days[t],s=i.raids.find(t=>"OPEN"===t.status)??i.raids[0];
+ this.curRaidId=(null==s?void 0:s.raidId)??0,this.selBoss=0,this.renderDayHeader(),await this.loadDetail()}
+ moveDay(t){
+ const i=this.dayIdx+t;
+ i<0||i>=this.days.length||this.selectDay(i)}
+ selectRaid(t){
+ t!==this.curRaidId&&(this.curRaidId=t,this.selBoss=0,this.renderDayHeader(),this.loadDetail())}
+ async loadDetail(){
+ const t=++this.requestSeq,i=this.curRaidId;
+ if(i<=0)return;
+ let s=this.detailCache.get(i);
+ if(!s){
+ const e=await rD.getInstance().guildRaid.getRecordDetail(i);
+ if(!(null==e?void 0:e.success))return void wG.getInstance().show(SG.getErrorMessage(String((null==e?void 0:e.error)??"ERROR"))||String((null==e?void 0:e.error)??"ERROR"));
+ if(t!==this.requestSeq||!this.parent)return;
+ if(i!==this.curRaidId)return;
+ s=this.buildDetail(e.body),this.detailCache.set(i,s)}
+ this.renderDetail()}
+ buildDetail(t){
+ const i=PJt.getInstance(),s=new Map;
+ for(const e of(null==t?void 0:t.battles)??[]){
+ const t=i.getByKindNum(Number(e.kindNum)||0),n={
+ sub:(null==t?void 0:t.sub)??0,bossName:t?i.getBossName(t):SG.getText("GAME_1309","보스"),damage:Number(e.damage)||0,timeMs:e.endTime?new Date(e.endTime).getTime():0}
+ ,h=String(e.name??"?");
+ let r=s.get(h);
+ r||(r=[],s.set(h,r)),r.push(n)}
+ return{
+ battlesByUser:s,noShow:((null==t?void 0:t.noShow)??[]).map(t=>String(t))}
+ }
+ showEmptyAll(){
+ this.btnNewer.visible=!1,this.btnOlder.visible=!1,this.lblDate.visible=!1,this.cardsContainer.visible=!1,this.stripContainer.visible=!1,this.lblCaption.visible=!1,this.btnSortDamage.visible=!1,this.btnSortRecent.visible=!1,this.list.dataProvider=[],this.list.visible=!1,this.lblEmpty.text=SG.getText("GAME_1366","최근 14일간 오픈한 레이드가 없습니다"),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.lblEmpty.y=W9t.getInstance().height+120,this.lblEmpty.visible=!0}
+ renderDayHeader(){
+ const t=this.days[this.dayIdx],i=W9t.getInstance().height;
+ this.btnNewer.visible=!0,this.btnOlder.visible=!0,this.lblDate.visible=!0,this.cardsContainer.visible=!0,this.lblEmpty.visible=!1,this.lblDate.text=t.today?`${
+ t.label}
+  · ${
+ SG.getText("GAME_1363","오늘")}
+ `:t.label,this.lblDate.x=.5*(640-this.lblDate.width),this.btnNewer.activated=this.dayIdx>0,this.btnOlder.activated=this.dayIdx<this.days.length-1;
+ const s=i+6+44+8;
+ for(this.cardsContainer.y=s;
+ this.cards.length<t.raids.length;
+ ){
+ const t=new Y9t;
+ t.onSelect=t=>this.selectRaid(t),this.cards.push(t),this.cardsContainer.addChild(t)}
+ for(let e=0;
+ e<this.cards.length;
+ e++){
+ const i=this.cards[e],s=t.raids[e];
+ i.visible=!!s,s&&(i.x=8+e%2*(Y9t.W+6),i.y=Math.floor(e/2)*(Y9t.H+6),i.setData(s,s.raidId===this.curRaidId))}
+ }
+ renderDetail(){
+ const t=this.days[this.dayIdx],i=t.raids.find(t=>t.raidId===this.curRaidId),s=this.detailCache.get(this.curRaidId);
+ if(!i||!s)return;
+ const e=PJt.getInstance(),n=W9t.getInstance().height,h=n+6+44+8+Math.ceil(t.raids.length/2)*(Y9t.H+6)+4;
+ this.stripContainer.visible=!0,this.stripContainer.y=h;
+ const r=e.getSubs(i.main,i.difficult),o=r.length+1,a=Math.floor((624-6*(o-1))/o);
+ for(;
+ this.chips.length<o;
+ ){
+ const t=new J9t;
+ t.onSelect=t=>this.selectBoss(t),this.chips.push(t),this.stripContainer.addChild(t)}
+ for(let w=0;
+ w<this.chips.length;
+ w++){
+ const t=this.chips[w];
+ if(t.visible=w<o,!(w>=o))if(t.x=8+w*(a+6),t.y=0,0===w)t.setData({
+ sub:0,name:SG.getText("COMMON_332","전체"),main:i.main,reached:!0,selected:0===this.selBoss,width:a}
+ );
+ else{
+ const s=r[w-1],n="CLEAR"===i.status||s.sub<=i.currentSub;
+ t.setData({
+ sub:s.sub,name:e.getBossName(s),main:i.main,reached:n,selected:this.selBoss===s.sub,width:a}
+ )}
+ }
+ const c=this.buildUserRows(s,i.main),l=h+J9t.H+8;
+ this.lblCaption.visible=!0,this.btnSortDamage.visible=!0,this.btnSortRecent.visible=!0,this.btnSortRecent.x=632-this.btnSortRecent.width,this.btnSortRecent.y=l-2,this.btnSortDamage.x=this.btnSortRecent.x-this.btnSortDamage.width-5,this.btnSortDamage.y=l-2,this.btnSortDamage.selected="damage"===this.sortMode,this.btnSortRecent.selected="recent"===this.sortMode;
+ const u=c.filter(t=>!t.isNoShow).length,d=c.reduce((t,i)=>t+(i.isNoShow?0:i.count),0),f=r.find(t=>t.sub===this.selBoss),p=0===this.selBoss?SG.getText("COMMON_332","전체"):f?e.getBossName(f):SG.getText("GAME_1309","보스");
+ this.lblCaption.text=`${
+ p}
+    ${
+ SG.getText("GAME_1364","참여")}
+  x${
+ u}
+    ${
+ SG.getText("GAME_1365","전투")}
+  x${
+ d}
+ `,this.lblCaption.x=14,this.lblCaption.y=l+.5*(36-this.lblCaption.height);
+ const g=l+36+6,m=n+wti.getInstance().listHeight;
+ this.list.visible=!0,this.list.y=g,this.list.setListHeight(Math.max(80,m-g),!1),this.list.dataProvider=c,this.list.showTopItem(),0===c.length?(this.lblEmpty.text=SG.getText("GAME_1367","아직 이 보스에 도전한 기록이 없습니다"),this.lblEmpty.x=.5*(640-this.lblEmpty.width),this.lblEmpty.y=g+40,this.lblEmpty.visible=!0):this.lblEmpty.visible=!1}
+ buildUserRows(t,i){
+ const s=[];
+ for(const[n,h]of t.battlesByUser){
+ const t=0===this.selBoss?h:h.filter(t=>t.sub===this.selBoss);
+ 0!==t.length&&s.push({
+ name:n,entries:t,total:t.reduce((t,i)=>t+i.damage,0),lastMs:Math.max(...t.map(t=>t.timeMs)),rank:0}
+ )}
+ s.sort((t,i)=>i.total-t.total),s.forEach((t,i)=>t.rank=i+1),"recent"===this.sortMode&&s.sort((t,i)=>i.lastMs-t.lastMs);
+ const e=s.map(t=>({
+ rank:t.rank,name:t.name,count:t.entries.length,damageText:VD.displayLargeNumberAsAlphabet(t.total),details:this.buildDetails(t.entries,i),isNoShow:!1}
+ ));
+ if(0===this.selBoss)for(const n of t.noShow)e.push({
+ rank:0,name:n,count:0,damageText:"-",details:[{
+ main:0,sub:0,text:SG.getText("GAME_560","미참여")}
+ ],isNoShow:!0}
+ );
+ return e}
+ buildDetails(t,i){
+ const s=0===this.selBoss,e=t.slice(0,3).map(t=>{
+ const e=new Date(t.timeMs),n=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0"),r=VD.displayLargeNumberAsAlphabet(t.damage),o=s&&t.sub>0;
+ return{
+ main:o?i:0,sub:o?t.sub:0,text:s&&!o?`${
+ t.bossName}
+  ${
+ r}
+  (${
+ n}
+ :${
+ h}
+ )`:`${
+ r}
+  (${
+ n}
+ :${
+ h}
+ )`}
+ }
+ ),n=t.length-3;
+ return n>0&&e.push({
+ main:0,sub:0,text:`+${
+ n}
+ `}
+ ),e}
+ selectBoss(t){
+ this.selBoss!==t&&(this.selBoss=t,this.renderDetail())}
+ setSortMode(t){
+ this.sortMode!==t&&(this.sortMode=t,this.renderDetail())}
+ updateLanguage(){
+ W9t.getInstance().updateLanguage(),this.setData()}
+ get className(){
+ return"GuildRaidRecordSubView"}
+ }
+ ;
+ Vt(Q9t,"GuildRaidRecordSubView"),Kt(Q9t,"instance");
+ let Z9t=Q9t;
+ const tti=[{
+ grade:1,pct:"70%"}
+ ,{
+ grade:2,pct:"25%"}
+ ,{
+ grade:3,pct:"4%"}
+ ,{
+ grade:4,pct:"0.97%"}
+ ,{
+ grade:5,pct:"0.03%"}
+ ],iti=class t extends cG{
+ constructor(){
+ super(),Kt(this,"gSwatches",new Lf),Kt(this,"lblRows",[]),Kt(this,"lblNote"),Kt(this,"btnConfirm"),this.title=SG.getText("GAME_1341","크리스탈 뽑기 확률"),this.outSideClickHide=!0,this.contentContainer.addChild(this.gSwatches);
+ for(let t=0;
+ t<tti.length;
+ t++){
+ const t=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ this.contentContainer.addChild(t),this.lblRows.push(t)}
+ this.lblNote=new JD(SG.getText("GAME_1342","모든 뽑기 상품 공통 확률 · 종류는 전 휘장에서 랜덤"),10066329,cD.DEFAULT_FONT_OPTION_16),this.contentContainer.addChild(this.lblNote),this.btnConfirm=new ZL(SG.getText("COMMON_1","확인")),this.btnConfirm.color=ZL.GREEN,this.btnConfirm.width=160,this.btnConfirm.height=50,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ showGuide(){
+ const t=OQt.getInstance(),i=.5*this.width,s=i-130;
+ let e=90;
+ this.gSwatches.clear();
+ for(let n=0;
+ n<tti.length;
+ n++){
+ const i=tti[n],h=t.getGradeName(i.grade)??SG.getValueReplace("GAME_1340","\\{
+ 0\\}
+ ",i.grade,`${
+ i.grade}
+ 등급`);
+ this.gSwatches.roundRect(s,e,26,26,6).fill({
+ color:H7t[i.grade-1]??16777215}
+ ).stroke({
+ width:1,color:0,alpha:.5}
+ );
+ const r=this.lblRows[n];
+ r.text=`${
+ h}
+    ${
+ i.pct}
+ `,r.x=s+40,r.y=e+.5*(26-r.height),e+=38}
+ e+=8,this.lblNote.x=i-.5*this.lblNote.width,this.lblNote.y=e,e+=this.lblNote.height+24,this.btnConfirm.x=i-.5*this.btnConfirm.width,this.btnConfirm.y=e,this.height=e+this.btnConfirm.height+28,this.btnClose.visible=!0,super.show()}
+ }
+ ;
+ Vt(iti,"RuneDrawGuidePopup"),Kt(iti,"_instance");
+ let sti=iti;
+ const eti=class t extends Ge{
+ constructor(i,s){
+ super(),Kt(this,"bg"),Kt(this,"gridContainer",new Ge),Kt(this,"fxContainer",new Ge),Kt(this,"runes"),Kt(this,"onCompleteCb"),Kt(this,"queueIdx",0),Kt(this,"timer",0),Kt(this,"done",!1),Kt(this,"allRevealed",!1),Kt(this,"placedCells",[]),Kt(this,"activePlaceholders",new Set),Kt(this,"startX",0),Kt(this,"startY",0),this.runes=i.slice(),this.onCompleteCb=s;
+ const e=VA.stageWidth||640,n=VA.stageHeight||1200;
+ this.bg=new jO(e,n,0),this.bg.alpha=0,this.addChild(this.bg),this.addChild(this.gridContainer),this.gridContainer.addChild(this.fxContainer),this.eventMode="static",this.bg.eventMode="static",this.bg.on("pointertap",()=>this.onTap());
+ const h=t,r=Math.min(h.COLS,Math.max(1,this.runes.length)),o=Math.max(1,Math.ceil(this.runes.length/h.COLS)),a=r*h.CELL+(r-1)*h.GAP,c=o*h.CELL+(o-1)*h.GAP;
+ this.startX=.5*(e-a),this.startY=Math.max(80,.42*n-.5*c),FO.to(this.bg,{
+ alpha:.78,duration:.18,ease:"power2.out",onComplete:Vt(()=>this.processNext(),"onComplete")}
+ )}
+ cellPosition(i){
+ const s=t,e=i%s.COLS,n=Math.floor(i/s.COLS);
+ return{
+ x:this.startX+e*(s.CELL+s.GAP),y:this.startY+n*(s.CELL+s.GAP)}
+ }
+ static gradeColor(t){
+ return H7t[Math.max(0,t-1)]??10395294}
+ spawnCell(i,s){
+ const e=t,n="ABCDEF"[Math.floor(s.kindNum/100)-1]??"A",h=new Ge,r=new Lf;
+ J7t(r,n,s.grade,e.CELL),s.subId>=0&&r.circle(14,14,6).fill({
+ color:16765562}
+ ),h.addChild(r),h.pivot.set(.5*e.CELL,.5*e.CELL);
+ const o=this.cellPosition(i);
+ return h.x=o.x+.5*e.CELL,h.y=o.y+.5*e.CELL,h.alpha=0,h.visible=!1,this.gridContainer.addChildAt(h,this.gridContainer.getChildIndex(this.fxContainer)),this.placedCells.push(h),h}
+ onTap(){
+ this.done||(this.allRevealed?this.finish():this.skip())}
+ processNext(){
+ if(this.done)return;
+ if(this.queueIdx>=this.runes.length)return void(this.allRevealed=!0);
+ const t=this.runes[this.queueIdx],i=this.spawnCell(this.queueIdx,t);
+ let s;
+ this.queueIdx++,t.grade>=5?(this.revealHigh(i,t.grade),s=700):(this.revealNormal(i,t.grade),s=t.grade>=3?110:80),this.timer=window.setTimeout(()=>{
+ this.timer=0,this.processNext()}
+ ,s)}
+ revealNormal(i,s){
+ const e=t.gradeColor(s);
+ this.popCell(i,!1),this.burstRing(i.x,i.y,e,1.15),s>=3&&this.burstSparks(i.x,i.y,e,7,1)}
+ revealHigh(i,s){
+ const e=t,n=t.gradeColor(s),h=new Ge,r=new Lf;
+ r.roundRect(0,0,e.CELL,e.CELL,12).fill(16777215),r.pivot.set(.5*e.CELL,.5*e.CELL),h.addChild(r);
+ const o=new Lf;
+ o.circle(0,0,.62*e.CELL).stroke({
+ width:5,color:n,alpha:.9}
+ ),o.blendMode="add",h.addChild(o),h.x=i.x,h.y=i.y,this.fxContainer.addChild(h),this.activePlaceholders.add(h),FO.fromTo(o.scale,{
+ x:.85,y:.85}
+ ,{
+ x:1.12,y:1.12,duration:.12,repeat:4,yoyo:!0,ease:"sine.inOut"}
+ );
+ const a=h.x,c=FO.timeline({
+ onComplete:Vt(()=>{
+ this.removePlaceholder(h),this.flashAt(i.x,i.y),this.burstRays(i.x,i.y,n),this.burstRing(i.x,i.y,n,1.9),this.burstSparks(i.x,i.y,n,14,1.6),this.shakeGrid(),this.popCell(i,!0)}
+ ,"onComplete")}
+ );
+ c.to(h,{
+ x:a+6,duration:.05,ease:"none",repeat:9,yoyo:!0}
+ ),c.set(h,{
+ x:a}
+ )}
+ removePlaceholder(t){
+ this.activePlaceholders.delete(t),FO.killTweensOf(t);
+ for(const i of t.children)FO.killTweensOf(i.scale);
+ t.parent&&t.parent.removeChild(t)}
+ popCell(t,i){
+ t.visible=!0,t.alpha=0,t.rotation=i?-.55:-.35;
+ const s=i?1.65:1.35,e=FO.timeline();
+ e.to(t,{
+ alpha:1,duration:.06,ease:"power2.out"}
+ ),e.fromTo(t.scale,{
+ x:s,y:s}
+ ,{
+ x:1,y:1,duration:i?.22:.16,ease:i?"back.out(2.4)":"back.out(1.9)"}
+ ,"<"),e.to(t,{
+ rotation:0,duration:i?.22:.16,ease:"back.out(1.6)"}
+ ,"<")}
+ burstRing(i,s,e,n){
+ const h=t,r=new Lf;
+ r.circle(0,0,.5*h.CELL).stroke({
+ width:5,color:e,alpha:1}
+ ),r.blendMode="add",r.x=i,r.y=s,r.alpha=.95,r.scale.set(.4),this.fxContainer.addChild(r),FO.to(r.scale,{
+ x:n,y:n,duration:.38,ease:"power2.out"}
+ ),FO.to(r,{
+ alpha:0,duration:.38,ease:"power2.out",onComplete:Vt(()=>{
+ r.parent&&r.parent.removeChild(r)}
+ ,"onComplete")}
+ )}
+ burstSparks(i,s,e,n,h){
+ const r=t;
+ for(let t=0;
+ t<n;
+ t++){
+ const t=4+6*Math.random(),n=new Lf,o=Math.random()<.4?16777215:e;
+ n.poly([0,-t,.6*t,0,0,t,.6*-t,0]).fill({
+ color:o}
+ ),n.blendMode="add",n.x=i,n.y=s,n.rotation=Math.random()*Math.PI,this.fxContainer.addChild(n);
+ const a=Math.random()*Math.PI*2,c=r.CELL*(.6+.9*Math.random())*h,l=.32+.22*Math.random();
+ FO.to(n,{
+ x:i+Math.cos(a)*c,y:s+Math.sin(a)*c-12,rotation:n.rotation+3*(Math.random()-.5),alpha:0,duration:l,ease:"power2.out",onComplete:Vt(()=>{
+ n.parent&&n.parent.removeChild(n)}
+ ,"onComplete")}
+ ),FO.to(n.scale,{
+ x:.25,y:.25,duration:l,ease:"power1.in"}
+ )}
+ }
+ burstRays(t,i,s){
+ const e=new Ge;
+ for(let n=0;
+ n<10;
+ n++){
+ const t=new Lf,i=7+6*Math.random();
+ t.poly([0,0,.5*-i,-129.60000000000002,.5*i,-129.60000000000002]).fill({
+ color:n%2==0?s:16777215,alpha:.85}
+ ),t.blendMode="add",t.rotation=n/10*Math.PI*2,e.addChild(t)}
+ e.x=t,e.y=i,e.scale.set(.2),e.alpha=1,this.fxContainer.addChild(e),FO.to(e.scale,{
+ x:1,y:1,duration:.3,ease:"power3.out"}
+ ),FO.to(e,{
+ rotation:.5,alpha:0,duration:.55,ease:"power2.out",onComplete:Vt(()=>{
+ e.parent&&e.parent.removeChild(e)}
+ ,"onComplete")}
+ )}
+ flashAt(i,s){
+ const e=t,n=new Lf;
+ n.circle(0,0,.75*e.CELL).fill({
+ color:16777215}
+ ),n.blendMode="add",n.x=i,n.y=s,n.alpha=0,this.fxContainer.addChild(n);
+ const h=FO.timeline({
+ onComplete:Vt(()=>{
+ n.parent&&n.parent.removeChild(n)}
+ ,"onComplete")}
+ );
+ h.to(n,{
+ alpha:.95,duration:.05,ease:"power2.out"}
+ ),h.to(n,{
+ alpha:0,duration:.25,ease:"power2.out"}
+ )}
+ shakeGrid(){
+ FO.killTweensOf(this.gridContainer),this.gridContainer.x=0,this.gridContainer.y=0,FO.to(this.gridContainer,{
+ x:7,y:-4,duration:.04,repeat:7,yoyo:!0,ease:"none",onComplete:Vt(()=>{
+ this.gridContainer.x=0,this.gridContainer.y=0}
+ ,"onComplete")}
+ )}
+ skip(){
+ if(!this.done){
+ this.timer&&(clearTimeout(this.timer),this.timer=0);
+ for(const t of Array.from(this.activePlaceholders))this.removePlaceholder(t);
+ FO.killTweensOf(this.gridContainer),this.gridContainer.x=0,this.gridContainer.y=0;
+ for(const t of this.placedCells)FO.killTweensOf(t),FO.killTweensOf(t.scale),t.visible=!0,t.alpha=1,t.rotation=0,t.scale.set(1);
+ for(;
+ this.queueIdx<this.runes.length;
+ ){
+ const t=this.spawnCell(this.queueIdx,this.runes[this.queueIdx]);
+ t.visible=!0,t.alpha=1,this.queueIdx++}
+ this.allRevealed=!0}
+ }
+ finish(){
+ this.done||(this.done=!0,this.timer&&(clearTimeout(this.timer),this.timer=0),FO.to(this,{
+ alpha:0,duration:.25,ease:"power2.out",onComplete:Vt(()=>{
+ this.cleanup(),this.onCompleteCb()}
+ ,"onComplete")}
+ ))}
+ cleanup(){
+ FO.killTweensOf(this),FO.killTweensOf(this.bg),FO.killTweensOf(this.gridContainer);
+ for(const t of Array.from(this.activePlaceholders))this.removePlaceholder(t);
+ for(const t of this.placedCells)FO.killTweensOf(t),FO.killTweensOf(t.scale);
+ for(const t of[...this.fxContainer.children])FO.killTweensOf(t),FO.killTweensOf(t.scale);
+ this.parent&&this.parent.removeChild(this)}
+ }
+ ;
+ Vt(eti,"RuneDrawRevealOverlay"),Kt(eti,"COLS",4),Kt(eti,"CELL",96),Kt(eti,"GAP",14);
+ let nti=eti;
+ const hti=class t extends u4t{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ constructor(){
+ super(),this.updateLanguage()}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_1343","레이드 상점"))}
+ }
+ ;
+ Vt(hti,"GuildRaidShopSubMenu"),Kt(hti,"instance");
+ let rti=hti;
+ const oti=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"btnRaidCoin"),Kt(this,"btnAd"),Kt(this,"lblAdRemain"),Kt(this,"lblAdCooldown"),Kt(this,"btnGem"),Kt(this,"lblGemRemain"),Kt(this,"lblGemCooldown"),Kt(this,"btnTicket"),Kt(this,"lblTicketHeld"),Kt(this,"lblResultTitle"),Kt(this,"resultArea"),Kt(this,"drawing",!1),Kt(this,"frameCount",0),Kt(this,"stateDay",-1),Kt(this,"midnightRefreshing",!1);
+ const i=rti.getInstance(),s=i.height+14,e=t,n=[{
+ name:SG.getText("GAME_1344","크리스탈 뽑기"),iconType:"E",iconGrade:4}
+ ,{
+ name:SG.getText("GAME_1345","크리스탈 10개 뽑기"),iconType:"A",iconGrade:3}
+ ,{
+ name:SG.getText("GAME_1345","크리스탈 10개 뽑기"),iconType:"D",iconGrade:4}
+ ,{
+ name:SG.getText("GAME_1346","크리스탈 3개 뽑기"),iconType:"B",iconGrade:3}
+ ];
+ for(let t=0;
+ t<n.length;
+ t++){
+ const i=s+t*(e.ROW_H+e.ROW_GAP),h=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ );
+ h.x=5,h.y=i,h.width=630,h.height=e.ROW_H,h.eventMode="static",h.cursor="pointer",h.on("pointerdown",()=>sti.getInstance().showGuide()),this.addChild(h);
+ const r=new Lf;
+ J7t(r,n[t].iconType,n[t].iconGrade,52),r.x=39,r.y=i+.5*(e.ROW_H-52),r.eventMode="none",this.addChild(r);
+ const o=new JD(n[t].name,16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ o.x=140,o.y=i+.5*(e.ROW_H-o.height),o.eventMode="none",this.addChild(o)}
+ const h=Vt(t=>s+t*(e.ROW_H+e.ROW_GAP)+.5*e.ROW_H,"rowCenterY"),r=140,o=489;
+ this.btnAd=new VB("UI_MOVIE_SMALL",SG.getText("GAME_236","광고")),this.btnAd.lbl.iconScale=.6,this.btnAd.color=ZL.BROWN,this.btnAd.width=r,this.btnAd.height=55,this.btnAd.x=o,this.btnAd.y=h(3)-27.5,this.btnAd.onClick=()=>{
+ this.onAdDraw()}
+ ,this.addChild(this.btnAd),this.lblAdRemain=new JD("",11184810,cD.DEFAULT_FONT_OPTION_16),this.lblAdRemain.eventMode="none",this.addChild(this.lblAdRemain),this.lblAdCooldown=new JD("",16737894,cD.DEFAULT_FONT_OPTION_16),this.lblAdCooldown.visible=!1,this.lblAdCooldown.eventMode="none",this.addChild(this.lblAdCooldown),this.btnTicket=new VB("RuneTicket",String(e.TICKET_COST)),this.btnTicket.lbl.iconScale=.72,this.btnTicket.color=VB.BROWN,this.btnTicket.width=r,this.btnTicket.height=55,this.btnTicket.x=o,this.btnTicket.y=h(0)-27.5,this.btnTicket.onClick=()=>{
+ this.onTicketDraw()}
+ ,this.addChild(this.btnTicket),this.lblTicketHeld=new JD("",11184810,cD.DEFAULT_FONT_OPTION_16),this.lblTicketHeld.eventMode="none",this.addChild(this.lblTicketHeld),this.btnRaidCoin=new VB("RaidCoin_on",String(e.RAID_COIN_COST)),this.btnRaidCoin.lbl.iconScale=.8,this.btnRaidCoin.color=VB.BROWN,this.btnRaidCoin.width=r,this.btnRaidCoin.height=55,this.btnRaidCoin.x=o,this.btnRaidCoin.y=h(1)-27.5,this.btnRaidCoin.onClick=()=>{
+ this.onRaidCoinDraw()}
+ ,this.addChild(this.btnRaidCoin),this.btnGem=new VB("UI_GEM",String(e.GEM_COST)),this.btnGem.lbl.iconScale=.8,this.btnGem.color=VB.BROWN,this.btnGem.width=r,this.btnGem.height=55,this.btnGem.x=o,this.btnGem.y=h(2)-27.5,this.btnGem.onClick=()=>{
+ this.onGemDraw()}
+ ,this.addChild(this.btnGem),this.lblGemRemain=new JD("",11184810,cD.DEFAULT_FONT_OPTION_16),this.lblGemRemain.eventMode="none",this.addChild(this.lblGemRemain),this.lblGemCooldown=new JD("",16737894,cD.DEFAULT_FONT_OPTION_16),this.lblGemCooldown.visible=!1,this.lblGemCooldown.eventMode="none",this.addChild(this.lblGemCooldown);
+ const a=s+n.length*(e.ROW_H+e.ROW_GAP)+14;
+ this.lblResultTitle=new JD("",16772744,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblResultTitle.x=20,this.lblResultTitle.y=a,this.addChild(this.lblResultTitle),this.resultArea=new Ge,this.resultArea.x=20,this.resultArea.y=a+32,this.addChild(this.resultArea),this.addChild(i),LM.getInstance().add(this.onFrame,this)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ onFrame(){
+ if(!this.parent)return;
+ if(++this.frameCount%30!=0)return;
+ this.updateCooldowns();
+ const t=Math.floor(tx.time/864e5);
+ this.stateDay>=0&&t!==this.stateDay&&!this.midnightRefreshing&&(this.midnightRefreshing=!0,this.setData().finally(()=>{
+ this.midnightRefreshing=!1}
+ ))}
+ async setData(){
+ rti.getInstance().updateLanguage(),await OQt.getInstance().ensureLoaded(),await t9t.ensureUiRaidSheet(),await KQt.getInstance().ensureLoaded(!0),this.parent&&(this.lblResultTitle.text="",this.resultArea.removeChildren(),this.refreshButtons())}
+ refreshButtons(){
+ const i=KQt.getInstance(),s=i.getDrawState(),e=t;
+ this.stateDay=Math.floor(tx.time/864e5),this.btnRaidCoin.activated=i.getRaidCoin()>=e.RAID_COIN_COST&&!this.drawing,this.btnAd.activated=s.adRemain>0&&!this.drawing,this.btnGem.activated=s.gemRemain>0&&!this.drawing,this.updateCooldowns(),this.btnTicket.activated=s.ticket>0&&!this.drawing,this.btnTicket.text=String(s.ticket>0?Math.min(s.ticket,e.TICKET_COST):e.TICKET_COST),this.lblTicketHeld.text=`x${
+ s.ticket}
+ `,this.placeLeftOf(this.lblTicketHeld,this.btnTicket)}
+ placeLeftOf(t,i){
+ t.x=i.x-t.width-8,t.y=i.y+.5*(i.height-t.height)}
+ updateCooldowns(){
+ const i=t,s=KQt.getInstance().getDrawState();
+ this.updateCooldownRow(s.adRemain,i.AD_DAILY_MAX,this.lblAdRemain,this.lblAdCooldown,this.btnAd),this.updateCooldownRow(s.gemRemain,i.GEM_DAILY_MAX,this.lblGemRemain,this.lblGemCooldown,this.btnGem)}
+ updateCooldownRow(t,i,s,e,n){
+ const h=n.x-8,r=n.y+.5*n.height;
+ if(s.text=`${
+ t}
+ /${
+ i}
+ `,t>0)return e.visible=!1,s.x=h-s.width,void(s.y=r-.5*s.height);
+ const o=864e5,a=tx.time,c=Math.max(0,(Math.floor(a/o)+1)*o-a),l=Math.floor(c/36e5),u=Math.floor(c%36e5/6e4);
+ e.text=`${
+ String(l).padStart(2,"0")}
+ :${
+ String(u).padStart(2,"0")}
+ `,e.visible=!0,e.x=h-e.width,e.y=r-e.height-1,s.x=h-s.width,s.y=r+1}
+ async onRaidCoinDraw(){
+ if(this.drawing)return;
+ const i=t;
+ KQt.getInstance().getRaidCoin()<i.RAID_COIN_COST?u2.getInstance().showMessage(SG.getText("GAME_1347","레이드 코인이 부족합니다")):await this.doDraw("raidCoin")}
+ async onGemDraw(){
+ this.drawing||(KQt.getInstance().getDrawState().gemRemain<=0?u2.getInstance().showMessage(SG.getText("GAME_244","오늘 최대 횟수를 초과했습니다.")):await this.doDraw("gem"))}
+ async onTicketDraw(){
+ this.drawing||(KQt.getInstance().getDrawState().ticket<=0?u2.getInstance().showMessage(SG.getText("GAME_1348","뽑기권이 부족합니다")):await this.doDraw("ticket"))}
+ async onAdDraw(){
+ try{
+ const t=sjt.getInstance().checkApproved();
+ if(0==t.approved)return void wG.getInstance().show(t.errorMessage)}
+ catch(t){
+ return void wG.getInstance().show(SG.getText("AGE_RANGE_3","현재 사용 중인 기기 또는 OS 환경에서는 연령 정보를 확인할 수 없어, 일부 기능이 ‘안전 모드’로 제한됩니다."))}
+ if(!this.drawing)if(KQt.getInstance().getDrawState().adRemain<=0)wG.getInstance().show(SG.getText("GAME_244","오늘 최대 횟수를 초과했습니다."));
+ else{
+ if(ML.canSkipAds)return CU.trackAd("ad_skip","runeDraw"),void(await this.doDraw("ad"));
+ CU.trackAd("ad_try","runeDraw"),await jL(async()=>{
+ CU.trackAd("ad_success","runeDraw"),await this.doDraw("ad")}
+ ,void 0,()=>{
+ CU.trackAd("ad_fail","runeDraw")}
+ )}
+ }
+ async doDraw(t){
+ if(this.drawing)return;
+ this.drawing=!0,this.refreshButtons();
+ const i=KQt.getInstance(),s=await i.draw(t);
+ this.drawing=!1,this.parent&&(this.refreshButtons(),s.ok&&s.runes?(void 0!==s.gem&&(ML.gem=s.gem,kF.getInstance().updateAll()),void 0!==s.raidCoin&&kF.getInstance().updateRaidCoin(),this.showResult(s.runes),VA.stage.addChild(new nti(s.runes,()=>{
+ }
+ ))):u2.getInstance().showMessage(KQt.errorText(s.error)??SG.getText("GAME_1349","뽑기에 실패했습니다")))}
+ showResult(i){
+ this.lblResultTitle.text=`${
+ SG.getText("GAME_1350","뽑기 결과")}
+  ×${
+ i.length}
+ `,this.resultArea.removeChildren();
+ const s=t.CHIP;
+ for(let e=0;
+ e<i.length;
+ e++){
+ const n=i[e],h="ABCDEF"[Math.floor(n.kindNum/100)-1]??"A",r=new Ge,o=new Lf;
+ J7t(o,h,n.grade,s),n.subId>=0&&o.circle(8,8,3.5).fill({
+ color:16765562}
+ ),o.eventMode="none",r.addChild(o),r.x=e%10*(s+t.CHIP_GAP),r.y=Math.floor(e/10)*(s+t.CHIP_GAP),r.eventMode="static",r.cursor="pointer",r.hitArea=new Ri(0,0,s,s),r.on("pointertap",()=>this.showRuneDetail(n)),this.resultArea.addChild(r)}
+ }
+ showRuneDetail(t){
+ const i=OQt.getInstance(),s=i.getRune(t.kindNum);
+ if(!s)return;
+ let e=i.formatRuneDesc(s,t.grade);
+ if(t.subId>=0){
+ const s=i.getSub(t.subId);
+ s&&(e+=`  ·${
+ SG.getText("GAME_1305","부옵")}
+  ${
+ i.getSubDesc(s)}
+  +${
+ i.getSubValue(s,t.grade)}
+ `)}
+ u2.getInstance().showMessage(e)}
+ updateLanguage(){
+ rti.getInstance().updateLanguage()}
+ get className(){
+ return"GuildRaidShopSubView"}
+ }
+ ;
+ Vt(oti,"GuildRaidShopSubView"),Kt(oti,"instance"),Kt(oti,"ROW_H",80),Kt(oti,"ROW_GAP",8),Kt(oti,"CHIP",52),Kt(oti,"CHIP_GAP",6),Kt(oti,"RAID_COIN_COST",1e3),Kt(oti,"GEM_COST",2e3),Kt(oti,"GEM_DAILY_MAX",2),Kt(oti,"AD_DAILY_MAX",3),Kt(oti,"TICKET_COST",10);
+ let ati=oti;
+ const cti=class t extends qO{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"portal"),Kt(this,"portalRing"),Kt(this,"lblTitle"),Kt(this,"lblDesc"),this.bg=new He(is.EMPTY),this.addChild(this.bg),this.portal=new He(is.EMPTY),this.portal.anchor.set(.5),this.addChild(this.portal),this.portalRing=new Lf,this.portalRing.circle(0,0,t.PORTAL_RING_R).stroke({
+ width:4,color:16765562,alpha:1}
+ ),this.portalRing.eventMode="none",this.portalRing.visible=!1,this.addChild(this.portalRing),FO.to(this.portal.scale,{
+ x:1.06,y:1.06,duration:.9,yoyo:!0,repeat:-1,ease:"sine.inOut"}
+ ),FO.timeline({
+ repeat:-1,repeatDelay:.7}
+ ).fromTo(this.portalRing,{
+ alpha:.85}
+ ,{
+ alpha:0,duration:1.2,ease:"power1.out"}
+ ,0).fromTo(this.portalRing.scale,{
+ x:.8,y:.8}
+ ,{
+ x:1.45,y:1.45,duration:1.2,ease:"power1.out"}
+ ,0),this.lblTitle=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_32),this.lblTitle.x=30,this.addChild(this.lblTitle),this.lblDesc=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblDesc.x=this.lblTitle.x+2,this.addChild(this.lblDesc)}
+ setData(i){
+ var s;
+ this.data=i;
+ const e=QA.getTexture("UI_RAID",`Raid${
+ i.main}
+ .png`)??QA.getTexture("UI_RAID","Raid1.png");
+ e&&(this.bg.texture=e);
+ const n=t.ROW_WIDTH/t.BANNER_NATIVE_W;
+ this.bg.scale.set(n),this.bg.tint=i.live?16777215:6710886;
+ const h=QA.getTexture("UI_RAID","RaidPortal.png");
+ h&&(this.portal.texture=h),this.portal.visible=i.live;
+ const r=(null==(s=this.portal.texture.orig)?void 0:s.width)??115;
+ if(this.portal.x=t.ROW_WIDTH-t.PORTAL_MARGIN_R-.5*r,this.portal.y=.5*this.bg.height,this.portalRing.visible=i.live,this.portalRing.position.set(this.portal.x,this.portal.y),this.lblTitle.text=i.name,this.lblTitle.alpha=i.live?1:.6,i.live?i.hasOpen?this.lblDesc.text=SG.getText("GAME_938","진행중"):this.lblDesc.text="":this.lblDesc.text="coming soon",this.lblDesc.textColor=i.hasOpen?16733508:11184810,this.lblDesc.text){
+ const t=this.lblTitle.height+4+this.lblDesc.height;
+ this.lblTitle.y=.5*(this.bg.height-t),this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+4,this.lblDesc.visible=!0}
+ else this.lblTitle.y=.5*(this.bg.height-this.lblTitle.height),this.lblDesc.visible=!1}
+ onEnterClick(){
+ const t=this.data;
+ t&&(t.live?t.onEnter(t.main):u2.getInstance().showMessage("coming soon"))}
+ onClick(t,i){
+ this.onEnterClick()}
+ get height(){
+ return t.ROW_HEIGHT}
+ }
+ ;
+ Vt(cti,"GuildRaidMainItemRenderer"),Kt(cti,"ROW_WIDTH",630),Kt(cti,"BANNER_NATIVE_W",616),Kt(cti,"BANNER_NATIVE_H",150),Kt(cti,"ROW_HEIGHT",Math.round(cti.BANNER_NATIVE_H*cti.ROW_WIDTH/cti.BANNER_NATIVE_W)+4),Kt(cti,"PORTAL_MARGIN_R",24),Kt(cti,"PORTAL_RING_R",52);
+ let lti=cti;
+ const uti=class t extends u4t{
+ constructor(){
+ super(),Kt(this,"btnEmblem"),Kt(this,"btnShop"),Kt(this,"btnRecord"),Kt(this,"btnGuide"),this.btnShop=new ZL("상점"),this.btnShop.color=ZL.BROWN,this.btnShop.width=90,this.btnShop.height=44,this.btnShop.x=this.bg.width-this.btnShop.width-10,this.btnShop.y=.5*(this.bg.height-this.btnShop.height),this.btnShop.onClick=()=>{
+ wti.getInstance().goShop()}
+ ,this.addChild(this.btnShop),this.btnEmblem=new ZL("휘장"),this.btnEmblem.color=ZL.BROWN,this.btnEmblem.width=90,this.btnEmblem.height=44,this.btnEmblem.x=this.btnShop.x-this.btnEmblem.width-5,this.btnEmblem.y=this.btnShop.y,this.btnEmblem.onClick=()=>{
+ wti.getInstance().goEmblem()}
+ ,this.addChild(this.btnEmblem),this.btnRecord=new ZL("기록"),this.btnRecord.color=ZL.BROWN,this.btnRecord.width=90,this.btnRecord.height=44,this.btnRecord.x=this.btnEmblem.x-this.btnRecord.width-5,this.btnRecord.y=this.btnShop.y,this.btnRecord.onClick=()=>{
+ wti.getInstance().goRecord()}
+ ,this.addChild(this.btnRecord),this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.on("pointertap",()=>{
+ A9t.getInstance().showGuide()}
+ ),this.addChild(this.btnGuide),this.updateLanguage()}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ updateLanguage(){
+ this.setTitle(SG.getText("GAME_630","길드레이드")),this.btnShop.text=SG.getText("COMMON_356","상점"),this.btnEmblem.text=SG.getText("GAME_1260","휘장"),this.btnRecord.text=SG.getText("COMMON_39","기록"),this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+8,this.btnGuide.y=.5*(this.bg.height-this.btnGuide.height)+t.GUIDE_NUDGE_Y}
+ }
+ ;
+ Vt(uti,"GuildRaidSubMenu"),Kt(uti,"instance"),Kt(uti,"GUIDE_NUDGE_Y",3);
RaidBossGuidePopup 1 hunks, 581 statements
- super(),zt(this,"options",null),zt(this,"selectedSquads",null),zt(this,"requestPending",!1),zt(this,"lblTitle"),zt(this,"bossIcon"),zt(this,"lblBossName"),zt(this,"lblBossDesc"),zt(this,"lblStatus"),zt(this,"hpBarBg"),zt(this,"hpBarFill"),zt(this,"lblHp"),zt(this,"lblSquadTitle"),zt(this,"lblSquadHint"),zt(this,"heroBtns",[]),zt(this,"soldierBtns",[]),zt(this,"btnFormation"),zt(this,"btnBattle"),this.bg.height<880&&(this.y=Math.max(0,KA.safeHeight-880),this.bg.height=KA.safeHeight-this.y),this.lblTitle=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblTitle.x=20,this.lblTitle.y=52,this.addChild(this.lblTitle),this.bossIcon=new We,this.bossIcon.x=28,this.bossIcon.y=this.lblTitle.y+50,this.addChild(this.bossIcon),this.lblBossName=new YD("",16772744,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblBossName.x=135,this.lblBossName.y=this.bossIcon.y+4,this.addChild(this.lblBossName),this.lblBossDesc=new YD("",13421772,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblBossDesc.x=this.lblBossName.x,this.lblBossDesc.y=this.lblBossName.y+30,this.lblBossDesc.setWrapWidth(470),this.addChild(this.lblBossDesc),this.lblStatus=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblStatus.x=20,this.lblStatus.y=this.bossIcon.y+105,this.lblStatus.setWrapWidth(600),this.addChild(this.lblStatus),this.hpBarBg=new Gf,this.hpBarBg.x=20,this.hpBarBg.y=this.lblStatus.y+48,this.addChild(this.hpBarBg),this.hpBarFill=new Gf,this.hpBarFill.x=this.hpBarBg.x,this.hpBarFill.y=this.hpBarBg.y,this.addChild(this.hpBarFill),this.lblHp=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblHp.eventMode="none",this.addChild(this.lblHp),this.lblSquadTitle=new YD("공격 편성",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblSquadTitle.x=20,this.lblSquadTitle.y=this.hpBarBg.y+46,this.addChild(this.lblSquadTitle),this.lblSquadHint=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblSquadHint.x=20,this.lblSquadHint.y=this.lblSquadTitle.y+28,this.lblSquadHint.setWrapWidth(600),this.addChild(this.lblSquadHint);
- const i=this.lblSquadHint.y+45,s=i+78;
+ super(),Kt(this,"content"),this.outSideClickHide=!0,this.width=t.POPUP_WIDTH,this.content=new Ge,this.content.x=20,this.content.y=t.CONTENT_TOP_Y,this.contentContainer.addChild(this.content)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showBoss(i){
+ if(this.title=PJt.getInstance().getBossName(i)||SG.getText("GAME_1376","보스 정보"),!QA.hasSheet("UI_RAID")){
+ const t="ktx2";
+ await QA.generateTexture("UI_RAID",t,!1)}
+ this.rebuildContent(i),this.height=t.CONTENT_TOP_Y+this.content.height+t.BOTTOM_PAD,super.show()}
+ buildPatternText(i){
+ const s=5*(i.main-1)+i.sub,e=(i.desc||"").split("\n").map(t=>t.replace(/^\s*#\s*/,"").trim()).filter(t=>t.length>0),n=!!t.PATTERN_FALLBACK[`RaidBoss${
+ s}
+ _1`]||""!==SG.getText(`RaidBoss${
+ s}
+ _1`,""),h=[];
+ for(let r=1;
+ r<=t.PATTERN_MAX_LINES;
+ r++){
+ const i=`RaidBoss${
+ s}
+ _${
+ r}
+ `,o=SG.getText(i,t.PATTERN_FALLBACK[i]??(n?"":e[r-1]??""));
+ if(!o)break;
+ h.push(`# ${
+ o}
+ `)}
+ return 0===h.length?i.desc||SG.getText("GAME_1378","보스 정보가 없습니다."):h.join("\n")}
+ rebuildContent(i){
+ for(const t of this.content.removeChildren())t.destroy({
+ children:!0}
+ );
+ const s=t.POPUP_WIDTH-40;
+ let e=0;
+ const n=new JD(SG.getText("GAME_1377","공격 패턴"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ n.y=e,this.content.addChild(n),e+=30;
+ const h=new AB("#",s-24,16,13421772,2,2);
+ h.text=this.buildPatternText(i),h.y=e,this.content.addChild(h),e+=h.height+24;
+ const r=Czt[String(i.plusTribe).toLowerCase()],o=Czt[String(i.minusTribe).toLowerCase()],a=!!r&&i.plusValue>0,c=!!o&&i.minusValue>0;
+ if(a||c){
+ const t=new JD(SG.getText("GAME_1379","종족 상성"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ t.y=e,this.content.addChild(t),e+=30;
+ const s=25,n=new Ge;
+ let h=0;
+ const l=Vt((t,i,e)=>{
+ const r=new He(QA.getTexture("UI_Ekkorr",t));
+ r.width=s,r.height=s,r.x=h,n.addChild(r);
+ const o=new JD(i,e,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ o.x=h+s+6,o.y=.5*(s-o.height),n.addChild(o),h=o.x+o.width+32}
+ ,"addEntry");
+ a&&l(r,`+${
+ i.plusValue}
+ %`,8313175),c&&l(o,`-${
+ i.minusValue}
+ %`,16743022),n.y=e,this.content.addChild(n),e+=s+24}
+ const l=Nzt(i.resistType);
+ if(l&&i.showRecommend&&i.recommendResist>0){
+ const t=new JD(SG.getText("GAME_1382","속성 저항"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ t.y=e,this.content.addChild(t),e+=30;
+ const n=new JD(SG.getValueReplaceMulti("GAME_1384",["\\{
+ 0\\}
+ ","\\{
+ 1\\}
+ "],[l,i.recommendResist],`# 추천 ${
+ l}
+ 저항: ${
+ i.recommendResist}
+ `),13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ n.y=e,n.setWrapWidth(s),this.content.addChild(n),e+=n.height+24}
+ const u=Object.entries(i.vulns??{
+ }
+ ).filter(([,t])=>t>0);
+ if(0===u.length)return;
+ const d=new JD(SG.getText("GAME_1385","취약 속성"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ d.y=e,this.content.addChild(d),e+=30;
+ const f=new JD(SG.getValueReplace("GAME_1386","\\{
+ 0\\}
+ ",i.maxPerWeakpoint,`보스는 모든 상태이상에 면역이지만, 아래 속성의 공격이 명중할 때마다 받는 피해가 중첩됩니다. (속성당 최대 +${
+ i.maxPerWeakpoint}
+ %)`),13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ f.y=e,f.setWrapWidth(s),this.content.addChild(f),e+=f.height+14;
+ const p=QA.hasSheet("UI_RAID"),g=Math.round(1.3*t.ICON_SIZE);
+ for(const[t,m]of u){
+ if(p&&_zt[t]){
+ const i=new He(QA.getTexture("UI_RAID",_zt[t]));
+ i.width=g,i.height=g,i.y=e,this.content.addChild(i)}
+ const i=new JD(SG.getValueReplaceMulti("GAME_1387",["\\{
+ 0\\}
+ ","\\{
+ 1\\}
+ "],[Szt(t),m],`${
+ Szt(t)}
+  — 공격 명중당 받는 피해 +${
+ m}
+ % 중첩`),16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ i.x=g+12,i.y=e,this.content.addChild(i);
+ let n=e+i.height+4;
+ const h=wx.getInstance().bookList.filter(i=>i.kindNum<1e3&&0===i.evolStage&&i.raidCc.includes(t));
+ if(h.length>0){
+ const t=.25,i=g+12,e=s-i;
+ let r=0,o=24;
+ const a=[];
+ for(const s of h){
+ const i=new Y2;
+ i.setMode(z2.BOOK),i.setDataWithKindNum(s.kindNum),i.scale.set(t),i.eventMode="none",i.x=r,a.push(i),r+=i.width+4,o=Math.max(o,i.height)}
+ const c=new B7t(e,o+4);
+ c.x=i,c.y=n;
+ for(const s of a)c.addItem(s);
+ c.setContentWidth(r),this.content.addChild(c),n+=o+4}
+ e=Math.max(n,e+g)+12}
+ }
+ getDefaultPositionY(){
+ return.47*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(U7t,"RaidBossGuidePopup"),Kt(U7t,"_instance"),Kt(U7t,"POPUP_WIDTH",620),Kt(U7t,"CONTENT_TOP_Y",80),Kt(U7t,"BOTTOM_PAD",30),Kt(U7t,"ICON_SIZE",36),Kt(U7t,"PATTERN_MAX_LINES",10),Kt(U7t,"PATTERN_FALLBACK",{
+ RaidBoss1_1:"집게 후려치기 — 적에게 달려들어 집게로 주변을 후려칩니다.",RaidBoss1_2:"끌어당기기 — 앞쪽으로 적들을 빨아들여 한곳에 모은 뒤 터뜨리고 중독시킵니다.",RaidBoss1_3:"독침 난사 — 뒤로 물러나며 독침을 퍼붓고, 원거리 부대 자리에 독안개를 남깁니다.",RaidBoss1_4:"꼬리 내려찍기 — 꼬리로 내려찍어 맞은 적을 기절시키고 주변을 밀쳐냅니다.",RaidBoss1_5:"독안개 위에 서 있으면 계속 피해를 입습니다 — 드래그해서 군단을 빼세요.",RaidBoss2_1:"공중에 떠 있어 근접 병사의 공격이 닿지 않습니다 — 원거리 부대와 작살차로 공격하세요.",RaidBoss2_2:"할퀴기 — 군단 위로 날아들어 발톱으로 연달아 할퀴어 댑니다.",RaidBoss2_3:"내려찍기 — 하늘에서 군단 위로 내리꽂으며 주변 적들을 날려버립니다.",RaidBoss2_4:"강풍 — 뒤로 물러나 날개로 강풍을 일으켜 앞쪽 적들을 멀리 날려버립니다.",RaidBoss2_5:"깃털 폭풍 — 사방으로 깃털을 퍼부어 다수의 적을 꿰뚫습니다.",RaidBoss2_6:"강풍이후 회오리 바람을 소환하여, 지속데미지를 줍니다  — 드래그해서 군단을 빼세요.",RaidBoss3_1:"내리치기 — 주변 바닥을 내리쳐 큰 피해를 주고 적들을 튕겨냅니다.",RaidBoss3_2:"돌진 — 적이 모인 곳으로 돌진하며 경로의 적들을 연달아 짓밟습니다.",RaidBoss3_3:"돌기둥 — 주변 땅에서 돌기둥들이 솟아올라 적들을 강하게 띄워버립니다.",RaidBoss3_4:"낙석 — 붉은 원으로 표시된 지역에 바위를 퍼붓습니다.",RaidBoss3_5:"순간이동 — 모습을 감췄다가 다른 곳에 나타나며 주변을 강하게 밀쳐냅니다.",RaidBoss3_6:"낙석의 붉은 원이 보이면 드래그해서 군단을 빼세요 — 서 있으면 피해가 계속 쌓입니다.",RaidBoss4_1:"마법 탄막 — 마법진에서 불덩이 수십 발을 쏘아 병사들을 쫓아갑니다.",RaidBoss4_2:"회오리 — 회오리로 주변 적을 빨아들이며 연속 피해를 줍니다.",RaidBoss4_3:"에너지 난사 — 주변의 적 여럿을 골라 에너지로 강타합니다.",RaidBoss4_4:"번개 마법진 — 원거리 부대 자리에 마법진을 깔고 번개를 계속 떨어뜨립니다.",RaidBoss4_5:"순간이동 — 제자리에서 싸우는 마법사지만, 가끔 다른 곳으로 순간이동합니다.",RaidBoss4_6:"번개 마법진 위에 서 있으면 계속 벼락을 맞습니다 — 드래그해서 군단을 빼세요.",RaidBoss5_1:"창 회전 베기 — 적에게 파고들어 창을 크게 휘둘러 두 번 벱니다.",RaidBoss5_2:"내려찍기 — 뛰어올라 앞쪽을 내려찍고 적들을 밀쳐냅니다.",RaidBoss5_3:"공중 돌진 — 날아오르며 직선으로 돌진해 경로의 적들을 연달아 벱니다.",RaidBoss5_4:"드래곤 소환 — 드래곤을 불러내 군단 위에 브레스를 뿜게 합니다. 작살로 시전을 끊을 수 있습니다.",RaidBoss5_5:"공중 강습 — 하늘로 사라져 창을 퍼부은 뒤, 붉은 원 위치로 내리꽂습니다. 떨어진 자리엔 불길이 남습니다.",RaidBoss5_6:"붉은 원이 보이면 드래그해서 군단을 빼세요"}
+ );
+ let F7t=U7t;
+ const H7t=[10395294,5025616,4367861,11225020,16754470,15684432],W7t={
+ TANK:14175295,DEALER:3063663,HEALER:16763212,SUPPORT:5994751,BREAKER:11754495,CROSSBOW:10135480}
+ ,$7t=12564136;
+ function j7t(t,i){
+ for(const e of t.removeChildren())e.destroy({
+ children:!0}
+ );
+ let s=0;
+ for(const e of i){
+ if(!e.label)continue;
+ const i=new JD("",e.color,{
+ fontFamily:"Arial",fontSize:10,fontWeight:"bold"}
+ );
+ i.text=e.label,i.textColor=e.color;
+ const n=Math.ceil(i.width)+10,h=new Lf;
+ h.roundRect(s,0,n,14,7).fill({
+ color:e.color,alpha:.18}
+ ),h.eventMode="none",t.addChild(h),i.x=s+5,i.y=.5*(14-i.height),i.eventMode="none",t.addChild(i),s+=n+4}
+ return s}
+ function V7t(t,i,s,e){
+ return j7t(t,[{
+ label:i,color:$7t}
+ ,{
+ label:s,color:e}
+ ])}
+ function K7t(t,i,s){
+ const e=t>>16&255,n=t>>8&255,h=255&t,r=i>>16&255,o=i>>8&255,a=255&i;
+ return Math.round(e+(r-e)*s)<<16|Math.round(n+(o-n)*s)<<8|Math.round(h+(a-h)*s)}
+ function z7t(t){
+ const i="ABCDEF".indexOf(t);
+ if(i<0)return 8947848;
+ const s=OQt.getInstance(),e=5===i?s.getEmblemBySlot("crossbow"):s.getEmblemByCorpIndex(i);
+ return W7t[(null==e?void 0:e.role)??""]??8947848}
+ Vt(j7t,"fillTagChips"),Vt(V7t,"fillSkillPrefixChips"),Vt(K7t,"mixColor"),Vt(z7t,"runeTypeColor");
+ const q7t={
+ A:"tnk",B:"dps",C:"hps",D:"deb",E:"buf",F:"bal"}
+ ;
+ function Y7t(t,i){
+ const s=q7t[t];
+ return s?`rune_${
+ s}
+ _0${
+ Math.max(1,Math.min(6,Math.floor(i)))}
+ .png`:null}
+ function X7t(t,i,s,e){
+ const n=Vt((t,n)=>{
+ const h=[];
+ for(let r=0;
+ r<t;
+ r++){
+ const o=n+r*Math.PI*2/t;
+ h.push(i+Math.cos(o)*e,s+Math.sin(o)*e)}
+ return h}
+ ,"regular");
+ switch(t){
+ case"A":return[i-e,s-e,i+e,s-e,i+e,s+e,i-e,s+e];
+ case"B":return n(5,-Math.PI/2);
+ case"C":default:return null;
+ case"D":return[i,s-e,i+e,s,i,s+e,i-e,s];
+ case"E":return n(3,-Math.PI/2);
+ case"F":return n(6,-Math.PI/2)}
+ }
+ function J7t(t,i,s,e,n){
+ const h=H7t[Math.max(0,s-1)]??10395294,r=(null==n?void 0:n.dim)?1314828:(null==n?void 0:n.selected)?3813413:2366741,o=void 0===(null==n?void 0:n.tint)||(null==n?void 0:n.dim)?r:K7t(r,n.tint,.1),a=QA.hasSheet("UI_RAID")?QA.getTexture("UI_RAID","WhiteRect.png"):null;
+ a?t.texture(a,o,0,0,e,e):t.roundRect(0,0,e,e,10).fill({
+ color:o,alpha:.95}
+ ),(null==n?void 0:n.selected)&&t.roundRect(0,0,e,e,10).stroke({
+ width:2.5,color:16763904,alpha:1}
+ );
+ const c=Y7t(i,s);
+ if(c&&QA.hasSheet("UI_RAID")){
+ const i=QA.getTexture("UI_RAID",c);
+ if(i){
+ const s=.74*e/Math.max(1,i.width,i.height),h=i.width*s,r=i.height*s;
+ return void t.texture(i,(null==n?void 0:n.dim)?7829367:16777215,(e-h)/2,(e-r)/2,h,r)}
+ }
+ const l=e/2,u=e/2,d=.32*e,f=(null==n?void 0:n.dim)?.45:1,p=X7t(i,l,u,d);
+ p?t.poly(p).fill({
+ color:h,alpha:f}
+ ).stroke({
+ width:2,color:0,alpha:.5*f}
+ ):t.circle(l,u,d).fill({
+ color:h,alpha:f}
+ ).stroke({
+ width:2,color:0,alpha:.5*f}
+ )}
+ Vt(Y7t,"runeIconFrame"),Vt(X7t,"runeShapePoints"),Vt(J7t,"drawRuneIcon");
+ const Q7t={
+ TANK:14175295,DEALER:3063663,HEALER:16763212,SUPPORT:5994751,BREAKER:11754495,CROSSBOW:10135480}
+ ,Z7t=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"slot",-1),Kt(this,"g",new Lf),Kt(this,"icon",new He),Kt(this,"cardBg",null),Kt(this,"socketBg",null),Kt(this,"onTap",null),this.addChild(this.g),this.icon.anchor.set(.5),this.icon.eventMode="none",this.icon.visible=!1,this.addChild(this.icon),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ri(0,0,t.W,t.H),this.on("pointerup",()=>{
+ var t;
+ this.slot>=0&&(null==(t=this.onTap)||t.call(this,this.slot))}
+ )}
+ setData(i){
+ this.slot=i;
+ const s=OQt.getInstance(),e=i===KQt.CROSSBOW_SLOT?s.getEmblemBySlot("crossbow"):s.getEmblemByCorpIndex(i);
+ this.redraw(e),QA.hasSheet("UI_RAID")||t.ensureSheet(this)}
+ static async ensureUiRaidSheet(){
+ return!!QA.hasSheet("UI_RAID")||(t.sheetLoading||(t.sheetLoading=QA.generateTexture("UI_RAID","ktx2",!1).catch(()=>null)),await t.sheetLoading,QA.hasSheet("UI_RAID"))}
+ static async ensureSheet(i){
+ await t.ensureUiRaidSheet()&&!i.destroyed&&i.refresh()}
+ refresh(){
+ this.slot>=0&&this.setData(this.slot)}
+ redraw(i){
+ const s=t.W,e=t.ICON_H,n=Q7t[(null==i?void 0:i.role)??""]??8947848,h=this.g;
+ h.clear();
+ const r=t.H,o=K7t(3090209,n,.13),a=K7t(o,0,.35);
+ if(QA.hasSheet("UI_RAID")){
+ if(!this.cardBg||!this.socketBg){
+ const t=QA.getTexture("UI_RAID","WhiteRect.png"),i=Vt(()=>new TM({
+ texture:t,leftWidth:14,topHeight:14,rightWidth:14,bottomHeight:14}
+ ),"makeSlice");
+ this.cardBg=i(),this.cardBg.eventMode="none",this.addChildAt(this.cardBg,0),this.socketBg=i(),this.socketBg.eventMode="none",this.addChildAt(this.socketBg,1)}
+ this.cardBg.visible=!0,this.cardBg.width=s,this.cardBg.height=r,this.cardBg.tint=o,this.cardBg.alpha=.95,this.socketBg.visible=!0,this.socketBg.position.set(14,e+3),this.socketBg.width=s-28,this.socketBg.height=32,this.socketBg.tint=a}
+ else this.cardBg&&(this.cardBg.visible=!1),this.socketBg&&(this.socketBg.visible=!1),h.roundRect(0,0,s,r,12).fill({
+ color:o,alpha:.95}
+ ),h.roundRect(14,e+3,s-28,32,8).fill({
+ color:a,alpha:1}
+ );
+ h.roundRect(8,12,4,e-18,2).fill({
+ color:n,alpha:1}
+ );
+ const c=.5*s,l=.5*e,u=LJt[(null==i?void 0:i.role)??""],d=!!i&&!!u&&QA.hasSheet("UI_RAID");
+ if(this.icon.visible=d,d){
+ this.icon.texture=QA.getTexture("UI_RAID",u);
+ const t=this.icon.texture,i=92/Math.max(1,t.height);
+ this.icon.scale.set(i),this.icon.position.set(c,l)}
+ else if(i){
+ const t=30,s=X7t(i.runeType,c,l,t);
+ s?h.poly(s).fill({
+ color:n,alpha:.9}
+ ).stroke({
+ width:2,color:0,alpha:.5}
+ ):h.circle(c,l,t).fill({
+ color:n,alpha:.9}
+ ).stroke({
+ width:2,color:0,alpha:.5}
+ )}
+ const f=this.slot>=0?KQt.getInstance().getSlotRunes(this.slot):[],p=.5*(s-(KQt.MAX_RUNES-1)*t.DOT_GAP),g=e+20,m=QA.hasSheet("UI_RAID");
+ for(let w=0;
+ w<KQt.MAX_RUNES;
+ w++){
+ const s=p+w*t.DOT_GAP,e=f[w];
+ if(e){
+ const n=i?Y7t(i.runeType,e.grade):null,r=m&&n?QA.getTexture("UI_RAID",n):null;
+ if(r){
+ const i=r.width*t.RUNE_MINI_SCALE,e=r.height*t.RUNE_MINI_SCALE;
+ h.texture(r,16777215,s-i/2,g-e/2,i,e)}
+ else h.circle(s,g,t.DOT_R).fill({
+ color:H7t[e.grade-1]??16777215}
+ )}
+ else{
+ const e=i?Y7t(i.runeType,1):null,n=m&&e?QA.getTexture("UI_RAID",e):null;
+ if(n){
+ const i=n.width*t.RUNE_MINI_SCALE,e=n.height*t.RUNE_MINI_SCALE;
+ h.texture(n,t.SOCKET_TINT,s-i/2,g-e/2,i,e)}
+ else h.circle(s,g,t.DOT_R-.5).stroke({
+ width:1.5,color:8947848,alpha:.8}
+ )}
+ }
+ }
+ }
+ ;
+ Vt(Z7t,"EmblemBadge"),Kt(Z7t,"W",190),Kt(Z7t,"H",156),Kt(Z7t,"ICON_H",118),Kt(Z7t,"DOT_R",8),Kt(Z7t,"DOT_GAP",28),Kt(Z7t,"RUNE_MINI_SCALE",.3),Kt(Z7t,"SOCKET_TINT",8682606),Kt(Z7t,"sheetLoading",null);
+ let t9t=Z7t;
+ const i9t=class t extends qO{
+ constructor(){
+ super(),Kt(this,"cells",new Ge);
+ const i=new Lf;
+ i.rect(0,0,640,t.ROW_H).fill({
+ color:0,alpha:.001}
+ ),i.eventMode="none",this.addChild(i),this.addChild(this.cells)}
+ setData(i){
+ this.data=i;
+ const s=i;
+ this.cells.removeChildren();
+ const e=t.CHIP;
+ for(let n=0;
+ n<s.cells.length;
+ n++){
+ const i=s.cells[n],h="ABCDEF"[Math.floor(i.kindNum/100)-1]??"A",r=new Ge,o=new Lf;
+ if(J7t(o,h,i.grade,e,{
+ selected:i.selected,dim:i.dim,tint:z7t(h)}
+ ),i.subId>=0&&o.circle(8,8,3.5).fill({
+ color:16765562}
+ ),r.addChild(o),i.equipped){
+ const t=(QA.hasSheet("UI_RAID")?QA.getTexture("UI_RAID","RedDot.png"):null)??QA.getTexture("UI_Ekkorr","Icon_RedDot_Red"),i=new He(t);
+ i.anchor.set(.5),i.width=14,i.height=14,i.x=e-7,i.y=7,i.eventMode="none",r.addChild(i)}
+ const a=i.countText??(i.vos.length>=2?`×${
+ i.vos.length}
+ `:null);
+ if(a){
+ const t=new JD(a,i.dim?7829367:16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ t.x=e-t.width-3,t.y=e-20,t.eventMode="none",r.addChild(t)}
+ if((i.pickedCount??0)>0){
+ const t=new JD(`${
+ i.pickedCount}
+ `,16769356,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ t.x=e-t.width-5,t.y=1,t.eventMode="none",r.addChild(t)}
+ r.x=t.START_X+n*(e+t.GAP),r.y=2,r.eventMode="none",this.cells.addChild(r)}
+ }
+ onClick(i,s){
+ const e=this.data;
+ if(!e)return;
+ const n=t.CHIP,h=i-t.START_X,r=n+t.GAP,o=Math.floor(h/r);
+ if(o<0||o>=e.cells.length)return;
+ if(h-o*r>n)return;
+ const a=e.cells[o];
+ a.onTap(a)}
+ }
+ ;
+ Vt(i9t,"RuneRowItemRenderer"),Kt(i9t,"COLS",10),Kt(i9t,"CHIP",52),Kt(i9t,"GAP",6),Kt(i9t,"ROW_H",58),Kt(i9t,"START_X",.5*(640-(i9t.COLS*i9t.CHIP+(i9t.COLS-1)*i9t.GAP)));
+ let s9t=i9t;
+ function e9t(){
+ return new TM({
+ texture:QA.getTexture("UI_RAID","WhiteRect.png"),leftWidth:14,topHeight:14,rightWidth:14,bottomHeight:14}
+ )}
+ Vt(e9t,"makeWhiteRectSlice");
+ const n9t=class t extends Ge{
+ constructor(i){
+ super(),Kt(this,"slot",0),Kt(this,"emblem",null),Kt(this,"selectedKey",""),Kt(this,"panelY",0),Kt(this,"onChange",null),Kt(this,"badge"),Kt(this,"passiveChips"),Kt(this,"lblPassive"),Kt(this,"lblActiveName"),Kt(this,"activeChips"),Kt(this,"lblActive"),Kt(this,"rows",[]),Kt(this,"panelBgG"),Kt(this,"panelBgSlice",null),Kt(this,"panelChip"),Kt(this,"panelPrefixChips"),Kt(this,"lblPanelDesc"),Kt(this,"btnEquip"),Kt(this,"runeList");
+ const s=t;
+ this.badge=new t9t,this.badge.scale.set(.8),this.badge.x=20,this.badge.y=0,this.badge.eventMode="none",this.addChild(this.badge),this.passiveChips=new Ge,this.passiveChips.x=190,this.passiveChips.y=12,this.passiveChips.eventMode="none",this.addChild(this.passiveChips),this.lblPassive=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPassive.x=190,this.lblPassive.y=30,this.lblPassive.setWrapWidth(420),this.addChild(this.lblPassive),this.lblActiveName=new JD("",16772744,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblActiveName.x=190,this.lblActiveName.y=64,this.addChild(this.lblActiveName),this.activeChips=new Ge,this.activeChips.x=190,this.activeChips.y=67,this.activeChips.eventMode="none",this.addChild(this.activeChips),this.lblActive=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblActive.x=190,this.lblActive.y=88,this.lblActive.setWrapWidth(420),this.addChild(this.lblActive);
+ const e=s.HEADER_H,n=.5*(640-s.ROW_W);
+ for(let t=0;
+ t<KQt.MAX_RUNES;
+ t++){
+ const i=e+t*(s.ROW_H+s.ROW_GAP),h=new Lf;
+ h.x=n,h.y=i,this.addChild(h);
+ const r=new Lf;
+ r.x=n+7,r.y=i+.5*(s.ROW_H-s.ROW_CHIP),r.eventMode="none",this.addChild(r);
+ const o=new Ge;
+ o.x=n+62,o.y=i+7,o.eventMode="none",this.addChild(o);
+ const a=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ a.x=n+62,a.y=i+25,a.setWrapWidth(460),a.eventMode="none",this.addChild(a);
+ const c=new ZL("✕");
+ c.color=ZL.BROWN,c.width=44,c.height=40,c.x=n+s.ROW_W-c.width-8,c.y=i+.5*(s.ROW_H-c.height);
+ const l=t;
+ c.onClick=()=>{
+ this.unequipAt(l)}
+ ,this.addChild(c),this.rows.push({
+ bg:h,bgSlice:null,chip:r,prefixChips:o,lblDesc:a,btnRemove:c}
+ )}
+ const h=e+KQt.MAX_RUNES*(s.ROW_H+s.ROW_GAP)+8;
+ this.panelY=h,this.panelBgG=new Lf,this.panelBgG.roundRect(n,h,s.ROW_W,s.PANEL_H,10).fill({
+ color:3813674,alpha:.95}
+ ),this.addChild(this.panelBgG),this.panelChip=new Lf,this.panelChip.x=n+8,this.panelChip.y=h+.5*(s.PANEL_H-48),this.panelChip.eventMode="none",this.addChild(this.panelChip),this.panelPrefixChips=new Ge,this.panelPrefixChips.x=n+68,this.panelPrefixChips.y=h+8,this.panelPrefixChips.eventMode="none",this.addChild(this.panelPrefixChips),this.lblPanelDesc=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPanelDesc.x=n+68,this.lblPanelDesc.y=h+10,this.lblPanelDesc.setWrapWidth(390),this.addChild(this.lblPanelDesc),this.btnEquip=new ZL(SG.getText("GAME_1295","장착")),this.btnEquip.color=ZL.GREEN,this.btnEquip.width=110,this.btnEquip.height=46,this.btnEquip.x=n+s.ROW_W-this.btnEquip.width-8,this.btnEquip.y=h+.5*(s.PANEL_H-this.btnEquip.height),this.btnEquip.onClick=()=>{
+ this.equipSelected()}
+ ,this.addChild(this.btnEquip),this.runeList=new d5(s9t,640,i),this.runeList.x=0,this.runeList.y=s.LIST_TOP,this.addChild(this.runeList)}
+ get emblemName(){
+ return this.emblem?OQt.getInstance().getEmblemName(this.emblem):SG.getText("GAME_1260","휘장")}
+ async setData(t){
+ this.slot=t,this.selectedKey="",await OQt.getInstance().ensureLoaded();
+ const i=KQt.getInstance();
+ if(await i.ensureLoaded(),await i.seedBandIfNeeded(t+1),!this.parent)return;
+ const s=OQt.getInstance();
+ this.emblem=t===KQt.CROSSBOW_SLOT?s.getEmblemBySlot("crossbow"):s.getEmblemByCorpIndex(t),this.refresh(),QA.hasSheet("UI_RAID")||t9t.ensureUiRaidSheet().then(t=>{
+ t&&this.parent&&this.refresh()}
+ )}
+ refresh(){
+ const t=this.emblem,i=OQt.getInstance();
+ this.badge.setData(this.slot);
+ const s=t?i.getSkill(t.pSkill):null,e=t?i.getSkill(t.aSkill):null;
+ if(t&&s){
+ const e=i.getSkillPrefix(s);
+ V7t(this.passiveChips,e.condLabel,e.targetLabel,e.color),this.passiveChips.visible=!0,this.lblPassive.text=i.formatSkillDesc(s,t.pValue,0,!1)}
+ else this.passiveChips.visible=!1,this.lblPassive.text="";
+ if(t&&e){
+ const s=i.skillDescTemplate(e),n=s.replace(/\{
+ v\}
+ /g,String(t.aValue)).replace(/\{
+ dur\}
+ /g,String(t.aDur));
+ let h="",r=n;
+ const o=n.indexOf(" — ");
+ o>0&&(h=n.slice(0,o).trim(),r=n.slice(o+3).trim()),s.includes("{
+ v}
+ ")||s.includes("{
+ dur}
+ ")||(r=`${
+ r}
+  +${
+ t.aValue}
+ ${
+ e.isPercent?"%":""}
+ `),this.lblActiveName.text=h,this.lblActiveName.visible=h.length>0;
+ const a=i.getSkillPrefix(e),c=t.aDur>0&&!s.includes("{
+ dur}
+ ");
+ j7t(this.activeChips,[{
+ label:SG.getText("GAME_1306",mQt.ACTIVE),color:$7t}
+ ,{
+ label:a.targetLabel,color:a.color}
+ ,{
+ label:c?SG.getValueReplace("GAME_1303","\\{
+ 0\\}
+ ",t.aDur,`지속 ${
+ t.aDur}
+ 초`):"",color:10475168}
+ ,{
+ label:SG.getValueReplace("GAME_1304","\\{
+ 0\\}
+ ",t.aCool,`쿨 ${
+ t.aCool}
+ 초`),color:10470368}
+ ]),this.activeChips.visible=!0,this.activeChips.x=this.lblActiveName.x+(h.length>0?this.lblActiveName.width+8:0),this.lblActive.text=r}
+ else this.lblActiveName.visible=!1,this.activeChips.visible=!1,this.lblActive.text="";
+ this.refreshEquippedRows(),this.refreshPanel(),this.runeList.dataProvider=this.buildRows()}
+ refreshEquippedRows(){
+ const i=t,s=KQt.getInstance().getSlotRuneVOs(this.slot),e=QA.hasSheet("UI_RAID");
+ for(let t=0;
+ t<this.rows.length;
+ t++){
+ const n=this.rows[t],h=s[t];
+ if(n.bg.clear(),n.chip.clear(),e&&!n.bgSlice&&(n.bgSlice=e9t(),n.bgSlice.eventMode="none",n.bgSlice.position.set(n.bg.x,n.bg.y),n.bgSlice.width=i.ROW_W,n.bgSlice.height=i.ROW_H,this.addChildAt(n.bgSlice,this.getChildIndex(n.bg))),n.bgSlice?(n.bgSlice.tint=h?3813674:0,n.bgSlice.alpha=h?.95:.3):n.bg.roundRect(0,0,i.ROW_W,i.ROW_H,10).fill(h?{
+ color:3813674,alpha:.95}
+ :{
+ color:0,alpha:.3}
+ ),h){
+ J7t(n.chip,this.typeLetter(),h.grade,i.ROW_CHIP,{
+ tint:z7t(this.typeLetter())}
+ ),h.subId>=0&&n.chip.circle(7,7,3.5).fill({
+ color:16765562}
+ );
+ const t=this.runePrefixParts(h.kindNum);
+ V7t(n.prefixChips,t.condLabel,t.targetLabel,t.color),n.prefixChips.visible=!0,n.lblDesc.y=n.bg.y+25,n.lblDesc.text=this.runeDescText(h.kindNum,h.grade,h.subId),n.lblDesc.textColor=16777215,n.btnRemove.visible=!0}
+ else n.prefixChips.visible=!1,n.lblDesc.y=n.bg.y+16,n.lblDesc.text=SG.getText("GAME_1298","빈 슬롯"),n.lblDesc.textColor=7829367,n.btnRemove.visible=!1}
+ }
+ async unequipAt(t){
+ var i;
+ const s=KQt.getInstance(),e=s.getSlotRuneVOs(this.slot);
+ if(!e[t])return;
+ const n=e.filter((i,s)=>s!==t).map(t=>t.id),h=await s.equipSlot(this.slot,n);
+ h.ok?null==(i=this.onChange)||i.call(this):u2.getInstance().showMessage(KQt.errorText(h.error)??SG.getText("GAME_1302","해제에 실패했습니다")),this.refresh()}
+ static cellKey(t){
+ return t.uid??`${
+ t.kindNum}
+ :${
+ t.grade}
+ :${
+ t.subId}
+ :${
+ t.equipped?"eq":"inv"}
+ `}
+ selectedStack(){
+ if(!this.selectedKey)return null;
+ for(const i of this.buildRows())for(const s of i.cells)if(t.cellKey(s)===this.selectedKey)return s;
+ return null}
+ refreshPanel(){
+ !this.panelBgSlice&&QA.hasSheet("UI_RAID")&&(this.panelBgG.clear(),this.panelBgSlice=e9t(),this.panelBgSlice.eventMode="none",this.panelBgSlice.position.set(.5*(640-t.ROW_W),this.panelY),this.panelBgSlice.width=t.ROW_W,this.panelBgSlice.height=t.PANEL_H,this.panelBgSlice.tint=3813674,this.panelBgSlice.alpha=.95,this.addChildAt(this.panelBgSlice,this.getChildIndex(this.panelBgG)));
+ const i=this.selectedStack();
+ if(this.panelChip.clear(),!i)return this.panelPrefixChips.visible=!1,this.lblPanelDesc.text=SG.getText("GAME_1299","아래 목록에서 크리스탈을 선택하세요"),this.lblPanelDesc.textColor=8947848,this.centerPanelDesc(),this.btnEquip.activated=!1,void(this.btnEquip.text=SG.getText("GAME_1295","장착"));
+ J7t(this.panelChip,this.typeLetter(),i.grade,48,{
+ tint:z7t(this.typeLetter())}
+ ),i.subId>=0&&this.panelChip.circle(8,8,3.5).fill({
+ color:16765562}
+ );
+ const s=this.runePrefixParts(i.kindNum);
+ V7t(this.panelPrefixChips,s.condLabel,s.targetLabel,s.color),this.panelPrefixChips.visible=!0,this.lblPanelDesc.setWrapWidth(390),this.lblPanelDesc.text=this.runeDescText(i.kindNum,i.grade,i.subId),this.lblPanelDesc.textColor=16777215,this.lblPanelDesc.y=this.panelY+28;
+ const e=KQt.getInstance().getSlotRuneVOs(this.slot),n=e.find(t=>t.kindNum===i.kindNum);
+ n&&n.grade===i.grade&&n.subId===i.subId?(this.btnEquip.activated=!1,this.btnEquip.text=SG.getText("GAME_1296","장착중")):n?(this.btnEquip.activated=!0,this.btnEquip.text=SG.getText("GAME_1297","교체")):(this.btnEquip.activated=e.length<KQt.MAX_RUNES,this.btnEquip.text=SG.getText("GAME_1295","장착"))}
+ async equipSelected(){
+ var t;
+ const i=this.selectedStack();
+ if(!i)return;
+ const s=KQt.getInstance(),e=s.getSlotRuneVOs(this.slot),n=new Set(e.map(t=>t.id)),h=i.vos.find(t=>!n.has(t.id));
+ if(!h)return;
+ const r=e.filter(t=>t.kindNum!==i.kindNum).map(t=>t.id);
+ if(r.length>=KQt.MAX_RUNES)return void u2.getInstance().showMessage(SG.getText("GAME_1300","슬롯이 가득 찼습니다 — 장착된 크리스탈을 해제하세요"));
+ r.push(h.id);
+ const o=await s.equipSlot(this.slot,r);
+ o.ok?null==(t=this.onChange)||t.call(this):u2.getInstance().showMessage(KQt.errorText(o.error)??SG.getText("GAME_1301","장착에 실패했습니다")),this.refresh()}
+ centerPanelDesc(){
+ this.lblPanelDesc.y=this.panelY+.5*(t.PANEL_H-this.lblPanelDesc.height)}
+ buildRows(){
+ const i=KQt.getInstance(),s=new Set(i.getSlotRuneVOs(this.slot).map(t=>t.id)),e=[];
+ for(const h of i.getRunesByBand(this.slot+1)){
+ const i=String(h.id);
+ e.push({
+ kindNum:h.kindNum,grade:h.grade,subId:h.subId,vos:[h],uid:i,equipped:s.has(h.id),selected:this.selectedKey===i,onTap:Vt(i=>{
+ this.selectedKey=t.cellKey(i),this.refresh()}
+ ,"onTap")}
+ )}
+ const n=[];
+ for(let t=0;
+ t<e.length;
+ t+=s9t.COLS)n.push({
+ cells:e.slice(t,t+s9t.COLS)}
+ );
+ return n}
+ typeLetter(){
+ return"ABCDEF"[this.slot]??"A"}
+ runeDescText(t,i,s){
+ const e=OQt.getInstance(),n=e.getRune(t);
+ if(!n)return"?";
+ let h=e.formatRuneDesc(n,i,!1);
+ if(s>=0){
+ const t=e.getSub(s);
+ t&&(h+=`  ·${
+ SG.getText("GAME_1305","부옵")}
+  ${
+ e.getSubDesc(t)}
+  +${
+ e.getSubValue(t,i)}
+ `)}
+ return h}
+ runePrefixParts(t){
+ const i=OQt.getInstance(),s=i.getRune(t),e=s?i.getSkill(s.skillRef):null;
+ return i.getSkillPrefix(e)}
+ }
+ ;
+ Vt(n9t,"EmblemRuneManagePanel"),Kt(n9t,"ROW_W",600),Kt(n9t,"ROW_H",54),Kt(n9t,"ROW_GAP",6),Kt(n9t,"ROW_CHIP",42),Kt(n9t,"PANEL_H",62),Kt(n9t,"HEADER_H",.8*t9t.H+16),Kt(n9t,"LIST_TOP",n9t.HEADER_H+5*(n9t.ROW_H+n9t.ROW_GAP)+8+n9t.PANEL_H+12);
+ let h9t=n9t;
+ const r9t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"lblTitle"),Kt(this,"panel"),Kt(this,"onChange",null),this.bg.height<880&&(this.y=Math.max(0,VA.safeHeight-880),this.bg.height=VA.safeHeight-this.y),this.lblTitle=new JD("",16772744,cD.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblTitle.x=20,this.lblTitle.y=42,this.addChild(this.lblTitle);
+ const t=Math.max(120,this.bg.height-88-h9t.LIST_TOP-16);
+ this.panel=new h9t(t),this.panel.y=88,this.panel.onChange=()=>{
+ var t;
+ this.lblTitle.text=this.panel.emblemName,null==(t=this.onChange)||t.call(this)}
+ ,this.addChild(this.panel)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ open(t,i){
+ this.onChange=i??null,this.show2(),this.panel.setData(t).then(()=>{
+ this.lblTitle.text=this.panel.emblemName}
+ )}
+ get className(){
+ return"RuneSetupPopup"}
+ }
+ ;
+ Vt(r9t,"RuneSetupPopup"),Kt(r9t,"_instance");
+ let o9t=r9t;
+ const a9t={
+ TANK:14175295,DEALER:3063663,HEALER:16763212,SUPPORT:5994751,BREAKER:11754495,CROSSBOW:10135480}
+ ,c9t=[10395294,5025616,4367861,11225020,16754470,15684432],l9t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"options",null),Kt(this,"selectedSquads",null),Kt(this,"requestPending",!1),Kt(this,"bossIcon"),Kt(this,"lblBossName"),Kt(this,"btnBossGuide"),Kt(this,"ticketIcons",[]),Kt(this,"lblResist"),Kt(this,"tribeRow"),Kt(this,"vulnRow"),Kt(this,"lblGimmick"),Kt(this,"lblStatus"),Kt(this,"lblBattleState"),Kt(this,"hpBarBg"),Kt(this,"hpBarFill"),Kt(this,"lblHp"),Kt(this,"lblSquadTitle"),Kt(this,"heroBtns",[]),Kt(this,"soldierBtns",[]),Kt(this,"soldierCountLbls",[]),Kt(this,"soldierStageBadges",[]),Kt(this,"soldierVulnBadges",[]),Kt(this,"heroVulnBadges",[]),Kt(this,"crossbowSlotBtn"),Kt(this,"emblemBgs",[]),Kt(this,"emblemLbls",[]),Kt(this,"emblemIcons",[]),Kt(this,"emblemDots",[]),Kt(this,"emblemSlotX",[]),Kt(this,"emblemSlotW",[]),Kt(this,"colPanels",[]),Kt(this,"colPanelY",0),Kt(this,"colPanelH",0),Kt(this,"btnFormation"),Kt(this,"btnPractice"),Kt(this,"btnBattle"),this.bg.height<880&&(this.y=Math.max(0,VA.safeHeight-880),this.bg.height=VA.safeHeight-this.y),this.lblBossName=new JD("",16772744,cD.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblBossName.x=20,this.lblBossName.y=52,this.addChild(this.lblBossName),this.btnBossGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnBossGuide.on("pointertap",()=>{
+ this.options&&F7t.getInstance().showBoss(this.options.bookVO)}
+ ),this.addChild(this.btnBossGuide);
+ for(let c=0;
+ c<t.TICKET_MAX;
+ c++){
+ const i=new He(QA.getTexture("UI_Ekkorr","PVP_TICKET_ON"));
+ i.scale.set(t.TICKET_SCALE),i.visible=!1,i.y=this.lblBossName.y+6,this.ticketIcons.push(i),this.addChild(i)}
+ this.bossIcon=new He,this.bossIcon.x=28,this.bossIcon.y=this.lblBossName.y+44,this.bossIcon.eventMode="static",this.bossIcon.cursor="pointer",this.bossIcon.on("pointerup",()=>{
+ this.options&&F7t.getInstance().showBoss(this.options.bookVO)}
+ ),this.addChild(this.bossIcon),this.lblResist=new JD("",13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblResist.x=135,this.lblResist.y=this.bossIcon.y+2,this.addChild(this.lblResist),this.tribeRow=new Ge,this.tribeRow.x=135,this.tribeRow.y=this.bossIcon.y+26,this.tribeRow.eventMode="static",this.tribeRow.cursor="pointer",this.tribeRow.on("pointerup",()=>{
+ this.options&&F7t.getInstance().showBoss(this.options.bookVO)}
+ ),this.addChild(this.tribeRow),this.vulnRow=new Ge,this.vulnRow.x=135,this.vulnRow.y=this.bossIcon.y+54,this.vulnRow.eventMode="static",this.vulnRow.cursor="pointer",this.vulnRow.on("pointerup",()=>{
+ this.options&&F7t.getInstance().showBoss(this.options.bookVO)}
+ ),this.addChild(this.vulnRow),this.lblGimmick=new JD("",16764040,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblGimmick.x=20,this.lblGimmick.y=this.bossIcon.y+96,this.addChild(this.lblGimmick),this.lblStatus=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblStatus.x=20,this.lblStatus.y=this.lblGimmick.y+26,this.lblStatus.setWrapWidth(600),this.addChild(this.lblStatus),this.hpBarBg=new Lf,this.hpBarBg.x=20,this.hpBarBg.y=this.lblStatus.y+30,this.addChild(this.hpBarBg),this.hpBarFill=new Lf,this.hpBarFill.x=this.hpBarBg.x,this.hpBarFill.y=this.hpBarBg.y,this.addChild(this.hpBarFill),this.lblHp=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblHp.eventMode="none",this.addChild(this.lblHp),this.lblSquadTitle=new JD(SG.getText("GAME_1283","공격 편성"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblSquadTitle.x=20,this.lblSquadTitle.y=this.hpBarBg.y+46,this.addChild(this.lblSquadTitle);
+ const i=.5*(this.bg.width-600),s=Vt(t=>i+102*DJt.indexOf(t),"displayColX"),e=t.EMBLEM_H,n=this.lblSquadTitle.y+36,h=n+8,r=h+e+7,o=r+26,a=o+68;
+ this.colPanelY=n,this.colPanelH=a+74-n;
+ for(let t=0;
+ t<6;
+ t++){
+ const t=new Lf;
+ t.eventMode="none",this.addChild(t),this.colPanels.push(t)}
MissionGuideController 7 hunks, 527 statements
- }
- transition(t,i,s){
- this.hideUI(t),this.showUI(i,s)}
- showUI(t,i){
- switch(t){
- case bV.IDLE:this.showIdleUI();
- break;
- case bV.DUNGEON:this.showDungeonUI(null==i?void 0:i.dungeonId);
- break;
- case bV.PVP:this.showPVPUI();
- break;
- case bV.PVP2:this.showPVP2UI();
- break;
- case bV.TOWER:this.showTowerUI();
- break;
- case bV.GUILD_WAR:this.showGuildWarUI();
- break;
- case bV.RAID:this.showRaidUI()}
- }
- hideUI(t){
- switch(t){
- case bV.IDLE:this.hideIdleUI();
- break;
- case bV.DUNGEON:this.hideDungeonUI();
- break;
- case bV.PVP:this.hidePVPUI();
- break;
- case bV.PVP2:this.hidePVP2UI();
- break;
- case bV.TOWER:this.hideTowerUI();
- break;
- case bV.GUILD_WAR:this.hideGuildWarUI();
- break;
- case bV.RAID:this.hideRaidUI()}
- }
- showIdleUI(){
- yii.getInstance().visible=!0,w3.getInstance().visible=!0,Xti.getInstance().visible=!0,_9t.getInstance().visible=!0,S4.getInstance().visible=!0,fet.getInstance().visible=!0,KG.getInstance().setBackground($G.IDLE),pB.getInstance().restoreSeasonColor()}
- hideIdleUI(){
- yii.getInstance().visible=!1,w3.getInstance().visible=!1,Xti.getInstance().visible=!1,_9t.getInstance().visible=!1,S4.getInstance().visible=!1,fet.getInstance().visible=!1}
- showDungeonUI(i){
- E9t.getInstance().visible=!0;
- const s=null!=i&&t.DUNGEON_BG_MAP[i]?t.DUNGEON_BG_MAP[i]:$G.DUNGEON;
- KG.getInstance().setBackground(s),jit.getInstance().show(),pB.getInstance().updateForDungeon(i??1);
+ Kt(this,"active",!1),Kt(this,"checking",!1),Kt(this,"frameSkip",0),Kt(this,"currentSteps",[]),Kt(this,"cachedCondition",null),Kt(this,"pointingDelayTimer",null),Kt(this,"pointingDelayed",!1),Kt(this,"listItemsGetter",null),Kt(this,"bottomMenuGetter",null),Kt(this,"popupButtonGetter",null),Kt(this,"subMenuButtonGetter",null),Kt(this,"currentSubViewName",""),Kt(this,"reviveButtonGetter",null),Kt(this,"rightMenuIndicatorButtonGetter",null),Kt(this,"dailyQuestButtonGetter",null),Kt(this,"petButtonGetter",null),Kt(this,"mineButtonGetter",null),Kt(this,"guildButtonGetter",null),Kt(this,"pendingParent",null),Kt(this,"pendingBtn",null)}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ async init(){
+ if(0==ML.numRevive&&ML.wave<3)return;
- Det.getInstance().addChild(e),e.show()}
- hideDungeonUI(){
- E9t.getInstance().visible=!1,jit.getInstance().hide(),Ftt.getInstance().hide()}
- showPVPUI(){
- S9t.getInstance().visible=!0,KG.getInstance().setBackground($G.PVP),Pet.getInstance().show(),pB.getInstance().updateForPVP()}
- hidePVPUI(){
- S9t.getInstance().visible=!1,Pet.getInstance().hide()}
- showPVP2UI(){
- S9t.getInstance().visible=!0,Pet.getInstance().show(),pB.getInstance().updateForPVP()}
- hidePVP2UI(){
- S9t.getInstance().visible=!1,Pet.getInstance().hide()}
- showTowerUI(){
- KG.getInstance().setBackground($G.TOWER),Vit.getInstance().show();
+ if(0!==t.missionList.length){
+ if(await t.loadInfo(),t.isAllCompleted())return this.active=!1,void(Yjt.getInstance().visible=!1);
+ Oei.getInstance().retire(),Yjt.getInstance().onClaim=()=>{
+ this.onRewardClaimed()}
+ ,this.active=!0,this.refreshMission(),this.onConditionChanged()}
+ else this.active=!1}
+ refreshMission(){
+ const t=Hjt.getInstance(),i=t.getCurrentMission();
+ if(!i)return this.active=!1,this.stopFrameCheck(),void(Yjt.getInstance().visible=!1);
+ Yjt.getInstance().visible=!0,Yjt.getInstance().setData(i),Yjt.getInstance().activated=t.rewardPending,this.currentSteps=t.getCurrentSteps(),this.cachedCondition=Cei(i.condition),this.startFrameCheck(),this.updatePointing()}
+ startFrameCheck(){
+ this.checking||(this.checking=!0,this.frameSkip=0,LM.getInstance().add(this.onFrameCheck,this))}
+ stopFrameCheck(){
+ this.checking&&(this.checking=!1,LM.getInstance().remove(this.onFrameCheck,this))}
+ onFrameCheck(){
+ if(++this.frameSkip<t.CHECK_INTERVAL)return;
+ this.frameSkip=0;
- Det.getInstance().addChild(t),t.show()}
- hideTowerUI(){
- Vit.getInstance().hide(),Ftt.getInstance().hide()}
- showGuildWarUI(){
- LV.getInstance().removeAll(),IL.getInstance().removeAll(),yii.getInstance().visible=!1,w3.getInstance().visible=!1,Xti.getInstance().visible=!1,_9t.getInstance().visible=!1,S4.getInstance().visible=!1,fet.getInstance().visible=!1}
- hideGuildWarUI(){
- }
- showRaidUI(){
- LV.getInstance().removeAll(),IL.getInstance().removeAll(),yii.getInstance().visible=!1,w3.getInstance().visible=!1,Xti.getInstance().visible=!1,_9t.getInstance().visible=!1,S4.getInstance().visible=!1,fet.getInstance().visible=!1}
- hideRaidUI(){
- }
- }
- ;
- Kt(T9t,"BattleUIManager"),zt(T9t,"instance"),zt(T9t,"DUNGEON_BG_MAP",{
- 1:$G.DUNGEON1,2:$G.DUNGEON2,3:$G.DUNGEON3,4:$G.DUNGEON4}
- );
- let C9t=T9t;
- const k9t=class extends aS{
- constructor(){
- super()}
- }
- ;
- Kt(k9t,"DialogueLayer");
- let O9t=k9t;
- const I9t=Object.freeze(Object.defineProperty({
- __proto__:null,DialogueLayer:O9t}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),x9t=class t{
- constructor(){
- zt(this,"currentBattle",null),zt(this,"idleBattle",null),zt(this,"battleState",yV.STOPPED),zt(this,"battleFrameController"),this.battleFrameController=WG.getInstance()}
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
- startIdleBattle(t){
- this.idleBattle&&this.idleBattle.cleanup(),this.idleBattle=t,this.currentBattle=t,this.battleState=yV.RUNNING,this.battleFrameController.add(this.currentBattle.execute,this.currentBattle)}
- switchToBattle(t,i){
- var s;
- const e=(null==(s=this.currentBattle)?void 0:s.getBattleType())??bV.IDLE,n=t.getBattleType(),h=this.currentBattle===t;
- this.currentBattle&&(this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),h||this.currentBattle.hide(),this.battleState=yV.PAUSED),C9t.getInstance().transition(e,n,i),hL.isIdleBattle=!1,aB.getInstance().visible=!1,O9t.getInstance().visible=!1,Jt(async()=>{
- const{
- SoulRestLayer:t}
- =await Promise.resolve().then(()=>PB);
- return{
- SoulRestLayer:t}
- }
- ,void 0).then(({
- SoulRestLayer:t}
- )=>{
- t.getInstance().hide()}
- ),this.currentBattle=t,this.battleState=yV.RUNNING,this.battleFrameController.add(this.currentBattle.execute,this.currentBattle),this.currentBattle.show(),lS.getInstance().dispatchCustomEvent("BattleSwitch",{
- fromType:e,toType:n}
+ if(!i.rewardPending)return this.cachedCondition&&Iei(this.cachedCondition)?(i.rewardPending=!0,Yjt.getInstance().activated=!0,void this.updatePointing()):void this.updatePointing();
+ this.updatePointing()}
+ onMenuChanged(){
+ this.active&&this.updatePointing()}
+ onConditionChanged(){
+ this.active&&(this.frameSkip=t.CHECK_INTERVAL)}
+ async onRewardClaimed(){
+ if(!this.active)return;
+ const t=Hjt.getInstance();
+ if(!t.rewardPending)return;
+ Oei.getInstance().hideFromTarget(),this.stopFrameCheck();
+ const i=t.currentMissionId;
+ if(await t.claimReward(i)>0&&kF.getInstance().updateGem(),t.isAllCompleted())return this.active=!1,this.stopFrameCheck(),void(Yjt.getInstance().visible=!1);
+ this.refreshMission(),this.onConditionChanged()}
+ registerBottomMenuGetter(t){
+ this.bottomMenuGetter=t}
+ registerSubMenuButtonGetter(t){
+ this.subMenuButtonGetter=t}
+ registerListItemsGetter(t,i=""){
+ this.listItemsGetter=t,this.currentSubViewName=i,this.updatePointing()}
+ registerPopupButtonGetter(t){
+ this.popupButtonGetter=t,this.updatePointing()}
+ unregisterPopupButtonGetter(){
+ this.popupButtonGetter=null}
+ unregisterListItemsGetter(t=""){
+ t&&this.currentSubViewName!==t||(this.listItemsGetter=null,this.currentSubViewName="")}
+ registerReviveButtonGetter(t){
+ this.reviveButtonGetter=t,this.updatePointing()}
+ unregisterReviveButtonGetter(){
+ this.reviveButtonGetter=null}
+ registerRightMenuIndicatorButtonGetter(t){
+ this.rightMenuIndicatorButtonGetter=t,this.updatePointing()}
+ registerDailyQuestButtonGetter(t){
+ this.dailyQuestButtonGetter=t,this.updatePointing()}
+ unregisterDailyQuestButtonGetter(){
+ this.reviveButtonGetter=null}
+ registerPetButtonGetter(t){
+ this.petButtonGetter=t,this.updatePointing()}
+ unregisterPetButtonGetter(){
+ this.petButtonGetter=null}
+ registerMineButtonGetter(t){
+ this.mineButtonGetter=t,this.updatePointing()}
+ unregisterMineButtonGetter(){
+ this.mineButtonGetter=null}
+ registerGuildButtonGetter(t){
+ this.guildButtonGetter=t,this.updatePointing()}
+ unregisterGuildButtonGetter(){
+ this.guildButtonGetter=null}
+ showWithDelay(i,s){
+ const e=Oei.getInstance();
+ if(e.currentTarget!==i){
+ if(this.pointingDelayed)return this.pendingParent=i,void(this.pendingBtn=s);
+ e.hideFromTarget(),this.pendingParent=i,this.pendingBtn=s,this.pointingDelayed=!0,this.pointingDelayTimer&&clearTimeout(this.pointingDelayTimer),this.pointingDelayTimer=setTimeout(()=>{
+ this.pointingDelayed=!1,this.pointingDelayTimer=null,this.pendingParent&&this.pendingBtn&&e.showOnTarget(this.pendingParent,this.pendingBtn),this.pendingParent=null,this.pendingBtn=null}
+ ,t.POINTING_DELAY)}
+ else e.showOnTarget(i,s)}
+ cancelPointingDelay(){
+ this.pointingDelayTimer&&(clearTimeout(this.pointingDelayTimer),this.pointingDelayTimer=null),this.pointingDelayed=!1}
+ updatePointing(){
+ if(!this.active)return;
+ if(0===this.currentSteps.length)return Oei.getInstance().hideFromTarget(),void this.cancelPointingDelay();
+ const t=Hjt.getInstance();
+ if(t.rewardPending){
+ const t=Yjt.getInstance();
+ return void this.showWithDelay(t,{
+ x:0,y:-20,width:t.width,height:t.height}
- returnToIdleBattle(){
- var t;
- const i=(null==(t=this.currentBattle)?void 0:t.getBattleType())??bV.IDLE;
- this.currentBattle&&this.currentBattle!==this.idleBattle&&(this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),this.currentBattle.cleanup()),C9t.getInstance().transition(i,bV.IDLE),this.idleBattle?(this.currentBattle=this.idleBattle,this.battleState=yV.RUNNING,this.battleFrameController.add(this.currentBattle.execute,this.currentBattle),this.currentBattle.show(),hL.isIdleBattle=!0,aB.getInstance().visible=!0,O9t.getInstance().visible=!0,Jt(async()=>{
- const{
- SoulRestLayer:t}
- =await Promise.resolve().then(()=>PB);
- return{
- SoulRestLayer:t}
- }
- ,void 0).then(({
- SoulRestLayer:t}
- )=>{
- t.getInstance().show()}
- )):(this.currentBattle=null,this.battleState=yV.STOPPED),lS.getInstance().dispatchCustomEvent("BattleSwitch",{
- fromType:i,toType:bV.IDLE}
- )}
- pauseCurrentBattle(){
- this.currentBattle&&(this.currentBattle!==this.idleBattle&&this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),this.battleState=yV.PAUSED)}
- resumeCurrentBattle(){
- this.currentBattle&&(this.battleFrameController.add(this.currentBattle.execute,this.currentBattle),this.battleState=yV.RUNNING)}
- stopCurrentBattle(){
- this.currentBattle&&(this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),this.currentBattle.cleanup(),this.currentBattle!==this.idleBattle&&(this.currentBattle=this.idleBattle),this.battleState=yV.STOPPED)}
- getCurrentBattle(){
- return this.currentBattle}
- getIdleBattle(){
- return this.idleBattle}
- getCurrentBattleType(){
- return this.currentBattle?this.currentBattle.getBattleType():null}
- getBattleState(){
- return this.battleState}
- isIdleBattleActive(){
- return this.currentBattle===this.idleBattle&&this.battleState===yV.RUNNING}
- isSingleBattleActive(){
- return this.currentBattle!==this.idleBattle&&null!==this.currentBattle&&this.battleState===yV.RUNNING}
- printStatus(){
- }
- }
- ;
- Kt(x9t,"BattleManager"),zt(x9t,"instance");
- let N9t=x9t;
- const P9t=class t extends AB{
- constructor(){
- super(),zt(this,"lblContent"),zt(this,"lblAutoTitle"),zt(this,"btnAutoToggle"),zt(this,"lblEventTitle"),zt(this,"lblEventDesc"),zt(this,"petIconContainer"),zt(this,"secretaryContainer"),zt(this,"secretaryBg"),zt(this,"secretaryItemContainer"),zt(this,"secretaryItem"),zt(this,"secretaryItem2"),zt(this,"onPaymentSuccessBind"),this.outSideClickHide=!0,this.width=t.POPUP_WIDTH,this.lblContent=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),this.lblContent.align="left",aD.setLabelWrapWidth(this.lblContent,t.POPUP_WIDTH-60),this.contentContainer.addChild(this.lblContent),this.lblAutoTitle=new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_16),this.lblAutoTitle.align="left",this.contentContainer.addChild(this.lblAutoTitle),this.btnAutoToggle=new QL("ON"),this.btnAutoToggle.width=80,this.btnAutoToggle.height=37,this.btnAutoToggle.onClick=()=>this.onToggleAutoClick(),this.contentContainer.addChild(this.btnAutoToggle),this.lblEventTitle=new YD("",t.EVENT_BLUE,aD.DEFAULT_FONT_OPTION_16),this.lblEventTitle.align="left",this.lblEventTitle.textColor=t.EVENT_BLUE,aD.setLabelWrapWidth(this.lblEventTitle,t.POPUP_WIDTH-60),this.contentContainer.addChild(this.lblEventTitle),this.lblEventDesc=new YD("",t.EVENT_BLUE,aD.DEFAULT_FONT_OPTION_16),this.lblEventDesc.visible=!1,this.petIconContainer=new Be,this.contentContainer.addChild(this.petIconContainer),this.secretaryContainer=new Be,this.secretaryContainer.visible=!1,this.secretaryContainer.y=this.height+5,this.addChild(this.secretaryContainer),this.secretaryBg=new We(ZA.getTexture("UI_Ekkorr","whiteRect")),this.secretaryBg.tint=6839879,this.secretaryBg.width=this.width,this.secretaryContainer.addChild(this.secretaryBg),this.secretaryItemContainer=new Be,this.secretaryItemContainer.x=3,this.secretaryItemContainer.y=3,this.secretaryContainer.addChild(this.secretaryItemContainer),this.secretaryItem=new w8,this.secretaryItem.visible=!1,this.secretaryItemContainer.addChild(this.secretaryItem),this.secretaryItem2=new w8,this.secretaryItem2.visible=!1,this.secretaryItemContainer.addChild(this.secretaryItem2)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- var t;
- const i=Kt((t,i)=>AG.getText(t,i),"_t"),s=Kt((t,i,s)=>AG.getValueReplace(t,"##",i,s),"_tv");
- this.title=i("GAME_914","비서 가이드");
- const e=[`# ${
- i("GAME_915","일반 비서 (로라)")}
- `,`  - ${
- s("GAME_917",2,"영웅 모집 : 1시간마다 2명")}
- `,`  - ${
- i("GAME_918","영웅 슬롯 :")}
-  24`,`  - ${
- s("GAME_919","7~15","자원 : 1시간마다 7~15개의 보석과 명예코인 획득")}
- `,"",`# ${
- i("GAME_916","전문 비서 (이오스)")}
- `,`  - ${
- s("GAME_917",4,"영웅 모집 : 1시간마다 4명")}
- `,`  - ${
- i("GAME_918","영웅 슬롯 :")}
-  96`,`  - ${
- s("GAME_919","15~30","자원 : 1시간마다 15~30개의 보석과 명예코인 획득")}
- `];
- this.lblContent.text=e.join("\n"),this.lblContent.x=40,this.lblContent.y=80;
- let n=this.lblContent.y+this.lblContent.height+20;
- this.lblAutoTitle.text=i("COMMON_483","자동"),this.lblAutoTitle.x=40,this.lblAutoTitle.y=n+Math.max(0,.5*(this.btnAutoToggle.height-this.lblAutoTitle.height)),this.btnAutoToggle.x=this.lblAutoTitle.x+this.lblAutoTitle.width+10,this.btnAutoToggle.y=n,this.refreshAutoToggleUI(),n+=this.btnAutoToggle.height+18;
- const h=null==(t=V9t.getInstance().peek())?void 0:t.petEvent,r=null!=h&&h.kindNums.length>0;
- r&&(n=this.layoutEventSection(h,n)),this.lblEventTitle.visible=r,this.petIconContainer.visible=r,r||this.petIconContainer.removeChildren(),this.height=n+40,this.updateShopItem(),await this.loadImage(),super.show()}
- async updateShopItem(){
- await hK.getInstance().getProducts(3,!1);
- const t=[],i=hK.getInstance().getByProductId(eK.Secretary);
- i?(this.secretaryItem.setDataAndLayout(i),this.secretaryItem.visible=!0,t.push(this.secretaryItem)):this.secretaryItem.visible=!1;
- const s=hK.getInstance().getByProductId(eK.Secretary_Day30);
- if(s?(this.secretaryItem2.setDataAndLayout(s),this.secretaryItem2.visible=!0,t.push(this.secretaryItem2)):this.secretaryItem2.visible=!1,i||s){
- this.setPaymentSuccess(!0);
- for(let i=0;
- i<t.length;
- ++i)t[i].y=i*t[i].height;
- this.secretaryItemContainer.width=this.secretaryBg.width-6,this.secretaryItemContainer.scale.y=this.secretaryItemContainer.scale.x,this.secretaryBg.height=this.secretaryItemContainer.height+2*this.secretaryItemContainer.y,this.secretaryContainer.y=this.height+5,this.secretaryContainer.visible=!0}
- else this.setPaymentSuccess(!1),this.secretaryContainer.visible=!1}
- layoutEventSection(i,s){
- const e=Kt((t,i)=>AG.getText(t,i),"_t"),n=Kt((t,i,s)=>AG.getValueReplace(t,"##",i,s),"_tv"),h=e("GAME_928","비서가 아래 펫 조각을 랜덤하게 가져옵니다."),r=n("GAME_929",i.basicDailyCount,`하루 ${
- i.basicDailyCount}
-  조각 ( 고급비서는 2배 )`);
- this.lblEventTitle.text=[`# ${
- e("GAME_927","이벤트 진행중")}
- `,`  - ${
- h}
- `,`  - ${
- r}
- `].join("\n"),this.lblEventTitle.x=40,this.lblEventTitle.y=s;
- let o=this.lblEventTitle.y+this.lblEventTitle.height+10;
- this.petIconContainer.removeChildren();
- let a=0,c=0;
- for(const l of i.kindNums){
- const i=new gK;
- i.setInactive(l),i.x=a,i.y=0,this.petIconContainer.addChild(i),a+=i.width+t.PET_ICON_GAP,i.height>c&&(c=i.height)}
- return this.petIconContainer.x=40,this.petIconContainer.y=o,o+=c,o}
- onToggleAutoClick(){
- const t=!W9t.isAutoEnabled();
- W9t.setAutoEnabled(t),this.refreshAutoToggleUI()}
- refreshAutoToggleUI(){
- const t=W9t.isAutoEnabled();
- this.btnAutoToggle.text=t?"ON":"OFF",this.btnAutoToggle.color=t?QL.GREEN:QL.BROWN}
- getDefaultPositionY(){
- return.47*KA.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- getPopupBounds(){
- return this.getBounds()}
- setPaymentSuccess(t){
- lS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),lS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
- onPaymentSuccess(t){
- let i=-1;
- t&&t.detail&&"productId"in t.detail&&(i=t.detail.productId),i!==eK.Secretary&&i!==eK.Secretary_Day30||this.secretaryContainer.visible&&this.updateShopItem()}
- }
- ;
- Kt(P9t,"SecretaryGuidePopup"),zt(P9t,"_instance"),zt(P9t,"POPUP_WIDTH",580),zt(P9t,"EVENT_BLUE",7124735),zt(P9t,"PET_ICON_GAP",13);
- let R9t=P9t;
- const D9t=class t extends aG{
- constructor(){
- super(),zt(this,"lblHeader",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblFooter",new YD("",aD.COLOR_GRAY,aD.DEFAULT_FONT_OPTION_16)),zt(this,"btnConfirm",new kU("","","확인",.8,180,60)),zt(this,"secretaryImg",(()=>{
- const t=new We(ZA.getTexture("UI_Ekkorr","UNIT_NPC_1"));
- return t.scale.set(.7/.6),t}
- )()),zt(this,"btnGuide",new mB("UI_Ekkorr","UI_Alarm")),zt(this,"list"),zt(this,"petPieceContainer",new Be),zt(this,"petPieceContainerWidth",0),zt(this,"rewardContainer",new Be),zt(this,"gemIcon",new We(ZA.getTexture("UI_Ekkorr","UI_SHOP_GEM"))),zt(this,"gemLabel",new YD("",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18)),zt(this,"honorIcon",new We(ZA.getTexture("UI_Ekkorr","UI_COIN_Big"))),zt(this,"honorLabel",new YD("",aD.COLOR_PURPLE_PINK,aD.DEFAULT_FONT_OPTION_18)),zt(this,"hammerIcon",new We(ZA.getTexture("UI_Ekkorr","Icon_Hammer_01"))),zt(this,"hammerLabel",new YD("",aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_18)),zt(this,"grantedGem",0),zt(this,"grantedHonor",0),zt(this,"grantedHammer",0),zt(this,"grantedPetPieces",{
- }
- ),zt(this,"onConfirm",null),zt(this,"state","INTRO"),zt(this,"revealAfterHide",!1),zt(this,"revealQueue",[]),zt(this,"kindGrade",new Map),zt(this,"grantedTotal",0),zt(this,"rowCount",0),this.width=t.POPUP_WIDTH,this.title=AG.getText("GAME_857","비서"),this.lblHeader.align="left",this.lblFooter.align="left",aD.setLabelWrapWidth(this.lblHeader,this.width-60),aD.setLabelWrapWidth(this.lblFooter,this.width-60),B9t.LIST_WIDTH=t.LIST_WIDTH,this.list=new zI(B9t,t.LIST_WIDTH,t.LIST_MAX_HEIGHT,4),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnConfirm.color=kU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.gemIcon.scale.set(.5),this.honorIcon.scale.set(.5),this.hammerIcon.height>0&&this.hammerIcon.scale.set(this.gemIcon.height/this.hammerIcon.height*.6),this.rewardContainer.addChild(this.gemIcon,this.gemLabel,this.honorIcon,this.honorLabel,this.hammerIcon,this.hammerLabel),this.rewardContainer.visible=!1,this.btnGuide.x=t.POPUP_WIDTH-this.btnGuide.width-23,this.btnGuide.y=63,this.btnGuide.on("pointertap",()=>{
- R9t.getInstance().showGuide()}
- ),this.petPieceContainer.visible=!1,this.contentContainer.addChild(this.btnGuide,this.lblHeader,this.secretaryImg,this.list,this.rewardContainer,this.petPieceContainer,this.lblFooter,this.btnConfirm)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- showResult(t,i=0,s=0,e="basic",n={
- }
- ,h=0,r=null,o=!1){
- var a;
- this.onConfirm=r,this.grantedGem=i,this.grantedHonor=s,this.grantedHammer=h,this.grantedPetPieces=n||{
- }
- ,this.applyTierTexture(e);
- const c=vx.getInstance(),l=[];
- let u=0;
- this.kindGrade.clear();
- for(const p of Object.keys(t)){
- const i=Number(p),s=Number(t[i]??0);
- s>0&&(l.push({
- kindNum:i,count:s}
- ),u+=s,this.kindGrade.set(i,(null==(a=c.getBookVO(i))?void 0:a.grade)??1))}
- l.sort((t,i)=>{
- const s=c.getBookVO(t.kindNum),e=c.getBookVO(i.kindNum),n=(null==s?void 0:s.grade)??-1,h=(null==e?void 0:e.grade)??-1;
- if(n!==h)return h-n;
- const r=(null==s?void 0:s.tribe)??99,o=(null==e?void 0:e.tribe)??99;
- return r!==o?r-o:t.kindNum-i.kindNum}
- ),this.grantedTotal=u,this.revealQueue=[];
- for(const p of l)for(let t=0;
- t<p.count;
- t++)this.revealQueue.push(p.kindNum);
- this.shuffleInPlace(this.revealQueue);
- const d=B9t.COLS,f=[];
- for(let p=0;
- p<l.length;
- p+=d)f.push(l.slice(p,p+d));
- this.rowCount=f.length,this.list.dataProvider=f,this.list.showTopItem(),this.btnClose.visible=!1,this.outSideClickHide=!1,o?(this.enterIntroState(),super.show()):(this.state="TRANSITIONING",this.startRevealOverlay())}
- applyTierTexture(t){
- const i="premium"===t?"UNIT_NPC_2":"UNIT_NPC_1";
- this.secretaryImg.texture=ZA.getTexture("UI_Ekkorr",i)}
- buildPetPieceContainer(){
- var t;
- const i=this.petPieceContainer;
- for(const h of[...i.children])i.removeChild(h),null==(t=h.destroy)||t.call(h,{
- children:!0}
- );
- const s=Object.entries(this.grantedPetPieces||{
- }
- ).map(([t,i])=>({
- kindNum:Number(t),count:Number(i)}
- )).filter(t=>t.count>0).sort((t,i)=>t.kindNum-i.kindNum);
- if(0===s.length)return this.petPieceContainerWidth=0,void(i.visible=!1);
- let e=0,n=0;
- for(let h=0;
- h<s.length;
- h++){
- const t=s[h],r=new gK;
- r.setInactive(t.kindNum);
- const o=new YD(`×${
- t.count}
- `,aD.COLOR_WHITE,aD.DEFAULT_OUTLINE_FONT_OPTION_18);
- o.textColor=aD.COLOR_WHITE,r.x=e,r.y=0,o.x=r.x+r.width-o.width-2,o.y=r.y+r.height-o.height-2,e+=r.width,n=Math.max(n,r.height),h<s.length-1&&(e+=18),i.addChild(r,o)}
- this.petPieceContainerWidth=e,i.visible=!0}
- enterIntroState(){
- this.state="INTRO",this.lblHeader.text=AG.getValueReplace("GAME_855","##",String(this.grantedTotal),`성주님,\n${
- this.grantedTotal}
- 명의 영웅을 모집했습니다.\n어떤 영웅이 왔는지 확인해볼까요?`),this.lblFooter.visible=!1,this.list.visible=!1,this.rewardContainer.visible=!1,this.petPieceContainer.visible=!1,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnClose.visible=!1,this.updateLayout()}
- enterDoneState(){
- this.state="DONE",this.lblHeader.text=AG.getValueReplace("GAME_856","##",String(this.grantedTotal),`비서가 ${
- this.grantedTotal}
- 명의 영웅을 모집했습니다.`);
- const t=`- ${
- AG.getText("GAME_862","비서는 1시간마다 2명씩 영웅을 모아옵니다. (최대 24명)")}
- `,i=`- ${
- AG.getText("GAME_863","환생 또는 재접속 시 4시간이 지났다면, 비서가 자동으로 찾아옵니다.")}
- `,s=`- ${
- AG.getText("GAME_766","획득한 영웅은 병영에 추가됩니다.")}
- `;
- this.lblFooter.text=`${
- t}
- \n${
- i}
- \n${
- s}
- `,this.lblFooter.visible=!0,this.list.visible=!0,this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.btnClose.visible=!1;
- const e=this.grantedGem>0||this.grantedHonor>0||this.grantedHammer>0;
- this.rewardContainer.visible=e,e&&(this.gemIcon.visible=this.grantedGem>0,this.gemLabel.visible=this.grantedGem>0,this.honorIcon.visible=this.grantedHonor>0,this.honorLabel.visible=this.grantedHonor>0,this.hammerIcon.visible=this.grantedHammer>0,this.hammerLabel.visible=this.grantedHammer>0,this.gemLabel.text=`${
- this.grantedGem}
- `,this.honorLabel.text=`${
- this.grantedHonor}
- `,this.hammerLabel.text=`${
- this.grantedHammer}
- `),this.buildPetPieceContainer(),this.updateLayout()}
- startRevealOverlay(){
- const t=new F9t(this.revealQueue,this.kindGrade,this.grantedGem,this.grantedHonor,this.grantedPetPieces,this.grantedHammer,()=>{
- this.enterDoneState(),super.show()}
- );
- KA.stage.addChild(t)}
- updateLayout(){
- let i=70;
- this.secretaryImg.x=.5*(this.width-this.secretaryImg.width)+25,this.secretaryImg.y=i,i+=this.secretaryImg.height+12,this.lblHeader.x=.5*(this.width-this.lblHeader.width),this.lblHeader.y=i,i+=this.lblHeader.height+12;
- const s=B9t.ROW_HEIGHT,e=this.list.getYSpace(),n=Math.min(t.LIST_MAX_HEIGHT,Math.max(s,this.rowCount*(s+e)));
- if(this.list.setListHeight(n,!1),this.list.x=t.LIST_X,this.list.y=i,this.list.visible&&(i+=n+12),this.rewardContainer.visible){
- const t=36,s=6,e=[{
- icon:this.gemIcon,label:this.gemLabel}
- ,{
- icon:this.honorIcon,label:this.honorLabel}
- ,{
- icon:this.hammerIcon,label:this.hammerLabel}
- ].filter(t=>t.icon.visible),n=Kt(t=>t.icon.width+s+t.label.width,"groupW"),h=e.reduce((t,i)=>t+n(i),0)+Math.max(0,e.length-1)*t,r=i,o=Math.max(28,...e.map(t=>t.icon.height));
- let a=.5*(this.width-h);
- for(const i of e)i.icon.x=a,i.icon.y=r+.5*(o-i.icon.height),a+=i.icon.width+s,i.label.x=a,i.label.y=r+.5*(o-i.label.height),a+=i.label.width+t;
- this.rewardContainer.x=0,this.rewardContainer.y=0,i+=o+12}
- if(this.petPieceContainer.visible){
- this.petPieceContainer.x=.5*(this.width-this.petPieceContainerWidth),this.petPieceContainer.y=i;
- let t=0;
- for(const i of this.petPieceContainer.children)t=Math.max(t,i.height||0);
- i+=(t||60)+12}
- this.lblFooter.visible?(this.lblFooter.x=.5*(this.width-this.lblFooter.width),this.lblFooter.y=i,i+=this.lblFooter.height+18):i+=6,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=i,i+=this.btnConfirm.height+25,this.height=i+18}
- onConfirmClick(){
- if("INTRO"===this.state)this.state="TRANSITIONING",this.revealAfterHide=!0,super.hide();
- else{
- this.hide();
- const t=this.onConfirm;
- this.onConfirm=null,t&&t()}
- }
- onHideMotionComplete(){
- super.onHideMotionComplete(),this.revealAfterHide&&(this.revealAfterHide=!1,this.startRevealOverlay())}
- getDefaultPositionY(){
- return.5*KA.stageHeight}
- shuffleInPlace(t){
- for(let i=t.length-1;
- i>0;
- i--){
- const s=Math.floor(Math.random()*(i+1)),e=t[i];
- t[i]=t[s],t[s]=e}
- }
- }
- ;
- Kt(D9t,"SecretaryPopup"),zt(D9t,"_instance"),zt(D9t,"POPUP_WIDTH",580),zt(D9t,"LIST_X",20),zt(D9t,"LIST_WIDTH",D9t.POPUP_WIDTH-2*D9t.LIST_X),zt(D9t,"LIST_MAX_HEIGHT",460);
- let L9t=D9t;
- const G9t=class t extends XI{
- constructor(){
- super(),zt(this,"icons",[]);
- const i=new VI(t.LIST_WIDTH,t.ROW_HEIGHT,0);
- i.alpha=0,this.addChild(i);
- for(let s=0;
- s<t.COLS;
- s++){
- const i=new vK;
- i.setMode(mK.BOOK),i.scale.set(t.ICON_SCALE),i.visible=!1,this.icons.push(i),this.addChild(i)}
- }
- setData(i){
- const s=i.length,e=this.icons[0].width,n=this.icons[0].height,h=t.COLS*e+(t.COLS-1)*t.H_GAP;
- let r=.5*(t.LIST_WIDTH-h);
- const o=.5*(t.ROW_HEIGHT-n);
- for(let a=0;
- a<t.COLS;
- a++){
- const n=this.icons[a];
- if(a<s){
+ const i=Oei.getInstance();
+ for(const s of this.currentSteps){
+ if("-1"===s.action||"none"===s.action)return i.hideFromTarget(),void this.cancelPointingDelay();
+ if("bottomMenu"===s.action){
+ const t=s.target;
+ if(Ujt.currentIndex===t)continue;
+ if(this.bottomMenuGetter){
+ const i=this.bottomMenuGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ if("list"===s.action){
+ if("Tower"==this.currentSubViewName&&1==s.step)continue;
+ if(this.popupButtonGetter)continue;
+ if(!this.listItemsGetter)return;
+ const t=this.listItemsGetter(),i=s.target;
+ if(i<0||i>=t.length)return;
- n.setDataWithKindNum(s.kindNum),n.setCountText(`x${
- s.count}
- `),n.x=r,n.y=o,n.visible=!0,r+=e+t.H_GAP}
- else n.visible=!1}
+ if(!e)return;
+ const n=s.param;
+ if(n&&n.includes("|")){
+ let t=!1;
+ for(let e=this.currentSteps.indexOf(s)+1;
+ e<this.currentSteps.length;
+ e++){
+ const i=this.currentSteps[e];
+ if("list"===i.action&&i.param&&!i.param.includes("|")){
+ const s=this.listItemsGetter()[i.target];
+ if(s&&s[i.param]){
+ t=!0;
+ break}
+ if(t)continue;
+ const i=n.split("|"),h=Number(i[0])||0,r=Number(i[1])||0;
+ this.showWithDelay(e,{
+ x:h,y:r,width:0,height:0}
+ )}
+ else if(n&&"-1"!==n){
+ const t=e[n];
+ if(!t)continue;
+ if("activated"in t&&!1===t.activated)return Oei.getInstance().hideFromTarget(),void this.cancelPointingDelay();
+ this.showWithDelay(e,t)}
+ return}
+ if("subMenu"===s.action){
+ const t=s.param;
+ if(t&&this.currentSubViewName.toLowerCase().includes(t.replace("btn","").toLowerCase()))continue;
+ if(this.subMenuButtonGetter&&t&&"-1"!==t){
+ const i=this.subMenuButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ if("popup"===s.action){
+ if(!this.popupButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.popupButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ if("revive"===s.action){
+ if(!this.reviveButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.reviveButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ if("dailyQuest"===s.action){
+ if(!Aei.getInstance().opened){
+ if(!this.rightMenuIndicatorButtonGetter)return;
+ const t=this.rightMenuIndicatorButtonGetter("indicatorArea");
+ return void(t&&this.showWithDelay(t.parent,t.btn))}
+ if(!this.dailyQuestButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.dailyQuestButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ if("spiritBattle"===s.action){
+ if(!Aei.getInstance().opened){
+ if(!this.rightMenuIndicatorButtonGetter)return;
+ const t=this.rightMenuIndicatorButtonGetter("indicatorArea");
+ return void(t&&this.showWithDelay(t.parent,t.btn))}
+ if(3==t.petStep)return i.hideFromTarget(),void this.cancelPointingDelay();
+ if(0==t.petStep){
+ if(!this.petButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.petButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ }
+ else if(1==t.petStep){
+ const t="tabPlateau";
+ if(this.subMenuButtonGetter){
+ const i=this.subMenuButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ }
+ else if(2==t.petStep){
+ if(!this.listItemsGetter)return;
+ const t=this.listItemsGetter()[0];
+ if(!t)return;
+ const i=t.children[0],s=i.x+.5*i.width,e=i.y+.5*i.height;
+ this.showWithDelay(t,{
+ x:s,y:e,width:0,height:0}
+ )}
+ return}
+ if("mineClear"===s.action){
+ if(!Aei.getInstance().opened){
+ if(!this.rightMenuIndicatorButtonGetter)return;
+ const t=this.rightMenuIndicatorButtonGetter("indicatorArea");
+ return void(t&&this.showWithDelay(t.parent,t.btn))}
+ if(!this.mineButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.mineButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ if("guildJoin"===s.action){
+ if(!Aei.getInstance().opened){
+ if(!this.rightMenuIndicatorButtonGetter)return;
+ const t=this.rightMenuIndicatorButtonGetter("indicatorArea");
+ return void(t&&this.showWithDelay(t.parent,t.btn))}
+ if(!this.guildButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.guildButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ return}
+ }
+ i.hideFromTarget(),this.cancelPointingDelay()}
+ isActive(){
+ return this.active}
+ }
- Kt(G9t,"SecretaryHeroRow"),zt(G9t,"LIST_WIDTH",540),zt(G9t,"COLS",5),zt(G9t,"ICON_SCALE",.64),zt(G9t,"H_GAP",10),zt(G9t,"ROW_HEIGHT",64);
+ Vt(Sei,"MissionGuideController"),Kt(Sei,"instance"),Kt(Sei,"CHECK_INTERVAL",10),Kt(Sei,"POINTING_DELAY",1e3);
ClickHand 12 hunks, 344 statements
- const U9t=class t extends Be{
- constructor(t,i,s,e,n,h,r){
- super(),zt(this,"bg"),zt(this,"gridContainer"),zt(this,"queue"),zt(this,"kindGrade"),zt(this,"grantedGem"),zt(this,"grantedHonor"),zt(this,"grantedPetPieces"),zt(this,"grantedHammer"),zt(this,"onCompleteCb"),zt(this,"queueIdx",0),zt(this,"timer",0),zt(this,"done",!1),zt(this,"placedIcons",[]),zt(this,"activePlaceholders",new Set),zt(this,"cellW",0),zt(this,"cellH",0),zt(this,"startX",0),zt(this,"startY",0),zt(this,"iconScale",.7),zt(this,"iconNativeW",0),zt(this,"iconNativeH",0),zt(this,"rewardContainer",null),zt(this,"rewardsRevealed",!1),zt(this,"allRevealed",!1),this.queue=t.slice(),this.kindGrade=i,this.grantedGem=s,this.grantedHonor=e,this.grantedPetPieces=n||{
- }
- ,this.grantedHammer=h,this.onCompleteCb=r;
- const o=KA.stageWidth||640,a=KA.stageHeight||1200;
- this.bg=new VI(o,a,0),this.bg.alpha=0,this.addChild(this.bg),this.gridContainer=new Be,this.addChild(this.gridContainer),this.eventMode="static",this.bg.eventMode="static",this.bg.on("pointertap",()=>this.onTap()),this.computeLayout(o,a),HI.to(this.bg,{
- alpha:.75,duration:.18,ease:"power2.out",onComplete:Kt(()=>this.processNext(),"onComplete")}
- )}
- computeLayout(i,s){
- const e=new vK;
- e.setMode(mK.BOOK),this.queue.length>0&&e.setDataWithKindNum(this.queue[0]),this.iconNativeW=e.width,this.iconNativeH=e.height,e.destroy({
- children:!0}
- );
- const n=this.queue.length,h=t.COLS,r=Math.max(1,Math.ceil(n/h)),o=t.GAP,a=i-2*t.PAD_X,c=s-t.PAD_TOP-t.PAD_BOTTOM-t.RESERVED_REWARD_H,l=(a-o*(h-1))/(h*this.iconNativeW),u=(c-o*(r-1))/(r*this.iconNativeH);
- let d=Math.min(l,u,.9);
- d=Math.max(d,.32),d*=.9,this.iconScale=d;
- const f=this.iconNativeW*d,p=this.iconNativeH*d;
- this.cellW=f+o,this.cellH=p+o;
- const g=h*f+(h-1)*o,m=r*p+(r-1)*o;
- this.startX=.5*(i-g),this.startY=t.PAD_TOP+Math.max(0,.5*(c-m))}
- gridPositionAt(i){
- const s=i%t.COLS,e=Math.floor(i/t.COLS);
+ function Cei(t){
+ if(!t)return null;
+ const i=t.split("#"),s=i[0].split("|"),e=s[0],n=Number(s[1])||0;
+ if(i.length<2)return{
+ type:e,targetNum:n,condType:"",condValue:0}
+ ;
+ const h=i[1].split("|");
- x:this.startX+s*this.cellW,y:this.startY+e*this.cellH}
+ type:e,targetNum:n,condType:h[0],condValue:Number(h[1])||0}
- spawnIcon(t,i){
- const s=new vK;
- s.setMode(mK.BOOK),s.setDataWithKindNum(i),s.pivot.set(.5*this.iconNativeW,.5*this.iconNativeH),s.scale.set(this.iconScale);
- const e=this.gridPositionAt(t),n=this.iconNativeW*this.iconScale,h=this.iconNativeH*this.iconScale;
- return s.x=e.x+.5*n,s.y=e.y+.5*h,s.alpha=0,s.visible=!1,this.gridContainer.addChild(s),this.placedIcons.push(s),s}
- spawnPlaceholder(t){
- const i=this.iconNativeW*this.iconScale,s=this.iconNativeH*this.iconScale,e=.16*i,n=new Gf;
- return n.poly([0,0,i-e,0,i,.5*s,i-e,s,0,s]),n.fill(16777215),n.pivot.set(.5*i,.5*s),n.x=t.x,n.y=t.y,this.gridContainer.addChild(n),this.activePlaceholders.add(n),n}
- removePlaceholder(t){
- this.activePlaceholders.delete(t),HI.killTweensOf(t),t.parent&&t.parent.removeChild(t)}
- onTap(){
- this.done||(this.allRevealed?this.finish():this.skip())}
- processNext(){
- if(this.done)return;
- if(this.queueIdx>=this.queue.length)return void(this.rewardsRevealed?this.allRevealed=!0:this.startRevealRewards());
- const t=this.queue[this.queueIdx],i=this.kindGrade.get(t)??1,s=this.spawnIcon(this.queueIdx,t);
- let e;
- this.queueIdx++,i>=5?(this.revealHigh(s),e=620):(this.revealLow(s),e=55),this.timer=window.setTimeout(()=>{
- this.timer=0,this.processNext()}
- ,e)}
- revealLow(t){
- this.popIcon(t,!1)}
- revealHigh(t){
- const i=this.spawnPlaceholder(t),s=i.x,e=HI.timeline({
- onComplete:Kt(()=>{
- this.removePlaceholder(i),this.flashAtIcon(t),this.popIcon(t,!0)}
- ,"onComplete")}
- );
- e.to(i,{
- x:s+6,duration:.05,ease:"none",repeat:9,yoyo:!0}
- ),e.set(i,{
- x:s}
- )}
- popIcon(t,i){
- const s=this.iconScale;
- t.visible=!0,t.alpha=0;
- const e=i?1.55:1.3,n=i?.12:.09,h=HI.timeline();
- h.to(t,{
- alpha:1,duration:.05,ease:"power2.out"}
- ),h.fromTo(t.scale,{
- x:s*e,y:s*e}
- ,{
- x:s,y:s,duration:n,ease:i?"back.out(2.2)":"back.out(1.7)"}
- ,"<")}
- flashAtIcon(t){
- const i=this.iconNativeW*this.iconScale*1.15,s=this.iconNativeH*this.iconScale*1.15,e=.16*i,n=new Gf;
- n.poly([0,0,i-e,0,i,.5*s,i-e,s,0,s]),n.fill(16777215),n.pivot.set(.5*i,.5*s),n.x=t.x,n.y=t.y,n.alpha=0,this.gridContainer.addChild(n);
- const h=HI.timeline({
- onComplete:Kt(()=>{
- n.parent&&n.parent.removeChild(n)}
- ,"onComplete")}
- );
- h.to(n,{
- alpha:.9,duration:.05,ease:"power2.out"}
- ),h.to(n,{
- alpha:0,duration:.22,ease:"power2.out"}
- )}
- startRevealRewards(){
- if(this.rewardsRevealed=!0,!(this.grantedGem>0||this.grantedHonor>0||this.grantedHammer>0||Object.values(this.grantedPetPieces||{
+ function Iei(t){
+ switch(t.type){
+ case"quest":{
+ const i=rL.getInstance().getDataByKindNum(t.targetNum);
+ return!!i&&"level"===t.condType&&i.level>=t.condValue}
+ case"hero":{
+ const i=wx.getInstance().list;
+ let s=0;
+ for(const e of i)e&&("level"===t.condType&&e.level>=t.condValue&&s++,"enhance"===t.condType&&e.enhance>=t.condValue&&s++);
+ return s>=t.targetNum}
+ case"castle":{
+ const i=mR.getInstance().bookList,s=t.targetNum-1;
+ if(s<0||s>=i.length)return!1;
+ const e=i[s];
+ return!!e&&("level"===t.condType?e.level>=t.condValue:"enhance"===t.condType&&mR.getInstance().castleEnhance>=t.condValue)}
+ case"numRevive":return ML.numRevive>=t.targetNum;
+ case"maxRevive":return ML.maxWave>=t.targetNum;
+ case"heart":{
+ const i=mR.getInstance().specialBookList;
+ return 0!==i.length&&i[0].level>=t.targetNum}
+ case"core1":return Nx.getInstance().userCores[0]>=t.targetNum;
+ case"treasure":return Hx.getInstance().equipedKindNums.length>=t.targetNum;
+ case"maxTeam":return ML.maxTeamSlots>=t.targetNum;
+ case"speed2":return ML.speed15EndTime-tx.time>0;
+ case"pvpBattle":{
+ const t=oVt.getInstance().getPvp();
+ return!!t&&t.ticket<t.maxTicket}
+ case"towerBattle":{
+ const t=oVt.getInstance().getTower();
+ return!!t&&t.currentFloor>0}
+ case"dailyQuest":return lVt.getInstance().totalScore>0;
+ case"spiritBattle":return cx.getInstance().list.length>0;
+ case"mineClear":return jG.getInstance().status.mineExp>0;
+ case"guildJoin":return AD.hasGuild;
+ default:return!1}
- ).some(t=>Number(t)>0)))return void(this.allRevealed=!0);
- this.rewardContainer=this.buildRewardContainer(),this.gridContainer.addChild(this.rewardContainer);
- const t=this.rewardContainer;
- t.alpha=0,t.scale.set(.6);
- const i=HI.timeline({
- onComplete:Kt(()=>{
- this.allRevealed=!0}
- ,"onComplete")}
- );
- i.to(t,{
- alpha:1,duration:.18,ease:"power2.out"}
- ),i.to(t.scale,{
- x:1,y:1,duration:.28,ease:"back.out(1.8)"}
- ,"<")}
- buildRewardContainer(){
+ Vt(Cei,"parseCondition"),Vt(Iei,"checkCondition");
+ const kei=class t extends Ge{
+ constructor(){
+ super(),Kt(this,"sp",new He),Kt(this,"frame",0),Kt(this,"frameCount",0),Kt(this,"playing",!1),Kt(this,"currentTarget",null),Kt(this,"itemsGetters",new Map),Kt(this,"heroDetailPopupGetter",null),Kt(this,"bottomMenuGetter",null),Kt(this,"checking",!1),Kt(this,"retired",!1),Kt(this,"onBattleSwitchBind"),this.eventMode="none",this.addChild(this.sp),this.sp.x=-24,this.sp.y=-34,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return t._instance||(t._instance=new t),t._instance}
+ static load(){
+ this.textures||QA.hasSheet("ClickHand")&&(this.textures=QA.getTextures("ClickHand","ClickHand"))}
+ registerHeroDetailPopupGetter(t){
+ this.heroDetailPopupGetter=t}
+ registerBottomMenuGetter(t){
+ this.bottomMenuGetter=t}
+ onAdded(){
+ this.setBattleSwitch(!0)}
+ onRemoved(){
+ this.setBattleSwitch(!1)}
+ checkEnable(){
+ this.retired||ML.numRevive>=2&&this.retire()}
+ startCheck(t,i){
+ this.retired||(this.itemsGetters.set(t,i),this.checking||(this.checking=!0,LM.getInstance().add(this.onCheck,this)))}
+ stopCheck(t){
+ this.itemsGetters.delete(t),0===this.itemsGetters.size&&this.checking&&(this.checking=!1,LM.getInstance().remove(this.onCheck,this)),this.hideFromTarget()}
+ retire(){
+ this.retired||(this.retired=!0,this.hideFromTarget(),this.itemsGetters.clear(),this.checking&&(this.checking=!1,LM.getInstance().remove(this.onCheck,this)))}
+ onCheck(){
+ const t=Ujt.currentIndex;
+ 0===t&&this.checkQuest()||1===t&&this.checkHero()||2===t&&this.checkCastle()||this.hideFromTarget()}
+ checkQuest(){
+ if(!this.itemsGetters.has(0))return!1;
+ const t=rL.getInstance(),i=1===ML.numRevive,s=i?3:4;
+ for(let e=1;
+ e<=s;
+ e++){
+ const s=t.getDataByKindNum(e);
+ if(s){
+ if(!s.isOpen)return!!(s.canOpen&&ML.gold>=s.effectiveOpenGold)&&(this.showOnItem(0,t=>{
- const s=new Be,e=[];
- if(this.grantedGem>0){
- const t=new We(ZA.getTexture("UI_Ekkorr","UI_SHOP_GEM"));
- t.scale.set(.7),e.push({
- icon:t,label:new YD(String(this.grantedGem),aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18)}
- )}
- if(this.grantedHonor>0){
- const t=new We(ZA.getTexture("UI_Ekkorr","UI_COIN_Big"));
- t.scale.set(.7),e.push({
- icon:t,label:new YD(String(this.grantedHonor),aD.COLOR_PURPLE_PINK,aD.DEFAULT_FONT_OPTION_18)}
- )}
- if(this.grantedHammer>0){
- const t=new We(ZA.getTexture("UI_Ekkorr","Icon_Hammer_01")),s=null==(i=e[0])?void 0:i.icon.height;
- s&&t.height>0?t.scale.set(s/t.height*.6):t.scale.set(.42),e.push({
- icon:t,label:new YD(String(this.grantedHammer),aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_18)}
- )}
- const n=Kt(t=>t.icon.width+8+t.label.width,"groupW"),h=e.reduce((t,i)=>t+n(i),0)+36*Math.max(0,e.length-1),r=Math.max(28,...e.map(t=>Math.max(t.icon.height,t.label.height)));
- let o=.5*-h;
- for(const t of e)t.icon.x=o,t.icon.y=.5*(r-t.icon.height),o+=t.icon.width+8,t.label.x=o,t.label.y=.5*(r-t.label.height),o+=t.label.width+36,s.addChild(t.icon,t.label);
- const a=Object.entries(this.grantedPetPieces||{
+ return(null==(i=t.vo)?void 0:i.kindNum)===e}
+ ,"btnOpen"),!0);
+ if(!i&&s.getLevelUpGold()<=s.effectiveIncGold)return ML.gold>=s.getLevelUpGold()&&(this.showOnItem(0,t=>{
+ var i;
+ return(null==(i=t.vo)?void 0:i.kindNum)===e}
+ ,"btnOpen"),!0)}
- ).map(([t,i])=>({
- kindNum:Number(t),count:Number(i)}
- )).filter(t=>t.count>0).sort((t,i)=>t.kindNum-i.kindNum);
- let c=0;
- if(a.length>0){
- const t=22,i=[];
- let e=0;
- for(let s=0;
- s<a.length;
- s++){
- const n=a[s],h=new gK;
- h.setInactive(n.kindNum);
- const r=new YD(`×${
- n.count}
- `,aD.COLOR_BRIGHT_GREEN,aD.DEFAULT_FONT_OPTION_18);
- i.push({
- icon:h,label:r}
- ),e+=h.width,s<a.length-1&&(e+=t),c=Math.max(c,h.height)}
- const n=r+12;
- let h=.5*-e;
- for(let r=0;
- r<i.length;
+ if(i){
+ let i=!0;
+ for(let s=1;
+ s<=3;
+ const e=t.getDataByKindNum(s);
+ if(!e||!e.isOpen){
+ i=!1;
+ break}
+ }
+ if(i&&this.bottomMenuGetter){
+ const t=wx.getInstance(),i=t.getTeamIds();
+ for(const n of i){
+ const i=t.getVOWithId(n);
+ if(i&&i.enhance>=1)return!1}
- icon:e,label:o}
- =i[r];
- e.x=h,e.y=n+.5*(c-e.height),o.x=e.x+e.width-o.width-2,o.y=e.y+e.height-o.height-2,h+=e.width,r<i.length-1&&(h+=t),s.addChild(e,o)}
+ parent:s,btn:e}
+ =this.bottomMenuGetter();
+ return this.showOnTarget(s,e),!0}
- const l=KA.stageWidth||640,u=Math.max(1,Math.ceil(this.queue.length/t.COLS)),d=this.startY+u*this.iconNativeH*this.iconScale+(u-1)*t.GAP;
- return s.x=.5*l,s.y=d+24,s}
- forceShowRewards(){
- if(!this.rewardsRevealed||this.rewardContainer){
- if(!this.rewardsRevealed){
- if(this.rewardsRevealed=!0,!(this.grantedGem>0||this.grantedHonor>0||this.grantedHammer>0||Object.values(this.grantedPetPieces||{
- }
- ).some(t=>Number(t)>0)))return;
- this.rewardContainer=this.buildRewardContainer(),this.gridContainer.addChild(this.rewardContainer)}
- this.rewardContainer&&(HI.killTweensOf(this.rewardContainer),HI.killTweensOf(this.rewardContainer.scale),this.rewardContainer.alpha=1,this.rewardContainer.scale.set(1))}
- }
- skip(){
- if(!this.done){
- this.timer&&(clearTimeout(this.timer),this.timer=0);
- for(const t of Array.from(this.activePlaceholders))this.removePlaceholder(t);
- for(const t of this.placedIcons)HI.killTweensOf(t),HI.killTweensOf(t.scale),t.visible=!0,t.alpha=1,t.scale.set(this.iconScale);
- for(;
- this.queueIdx<this.queue.length;
- ){
- const t=this.queue[this.queueIdx],i=this.spawnIcon(this.queueIdx,t);
- i.visible=!0,i.alpha=1,i.scale.set(this.iconScale),this.queueIdx++}
- this.forceShowRewards(),this.allRevealed=!0}
- }
- finish(){
- this.done||(this.done=!0,this.timer&&(clearTimeout(this.timer),this.timer=0),window.setTimeout(()=>{
- HI.to(this,{
- alpha:0,duration:.25,ease:"power2.out",onComplete:Kt(()=>{
- this.cleanup(),this.onCompleteCb()}
- ,"onComplete")}
- )}
- ,400))}
- cleanup(){
- HI.killTweensOf(this),HI.killTweensOf(this.bg);
- for(const t of Array.from(this.activePlaceholders))this.removePlaceholder(t);
- for(const t of this.placedIcons)HI.killTweensOf(t),HI.killTweensOf(t.scale);
- this.rewardContainer&&(HI.killTweensOf(this.rewardContainer),HI.killTweensOf(this.rewardContainer.scale)),this.parent&&this.parent.removeChild(this)}
- }
- ;
- Kt(U9t,"SecretaryRevealOverlay"),zt(U9t,"COLS",6),zt(U9t,"GAP",6),zt(U9t,"PAD_X",24),zt(U9t,"PAD_TOP",80),zt(U9t,"PAD_BOTTOM",80),zt(U9t,"RESERVED_REWARD_H",200);
- let F9t=U9t;
- const H9t=class t{
- constructor(){
- zt(this,"timerId",0),zt(this,"busy",!1)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- static loadFromStorage(){
- return t._loadPromise||(t._loadPromise=(async()=>{
- try{
- const i=await $A.getSecretaryAutoEnabled();
- t._cachedAutoEnabled=!1!==i}
- catch{
- t._cachedAutoEnabled=!0}
- }
- )()),t._loadPromise}
- static isAutoEnabled(){
- return t._cachedAutoEnabled}
- static setAutoEnabled(i){
- t._cachedAutoEnabled=i,$A.setSecretaryAutoEnabled(i).catch(()=>{
- }
- ),i||t.getInstance().cancel()}
- async armOnLogin(){
- await t.loadFromStorage(),t.isAutoEnabled()&&this.schedule(t.DELAY_LOGIN_MS)}
- async armOnRebirth(){
- await t.loadFromStorage(),t.isAutoEnabled()&&this.schedule(t.DELAY_REBIRTH_MS)}
- cancel(){
- this.timerId&&(clearTimeout(this.timerId),this.timerId=0)}
- schedule(t){
- this.cancel(),this.timerId=window.setTimeout(()=>{
- this.timerId=0,this.tryShow()}
- ,t)}
- isBlockedByContext(){
- return!N9t.getInstance().isIdleBattleActive()||!!IL.getInstance().hasPopup||LV.getInstance().children.length>0}
- async tryShow(){
- var i,s,e,n,h,r,o,a,c,l,u,d,f,p,g,m,w,v;
- if(!this.busy)if(this.isBlockedByContext())this.schedule(t.RETRY_BLOCKED_MS);
- else if(!(_L.maxWave<t.UNLOCK_MAX_WAVE)){
- this.busy=!0;
- try{
- const t=await hD.getInstance().assistant.getState(!1);
- if(!t.success)return;
- const b=null==(s=null==(i=t.body)?void 0:i.assistant)?void 0:s.nextClaimAt;
- if("number"!=typeof b)return;
- if(ix.time<b)return;
- if(IL.getInstance().hasPopup)return;
- const y=await hD.getInstance().assistant.claim();
- if(!y.success)return;
- (null==(e=y.body)?void 0:e.user)&&(_L.setUserData(y.body.user),UV.getInstance().updateAll()),(null==(n=y.body)?void 0:n.hero)&&vx.getInstance().setData(y.body.hero),(null==(h=y.body)?void 0:h.pet)&&lx.getInstance().setData(y.body.pet),V9t.getInstance().updateFromAssistantBody(null==(r=y.body)?void 0:r.assistant);
- const _=(null==(a=null==(o=y.body)?void 0:o.claim)?void 0:a.granted)??{
- }
- ;
- if(0===Object.keys(_).length)return;
- if(IL.getInstance().hasPopup)return;
- const M=(null==(l=null==(c=y.body)?void 0:c.claim)?void 0:l.gem)??0,E=(null==(d=null==(u=y.body)?void 0:u.claim)?void 0:d.honorCoin)??0,A=(null==(p=null==(f=y.body)?void 0:f.claim)?void 0:p.petPieces)??{
- }
- ,S=(null==(m=null==(g=y.body)?void 0:g.claim)?void 0:m.hammer)??0;
- S>0&&BG.getInstance().isStatusLoaded&&(BG.getInstance().status.hammerCount+=S);
- const T="premium"===(null==(v=null==(w=y.body)?void 0:w.assistant)?void 0:v.tier)?"premium":"basic";
- L9t.getInstance().showResult(_,M,E,T,A,S,null,!0),lS.getInstance().dispatchCustomEvent("AssistantClaim")}
- finally{
- this.busy=!1}
- }
- }
- }
- ;
- Kt(H9t,"SecretaryAutoTrigger"),zt(H9t,"_instance"),zt(H9t,"DELAY_LOGIN_MS",6e4),zt(H9t,"DELAY_REBIRTH_MS",3e4),zt(H9t,"UNLOCK_MAX_WAVE",100),zt(H9t,"RETRY_BLOCKED_MS",5e3),zt(H9t,"_cachedAutoEnabled",!0),zt(H9t,"_loadPromise",null);
- let W9t=H9t;
- const j9t=Object.freeze(Object.defineProperty({
- __proto__:null,SecretaryAutoTrigger:W9t}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),$9t=class t{
- constructor(){
- zt(this,"cached",null),zt(this,"inflight",null)}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- peek(){
- return this.cached}
- async getState(t=!1){
- return!t&&this.cached?this.cached:(this.inflight||(this.inflight=(async()=>{
+ return!1}
+ checkHero(){
+ if(!this.itemsGetters.has(1))return!1;
+ const t=this.itemsGetters.get(1)();
+ if(!t||0===t.length)return!1;
+ const i=t[0];
+ if(!i||!i.vo||i.vo.level<=0)return!1;
+ if(1===ML.numRevive){
+ if(this.heroDetailPopupGetter){
+ const t=this.heroDetailPopupGetter();
+ if(t&&t.parent){
+ const i=t.getEnhanceGuideInfo();
+ if(i)return this.showOnTarget(i.parent,i.btn),!0}
+ return!1}
+ return!(i.vo.enhance>=1||(this.showOnTarget(i,{
+ x:80,y:40,width:0,height:0}
+ ),0))}
+ if(i.vo.level>=10)return!1;
+ const s=VR.getInstance().getGameplayMultiplier(OR.UnitUpgradeGold),e=Math.floor(K2.getInstance().getTotalGold(i.vo.level,i.vo.level+1)/s);
+ return ML.gold>=e&&(this.showOnTarget(i,i.btnUpgrade),!0)}
+ checkCastle(){
+ if(0!==ML.numRevive)return!1;
+ if(!this.itemsGetters.has(2))return!1;
+ const t=this.itemsGetters.get(2)();
+ if(!t||0===t.length)return!1;
+ const i=mR.getInstance(),s=i.castleVO.level;
+ if(s<5){
+ const t=K2.getInstance().getTotalGold(s,s+1);
+ return ML.gold>=t&&(this.showOnItem(2,t=>{
- try{
- const i=await hD.getInstance().assistant.getState(!1);
- return(null==i?void 0:i.success)?(this.applyAssistantBody(null==(t=i.body)?void 0:t.assistant),this.cached):this.cached}
- finally{
- this.inflight=null}
- }
- )()),this.inflight)}
- updateFromAssistantBody(t){
- this.applyAssistantBody(t)}
- invalidate(){
- this.cached=null}
- applyAssistantBody(t){
- if(!t||"object"!=typeof t)return;
- const i=t,s=this.cached,e="premium"===i.tier?"premium":"basic";
- let n=(null==s?void 0:s.petEvent)??null;
- if("petEvent"in i){
- const t=i.petEvent;
- if(null===t)n=null;
- else if(t&&"object"==typeof t){
- const i=t;
- n={
- kindNums:Array.isArray(i.kindNums)?i.kindNums.map(t=>"number"==typeof t?t:0).filter(t=>t>0):[],basicDailyCount:"number"==typeof i.basicDailyCount?i.basicDailyCount:0,premiumDailyCount:"number"==typeof i.premiumDailyCount?i.premiumDailyCount:0}
+ return 1===(null==(i=t.vo)?void 0:i.kindNum)}
+ ,"btnUpgrade"),!0)}
+ if(s>=5){
+ const t=i.getBookDataByKindNum(2);
+ if(t&&t.level<2)return ML.gold>=t.cost&&(this.showOnItem(2,t=>{
+ var i;
+ return 2===(null==(i=t.vo)?void 0:i.kindNum)}
+ ,"btnUpgrade"),!0);
+ const s=i.getBookDataByKindNum(3);
+ if(s&&s.level<2)return ML.gold>=s.cost&&(this.showOnItem(2,t=>{
+ var i;
+ return 3===(null==(i=t.vo)?void 0:i.kindNum)}
+ ,"btnUpgrade"),!0);
+ const e=i.getBookDataByKindNum(4);
+ if(e&&e.level<1)return ML.gold>=e.cost&&(this.showOnItem(2,t=>{
+ var i;
+ return 4===(null==(i=t.vo)?void 0:i.kindNum)}
+ ,"btnUpgrade"),!0)}
+ return!1}
+ showOnItem(t,i,s){
+ const e=this.itemsGetters.get(t);
+ if(!e)return;
+ const n=e();
+ for(let h=0;
+ h<n.length;
+ h++){
+ const t=n[h];
+ if(i(t)){
+ const i=t[s];
+ return void(i&&this.showOnTarget(t,i))}
- this.cached={
- nextClaimAt:"number"==typeof i.nextClaimAt?i.nextClaimAt:(null==s?void 0:s.nextClaimAt)??0,petEvent:n,tier:e}
- }
- async checkClaimable(){
- if(_L.maxWave<W9t.UNLOCK_MAX_WAVE)return!1;
- let t=this.peek();
- if(t||await this.getState(!1),t=this.peek(),!t)return!1;
- const i=ix.time;
- return!(t.nextClaimAt-i>0)}
+ showOnTarget(t,i){
+ if(this.currentTarget===t)return this.x=i.x+.55*i.width,this.y=i.y+.45*i.height,void t.addChild(this);
+ this.hideFromTarget(),this.currentTarget=t,this.x=i.x+.55*i.width,this.y=i.y+.45*i.height,t.addChild(this),this.show()}
+ hideFromTarget(){
+ this.currentTarget&&(this.currentTarget=null,this.hide(),this.removeFromParent())}
+ show(){
+ t.textures||t.load(),t.textures&&0!==t.textures.length&&(this.frame=0,this.frameCount=0,this.sp.texture=t.textures[0],this.visible=!0,this.playing||(this.playing=!0,LM.getInstance().add(this.onEnter,this)))}
+ hide(){
+ this.visible=!1,this.playing&&(this.playing=!1,LM.getInstance().remove(this.onEnter,this))}
+ onEnter(){
+ t.textures&&(this.frameCount++,this.frame+=.6,this.frame>=t.textures.length&&(this.frame=0),this.sp.texture=t.textures[Math.floor(this.frame)])}
+ destroy(){
+ this.itemsGetters.clear(),this.checking&&(this.checking=!1,LM.getInstance().remove(this.onCheck,this)),this.hide(),super.destroy(),this.setBattleSwitch(!1)}
+ setBattleSwitch(t){
+ cS.getInstance().removeEventListener("BattleSwitch",this.onBattleSwitchBind),t&&(this.onBattleSwitchBind=this.onBattleSwitch.bind(this),cS.getInstance().addEventListener("BattleSwitch",this.onBattleSwitchBind))}
+ async onBattleSwitch(t){
+ if(!t||!t.detail)return;
+ if(this.retired&&0==Tei.getInstance().isActive())return void this.setBattleSwitch(!1);
+ const i=t.detail.fromType,s=t.detail.toType;
+ i&&s&&(i==OU.IDLE&&s!=OU.IDLE?this.hide():i!=OU.IDLE&&s==OU.IDLE&&this.show())}
- Kt($9t,"SecretaryDataManager"),zt($9t,"_instance");
+ Vt(kei,"ClickHand"),Kt(kei,"_instance"),Kt(kei,"textures",null);
BaseRaidUnit 28 hunks, 315 statements
- startAttackDashTo(t,i,s=90){
- const e=Math.max(this.wanderMinX,Math.min(this.wanderMaxX,t)),n=Math.max(this.wanderMinY,Math.min(this.wanderMaxY,i)),h=e-this.x,r=n-this.y,o=Math.sqrt(h*h+r*r);
+ startAttackDashTo(t,i,s=90,e=!0){
+ const n=e?Math.max(this.wanderMinX,Math.min(this.wanderMaxX,t)):Math.max(40,Math.min(1560,t)),h=e?Math.max(this.wanderMinY,Math.min(this.wanderMaxY,i)):Math.max(40,Math.min(1e3,i)),r=n-this.x,o=h-this.y,a=Math.sqrt(r*r+o*o);
+ get isEntranceFlying(){
+ return this.entranceActive}
+ isAnyEnemyWithin(t){
+ if(!this.enemyList)return!1;
+ const i=t*t;
+ for(const s of this.enemyList){
+ if(!s.isAlive||s.removed)continue;
+ const t=s.x-this.x,e=s.y-this.y;
+ if(t*t+e*e<=i)return!0}
+ return!1}
+ startEntrance(t,i,s=2,e=!0){
+ this.entranceTargetX=t,this.entranceTargetY=i,this.entranceSpeed=s,this.entranceBreakOnEngage=e,this.entranceActive=!0,this.target=null,this.lookAt(t<this.x?-1:1),this.playSpine(this.aniMove,!0)}
- this.healthBar.visible=!1,this.addChild(this.healthBar),this.setHealthBarPosition(),this.generateShadow(),await this.ensureSpineReady()}
+ this.healthBar.visible=!1,this.healthBarVisible=!1,this.addChild(this.healthBar),this.setHealthBarPosition(),this.generateShadow(),await this.ensureSpineReady()}
- h.scale.set(this.bossScale*r*(this.direction>0?1:-1),this.bossScale),h.autoUpdate=!1,h.state.addListener({
+ h.scale.set(this.bossScale*r*(this.direction>0?1:-1),this.bossScale),h.autoUpdate=!1,h.state.data.defaultMix=this.spineMixDuration,h.state.addListener({
- case ex.IDLE:this.playSpine(this.aniIdle,!0);
+ case sx.IDLE:this.playSpine(this.aniIdle,!0,this.idleAnimTimeScale);
- playSpine(t,i){
+ playSpine(t,i,s=1){
+ var e;
+ const n=this.spineTimeScale*s;
+ if(i){
+ const i=this.spine.state.getCurrent(0);
+ if((null==(e=null==i?void 0:i.animation)?void 0:e.name)===t&&i.loop)return i.timeScale=n,i}
- return s.timeScale=this.spineTimeScale,s}
+ return h.timeScale=n,nQ(this.kindNum,t),h}
- super.gotoIdleState(),t||this.state!==ex.IDLE||(this.playSpine(this.aniIdle,!0),this.attackCoolDown=this.interSkillIdleFrames)}
+ super.gotoIdleState(),t||this.state!==sx.IDLE||(this.playSpine(this.aniIdle,!0,this.idleAnimTimeScale),this.attackCoolDown=this.interSkillIdleFrames)}
- super.gotoDieState(),t||this.state!==ex.DIE||this.playSpine(this.aniDie,!1)}
+ super.gotoDieState(),t||this.state!==sx.DIE||(this.playSpine(this.aniDie,!1),this.endBulletTime())}
+ if(this.entranceActive)return;
+ this.interruptEnabled&&(this.rollInterruptWindow(t),this.interruptArmed)?this.beginInterruptLeadIn(t):this.performSkillN(t)}
+ performSkillN(t){
- if(t!==this.eventSkill0Hit){
+ if(hQ(this.kindNum,t),t!==this.eventSkill0Hit){
- }
+ this.endShockwave(),this.disposeGroundMarker(),this.interruptEnabled&&(this.closeInterruptWindow(),this.interruptLeadFrames=0,this.interruptPendingIdx=0)}
- }
+ this.exhaustEnabled&&(this.exhaustPoiseTimer=this.exhaustPoiseFrames,this.inExhaustStun&&(this.inExhaustStun=!1,this.exhaustGauge=0,this.exhaustIncMult=1,this.syncRaidIncomingDamageMult(),this.resetExhaustTremble(),this.onExhaustWake(),this.startShockwave(this.x,this.y,this.wakeShockRadius,this.wakeShockPowerScale)))}
- return!(this.raidStunFrames<=0||!this.isAlive||this.state===ex.DIE||(this.raidStunFrames--,this.attackDashActive=!1,this.tx=this.x,this.ty=this.y,this.raidGroggyActive||(this.raidGroggyActive=!0,this.state=ex.IDLE,this.loop=!0,this.attackCoolDown=0,this.resetBoneSync(),this.playRaidGroggyAnimation()),this.spine&&this.isAlive&&this.spine.update(1/60),this.updateHitFlash(),this.updateHitKnockback(),this.raidStunFrames<=0&&(this.raidStunFrames=0,this.raidGroggyActive=!1,this.onRaidStunEnd(),this.state=ex.IDLE,this.loop=!0,this.attackCoolDown=0,this.playSpine(this.aniIdle,!0)),0))}
+ var t,i;
+ return!(this.raidStunFrames<=0||!this.isAlive||this.state===sx.DIE||(this.raidStunFrames--,this.attackDashActive=!1,this.tx=this.x,this.ty=this.y,this.raidGroggyActive||(this.raidGroggyActive=!0,this.state=sx.IDLE,this.loop=!0,this.attackCoolDown=0,this.resetBoneSync(),this.playRaidGroggyAnimation()),this.spine&&this.isAlive&&this.spine.update(1/60),this.updateHitFlash(),this.updateHitKnockback(),this.raidStunFrames<=0&&(this.raidStunFrames=0,this.raidGroggyActive=!1,this.onRaidStunEnd(),null==(i=null==(t=this.raidEventSink)?void 0:t.onRaidStunEnd)||i.call(t),this.state=sx.IDLE,this.loop=!0,this.attackCoolDown=0,this.playSpine(this.aniIdle,!0,this.idleAnimTimeScale)),0))}
- if(!this.executeRaidStunFrame()){
- if(this.immobile&&this.ensureAttackTarget(),super.execute(),this.wanderEnabled&&this.isAlive&&this.state!==ex.ATTACK&&this.state!==ex.SKILL&&this.state!==ex.DIE&&(this.wanderTimer++,this.wanderTimer>=this.wanderInterval&&(this.wanderTimer=0,this.triggerWander())),this.attackDashActive&&this.isAlive&&(this.state===ex.ATTACK||this.state===ex.SKILL)){
- const t=this.attackDashTargetX-this.x,i=this.attackDashTargetY-this.y,s=Math.sqrt(t*t+i*i);
- s<=this.attackDashSpeed?(this.x=this.attackDashTargetX,this.y=this.attackDashTargetY,this.attackDashActive=!1):(this.x+=t/s*this.attackDashSpeed,this.y+=i/s*this.attackDashSpeed)}
+ if(this.executeRaidStunFrame())this.updateRaidCommonSystems();
+ else{
+ if(!this.immobile&&this.wanderEnabled||this.ensureAttackTarget(),super.execute(),this.wanderEnabled&&this.isAlive&&!this.entranceActive&&this.state!==sx.ATTACK&&this.state!==sx.SKILL&&this.state!==sx.DIE&&(this.wanderTimer++,this.wanderTimer>=this.wanderInterval&&(this.wanderTimer=0,this.triggerWander())),this.attackDashActive&&this.isAlive&&(this.state===sx.ATTACK||this.state===sx.SKILL)){
+ const t=this.attackDashTargetX-(this.x-this._prevBoneOffX),i=this.attackDashTargetY-(this.y-this._prevBoneOffY),s=Math.sqrt(t*t+i*i);
+ s<=this.attackDashSpeed?(this.x=this.attackDashTargetX+this._prevBoneOffX,this.y=this.attackDashTargetY+this._prevBoneOffY,this.attackDashActive=!1):(this.x+=t/s*this.attackDashSpeed,this.y+=i/s*this.attackDashSpeed)}
+ if(this.entranceActive&&this.isAlive)if(this.entranceBreakOnEngage&&this.isAnyEnemyWithin(t.ENTRANCE_ENGAGE_RANGE))this.entranceActive=!1,this.playSpine(this.aniIdle,!0,this.idleAnimTimeScale);
+ else{
+ const t=this.entranceTargetX-this.x,i=this.entranceTargetY-this.y,s=Math.sqrt(t*t+i*i);
+ s<=this.entranceSpeed?(this.x=this.entranceTargetX,this.y=this.entranceTargetY,this.entranceActive=!1,this.playSpine(this.aniIdle,!0,this.idleAnimTimeScale)):(this.x+=t/s*this.entranceSpeed,this.y+=i/s*this.entranceSpeed)}
- this.wanderEnabled&&this.isAlive&&(this.x<this.wanderMinX?this.x=this.wanderMinX:this.x>this.wanderMaxX&&(this.x=this.wanderMaxX),this.y<this.wanderMinY?this.y=this.wanderMinY:this.y>this.wanderMaxY&&(this.y=this.wanderMaxY))}
+ if(this.wanderEnabled&&this.isAlive&&!this.entranceActive&&!this.attackDashActive&&this.state!==sx.ATTACK&&this.state!==sx.SKILL){
+ const i=t.WANDER_RETURN_SPEED;
+ this.x<this.wanderMinX?this.x=Math.min(this.wanderMinX,this.x+i):this.x>this.wanderMaxX&&(this.x=Math.max(this.wanderMaxX,this.x-i)),this.y<this.wanderMinY?this.y=Math.min(this.wanderMinY,this.y+i):this.y>this.wanderMaxY&&(this.y=Math.max(this.wanderMaxY,this.y-i))}
+ this.updateRaidCommonSystems()}
+ get boneSyncOffX(){
+ return this._prevBoneOffX}
+ get boneSyncOffY(){
+ return this._prevBoneOffY}
- super.resetForPool(),this.attackable=!0,this.isUntagetable=!1,this.raidStunFrames=0,this.hitFlashFrames=0,this.hitFlashHead=!1,this.knockVx=0,this.knockVy=0,this.raidGroggyActive=!1,this.attackDashActive=!1,this.arrAttackTypeList.length=0,this.numCurrentAttack=0,this.attackOrderIndex=0,this.wanderTimer=0,this.aggroFaceX=null,this._power=1,this.resetBoneSync(),this.spine&&(this.spine.visible=!0,this.spine.renderable=!0,this.spine.alpha=1,this.spine.state.clearTracks(),this.spine.skeleton.setToSetupPose(),this.captureRaidSlotBaseColors(),this.applyRaidBaseTint(),this.applyAnimationForState())}
- stun(t){
- }
- freeze(t){
- }
- curse(t){
- }
- silence(t){
- }
- binding(t,i=!0){
- }
- poison(t){
- }
- shock(t){
- }
+ super.resetForPool(),this.attackable=!0,this.isUntagetable=!1,this.raidStunFrames=0,this.hitFlashFrames=0,this.hitFlashHead=!1,this.knockVx=0,this.knockVy=0,this.raidGroggyActive=!1,this.attackDashActive=!1,this.entranceActive=!1,this.endBulletTime(),this.arrAttackTypeList.length=0,this.numCurrentAttack=0,this.attackOrderIndex=0,this.wanderTimer=0,this.aggroFaceX=null,this._power=1,this.resetBoneSync(),this.resetRaidCommonSystems(),this.spine&&(this.spine.visible=!0,this.spine.renderable=!0,this.spine.alpha=1,this.spine.state.clearTracks(),this.spine.skeleton.setToSetupPose(),this.captureRaidSlotBaseColors(),this.applyRaidBaseTint(),this.applyAnimationForState())}
+ stun(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"stun",i)}
+ freeze(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"freeze",i)}
+ curse(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"curse",i)}
+ silence(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"silence",i)}
+ binding(t,i=!0,s){
+ var e;
+ null==(e=this.vulnProcSink)||e.call(this,"binding",s)}
+ poison(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"poison",i)}
+ shock(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"shock",i)}
- }
+ var e;
+ null==(e=this.vulnProcSink)||e.call(this,"knockback")}
- }
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"blow")}
+ fallInLove(t,i){
+ var s;
+ null==(s=this.vulnProcSink)||s.call(this,"charm",i)}
+ if(this.interruptEnabled&&this.interruptArmed&&this.interruptWeakIdx>=0){
+ const t=this.interruptWeakBones[this.interruptWeakIdx],i=this.getBoneWorld(t);
+ if(i)return i}
- setRaidTint(t){
- this.raidTintR=(t>>16&255)/255,this.raidTintG=(t>>8&255)/255,this.raidTintB=(255&t)/255,this.hitFlashFrames<=0&&this.applyRaidBaseTint()}
- this.spine&&this.applySlotTint(this.raidTintR,this.raidTintG,this.raidTintB)}
+ this.spine&&this.applySlotTint(1,1,1)}
- this.hitFlashHead?(this.applySlotTint(this.raidTintR,this.raidTintG,this.raidTintB),this.setHeadTint(1,t,t)):this.applySlotTint(1+(this.raidTintR-1)*t,this.raidTintG*t,this.raidTintB*t)}
+ this.hitFlashHead?(this.applySlotTint(1,1,1),this.setHeadTint(1,t,t)):this.applySlotTint(1,t,t)}
- t<=this.raidStunFrames||(this.raidStunFrames=t,this.attackDashActive=!1,this.tx=this.x,this.ty=this.y,this.raidGroggyActive=!1,this.onRaidStunStart(),this.showEffect(yq.StunEffect,t,this.tmpPoint(0,this.getBuffPosY()),!0))}
+ var i,s;
+ this.exhaustEnabled&&this.exhaustPoiseTimer>0||t<=this.raidStunFrames||(this.raidStunFrames=t,this.attackDashActive=!1,this.entranceActive=!1,this.endBulletTime(),this.tx=this.x,this.ty=this.y,this.raidGroggyActive=!1,this.onRaidStunStart(),null==(s=null==(i=this.raidEventSink)?void 0:i.onRaidStunStart)||s.call(i,t),this.showEffect(PF.StunEffect,t,this.tmpPoint(0,this.getBuffPosY()),!0))}
+ updateRaidCommonSystems(){
+ this.exhaustEnabled&&(this.updateExhaustion(),this.updateExhaustTremble()),this.updateShockwave(),this.interruptEnabled&&(this.updateInterruptLeadIn(),this.updateInterruptGlow(),this.updateInterruptDebuffs()),this.updateBulletTime(),this.updateGroundMarker()}
+ startBulletTime(){
+ if(this.bulletTimePrevSpeed>=0)return;
+ const t=qG.getInstance();
+ this.bulletTimePrevSpeed=t.getSpeed(),this.bulletTimeRemaining=this.bulletTimeSimFrames,t.setSpeed(this.bulletTimeSpeed)}
+ endBulletTime(){
+ this.bulletTimePrevSpeed<0||(qG.getInstance().setSpeed(this.bulletTimePrevSpeed),this.bulletTimePrevSpeed=-1,this.bulletTimeRemaining=0)}
+ updateBulletTime(){
+ this.bulletTimePrevSpeed<0||(this.bulletTimeRemaining--,(this.bulletTimeRemaining<=0||!this.isAlive)&&this.endBulletTime())}
+ get weakWindowArmed(){
+ return this.interruptArmed}
+ updateBackstabZone(){
+ if(!this.backstabZoneEnabled||!this.isAlive)return void(this.backstabZone&&(this.backstabZone.visible=!1));
+ this.backstabZone||(this.backstabZone=new Lf,this.backstabZone.eventMode="none",this.addChildAt(this.backstabZone,0));
+ const t=this.backstabZone;
+ t.visible=!0;
+ const i=this.direction>0?1:-1;
+ if(i===this.backstabZoneDir)return;
+ this.backstabZoneDir=i;
+ const s=i>0?Math.PI:0,e=Math.PI/3,n=s-e,h=s+e,r=[{
+ r:290,alpha:.16}
+ ,{
+ r:430,alpha:.1}
+ ,{
+ r:570,alpha:.05}
+ ];
+ t.clear();
+ let o=150;
+ for(const a of r)t.moveTo(Math.cos(n)*o,Math.sin(n)*o).lineTo(Math.cos(n)*a.r,Math.sin(n)*a.r).arc(0,0,a.r,n,h).lineTo(Math.cos(h)*o,Math.sin(h)*o).arc(0,0,o,h,n,!0).closePath().fill({
+ color:3530952,alpha:a.alpha}
+ ),o=a.r;
+ for(const a of[n,h])t.moveTo(150*Math.cos(a),150*Math.sin(a)).lineTo(Math.cos(a)*r[1].r,Math.sin(a)*r[1].r).stroke({
+ width:2,color:16777215,alpha:.4}
+ )}
+ resetRaidCommonSystems(){
+ this.exhaustGauge=0,this.exhaustPoiseTimer=0,this.inExhaustStun=!1,this.exhaustStunTotalFrames=0,this.exhaustIncMult=1,this.resetExhaustTremble(),this.exhaustBar&&(this.exhaustBar.clear(),this.exhaustBar.removeFromParent(),this.exhaustBar.destroy(),this.exhaustBar=null),this.endShockwave(),this.shockMaxRadius=300,this.shockPowerScale=1,this.disposeGroundMarker(),this.backstabZoneEnabled=!1,this.backstabZoneDir=0,this.backstabZone&&(this.backstabZone.clear(),this.backstabZone.removeFromParent(),this.backstabZone.destroy(),this.backstabZone=null),this.interruptArmed=!1,this.interruptWeakIdx=-1,this.interruptMissStreak=0,this.interruptWindowFrames=0,this.interruptLeadFrames=0,this.interruptPendingIdx=0,this.skillInterrupted=!1,this.interruptGlowTick=0,this.interruptIncMult=1,this.interruptBleedMult=1;
+ for(let i=0;
+ i<t.IDBF_COUNT;
+ i++)this.interruptDebuffTimers[i]=0;
+ this.disposeInterruptGlow(),this.runeIncomingDamageMult=1,this.raidIncomingDamageMult=1,this.raidEventSink=null,this.vulnProcSink=null,this.exhaustStunExtendMult=1,this.interruptStunExtendMult=1,this.weakWindowExtendMult=1}
+ getTextEffectPoint(t,i){
+ const s=t-this.x,e=i-this.y,n=Math.sqrt(s*s+e*e),h=n>.001?s/n:0,r=n>.001?e/n:0,o=Math.max(40,this.hitWidth/2);
+ return{
+ x:this.x+h*o*.7,y:this.y-.45*this.hitHeight+r*o*.3}
+ }
+ addExhaustion(t){
+ this.raidStunFrames>0||(this.exhaustGauge+=t)}
+ onExhaustStart(){
+ }
+ onExhaustWake(){
+ }
+ updateExhaustion(){
+ if(this.isAlive){
+ if(this.inExhaustStun){
+ const t=this.exhaustStunTotalFrames||this.exhaustStunFrames,i=Math.max(0,Math.min(1,this.raidStunFrames/t));
+ this.exhaustGauge=this.exhaustMax*i}
+ else this.raidStunFrames<=0&&(this.exhaustPoiseTimer>0&&this.exhaustPoiseTimer--,this.exhaustGauge+=this.exhaustPassivePerFrame,this.exhaustGauge>=this.exhaustMax&&this.exhaustPoiseTimer<=0&&this.state===sx.IDLE&&this.triggerExhaustion());
+ this.drawExhaustBar()}
+ else this.drawExhaustBar()}
+ triggerExhaustion(){
+ const t=Math.round(this.exhaustStunFrames*Math.max(1,this.exhaustStunExtendMult)+60*Math.max(0,this.exhaustStunExtendSec));
+ this.inExhaustStun=!0,this.exhaustStunTotalFrames=t,this.exhaustTrembleTick=0,this.exhaustTrembleActive=!1,this.exhaustIncMult=this.exhaustDmgMult,this.syncRaidIncomingDamageMult(),this.onExhaustStart(),this.applyRaidStun(t)}
+ updateExhaustTremble(){
+ const t=this.spine;
+ if(!t)return;
+ const i=(this.exhaustStunTotalFrames||this.exhaustStunFrames)*this.wakeTrembleFraction;
+ if(this.inExhaustStun&&this.raidStunFrames>0&&this.raidStunFrames<=i){
+ this.exhaustTrembleTick++;
+ const s=1-Math.max(0,this.raidStunFrames)/Math.max(1,i),e=this.wakeTrembleAmpMin+(this.wakeTrembleAmpMax-this.wakeTrembleAmpMin)*s,n=this.exhaustTrembleTick;
+ t.x=Math.sin(1.7*n)*e,t.y=Math.cos(2.3*n)*e*.5,this.exhaustTrembleActive=!0}
+ else this.exhaustTrembleActive&&(t.x=0,t.y=0,this.exhaustTrembleActive=!1)}
+ resetExhaustTremble(){
+ this.exhaustTrembleActive=!1,this.exhaustTrembleTick=0,this.spine&&(this.spine.x=0,this.spine.y=0)}
+ drawExhaustBar(){
+ if(!this.isAlive)return void(this.exhaustBar&&(this.exhaustBar.visible=!1));
+ this.exhaustBar||(this.exhaustBar=new Lf,this.exhaustBar.eventMode="none",this.addChild(this.exhaustBar));
+ const t=this.exhaustBar;
+ t.visible=!0;
+ const i=this.exhaustBarWidth,s=this.exhaustBarHeight,e=-i/2,n=-this.hitHeight+this.exhaustBarOffsetY;
+ t.clear(),t.roundRect(e-1,n-1,i+2,s+2,3).fill({
+ color:0,alpha:.5}
+ ),t.roundRect(e,n,i,s,2).fill({
+ color:2239027,alpha:.9}
+ );
+ const h=Math.max(0,Math.min(1,1-this.exhaustGauge/this.exhaustMax));
+ let r=h<=.3?16742972:4637439,o=.95;
+ if(this.inExhaustStun){
+ const t=this.exhaustStunTotalFrames||this.exhaustStunFrames;
+ r=16726832,o=.95*(this.raidStunFrames<=t*this.wakeTrembleFraction?.55+.45*Math.sin(.9*this.exhaustTrembleTick):1)}
+ h>0&&t.roundRect(e,n,i*h,s,2).fill({
+ color:r,alpha:o}
+ )}
+ startShockwave(t,i,s,e=1){
+ this.shockActive=!0,this.shockCx=t,this.shockCy=i,this.shockRadius=0,this.shockMaxRadius=s,this.shockPowerScale=e,this.shockHit.clear(),this.shockRing||(this.shockRing=new E2),this.shockRing.show(t,i)}
+ updateShockwave(){
+ if(!this.shockActive)return;
+ this.shockRadius+=this.shockSpeed;
+ const t=this.shockMaxRadius,i=Math.min(this.shockRadius,t),s=i*i;
+ if(this.enemyList)for(const e of this.enemyList){
+ if(!e.isAlive||e.removed||e.isUntagetable)continue;
+ if(this.shockHit.has(e))continue;
+ const i=e.x-this.shockCx,n=e.y-this.shockCy,h=i*i+n*n;
+ if(h>s)continue;
+ if(this.shockHit.add(e),e.isImmovable)continue;
+ const r=Math.sqrt(h);
+ let o,a;
+ if(r<.01){
+ const t=this.random.next()*Math.PI*2;
+ o=Math.cos(t),a=Math.sin(t)}
+ else o=i/r,a=n/r;
+ const c=1-this.shockFarFalloff*Math.min(1,r/t),l=(this.shockBlowPowerMin+this.random.next()*(this.shockBlowPowerMax-this.shockBlowPowerMin))*this.shockBlowScale*c*this.shockPowerScale,u=-(this.shockBlowVhMin+this.random.next()*(this.shockBlowVhMax-this.shockBlowVhMin))*this.shockBlowScale*c*this.shockPowerScale;
+ e.blow(o*l,a*l,u)}
+ this.shockRing&&this.shockRing.update(i,this.shockRadius/t),this.shockRadius>=t&&this.endShockwave()}
+ endShockwave(){
+ this.shockActive=!1,this.shockHit.clear(),this.shockRing&&(this.shockRing.dispose(),this.shockRing=null)}
+ showGroundMarker(t,i,s,e=sx.ATTACK,n=95){
+ this.groundMarker||(this.groundMarker=new SK),this.groundMarker.show(t,i,s),this.groundMarkerFrames=0,this.groundMarkerTotal=n,this.groundMarkerValidState=e}
+ updateGroundMarker(){
+ if(!this.groundMarker)return;
+ if(this.state!==this.groundMarkerValidState)return void this.disposeGroundMarker();
+ this.groundMarkerFrames++;
+ const t=Math.min(1,this.groundMarkerFrames/this.groundMarkerTotal);
+ this.groundMarker.update(t)}
+ disposeGroundMarker(){
+ this.groundMarker&&(this.groundMarker.dispose(),this.groundMarker=null)}
+ setInterruptSystemEnabled(t){
+ this.interruptEnabled=t}
+ getInterruptHitRadius(){
+ return this.interruptHitRadius}
+ rollInterruptWindow(t){
+ var i,s;
+ if(this.skillInterrupted=!1,0===this.interruptWeakBones.length)return this.interruptArmed=!1,void(this.interruptWeakIdx=-1);
+ if(this.interruptAlwaysOpen||this.interruptMissStreak>=this.interruptPityStreak||this.random.next()<this.interruptChance){
+ this.interruptArmed=!0,this.interruptMissStreak=0,this.interruptGlowTick=0,this.interruptWeakIdx=Math.floor(this.random.next()*this.interruptWeakBones.length),this.interruptWindowFrames=this.interruptLeadTime+Math.round(this.interruptWindowMax*Math.max(1,this.weakWindowExtendMult));
+ const t=this.interruptWeakLabels[this.interruptWeakIdx]??"약점";
+ null==(s=null==(i=this.raidEventSink)?void 0:i.onWeakWindowOpen)||s.call(i,t)}
+ else this.interruptArmed=!1,this.interruptWeakIdx=-1,this.interruptMissStreak++}
+ beginInterruptLeadIn(t){
+ this.interruptPendingIdx=t,this.interruptLeadFrames=this.interruptLeadTime,this.attackCoolDown=this.interruptLeadTime+this.atkDuration,this.faceMajorityEnemies(),this.state=sx.SKILL,this.playSpine(this.aniIdle,!0,this.idleAnimTimeScale)}
+ updateInterruptLeadIn(){
+ if(!(this.interruptLeadFrames<=0)){
+ if(this.skillInterrupted||!this.interruptArmed||!this.isAlive)return this.interruptLeadFrames=0,void(this.interruptPendingIdx=0);
+ if(this.interruptLeadFrames--,this.interruptLeadFrames<=0){
+ const t=this.interruptPendingIdx;
+ this.interruptPendingIdx=0,this.interruptPostCastGlowFrames>0&&(this.interruptWindowFrames=this.interruptPostCastGlowFrames),t>=1&&this.performSkillN(t)}
+ }
+ }
+ tryCrossbowInterrupt(){
+ var t,i;
+ if(!this.interruptArmed||!this.isAlive||this.removed)return!1;
+ const s=this.getWeakPointWorld();
+ return this.skillInterrupted=!0,this.closeInterruptWindow(),this.exhaustEnabled?(this.addExhaustion(.5*this.exhaustMax),this.exhaustPoiseTimer=0,this.applyRaidStun(this.interruptStaggerFrames)):(this.exhaustPoiseTimer=0,this.applyRaidStun(Math.round(this.interruptStunFrames*Math.max(1,this.interruptStunExtendMult)))),this.applyRandomInterruptDebuff(),this.showTextEffect(MQ,s.x,s.y-20),null==(i=null==(t=this.raidEventSink)?void 0:t.onInterruptSuccess)||i.call(t),!0}
+ applyExtraInterruptDebuff(){
+ this.applyRandomInterruptDebuff()}
+ getInterruptDebuffRemains(){
+ return this.interruptDebuffTimers}
+ getInterruptExposurePct(){
+ return 100*(this.interruptIncMult-1)+100*(this.interruptBleedMult-1)}
+ applyRandomInterruptDebuff(){
+ const i=[];
+ for(let n=0;
+ n<t.IDBF_COUNT;
+ n++)this.interruptDebuffTimers[n]<=0&&i.push(n);
+ const s=i.length>0?i:[0,1,2,3,4],e=s[Math.floor(this.random.next()*s.length)];
+ this.applyInterruptDebuffType(e)}
+ applyInterruptDebuffType(i){
+ var s,e;
+ switch(this.interruptDebuffTimers[i]=this.interruptDebuffFrames,null==(e=null==(s=this.raidEventSink)?void 0:s.onBossDebuffApplied)||e.call(s,void 0!==t.IDBF_LABELS[i]?SG.getText(t.IDBF_LABEL_KEYS[i],t.IDBF_LABELS[i])+"!":"디버프!"),i){
+ case t.IDBF_DEF:this.removeDefenseBuff(yK.RaidWeakpoint_BOSS_DEFENSE),this.addDefenseBuff(yK.RaidWeakpoint_BOSS_DEFENSE,this.interruptDefValue,this.interruptDebuffFrames);
+ break;
+ case t.IDBF_ATKSPD:this.addAttackSpeedBuff(yK.RaidWeakpoint_BOSS_ATKSPD,this.interruptAtkspdValue,this.interruptDebuffFrames,!0);
+ break;
+ case t.IDBF_INCDMG:this.interruptIncMult=this.interruptIncdmgMult,this.syncRaidIncomingDamageMult();
+ break;
+ case t.IDBF_BLEED:this.interruptBleedMult=1+this.interruptBleedAmp,this.syncRaidIncomingDamageMult(),this.showEffect(PF.PoisonGreenEffect,this.interruptDebuffFrames,this.tmpPoint(0,this.getBuffPosY()),!0);
+ break;
+ case t.IDBF_MOVESPD:default:this.addMoveSpeedBuff(yK.RaidWeakpoint_BOSS_MOVESPD,this.interruptMovespdValue,this.interruptDebuffFrames,!0)}
+ }
+ setRuneIncomingDamageMult(t){
+ this.runeIncomingDamageMult=Math.max(0,t),this.syncRaidIncomingDamageMult()}
+ getExhaustIncMult(){
+ return this.exhaustIncMult}
+ syncRaidIncomingDamageMult(){
+ this.raidIncomingDamageMult=this.exhaustIncMult*this.interruptIncMult*this.interruptBleedMult*this.runeIncomingDamageMult}
+ updateInterruptDebuffs(){
+ for(let i=0;
+ i<t.IDBF_COUNT;
+ i++)this.interruptDebuffTimers[i]>0&&(this.interruptDebuffTimers[i]--,this.interruptDebuffTimers[i]<=0&&(i===t.IDBF_INCDMG?(this.interruptIncMult=1,this.syncRaidIncomingDamageMult()):i===t.IDBF_BLEED&&(this.interruptBleedMult=1,this.syncRaidIncomingDamageMult())))}
+ consumeInterruptWindow(){
+ return!!this.skillInterrupted||(this.interruptArmed&&this.closeInterruptWindow(),!1)}
+ closeInterruptWindow(){
+ var t,i;
+ this.interruptArmed&&(null==(i=null==(t=this.raidEventSink)?void 0:t.onWeakWindowClose)||i.call(t)),this.interruptArmed=!1,this.interruptGlow&&(this.interruptGlow.visible=!1)}
+ updateInterruptGlow(){
+ if(this.interruptArmed&&(this.interruptWindowFrames--,this.interruptWindowFrames<=0&&this.closeInterruptWindow()),!this.interruptArmed||!this.isAlive)return void(this.interruptGlow&&this.interruptGlow.visible&&(this.interruptGlow.visible=!1));
+ this.interruptGlow||(this.interruptGlow=new Lf,this.interruptGlow.eventMode="none",this.addChild(this.interruptGlow));
+ const t=this.interruptGlow;
+ t.parent!==this&&this.addChild(t),this.setChildIndex(t,this.children.length-1);
+ const i=this.getWeakPointWorld();
+ t.x=i.x-this.x,t.y=i.y-this.y,t.visible=!0,this.interruptGlowTick++;
+ const s=.5+.5*Math.sin(.35*this.interruptGlowTick),e=this.interruptHitRadius,n=e*(.7+.3*s);
+ t.clear(),t.circle(0,0,n).fill({
+ color:16726832,alpha:.3+.25*s}
+ ),t.circle(0,0,e).stroke({
+ width:3,color:16777215,alpha:.75+.25*s}
+ ),t.circle(0,0,e+3).stroke({
+ width:2,color:16726832,alpha:.5+.35*s}
+ );
+ const h=e+5,r=e+14;
+ for(let o=0;
+ o<4;
+ o++){
+ const i=Math.PI/2*o,e=Math.cos(i),n=Math.sin(i);
+ t.moveTo(e*h,n*h).lineTo(e*r,n*r).stroke({
+ width:3,color:16777215,alpha:.7+.3*s}
+ )}
+ if(this.interruptGlowTick<=36){
+ const i=this.interruptGlowTick/36,s=e*(3.4-2.4*(1-(1-i)*(1-i)));
+ t.circle(0,0,s).stroke({
+ width:3,color:16735050,alpha:.9*(1-i)+.1}
+ )}
+ }
+ disposeInterruptGlow(){
+ this.interruptGlow&&(this.interruptGlow.clear(),this.interruptGlow.removeFromParent(),this.interruptGlow.destroy(),this.interruptGlow=null)}
- Kt(t3,"BaseRaidUnit");
+ Vt(A2,"BaseRaidUnit"),Kt(A2,"WANDER_RETURN_SPEED",3),Kt(A2,"ENTRANCE_ENGAGE_RANGE",420),Kt(A2,"IDBF_DEF",0),Kt(A2,"IDBF_ATKSPD",1),Kt(A2,"IDBF_INCDMG",2),Kt(A2,"IDBF_BLEED",3),Kt(A2,"IDBF_MOVESPD",4),Kt(A2,"IDBF_COUNT",5),Kt(A2,"IDBF_LABELS",["방어력 감소","공격속도 감소","취약","출혈","이동속도 감소"]),Kt(A2,"IDBF_LABEL_KEYS",["GAME_1466","GAME_1470","GAME_1289","GAME_1462","GAME_1472"]);
ShopDataManager 8 hunks, 308 statements
- const C3=class{
+ const Z2=class t{
- zt(this,"id",-1),zt(this,"productId",-1),zt(this,"paybackType",""),zt(this,"paybackValue",-1),zt(this,"status",""),zt(this,"paidbackAt",null)}
+ Kt(this,"_unlockWave",10),Kt(this,"_nextMarketYn",""),Kt(this,"allProducts",[]),Kt(this,"packageList",[]),Kt(this,"periodList",[]),Kt(this,"normalList",[]),Kt(this,"wavePassList",[]),Kt(this,"reviewShopList",[]),Kt(this,"requestPending",!1),Kt(this,"_productIdsWithHammer",null),Kt(this,"objTargeting",{
- ;
- Kt(C3,"PaybackEventUserVO");
- let k3=C3;
- const O3=class{
- constructor(){
- zt(this,"id",-1),zt(this,"title",""),zt(this,"description",[]),zt(this,"startTime",null),zt(this,"endTime",null),zt(this,"paybackEndTime",null)}
- }
- ;
- Kt(O3,"PaybackEventVO");
- let I3=O3;
- const x3=class{
- static get opened(){
- return!1}
- static async getPaybackEvent(t,i=!1){
- let s=await hD.getInstance().payback.getPaybackEvent(t,i);
- s=this.getTestData(),0!=s.success?(this.setData(s.body),lS.getInstance().dispatchCustomEvent("PaybackEvent")):lS.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){
+ )}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ get unlockWave(){
+ return this._unlockWave}
+ get nextMarketYn(){
+ if(""==this._nextMarketYn){
+ const t=AL.getInstance().getClientData("NEXT_MARKET_YN");
+ this._nextMarketYn=t&&"N"==t?"N":"Y"}
+ return this._nextMarketYn}
+ async getAvailProducts(t,i=!0){
+ if(1==this.requestPending)return!1;
+ this.setRequestPending(!0);
+ const s=await rD.getInstance().shop.getAvailProducts(t,i);
+ return s.success?(this.setAvailProducts(s.body),this.setRequestPending(!1),!0):(this.setRequestPending(!1),!1)}
+ setAvailProducts(t){
+ if(!t)return;
+ const i=[];
+ for(const s of t)if("id"in s&&"count"in s){
+ const t=Number(s.id),e=Number(s.count),n=this.getById(t);
+ n&&(i.push(t),n.active=1,n.purchaseCount=e)}
+ for(const s of this.allProducts)i.includes(s.id)||(s.active=0)}
+ setRequestPending(t){
+ this.requestPending=t}
+ setData(t){
+ var i;
+ if(!t)return;
+ if(this.allProducts=[],this.packageList=[],this.periodList=[],this.normalList=[],this.wavePassList.length=0,this.reviewShopList.length=0,!t)return;
+ for(const e of t){
- 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",uU.digit(n.getUTCMonth()+1)).replace("DD",uU.digit(n.getUTCDate()));
- e=`${
- uU.digit(n.getUTCHours())}
- :${
- uU.digit(n.getUTCMinutes())}
- :${
- uU.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",uU.digit(e.getUTCMonth()+1)).replace("DD",uU.digit(e.getUTCDate()));
- n=`${
- uU.digit(e.getUTCHours())}
- :${
- uU.digit(e.getUTCMinutes())}
- :${
- uU.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",uU.digit(e.getUTCMonth()+1)).replace("DD",uU.digit(e.getUTCDate()));
- h=`${
- uU.digit(e.getUTCHours())}
- :${
- uU.digit(e.getUTCMinutes())}
- :${
- uU.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 k3);
- 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||!(gP.serverTime<t.endTime.getTime())}
- static isPaybackEnded(){
- const t=this.paybackEvent;
- return t.id<0||!t.paybackEndTime||!(gP.serverTime<t.paybackEndTime.getTime())}
- static hasReward(){
- if(1==this.isPaybackEnded())return!1;
+ id:e.id??0,productId:e.productId??0,name:e.name??"",sku:e.sku??"",googleId:e.googleId??"",appleId:e.appleId??"",googleIdKr:e.googleIdKr??"",appleIdKr:e.appleIdKr??"",main:e.main??0,sub:e.sub??0,sub2:e.sub2??0,position:e.position??0,payback:e.payback??0,currency:e.currency??"",price:e.price??0,usdPrice:e.usdPrice??0,appleKrPrice:e.appleKrPrice??0,slxPrice:e.slxPrice??0,amount:e.amount??e.price??0,maxPurchase:e.maxPurchase??0,frequency:e.frequency??0,rewards:e.rewards??[],iconNames:e.iconNames??"",descriptions:e.descriptions??"",descriptionLangIds:e.descriptionLangIds??"",imageURL:e.imageURL??"",purchaseCount:0,active:e.active??0,targeting:e.targeting}
+ ;
+ if(this.allProducts.push(t),t.targeting){
+ const s=(null==(i=t.targeting.triggerEvent)?void 0:i.type)??"";
+ s&&(this.objTargeting[s]||(this.objTargeting[s]=[]),this.objTargeting[s].push(t.productId))}
+ else if(0==t.main)switch(t.sub){
+ case 0:this.packageList.push(t);
+ break;
+ case 1:this.periodList.push(t);
+ break;
+ case 2:this.normalList.push(t)}
+ else 1==t.main?0===t.sub&&this.wavePassList.push(t):-1==t.main&&this.reviewShopList.push(t)}
+ this.packageList.sort((t,i)=>t.sub2!=i.sub2?t.sub2-i.sub2:t.position!=i.position?t.position-i.position:0),this.periodList.sort((t,i)=>{
+ var s,e,n,h;
+ let r=(null==(s=t.rewards)?void 0:s.some(t=>"yes"===t.subscribe||"assistant"===t.subType))?0:1,o=(null==(e=i.rewards)?void 0:e.some(t=>"yes"===t.subscribe||"assistant"===t.subType))?0:1;
+ return r!=o?r-o:(r=(null==(n=t.rewards)?void 0:n.some(t=>"buff"===t.type&&"speed"===t.subType))?0:1,o=(null==(h=i.rewards)?void 0:h.some(t=>"buff"===t.type&&"speed"===t.subType))?0:1,r!=o?r-o:t.sub2!=i.sub2?t.sub2-i.sub2:t.position!=i.position?t.position-i.position:0)}
+ ),this.normalList.sort((t,i)=>t.sub2!=i.sub2?t.sub2-i.sub2:t.position!=i.position?t.position-i.position:0);
+ const s=this.getByProductId(Q2.Secretary);
+ s&&this.reviewShopList.unshift(s)}
+ getAll(){
+ return this.allProducts}
+ getById(t){
+ return this.allProducts.find(i=>i.id===t)}
+ getByProductId(t){
+ return this.allProducts.find(i=>i.productId===t)}
+ getProductIdByStoreProductId(t){
+ if(!t)return 0;
+ for(const i of this.allProducts)if(i.googleId===t||i.googleIdKr===t||i.appleId===t||i.appleIdKr===t||i.sku===t)return i.productId;
+ return 0}
+ getStoreProductIdByProductId(t){
+ const i=this.getByProductId(t);
+ if(!i)return"";
+ const s=AL.getInstance();
+ if("toss"==s.envPlatform)return i.sku;
+ if("capacitor"==s.envPlatform){
+ if(s.isGoogleClientKr())return i.googleIdKr;
+ if(s.isAppleClientKr())return i.appleIdKr;
+ if(s.isGoogleClient())return i.googleId;
+ if(s.isAppleClient())return i.appleId}
+ return""}
+ getWavePassList(){
+ return this.wavePassList}
+ getPriceStr(i){
+ const s=t.getInstance().getByProductId(i);
+ if(!s)return"";
+ if(0==s.price)return SG.getText("COMMON_16","무료");
+ let e=`$${
+ s.usdPrice}
+ `;
+ const n=AL.getInstance();
+ if(0==s.usdPrice||n.isTossClient()||n.isGoogleClientKr())e="usd"===s.currency?`$${
+ s.price}
+ `:`₩${
+ Math.round(s.price).toLocaleString()}
+ `;
+ else if(n.isAppleClientKr()){
+ let t=s.appleKrPrice;
+ if(isNaN(t)||0==t){
- const i=this.paybacks.length;
+ try{
+ i=JSON.parse(n.getClientData("IN_APP_SHOP_APPLE_KR_PRICE"))}
+ catch(h){
+ i={
+ .99:"1100",1.99:"3300",2.99:"4400",4.99:"7700",7.99:"11000",9.99:"17000",14.99:"25000",19.99:"33000",24.99:"44000",29.99:"49000",34.99:"55000",49.99:"77000",99.99:"149000"}
+ }
+ (isNaN(t)||0==t)&&(t=s.price),t=i[String(s.usdPrice)]}
+ e=`₩${
+ Math.round(t).toLocaleString()}
+ `}
+ return e}
+ getRedGemPrice(i){
+ const s=t.getInstance().getByProductId(i);
+ return s?Math.round(100*s.usdPrice):0}
+ isAvailableForPurchaseWithProductId(t){
+ const i=this.getByProductId(t);
+ return!!i&&this.isAvailableForPurchase(i)}
+ isAvailableForPurchase(t){
+ return!!t&&(0==t.maxPurchase||t.purchaseCount<t.maxPurchase)}
+ isSubscriptionProductWithProductId(t){
+ const i=this.getByProductId(t);
+ return!!i&&this.isSubscriptionProduct(i)}
+ isSubscriptionProduct(t){
+ if(!t)return!1;
+ const i=t.rewards;
+ return!!Array.isArray(i)&&i.some(t=>"yes"===(null==t?void 0:t.subscribe))}
+ isReviewShop(){
+ const t=AL.getInstance();
+ if(1==t.isAppleClientKr()||1==t.isAppleClient()){
+ const t=AL.getInstance().getClientData("IN_APP_SHOP_REVIEW");
+ return!(!t||"Y"!=t)}
+ return!1}
+ getUsdPriceByKrwPrice(t){
+ let i=0;
+ switch(t){
+ case 1100:i=.99;
+ break;
+ case 3300:i=1.99;
+ break;
+ case 4400:i=2.99;
+ break;
+ case 6600:i=4.99;
+ break;
+ case 14e3:case 14300:i=9.99;
+ break;
+ case 22e3:i=14.99;
+ break;
+ case 28600:case 29e3:i=19.99;
+ break;
+ case 33e3:i=24.99;
+ break;
+ case 44e3:i=29.99;
+ break;
+ case 48400:case 49e3:i=34.99;
+ break;
+ case 66e3:i=49.99;
+ break;
+ case 148500:case 149e3:i=99.99}
+ return i}
+ getRewardMessage(t){
+ if(!t||0===t.length)return SG.getText("GAME_347","상품이 지급되었습니다.");
+ const i=[];
+ return t.includes("buff:ads")&&i.push(SG.getText("GAME_348","광고 제거 상품이 적용되었습니다.")),t.includes("buff:speed")&&i.push(SG.getText("GAME_349","2배속 상품이 적용되었습니다.")),t.includes("buff:assistant")&&i.push(SG.getText("GAME_1242","전문비서가 고용되었습니다.")),t.includes("pass")&&i.push(SG.getText("GAME_350","WAVE 패스가 활성화되었습니다.")),t.includes("mail")&&i.push(SG.getText("GAME_351","상품이 메일로 전송되었습니다.")),0==i.length&&i.push(SG.getText("GAME_347","상품이 지급되었습니다.")),i.join("\n")}
+ getProductIdsWithHammer(){
+ if(!this._productIdsWithHammer){
+ let t;
+ this._productIdsWithHammer=[];
+ const i=this.allProducts.length;
- ++s)if(t=this.paybacks[s],t.status==T3.CREATED||t.status==T3.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}
+ ++s){
+ if(t=this.allProducts[s],!t||!t.rewards)continue;
+ let i=!1;
+ const e=t.rewards.length;
+ for(let s=0;
+ s<e;
+ ++s)if("hammer"===t.rewards[s].type){
+ i=!0;
+ break}
+ i&&this._productIdsWithHammer.push(t.productId)}
+ return this._productIdsWithHammer}
+ getTargetingByType(t){
+ return this.objTargeting[t]}
- Kt(x3,"PaybackEventManager"),zt(x3,"paybackEvent",new I3),zt(x3,"paybacks",[]);
+ Vt(Z2,"ShopDataManager"),Kt(Z2,"instance");
+ let t5=Z2;
+ const i5=Object.freeze(Object.defineProperty({
+ __proto__:null,ShopDataManager:t5}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),s5=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"btnConfirm",new eG("확인")),Kt(this,"onConfirm",null),this.title="",this.lblMessage.y=90,this.contentContainer.addChild(this.lblMessage,this.btnConfirm);
+ let t=this.lblMessage.getStyle();
+ t.align="center",this.lblMessage.setStyle(t),cD.setLabelWrapWidth(this.lblMessage,500),this.btnConfirm.onClick=this.onConfirmClick.bind(this)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide();
+ let t=this.onConfirm;
+ this.onConfirm=null,null!==t&&t()}
+ show(t,i=null){
+ this.onConfirm=i,this.lblMessage.text=t,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
+ hide(){
+ super.hide(),this.title="",this.btnClose.visible=!0}
+ 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}
+ getDefaultPositionY(){
+ return.3*VA.stageHeight}
+ hideCloseBtn(){
+ this.btnClose.visible=!1}
+ onBackButton(){
+ return this.onConfirmClick(),!0}
+ }
+ ;
+ Vt(s5,"CommonMessagePopup"),Kt(s5,"_instance");
+ let e5=s5;
+ var n5=(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))(n5||{
+ }
+ );
+ const h5=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"img"),Kt(this,"heroIcon"),Kt(this,"petIcon"),Kt(this,"lblNum"),Kt(this,"_type",""),Kt(this,"_amount",0),Kt(this,"_grade",-1),Kt(this,"_kindNum",-1),Kt(this,"_subType",""),this.bg=new He(QA.getTexture("UI_Ekkorr","Frame_Reward_01")),this.addChild(this.bg),this.img=new He(QA.getTexture("UI_Ekkorr","UI_SHOP_GEM")),this.addChild(this.img),this.heroIcon=new Y2,this.heroIcon.visible=!1,this.heroIcon.height=this.bg.height,this.heroIcon.scale.x=this.heroIcon.scale.y,this.addChild(this.heroIcon),this.petIcon=new J2,this.petIcon.visible=!1,this.petIcon.scale=.9,this.addChild(this.petIcon);
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_18;
+ t.fill=cD.COLOR_WHITE,t.fontSize=18,this.lblNum=new JD("1",t.fill,t),this.addChild(this.lblNum),this.updateLayout()}
+ get width(){
+ return this.heroIcon.visible?this.heroIcon.width:this.bg.width}
+ get height(){
+ return this.heroIcon.visible?this.heroIcon.height:this.bg.height}
+ updateLayout(){
+ const t=this.bg.width,i=this.bg.height;
+ this.img.x=.5*(t-this.img.width),this.lblNum.visible?this.img.y=.5*(i-this.img.height)-3:this.img.y=.5*(i-this.img.height),this.heroIcon.visible?this.lblNum.x=.5*(this.heroIcon.width-this.lblNum.width)-7:this.lblNum.x=.5*(t-this.lblNum.width),this.lblNum.y=i-this.lblNum.height}
+ get type(){
+ return this._type}
+ get amount(){
+ return this._amount}
+ get grade(){
+ return this._grade}
+ get kindNum(){
+ return this._kindNum}
+ get subType(){
+ return this._subType}
+ setData(t,i,s=-1,e=-1,n=""){
+ this._type=t,this._amount=i,this._grade=s,this._kindNum=e,this._subType=n,this.img.visible=!1,this.bg.visible=!1,this.heroIcon.visible=!1,this.petIcon.visible=!1;
+ let h=1,r="";
+ t==n5.gem?(r="UI_SHOP_GEM",h=.85):t==n5.redGem?(r="UI_SHOP_RED_GEM",h=.83):t==n5.gold?(r="m_gold",h=.7):t==n5.honorCoin?(r="UI_COIN_Big",h=.8):t==n5.hammer?(r="Icon_Hammer",h=1.5):"dungeonTicket"==t?(r="DungeonTick",h=.8):t==n5.hero?(this.heroIcon.setDataWithKindNum(e),this.heroIcon.visible=!0):t==n5.ticket&&n==n5.heroGacha?r="Ticket_HeroGacha":t==n5.ticket&&n==n5.heroSelect?(r="Ticket_HeroSelect",h=.85):t==n5.trans&&n==n5.hero?r=9==this._grade?"Ticket_HeroTrans2":"Ticket_HeroTrans":t==n5.pet?(this.petIcon.setPet(e,1),this.petIcon.visible=!0):t==n5.petTicket||n==n5.petTicket||t==n5.ticket&&n==n5.pet?(r="PetTick",h=.9):t==n5.petSelect||n==n5.petSelect||t==n5.ticket&&n==n5.petSelect?(r="Ticket_PetSelect",h=.9):t==n5.ticket&&n==n5.treasureGacha?(r="Ticket_TreasureGacha",h=.95):t==n5.trans&&n==n5.treasure?r=7===this._grade?"Ticket_TreasureTrans7":"Ticket_TreasureTrans6":t==n5.ads?(r="AdsRemove",h=.7):t==n5.speed?(r="UI_SHOP_SPEED2",h=.8):t==n5.assistant?(r="Package_Secretary",h=.7):t==n5.guildCoin||t==n5.guildPoint?(r="GUILD_COIN",h=1.6):t==n5.raidCoin?(r="RaidCoin_on",h=1.5):t==n5.runeTicket&&(r="RuneTicket",h=1.2),r&&(this.img.scale=h,this.img.texture=QA.getTexture("UI_Ekkorr",r),this.img.visible=!0,this.bg.visible=!0),t==n5.ads||t==n5.speed||t==n5.assistant?this.lblNum.text=`${
+ i}
+ D`:this.lblNum.text=String(i),this.updateLayout()}
+ setDataFrom(t){
+ if(!t||!t.type||!t.amount)return;
+ let i=String(t.type),s=Number(t.amount),e="grade"in t?Number(t.grade):-1,n="kindNum"in t?Number(t.kindNum):-1,h="";
+ "subType"in t&&(h=t.subType),this.setData(i,s,e,n,h)}
+ reset(){
+ this._type="",this._amount=0,this._grade=-1,this._kindNum=-1,this._subType=""}
+ showAmount(){
+ this.lblNum.visible||(this.lblNum.visible=!0,this.updateLayout())}
+ hideAmount(){
+ this.lblNum.visible&&(this.lblNum.visible=!1,this.updateLayout())}
+ }
+ ;
+ Vt(h5,"RewardItem");
+ let r5=h5;
+ const o5=class extends Ge{
+ constructor(){
+ super(),Kt(this,"bg"),Kt(this,"lbl"),Kt(this,"onHide",null),Kt(this,"_width",100),Kt(this,"_widthMax",570),Kt(this,"count",0),this.eventMode="none",this.bg=this.getBg(),this.bg.alpha=.9;
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ t.fill=14405050,t.stroke={
+ color:"#333333",width:3,join:"round"}
+ ,this.lbl=new JD("0",t.fill,t),this.lbl.x=15,this.lbl.y=12,cD.setLabelWrapWidth(this.lbl,this._widthMax-2*this.lbl.x),this.addChild(this.bg,this.lbl),this.text="tooltip"}
+ getBg(){
+ return new TM({
+ texture:QA.getTexture("UI_Ekkorr","Btn_Unit_01"),leftWidth:30,topHeight:20,rightWidth:30,bottomHeight:20}
+ )}
+ set text(t){
+ this.lbl.text=t,this._width=this.lbl.width+2*this.lbl.x+5,this._width>this._widthMax&&(this._width=this._widthMax),this.updateBg()}
+ updateBg(){
+ this.bg.width=this._width,this.bg.height=this.lbl.height+2*this.lbl.y}
+ show(t,i,s,e=null){
+ this.x=i,this.y=s,t&&t.addChild(this),this.startCheckHide(),this.onHide=e}
+ hide(){
+ this.parent&&this.parent.removeChild(this);
+ let t=this.onHide;
+ this.onHide=null,null!==t&&t()}
+ get width(){
+ return this._width}
+ get widthMax(){
+ return this._widthMax}
+ set widthMax(t){
+ this._widthMax=t,cD.setLabelWrapWidth(this.lbl,this._widthMax-2*this.lbl.x)}
+ get height(){
+ return this.bg.height}
+ startCheckHide(){
+ this.count=0,LM.getInstance().add(this.checkHide,this)}
+ checkHide(){
+ ++this.count>180&&(this.count=0,this.hide(),LM.getInstance().remove(this.checkHide,this))}
+ }
+ ;
+ Vt(o5,"ToolTipBase");
+ let a5=o5;
+ const c5=class t extends a5{
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ constructor(){
+ super()}
+ }
+ ;
+ Vt(c5,"ToolTip"),Kt(c5,"_instance");
GuildRaidBattleReadyPopup 26 hunks, 283 statements
- function Z6t(t,i,s){
- if(!ZA.hasSheet("UI_Ekkorr"))return null;
- const e=ZA.getSheet("UI_Ekkorr").textures,n=s?"on":"off";
- for(const h of[`Raid${
- t}
- _${
- i}
- _${
- n}
- `,`raid${
- t}
- _${
- i}
- _${
- n}
- `])if(e[h])return e[h];
- return null}
- Kt(Z6t,"getRaidBossTexture");
+ const t=s(c),i=new Hzt;
+ i.scale=.72,i.x=t+2,i.y=o,i.onClick=()=>this.openFormation(),this.addChild(i),this.heroBtns.push(i);
- t.scale=.72,t.x=67+104*e,t.y=i,t.onClick=()=>this.openFormation(),this.addChild(t),this.heroBtns.push(t);
+ e.scale=.72,e.x=t+2,e.y=a,e.onClick=()=>this.openFormation(),this.addChild(e),this.soldierBtns.push(e);
+ const n=new JD("",16772744,{
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ );
+ n.textColor=16772744,n.visible=!1,n.eventMode="none",this.addChild(n),this.soldierCountLbls.push(n);
+ const h=new Hg({
+ text:"",style:new Ag({
+ fontFamily:"Arial",fontSize:14,fontWeight:"bold",fill:16772710,stroke:{
+ color:0,width:3}
+ }
+ )}
+ );
+ h.anchor.set(1,0),h.eventMode="none",h.visible=!1,this.addChild(h),this.soldierStageBadges.push(h);
- n.scale=.62,n.x=67+104*e+8,n.y=s,n.onClick=()=>this.openFormation(),this.addChild(n),this.soldierBtns.push(n)}
- this.btnFormation=new QL("편성"),this.btnFormation.color=QL.BROWN,this.btnFormation.width=180,this.btnFormation.height=50,this.btnFormation.x=.5*this.bg.width-this.btnFormation.width-10,this.btnFormation.y=this.bg.height-65,this.btnFormation.onClick=()=>this.openFormation(),this.addChild(this.btnFormation),this.btnBattle=new QL("도전"),this.btnBattle.color=QL.RED,this.btnBattle.width=180,this.btnBattle.height=50,this.btnBattle.x=.5*this.bg.width+10,this.btnBattle.y=this.btnFormation.y,this.btnBattle.onClick=()=>{
+ r.eventMode="none",r.visible=!1,this.addChild(r),this.soldierVulnBadges.push(r);
+ const l=new Ge;
+ l.eventMode="none",l.visible=!1,this.addChild(l),this.heroVulnBadges.push(l)}
+ this.crossbowSlotBtn=new Hzt,this.crossbowSlotBtn.scale=.72,this.crossbowSlotBtn.x=s(KQt.CROSSBOW_SLOT)+2,this.crossbowSlotBtn.y=o,this.crossbowSlotBtn.onClick=()=>this.openRuneSetup(KQt.CROSSBOW_SLOT),this.addChild(this.crossbowSlotBtn);
+ for(let t=0;
+ t<6;
+ t++){
+ const i=s(t),n=90;
+ this.emblemSlotX.push(i),this.emblemSlotW.push(n);
+ const o=new Lf;
+ o.x=i,o.y=h,o.eventMode="static",o.cursor="pointer";
+ const a=t;
+ o.on("pointerup",()=>this.openRuneSetup(a)),this.addChild(o),this.emblemBgs.push(o);
+ const c=new He;
+ c.anchor.set(.5),c.eventMode="none",c.visible=!1,c.position.set(i+n/2,h+e/2),this.addChild(c),this.emblemIcons.push(c);
+ const l=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17);
+ l.eventMode="none",this.addChild(l),this.emblemLbls.push(l);
+ const u=new Lf;
+ u.x=i+.5*(n-70),u.y=r,u.eventMode="none",this.addChild(u),this.emblemDots.push(u)}
+ this.btnFormation=new ZL(SG.getText("GAME_1507","고속훈련")),this.btnFormation.color=ZL.BROWN,this.btnFormation.width=180,this.btnFormation.height=50,this.btnFormation.x=.5*this.bg.width-this.btnFormation.width-10,this.btnFormation.y=this.bg.height-65,this.btnFormation.onClick=()=>this.openFormation(!0),this.addChild(this.btnFormation),this.btnBattle=new ZL(SG.getText("COMMON_378","도전")),this.btnBattle.color=ZL.RED,this.btnBattle.width=180,this.btnBattle.height=50,this.btnBattle.x=.5*this.bg.width+10,this.btnBattle.y=this.btnFormation.y,this.btnBattle.onClick=()=>{
- ,this.addChild(this.btnBattle)}
+ ,this.addChild(this.btnBattle),this.lblBattleState=new JD("",16737894,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblBattleState.y=this.btnBattle.y-28,this.addChild(this.lblBattleState),this.btnPractice=new ZL(SG.getText("GAME_1486","연습")),this.btnPractice.color=ZL.GREEN,this.btnPractice.width=120,this.btnPractice.height=44,this.btnPractice.x=this.bg.width-20-this.btnPractice.width,this.btnPractice.y=this.colPanelY+this.colPanelH+10,this.btnPractice.onClick=()=>{
+ this.onPracticeClick()}
+ ,this.addChild(this.btnPractice)}
- this.options=t,this.selectedSquads=t.initialSquads,this.requestPending=!1,await this.ensureBarracksLoaded(),this.refresh(),this.show2()}
+ if(this.options=t,this.selectedSquads=t.initialSquads,this.requestPending=!1,await this.ensureBarracksLoaded(),await OQt.getInstance().ensureLoaded(),await KQt.getInstance().ensureLoaded(),!QA.hasSheet("UI_RAID")){
+ const t="ktx2";
+ await QA.generateTexture("UI_RAID",t,!1)}
+ this.refresh(),this.show2()}
- const i=Q6t.getInstance();
- this.lblTitle.text=`${
- i.getMainName(t.main)}
-  ${
- t.difficult}
- 단계`,this.lblBossName.text=`${
- t.bookVO.name}
+ const i=t.bookVO;
+ this.lblBossName.text=`${
+ PJt.getInstance().getBossName(i)}
- t.bookVO.level}
- `,this.lblBossDesc.text=t.bookVO.desc||"보스를 공격할 편성을 준비하세요.";
+ i.level}
+ `,this.btnBossGuide.x=this.lblBossName.x+this.lblBossName.width+10,this.btnBossGuide.y=this.lblBossName.y+.5*(this.lblBossName.height-this.btnBossGuide.height)+3,this.rebuildTribeRow(i);
+ const s=Nzt(i.resistType);
+ if(s&&i.showRecommend&&i.recommendResist>0){
+ const t=cx.getInstance().getRaidResist(i.resistType);
+ this.lblResist.text=SG.getValueReplaceMulti("GAME_1286",["\\{
+ 0\\}
+ ","\\{
+ 1\\}
+ ","\\{
+ 2\\}
+ "],[s,t,i.recommendResist],`${
+ s}
+ 저항 : ${
+ t}
+  ( 추천 ${
+ i.recommendResist}
+ + )`)}
+ else this.lblResist.text="";
+ this.lblGimmick.text=`${
+ SG.getText("GAME_1287","크로스보우")}
+  : ${
+ i.hasCrossbow?"O":"X"}
+    ·   ${
+ SG.getText("GAME_1288","후방공격")}
+  : ${
+ i.backAttack?"O":"X"}
+ `,this.rebuildVulnRow(i);
- this.bossIcon.visible=!!s,s&&(this.bossIcon.texture=s,this.bossIcon.width=84,this.bossIcon.height=84),this.drawHpBar(t.curHp,t.maxHp),this.updateStatus(),this.refreshSquads()}
+ this.bossIcon.visible=!!e,e&&(this.bossIcon.texture=e,this.bossIcon.width=84,this.bossIcon.height=84),this.drawHpBar(t.curHp,t.maxHp),this.updateStatus(),this.refreshSquads(),this.refreshEmblemRow()}
+ rebuildTribeRow(t){
+ for(const n of this.tribeRow.removeChildren())n.destroy({
+ children:!0}
+ );
+ const i=[];
+ if(t.plusTribe&&t.plusValue>0&&i.push({
+ tribe:String(t.plusTribe).toLowerCase(),text:`+${
+ t.plusValue}
+ %`,color:8313175}
+ ),t.minusTribe&&t.minusValue>0&&i.push({
+ tribe:String(t.minusTribe).toLowerCase(),text:`-${
+ t.minusValue}
+ %`,color:16743022}
+ ),0===i.length)return;
+ const s=new JD(`${
+ SG.getText("GAME_1285","종족상성")}
+  : `,13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ s.y=.5*(22-s.height),this.tribeRow.addChild(s);
+ let e=s.x+s.width+4;
+ for(const n of i){
+ const t=Czt[n.tribe]?QA.getTexture("UI_Ekkorr",Czt[n.tribe]):null;
+ if(t){
+ const i=new He(t);
+ i.width=22,i.height=22,i.x=e,this.tribeRow.addChild(i),e+=26}
+ else{
+ const t=new JD(Ozt(n.tribe)||n.tribe,13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ t.x=e,t.y=.5*(22-t.height),this.tribeRow.addChild(t),e+=t.width+4}
+ const i=new JD(n.text,n.color,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ i.x=e,i.y=.5*(22-i.height),this.tribeRow.addChild(i),e=i.x+i.width+16}
+ }
+ async rebuildVulnRow(t){
+ var i;
+ for(const e of this.vulnRow.removeChildren())e.destroy({
+ children:!0}
+ );
+ const s=Object.entries(t.vulns??{
+ }
+ ).filter(([,t])=>t>0);
+ if(s.length>0&&!QA.hasSheet("UI_RAID")){
+ const s="ktx2";
+ if(await QA.generateTexture("UI_RAID",s,!1),(null==(i=this.options)?void 0:i.bookVO)!==t)return}
+ if(s.length>0){
+ const t=new JD(SG.getText("GAME_1289","취약"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ t.y=6,this.vulnRow.addChild(t);
+ let i=Math.max(42,t.width+10);
+ for(const[e]of s){
+ if(_zt[e]){
+ const t=new He(QA.getTexture("UI_RAID",_zt[e]));
+ t.width=30,t.height=30,t.x=i,this.vulnRow.addChild(t)}
+ i+=38}
+ }
+ this.refreshSquads()}
+ refreshEmblemRow(){
+ var i;
+ const s=OQt.getInstance(),e=t.EMBLEM_H,n=(null==(i=this.options)?void 0:i.bookVO.hasCrossbow)??!0;
+ for(let t=0;
+ t<this.emblemBgs.length;
+ t++){
+ const i=t===KQt.CROSSBOW_SLOT,h=i?s.getEmblemBySlot("crossbow"):s.getEmblemByCorpIndex(t),r=this.emblemSlotW[t],o=a9t[(null==h?void 0:h.role)??""]??8947848,a=i&&!n?.4:1,c=this.colPanels[t];
+ c&&(c.clear(),c.roundRect(this.emblemSlotX[t]-4,this.colPanelY,r+8,this.colPanelH,10).fill({
+ color:o,alpha:.12}
+ ));
+ const l=this.emblemBgs[t];
+ l.clear(),l.roundRect(0,0,r,e,8).fill({
+ color:K7t(2366741,o,.13),alpha:.95}
+ ),l.roundRect(4,6,3,e-12,1.5).fill({
+ color:o,alpha:.9}
+ );
+ const u=this.emblemIcons[t],d=this.emblemLbls[t],f=h?LJt[h.role]:void 0;
+ if(u&&f&&QA.hasSheet("UI_RAID")){
+ u.texture=QA.getTexture("UI_RAID",f);
+ const t=32/Math.max(1,u.texture.height);
+ u.scale.set(t),u.visible=!0,d.text=""}
+ else u&&(u.visible=!1),d.text=h?h.name.slice(0,2):"?";
+ d.x=l.x+.5*(r-d.width),d.y=l.y+.5*(e-d.height);
+ const p=this.emblemDots[t];
+ p.clear();
+ const g=KQt.getInstance().getSlotRunes(t),m=QA.hasSheet("UI_RAID"),w=13,v=14;
+ for(let t=0;
+ t<KQt.MAX_RUNES;
+ t++){
+ const i=t*v+.5*v,s=8,e=g[t],n=h?Y7t(h.runeType,e?e.grade:1):null,r=m&&n?QA.getTexture("UI_RAID",n):null;
+ if(r){
+ const t=w/Math.max(1,r.height),n=r.width*t;
+ p.texture(r,e?16777215:8682606,i-n/2,s-w/2,n,w)}
+ else e?p.circle(i,s,4).fill({
+ color:c9t[e.grade-1]??16777215}
+ ):p.circle(i,s,3.5).stroke({
+ width:1,color:8947848,alpha:.8}
+ )}
+ i&&(c&&(c.alpha=a),l.alpha=a,u&&(u.alpha=a),d.alpha=a,p.alpha=a,this.crossbowSlotBtn.alpha=a)}
+ }
+ openRuneSetup(t){
+ o9t.getInstance().open(t,()=>this.refreshEmblemRow())}
+ var i;
- const i=[`오늘 남은 도전 횟수 : ${
- t.userTicket}
- `];
- t.limitTimeMs>0&&i.push(`남은 시간 : ${
+ const e=Math.max(0,Math.min(t.TICKET_MAX,s.userTicket)),n=t.TICKET_OVERLAP_STEP,h=(null==(i=this.ticketIcons[0])?void 0:i.width)??0,r=e>0?h+(e-1)*n:0,o=this.bg.width-20-r;
+ for(let t=0;
+ t<this.ticketIcons.length;
+ t++)this.ticketIcons[t].visible=t<e,this.ticketIcons[t].x=o+t*n;
+ const a=[];
+ s.limitTimeMs>0&&a.push(`${
+ SG.getText("COMMON_29","남은 시간")}
+  : ${
- `),t.timeLimit&&i.push("시간 초과"),t.currentBattleUser&&i.push(`전투중 : ${
+ `),s.timeLimit&&a.push(SG.getText("GAME_1282","시간 초과")),s.currentBattleUser&&a.push(SG.getValueReplace("GAME_1276","\\{
+ 0\\}
+ ",s.currentBattleUser,`전투중 : ${
- `),this.lblStatus.text=i.join("   "),this.lblStatus.textColor=t.timeLimit||t.currentBattleUser||t.userTicket<=0?16737894:11184810;
+ `)),this.lblStatus.text=a.join("   "),this.lblStatus.textColor=s.timeLimit||s.currentBattleUser||s.userTicket<=0?16737894:11184810;
- this.btnBattle.activated=s}
+ this.btnBattle.activated=c,s.currentBattleUser?this.lblBattleState.text=SG.getValueReplace("GAME_1276","\\{
+ 0\\}
+ ",s.currentBattleUser,`전투중 : ${
+ s.currentBattleUser}
+ `):this.lblBattleState.text="",this.lblBattleState.x=Math.max(15,Math.min(this.bg.width-15-this.lblBattleState.width,this.btnBattle.x+.5*(this.btnBattle.width-this.lblBattleState.width)))}
- const i=this.parseSquads(this.selectedSquads),s=i.some(t=>t.heroKindNum>0);
- this.lblSquadHint.text=s?"선택한 공격 편성을 확인한 뒤 도전하세요.":"공격 편성을 먼저 선택하세요.";
+ const i=this.parseSquads(this.selectedSquads);
- this.setHeroButton(this.heroBtns[e],(null==t?void 0:t.heroKindNum)??-1,(null==t?void 0:t.heroTrans)??0),this.setHeroButton(this.soldierBtns[e],this.resolveSoldierKind((null==t?void 0:t.barrackKindNum)??0),0)}
- }
+ this.setHeroButton(this.heroBtns[s],(null==t?void 0:t.heroKindNum)??-1,(null==t?void 0:t.heroTrans)??0),this.refreshHeroVulnBadge(s,(null==t?void 0:t.heroKindNum)??-1),this.refreshSoldierSlot(s,(null==t?void 0:t.barrackKindNum)??0)}
+ this.setHeroButton(this.crossbowSlotBtn,9999,0)}
+ refreshSoldierSlot(t,i){
+ const s=this.soldierBtns[t],e=this.soldierCountLbls[t],n=this.soldierStageBadges[t],h=kG.getInstance(),r=i>0?h.getBook(i):null;
+ if(!r)return this.setHeroButton(s,-1,0),e.visible=!1,n.visible=!1,void(this.soldierVulnBadges[t].visible=!1);
+ const o=h.getState(r.tribe),a=h.computeInstructorsForBarrack(r),c=o?h.computeSoldiers(r,o,a):null,l=this.getRepresentativeSoldierStageIndex(c??void 0),u=IR.getAwakenedBarrackTribes().has(r.tribe);
+ let d=this.getSoldierKindAt(r.unitKindNums,l);
+ if(u){
+ const t=IR.getShiftedSoldierTier(r.unitKindNums,r.plusLevel,l,!0).kindNum;
+ t>0&&(d=t)}
+ if(this.setHeroButton(s,d,0),this.refreshSoldierVulnBadge(t,d),c){
+ const t=c.reduce((t,i)=>t+Math.max(0,i),0);
+ e.text=`${
+ t}
+ `;
+ const i=31;
+ e.x=s.x+i-e.width/2,e.y=s.y+s.height-e.height-2,e.visible=!0}
+ else e.visible=!1;
+ const f="+".repeat(Math.max(0,l+(u?1:0)-1));
+ f?(n.text=f,n.x=s.x+s.width-10,n.y=s.y+2,n.visible=!0):n.visible=!1}
+ refreshSoldierVulnBadge(t,i){
+ var s,e,n;
+ const h=this.soldierVulnBadges[t],r=Pzt(null==(s=wx.getInstance().getBookVO(i))?void 0:s.raidCc,null==(n=null==(e=this.options)?void 0:e.bookVO)?void 0:n.vulns),o=this.soldierBtns[t];
+ h.x=o.x+2,h.y=o.y+3,h.visible=Dzt(h,r)}
+ refreshHeroVulnBadge(t,i){
+ var s,e,n;
+ const h=this.heroVulnBadges[t];
+ if(i<=0)return void(h.visible=!1);
+ const r=Pzt(null==(s=wx.getInstance().getBookVO(i))?void 0:s.raidCc,null==(n=null==(e=this.options)?void 0:e.bookVO)?void 0:n.vulns),o=this.heroBtns[t];
+ h.x=o.x+2,h.y=o.y+3,h.visible=Dzt(h,r)}
- resolveSoldierKind(t){
- if(t<=0)return-1;
- const i=kG.getInstance(),s=i.getBook(t);
- if(!s)return-1;
- const e=i.getState(s.tribe),n=i.computeInstructorsForBarrack(s),h=e?i.computeSoldiers(s,e,n):null,r=this.getRepresentativeSoldierStageIndex(h??void 0);
- return this.getSoldierKindAt(s.unitKindNums,r)}
- openFormation(){
+ openFormation(t=!1){
- t.getInstance().open("레이드 공격 편성",this.selectedSquads,t=>{
+ var s;
+ i.getInstance().open(SG.getText("GAME_1284","레이드 공격 편성"),this.selectedSquads,t=>{
+ ,!0,(null==(s=this.options)?void 0:s.bookVO.vulns)??null,!0,t)}
- )}
+ async onPracticeClick(){
+ const t=this.options;
+ if(t&&t.onPracticeStart&&!this.requestPending){
+ if(!this.hasCompleteSquads())return u2.getInstance().showMessage(SG.getText("GAME_1291","공격 편성을 먼저 선택하세요")),void this.openFormation();
+ this.requestPending=!0,this.updateStatus();
+ try{
+ await t.onPracticeStart(t.bookVO,this.selectedSquads,t.curHp)&&this.hide()}
+ catch(Xst){
+ wG.getInstance().show(String(Xst))}
+ finally{
+ this.requestPending=!1,this.updateStatus()}
+ }
+ }
- if(t&&!this.requestPending)if(t.timeLimit)vV.getInstance().showMessage("시간 초과 — 레이드가 종료되었습니다");
- else if(t.currentBattleUser)vV.getInstance().showMessage(`다른 길드원이 전투중입니다 (${
+ if(t&&!this.requestPending)if(t.timeLimit)u2.getInstance().showMessage(SG.getText("GAME_1275","시간 초과 — 레이드가 종료되었습니다"));
+ else if(t.currentBattleUser)u2.getInstance().showMessage(SG.getValueReplace("GAME_1277","\\{
+ 0\\}
+ ",t.currentBattleUser,`다른 길드원이 전투중입니다 (${
- )`);
- else if(t.userTicket<=0)vV.getInstance().showMessage("오늘 도전 횟수를 모두 사용했습니다");
+ )`));
+ else if(t.userTicket<=0)u2.getInstance().showMessage(SG.getText("GAME_1278","오늘 도전 횟수를 모두 사용했습니다"));
- if(!this.hasCompleteSquads())return vV.getInstance().showMessage("공격 편성을 먼저 선택하세요"),void this.openFormation();
+ if(!this.hasCompleteSquads())return u2.getInstance().showMessage(SG.getText("GAME_1291","공격 편성을 먼저 선택하세요")),void this.openFormation();
- this.requestPending=!1,super.hide()}
+ this.requestPending=!1,super.hide(),Xt(async()=>{
+ const{
+ GuildRaidPopup:t}
+ =await Promise.resolve().then(()=>vti);
+ return{
+ GuildRaidPopup:t}
+ }
+ ,void 0).then(({
+ GuildRaidPopup:t}
+ )=>{
+ t.getInstance().refreshBossListIfVisible()}
+ )}
- Kt(t4t,"GuildRaidBattleReadyPopup"),zt(t4t,"_instance"),zt(t4t,"NUM_SLOTS",5);
+ Vt(l9t,"GuildRaidBattleReadyPopup"),Kt(l9t,"_instance"),Kt(l9t,"NUM_SLOTS",5),Kt(l9t,"TICKET_MAX",2),Kt(l9t,"TICKET_SCALE",.94),Kt(l9t,"TICKET_OVERLAP_STEP",20),Kt(l9t,"EMBLEM_H",40);
AttendanceSection 2 hunks, 277 statements
- super(),zt(this,"titleBar"),zt(this,"btnNotice"),zt(this,"btnPromotion"),zt(this,"btnWithdraw"),zt(this,"btnOptout"),zt(this,"btnLangChange"),zt(this,"btnLineMarketLink"),zt(this,"btnGoogleLogin"),zt(this,"btnAppleLogin"),zt(this,"btnEmail"),zt(this,"btnContainer"),zt(this,"requestPending",!1),this.titleBar=new n7t(AG.getText("COMMON_408","서비스")),this.addChild(this.titleBar),this.btnNotice=new q3(AG.getText("COMMON_18","공지")),this.btnNotice.onClick=this.onNoticeBtnClick.bind(this),this.btnPromotion=new q3(AG.getText("GAME_400","프로모션 코드")),this.btnPromotion.onClick=this.onPromotionBtnClick.bind(this),this.btnWithdraw=new q3(AG.getText("COMMON_56","게임탈퇴")),this.btnWithdraw.onClick=this.onWithdrawBtnClick.bind(this),this.btnOptout=new q3(AG.getText("COMMON_403","OPT-OUT")),this.btnOptout.deactivatedTextColor=16777215,this.btnOptout.onClick=this.onOptoutBtnClick.bind(this),this.btnLangChange=new q3(AG.getText("COMMON_54","언어변경")),this.btnLangChange.onClick=this.onLangChangeBtnClick.bind(this),this.btnLineMarketLink=new q3("웹마켓 점검 우회"),this.btnLineMarketLink.onClick=this.onLineMarketLinkBtnClick.bind(this),this.btnGoogleLogin=new q3(AG.getText("GAME_407","Google 로그인")),this.btnGoogleLogin.deactivatedTextColor=16777215,this.btnGoogleLogin.onClick=this.onGoogleLoginBtnClick.bind(this),this.btnAppleLogin=new q3(AG.getText("GAME_408","Apple 로그인")),this.btnAppleLogin.deactivatedTextColor=16777215,this.btnAppleLogin.onClick=this.onAppleLoginBtnClick.bind(this),this.btnEmail=new q3(AG.getText("COMMON_510","이메일 ID")),this.btnEmail.deactivatedTextColor=16777215,this.btnEmail.onClick=this.onEmailBtnClick.bind(this),this.btnContainer=new Be,this.addChild(this.btnContainer),this.updateLayout()}
+ super(),Kt(this,"type",""),Kt(this,"bg"),Kt(this,"bgInfo"),Kt(this,"lblTitle"),Kt(this,"lblInfo"),Kt(this,"lblGem"),Kt(this,"lblGem2"),this.bg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.bg.width=530,this.addChild(this.bg),this.lblTitle=new JD("",16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_20),this.lblTitle.x=30,this.lblTitle.y=15,this.addChild(this.lblTitle),cD.setLabelWrapWidth(this.lblTitle,this.bg.width-2*this.lblTitle.x),this.bgInfo=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_01"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
+ ),this.addChild(this.bgInfo),this.lblInfo=new JD("",10066329,cD.DEFAULT_FONT_OPTION_16),this.addChild(this.lblInfo),this.lblGem=new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18),this.lblGem.iconScale=.9,this.addChild(this.lblGem),this.lblGem2=new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18),this.lblGem2.visible=!1,this.lblGem2.iconScale=.9,this.addChild(this.lblGem2),this.updateLayout()}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ updateLayout(){
+ let t=300,i=0;
+ this.lblInfo.visible&&this.lblGem.visible?(i=this.lblInfo.width+this.lblGem.width+80,t=Math.max(t,i)):this.lblInfo.visible?(i=this.lblInfo.width,t=Math.max(t,i)):this.lblGem.visible&&(i=this.lblGem.width,t=Math.max(t,i)),this.bgInfo.width=t,this.bgInfo.x=.5*(this.bg.width-this.bgInfo.width),this.bgInfo.y=this.lblTitle.y+this.lblTitle.height+10;
+ let s=.5*(t-i);
+ this.lblInfo.visible&&this.lblGem.visible?(this.lblInfo.x=this.bgInfo.x+s+40,this.lblGem.x=this.lblInfo.x+this.lblInfo.width):this.lblInfo.visible?this.lblInfo.x=this.bgInfo.x+s:this.lblGem.visible&&(this.lblGem.x=this.bgInfo.x+s),this.lblGem2.visible?(this.lblGem2.x=this.bgInfo.x+.5*(this.bgInfo.width-this.lblGem2.width),this.lblGem2.y=this.bgInfo.y+7,this.lblGem.y=this.lblGem2.y+this.lblGem2.height,this.lblInfo.y=this.lblGem.y+.5*(this.lblGem.height-this.lblInfo.height),this.bgInfo.height=this.lblGem.y-this.bgInfo.y+this.lblGem.height+5):(this.bgInfo.height=40,this.lblInfo.y=this.bgInfo.y+.5*(this.bgInfo.height-this.lblInfo.height),this.lblGem.y=this.bgInfo.y+.5*(this.bgInfo.height-this.lblGem.height)+1),this.bg.height=this.bgInfo.y+this.bgInfo.height+15}
+ update(t,i,s,e,n){
+ this.lblTitle.text=`${
+ t}
+  : ${
+ SG.getValueReplace("GAME_250","##",i,`${
+ i}
+ 일`)}
+ `,this.lblInfo.visible=!1,this.lblGem.visible=!1,this.lblGem2.visible=!1;
+ const h=10066329;
+ if(s)this.lblGem.textColor=14270354,this.lblGem.text=String(s.gem),this.lblGem.visible=!0;
+ else if(e){
+ let t=`${
+ e.gem}
+  ${
+ SG.getText("GAME_256","수령 완료")}
+ `;
+ n?(this.lblGem2.textColor=h,this.lblGem2.text=t,this.lblGem2.visible=!0,this.lblInfo.textColor=h,t=`${
+ SG.getText("GAME_255","다음 보상")}
+  : ${
+ SG.getValueReplace("GAME_250","##",n.day,`${
+ n.day}
+ 일`)}
+  - `,this.lblInfo.text=t,this.lblInfo.visible=!0,this.lblGem.textColor=h,this.lblGem.text=String(n.gem),this.lblGem.visible=!0):(this.lblGem.textColor=h,this.lblGem.text=t,this.lblGem.visible=!0)}
+ else n?(this.lblInfo.textColor=h,this.lblInfo.text=`${
+ SG.getText("GAME_255","다음 보상")}
+  : ${
+ SG.getValueReplace("GAME_250","##",n.day,`${
+ n.day}
+ 일`)}
+  - `,this.lblInfo.visible=!0,this.lblGem.textColor=h,this.lblGem.text=String(n.gem),this.lblGem.visible=!0):(this.lblInfo.textColor=h,this.lblInfo.text=SG.getText("GAME_257","모든 보상을 수령했습니다."),this.lblInfo.visible=!0);
+ this.updateLayout()}
+ }
+ ;
+ Vt(tei,"AttendanceSection");
+ let iei=tei;
+ const sei=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMsg"),Kt(this,"sectionA"),Kt(this,"sectionB"),Kt(this,"sectionS"),Kt(this,"btnClaimAll"),Kt(this,"image"),Kt(this,"requestPending",!1),Kt(this,"onAttendanceUpdateBind"),this.width=580,this.height=500,this.title=SG.getText("GAME_245","출석 보상");
+ const t=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ t.fill=16638906,t.lineHeight=30,t.fontSize=21,t.stroke={
+ color:"#000000",width:4,join:"round"}
+ ,this.lblMsg=new JD("",t.fill,t),this.addChild(this.lblMsg),this.sectionA=new iei,this.sectionA.type="A",this.contentContainer.addChild(this.sectionA),this.sectionB=new iei,this.sectionB.type="B",this.contentContainer.addChild(this.sectionB),this.sectionS=new iei,this.sectionS.type="S",this.contentContainer.addChild(this.sectionS),this.btnClaimAll=new hei("받기"),this.btnClaimAll.onClick=()=>{
+ this.claimAll()}
+ ,this.contentContainer.addChild(this.btnClaimAll),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.setAttendanceEvent(!0)}
+ onRemoved(){
+ this.setAttendanceEvent(!1)}
+ updateLayout(){
+ this.image?this.lblMsg.x=this.image.x+this.image.width+.5*(this.width-this.image.x-this.image.width-30-this.lblMsg.width)-5:this.lblMsg.x=.5*(this.width-220-30-this.lblMsg.width)-5,this.lblMsg.y=55+.5*(135-this.lblMsg.height),this.sectionA.x=.5*(this.width-this.sectionA.width),this.sectionA.y=190,this.sectionB.x=this.sectionA.x,this.sectionB.y=this.sectionA.y+this.sectionA.height+15,this.sectionS.x=this.sectionA.x,this.sectionS.y=this.sectionB.y+this.sectionB.height+15,this.btnClaimAll.x=.5*(this.width-this.btnClaimAll.width),this.btnClaimAll.y=this.sectionS.y+this.sectionS.height+20;
+ const t=this.btnClaimAll.y+this.btnClaimAll.height+30;
+ this.height=t}
+ async setData(){
+ this.title=SG.getText("GAME_245","출석 보상"),this.lblMsg.text=SG.getText("GAME_1219","매일 접속하고\n보상을 받아가세요!");
+ let t=21;
+ if(ML.language===XO.GERMAN&&(t=19),this.lblMsg.textSize=t,this.updateSections(),!this.image){
+ this.image=new He,this.addChildAt(this.image,1);
+ const{
+ AssetPathManager:t}
+ =await Xt(async()=>{
+ const{
+ AssetPathManager:t}
+ =await Promise.resolve().then(()=>XA);
+ return{
+ AssetPathManager:t}
+ }
+ ,void 0),{
+ Assets:i}
+ =await Xt(async()=>{
+ const{
+ Assets:t}
+ =await Promise.resolve().then(()=>OM);
+ return{
+ Assets:t}
+ }
+ ,void 0),s=t.getAssetPath("CharAttendance.png"),e=await i.load(s);
+ this.image.texture=e,this.image.x=220-this.image.width,this.image.y=190-this.image.height,this.updateLayout()}
+ }
+ updateSections(){
+ const t=dN.getInstance().status;
+ this.sectionA.update(SG.getText("GAME_247","연속 접속"),t.consecutiveDays,t.claimableA,t.claimedRewardA,t.nextA),this.sectionB.update(SG.getText("GAME_248","누적 접속"),t.cumulativeDays,t.claimableB,t.claimedRewardB,t.nextB),this.sectionS.update(SG.getText("GAME_249","10일 보상"),t.rotationDay,t.claimableS,t.claimedRewardS,null);
+ const i=t.claimableA||t.claimableB||t.claimableS;
+ this.btnClaimAll.visible=!!i,this.btnClaimAll.text=SG.getText("COMMON_8","받기"),this.updateLayout()}
+ async claimAll(){
+ if(this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=await rD.getInstance().attendance.claimAll(!0);
+ if(0==t.success)return this.setRequestPending(!1),void wG.getInstance().showError(t);
+ t.body.user&&(ML.setUserData(t.body.user),kF.getInstance().updateGem()),t.body.attendance&&dN.getInstance().setStatusData(t.body.attendance);
+ const i=t.body.gem??0;
+ i>0&&this.displayGemGathering(this.contentContainer,i),this.setRequestPending(!1),this.hide()}
+ displayGemGathering(t,i){
+ let s=t.getGlobalPosition(),e=VA.stage.toLocal(s);
+ Q6t.getInstance().getGem(e.x+.5*t.width-15,e.y+.5*t.height-20,i,Math.min(30,i),LVt.getInstance())}
+ setRequestPending(t){
+ this.requestPending=t}
+ setAttendanceEvent(t){
+ cS.getInstance().removeEventListener("AttendanceUpdate",this.onAttendanceUpdateBind),t&&(this.onAttendanceUpdateBind=this.onAttendanceUpdate.bind(this),cS.getInstance().addEventListener("AttendanceUpdate",this.onAttendanceUpdateBind))}
+ onAttendanceUpdate(t){
+ this.updateSections()}
+ }
+ ;
+ Vt(sei,"AttendancePopup"),Kt(sei,"instance");
+ let eei=sei;
+ const nei=class extends Kzt{
+ constructor(t){
+ super(t),this.setTexture({
+ texture:QA.getTexture("UI_Ekkorr","Btn_Bg_01"),leftWidth:80,topHeight:35,rightWidth:90,bottomHeight:27}
+ ),this.width=256,this.height=67,this.outlineText=!0}
+ updateLayout(){
+ super.updateLayout(),this.lbl.y=.5*(this._height-11-this.lbl.height)}
+ }
+ ;
+ Vt(nei,"AttendanceReceiveButton");
+ let hei=nei;
+ const rei=Object.freeze(Object.defineProperty({
+ __proto__:null,AttendancePopup:eei,AttendanceReceiveButton:hei}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),oei=class extends Ge{
+ constructor(){
+ super(),Kt(this,"titleBar"),Kt(this,"btnNotice"),Kt(this,"btnPromotion"),Kt(this,"btnWithdraw"),Kt(this,"btnOptout"),Kt(this,"btnLangChange"),Kt(this,"btnLineMarketLink"),Kt(this,"btnGoogleLogin"),Kt(this,"btnAppleLogin"),Kt(this,"btnEmail"),Kt(this,"btnAttendReward"),Kt(this,"btnContainer"),Kt(this,"requestPending",!1),this.titleBar=new tsi(SG.getText("COMMON_408","서비스")),this.addChild(this.titleBar),this.btnNotice=new Kzt(SG.getText("COMMON_18","공지")),this.btnNotice.onClick=this.onNoticeBtnClick.bind(this),this.btnPromotion=new Kzt(SG.getText("GAME_400","프로모션 코드")),this.btnPromotion.onClick=this.onPromotionBtnClick.bind(this),this.btnWithdraw=new Kzt(SG.getText("COMMON_56","게임탈퇴")),this.btnWithdraw.onClick=this.onWithdrawBtnClick.bind(this),this.btnOptout=new Kzt(SG.getText("COMMON_403","OPT-OUT")),this.btnOptout.deactivatedTextColor=16777215,this.btnOptout.onClick=this.onOptoutBtnClick.bind(this),this.btnLangChange=new Kzt(SG.getText("COMMON_54","언어변경")),this.btnLangChange.onClick=this.onLangChangeBtnClick.bind(this),this.btnLineMarketLink=new Kzt("웹마켓 점검 우회"),this.btnLineMarketLink.onClick=this.onLineMarketLinkBtnClick.bind(this),this.btnGoogleLogin=new Kzt(SG.getText("GAME_407","Google 로그인")),this.btnGoogleLogin.deactivatedTextColor=16777215,this.btnGoogleLogin.onClick=this.onGoogleLoginBtnClick.bind(this),this.btnAppleLogin=new Kzt(SG.getText("GAME_408","Apple 로그인")),this.btnAppleLogin.deactivatedTextColor=16777215,this.btnAppleLogin.onClick=this.onAppleLoginBtnClick.bind(this),this.btnEmail=new Kzt(SG.getText("COMMON_510","이메일 ID")),this.btnEmail.deactivatedTextColor=16777215,this.btnEmail.onClick=this.onEmailBtnClick.bind(this),this.btnAttendReward=new Kzt(SG.getText("GAME_245","출석 보상 "));
+ const t=this.btnAttendReward.getStyle();
+ t.align="center",this.btnAttendReward.setStyle(t),this.btnAttendReward.onClick=this.onAttendRewardBtnClick.bind(this),this.btnContainer=new Ge,this.addChild(this.btnContainer),this.updateLayout()}
- )),Zai=class extends Be{
- constructor(){
- super(),zt(this,"type",""),zt(this,"bg"),zt(this,"bgInfo"),zt(this,"lblTitle"),zt(this,"lblInfo"),zt(this,"lblGem"),zt(this,"lblGem2"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
- ),this.bg.width=530,this.addChild(this.bg),this.lblTitle=new YD("",16763904,aD.DEFAULT_OUTLINE_FONT_OPTION_20),this.lblTitle.x=30,this.lblTitle.y=15,this.addChild(this.lblTitle),aD.setLabelWrapWidth(this.lblTitle,this.bg.width-2*this.lblTitle.x),this.bgInfo=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_Bg_01"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:20}
- ),this.addChild(this.bgInfo),this.lblInfo=new YD("",10066329,aD.DEFAULT_FONT_OPTION_16),this.addChild(this.lblInfo),this.lblGem=new GB("UI_GEM_ICON","0",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18),this.lblGem.iconScale=.9,this.addChild(this.lblGem),this.lblGem2=new GB("UI_GEM_ICON","0",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18),this.lblGem2.visible=!1,this.lblGem2.iconScale=.9,this.addChild(this.lblGem2),this.updateLayout()}
- get width(){
- return this.bg.width}
- get height(){
- return this.bg.height}
- updateLayout(){
- let t=300,i=0;
- this.lblInfo.visible&&this.lblGem.visible?(i=this.lblInfo.width+this.lblGem.width+80,t=Math.max(t,i)):this.lblInfo.visible?(i=this.lblInfo.width,t=Math.max(t,i)):this.lblGem.visible&&(i=this.lblGem.width,t=Math.max(t,i)),this.bgInfo.width=t,this.bgInfo.x=.5*(this.bg.width-this.bgInfo.width),this.bgInfo.y=this.lblTitle.y+this.lblTitle.height+10;
- let s=.5*(t-i);
- this.lblInfo.visible&&this.lblGem.visible?(this.lblInfo.x=this.bgInfo.x+s+40,this.lblGem.x=this.lblInfo.x+this.lblInfo.width):this.lblInfo.visible?this.lblInfo.x=this.bgInfo.x+s:this.lblGem.visible&&(this.lblGem.x=this.bgInfo.x+s),this.lblGem2.visible?(this.lblGem2.x=this.bgInfo.x+.5*(this.bgInfo.width-this.lblGem2.width),this.lblGem2.y=this.bgInfo.y+7,this.lblGem.y=this.lblGem2.y+this.lblGem2.height,this.lblInfo.y=this.lblGem.y+.5*(this.lblGem.height-this.lblInfo.height),this.bgInfo.height=this.lblGem.y-this.bgInfo.y+this.lblGem.height+5):(this.bgInfo.height=40,this.lblInfo.y=this.bgInfo.y+.5*(this.bgInfo.height-this.lblInfo.height),this.lblGem.y=this.bgInfo.y+.5*(this.bgInfo.height-this.lblGem.height)+1),this.bg.height=this.bgInfo.y+this.bgInfo.height+15}
- update(t,i,s,e,n){
- this.lblTitle.text=`${
- t}
-  : ${
- AG.getValueReplace("GAME_250","##",i,`${
- i}
- 일`)}
- `,this.lblInfo.visible=!1,this.lblGem.visible=!1,this.lblGem2.visible=!1;
- const h=10066329;
- if(s)this.lblGem.textColor=14270354,this.lblGem.text=String(s.gem),this.lblGem.visible=!0;
- else if(e){
- let t=`${
- e.gem}
-  ${
- AG.getText("GAME_256","수령 완료")}
- `;
- n?(this.lblGem2.textColor=h,this.lblGem2.text=t,this.lblGem2.visible=!0,this.lblInfo.textColor=h,t=`${
- AG.getText("GAME_255","다음 보상")}
-  : ${
- AG.getValueReplace("GAME_250","##",n.day,`${
- n.day}
- 일`)}
-  - `,this.lblInfo.text=t,this.lblInfo.visible=!0,this.lblGem.textColor=h,this.lblGem.text=String(n.gem),this.lblGem.visible=!0):(this.lblGem.textColor=h,this.lblGem.text=t,this.lblGem.visible=!0)}
- else n?(this.lblInfo.textColor=h,this.lblInfo.text=`${
- AG.getText("GAME_255","다음 보상")}
-  : ${
- AG.getValueReplace("GAME_250","##",n.day,`${
- n.day}
- 일`)}
-  - `,this.lblInfo.visible=!0,this.lblGem.textColor=h,this.lblGem.text=String(n.gem),this.lblGem.visible=!0):(this.lblInfo.textColor=h,this.lblInfo.text=AG.getText("GAME_257","모든 보상을 수령했습니다."),this.lblInfo.visible=!0);
- this.updateLayout()}
- }
- ;
- Kt(Zai,"AttendanceSection");
- let tci=Zai;
- const ici=class t extends aG{
- constructor(){
- super(),zt(this,"lblMsg"),zt(this,"sectionA"),zt(this,"sectionB"),zt(this,"sectionS"),zt(this,"btnClaimAll"),zt(this,"image"),zt(this,"requestPending",!1),zt(this,"onAttendanceUpdateBind"),this.width=580,this.height=500,this.title=AG.getText("GAME_245","출석 보상");
- const t=aD.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=16638906,t.lineHeight=30,t.fontSize=21,t.stroke={
- color:"#000000",width:4,join:"round"}
- ,this.lblMsg=new YD("",t.fill,t),this.addChild(this.lblMsg),this.sectionA=new tci,this.sectionA.type="A",this.contentContainer.addChild(this.sectionA),this.sectionB=new tci,this.sectionB.type="B",this.contentContainer.addChild(this.sectionB),this.sectionS=new tci,this.sectionS.type="S",this.contentContainer.addChild(this.sectionS),this.btnClaimAll=new nci("받기"),this.btnClaimAll.onClick=()=>{
- this.claimAll()}
- ,this.contentContainer.addChild(this.btnClaimAll),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.setAttendanceEvent(!0)}
- onRemoved(){
- this.setAttendanceEvent(!1)}
- updateLayout(){
- this.image?this.lblMsg.x=this.image.x+this.image.width+.5*(this.width-this.image.x-this.image.width-30-this.lblMsg.width)-5:this.lblMsg.x=.5*(this.width-220-30-this.lblMsg.width)-5,this.lblMsg.y=55+.5*(135-this.lblMsg.height),this.sectionA.x=.5*(this.width-this.sectionA.width),this.sectionA.y=190,this.sectionB.x=this.sectionA.x,this.sectionB.y=this.sectionA.y+this.sectionA.height+15,this.sectionS.x=this.sectionA.x,this.sectionS.y=this.sectionB.y+this.sectionB.height+15,this.btnClaimAll.x=.5*(this.width-this.btnClaimAll.width),this.btnClaimAll.y=this.sectionS.y+this.sectionS.height+20;
- const t=this.btnClaimAll.y+this.btnClaimAll.height+30;
- this.height=t}
- async setData(){
- this.title=AG.getText("GAME_245","출석 보상"),this.lblMsg.text=AG.getText("GAME_1219","매일 접속하고\n보상을 받아가세요!");
- let t=21;
- if(_L.language===JI.GERMAN&&(t=19),this.lblMsg.textSize=t,this.updateSections(),!this.image){
- this.image=new We,this.addChildAt(this.image,1);
- const{
- AssetPathManager:t}
- =await Jt(async()=>{
- const{
- AssetPathManager:t}
- =await Promise.resolve().then(()=>JA);
- return{
- AssetPathManager:t}
- }
- ,void 0),{
- Assets:i}
- =await Jt(async()=>{
- const{
- Assets:t}
- =await Promise.resolve().then(()=>xM);
- return{
- Assets:t}
- }
- ,void 0),s=t.getAssetPath("CharAttendance.png"),e=await i.load(s);
- this.image.texture=e,this.image.x=220-this.image.width,this.image.y=190-this.image.height,this.updateLayout()}
- }
- updateSections(){
- const t=fP.getInstance().status;
- this.sectionA.update(AG.getText("GAME_247","연속 접속"),t.consecutiveDays,t.claimableA,t.claimedRewardA,t.nextA),this.sectionB.update(AG.getText("GAME_248","누적 접속"),t.cumulativeDays,t.claimableB,t.claimedRewardB,t.nextB),this.sectionS.update(AG.getText("GAME_249","10일 보상"),t.rotationDay,t.claimableS,t.claimedRewardS,null);
- const i=t.claimableA||t.claimableB||t.claimableS;
- this.btnClaimAll.visible=!!i,this.btnClaimAll.text=AG.getText("COMMON_8","받기"),this.updateLayout()}
- async claimAll(){
- if(this.requestPending)return;
- this.setRequestPending(!0);
- const t=await hD.getInstance().attendance.claimAll(!0);
- if(0==t.success)return this.setRequestPending(!1),void mG.getInstance().showError(t);
- t.body.user&&(_L.setUserData(t.body.user),UV.getInstance().updateGem()),t.body.attendance&&fP.getInstance().setStatusData(t.body.attendance);
- const i=t.body.gem??0;
- i>0&&this.displayGemGathering(this.contentContainer,i),this.setRequestPending(!1),this.hide()}
- displayGemGathering(t,i){
- let s=t.getGlobalPosition(),e=KA.stage.toLocal(s);
- l5t.getInstance().getGem(e.x+.5*t.width-15,e.y+.5*t.height-20,i,Math.min(30,i),B3.getInstance())}
- setRequestPending(t){
- this.requestPending=t}
- setAttendanceEvent(t){
- lS.getInstance().removeEventListener("AttendanceUpdate",this.onAttendanceUpdateBind),t&&(this.onAttendanceUpdateBind=this.onAttendanceUpdate.bind(this),lS.getInstance().addEventListener("AttendanceUpdate",this.onAttendanceUpdateBind))}
- onAttendanceUpdate(t){
- this.updateSections()}
- }
- ;
- Kt(ici,"AttendancePopup"),zt(ici,"instance");
- let sci=ici;
- const eci=class extends q3{
- constructor(t){
- super(t),this.setTexture({
- texture:ZA.getTexture("UI_Ekkorr","Btn_Bg_01"),leftWidth:80,topHeight:35,rightWidth:90,bottomHeight:27}
- ),this.width=256,this.height=67,this.outlineText=!0}
- updateLayout(){
- super.updateLayout(),this.lbl.y=.5*(this._height-11-this.lbl.height)}
- }
- ;
- Kt(eci,"AttendanceReceiveButton");
- let nci=eci;
- const hci=Object.freeze(Object.defineProperty({
- __proto__:null,AttendancePopup:sci,AttendanceReceiveButton:nci}
- ,Symbol.toStringTag,{
- value:"Module"}
DragonKnight 29 hunks, 204 statements
- this.spineKey="raids/raid1/Ancient_DragonKnight",this.bossScale=1.15,this.spineTimeScale=.8,this.wanderEnabled=!1,this.immobile=!0,this.targetSwapChance=.2,this.syncBoneName="",this.aniIdle="idle",this.aniMove="idle",this.aniDie="groggy",this.aniGroggy="groggy",this.aniSkill0="att_01",this.aniSkills=["att_02","att_03","att_04","att_05","att_05","att_05"],this.eventSkill0Hit="att_01_hit",this.eventSkillHits=["att_02_hit","att_03_hit","att_04_hit","att_05_hit","att_05_hit","att_05_hit"],this.isAir=!1,this.hitWidth=80,this.hitHeight=120,this.weakPointBone="head",this.weakPointOffsetY=-35,this.numForSkillAttack=2,this.skillRatio=[.78,.58,.4,.22,.12,.08,.04,0],this.attackOrderList=[[0,0,1,0,2,0,0,3,0,4,0,5,0,6,0]],this.raidPhases=[{
+ this.spineKey="raids/raid1/Ancient_DragonKnight",this.bossScale=1.15,this.spineTimeScale=.8,this.wanderEnabled=!0,this.targetSwapChance=.2,this.syncBoneName="",this.aniIdle="idle",this.aniMove="run",this.aniDie="groggy",this.aniGroggy="groggy",this.aniSkill0="att_01",this.aniSkills=["att_06","att_03","att_04","att_05","att_05"],this.eventSkill0Hit="att_01_hit",this.eventSkillHits=["att_06_hit","att_03_hit","att_04_hit","att_05_hit","att_05_hit"],this.isAir=!1,this.hitWidth=80,this.hitHeight=120,this.weakPointBone="head",this.weakPointOffsetY=-35,this.numForSkillAttack=2,this.skillRatio=[.78,.58,.4,.22,.12,.08,.04,0],this.exhaustEnabled=!0,this.interruptEnabled=!0,this.interruptAlwaysOpen=t.INTERRUPT_ALWAYS_OPEN,this.interruptWeakBones=t.INTERRUPT_WEAK_BONES,this.interruptWeakLabels=t.INTERRUPT_WEAK_LABELS,this.attackOrderList=[],this.raidPhases=[{
- weight:3,skills:[1],label:"군단폭격"}
+ weight:3,skills:[1],label:"점프찍기"}
- weight:2,skills:[3],label:"다단"}
- ,{
- weight:1,skills:[4],label:"난사"}
+ weight:2,skills:[3],label:"공중돌진"}
- weight:3,skills:[2,1],label:"강타→폭격"}
+ weight:3,skills:[2,1],label:"강타→점프찍기"}
- weight:3,skills:[5],label:"브레스1"}
+ weight:3,skills:[5],label:"브레스"}
- weight:2,skills:[4],label:"난사"}
- ,{
- weight:2,skills:[3],label:"다단"}
+ weight:2,skills:[3],label:"공중돌진"}
- weight:3,skills:[2,6],label:"강타→브레스2"}
+ weight:3,skills:[2,5],label:"강타→브레스"}
- weight:3,skills:[7,3],label:"텔포→다단"}
+ weight:3,skills:[7,3],label:"텔포→공중돌진"}
- weight:2,skills:[5,4],label:"브레스1→난사"}
+ weight:2,skills:[5],label:"브레스"}
- weight:2,skills:[6],label:"브레스2"}
+ weight:2,skills:[3],label:"공중돌진"}
- if(!this.enemyList)return;
+ if(!this.enemyList)return 0;
- }
- radialBlow(i,s,e,n,h,r,o){
- if(!this.enemyList)return;
- const a=e*e;
- for(const c of this.enemyList){
- if(!c.isAlive||c.isImmovable)continue;
- const e=c.x-i,l=c.y-s,u=e*e+l*l;
- if(u>a)continue;
- const d=Math.sqrt(u);
- let f,p;
- if(d<.01){
- const t=this.random.next()*Math.PI*2;
- f=Math.cos(t),p=Math.sin(t)}
- else f=e/d,p=l/d;
- const g=t.BLOW_SCALE,m=(n+this.random.next()*(h-n))*g,w=-(r+this.random.next()*(o-r))*g;
- c.blow(f*m,p*m,w)}
- }
+ return o}
+ getTopDamageCorpCenter(){
+ var t,i;
+ const s=this.battleController,e=(null==(t=null==s?void 0:s.getTopDamageCorpIndex)?void 0:t.call(s))??-1;
+ return e>=0?(null==(i=null==s?void 0:s.getCorpCenter)?void 0:i.call(s,e))??null:null}
+ skill0(i){
+ super.skill0(i);
+ const s=i.x-this.x,e=i.y-this.y,n=Math.sqrt(s*s+e*e);
+ if(n>t.ATT1_DASH_MIN_DIST){
+ const i=(n-t.ATT1_DASH_STOP_DIST)/n;
+ this.startAttackDashTo(this.x+s*i,this.y+e*i,t.ATT1_DASH_FRAMES)}
+ }
- this.aoeDamage(this.x,this.y,t.ATT1_RADIUS,t.ATT1_DAMAGE_MIN,t.ATT1_DAMAGE_MAX,t.ATT1_MAX_TARGETS),this.radialBlow(this.x,this.y,t.ATT1_RADIUS,4,9,3,7)}
+ if(!this.enemyList)return;
+ const i=this.direction>0?1:-1,s=this.x+i*t.ATT1_CENTER_OFFSET,e=this.y,n=t.ATT1_RADIUS*t.ATT1_RADIUS;
+ let h=0;
+ for(const r of this.enemyList){
+ if(h>=t.ATT1_MAX_TARGETS)break;
+ if(!r.isAlive||r.removed||r.isUntagetable)continue;
+ const i=r.x-s,o=r.y-e,a=i*i+o*o;
+ if(a>n)continue;
+ if(this.doDamage(r,this.random.range(t.ATT1_DAMAGE_MIN,t.ATT1_DAMAGE_MAX),!1),h++,!r.isAlive||r.isImmovable)continue;
+ const c=Math.sqrt(a);
+ let l,u;
+ if(c<.01){
+ const t=this.random.next()*Math.PI*2;
+ l=Math.cos(t),u=Math.sin(t)}
+ else l=i/c,u=o/c;
+ const d=this.random.range(t.ATT1_KNOCKBACK_POWER_MIN,t.ATT1_KNOCKBACK_POWER_MAX);
+ r.isAir?r.windPush(l*d,u*d,t.ATT1_KNOCKBACK_DURATION):r.knockBack(l*d,u*d,t.ATT1_KNOCKBACK_DURATION)}
+ }
- const i=this.getAggroCorpCenter()??this.getEnemyCentroid();
- i&&this.aoeDamage(i.x,i.y,t.ATT2_RADIUS,t.ATT2_DAMAGE_MIN,t.ATT2_DAMAGE_MAX,t.ATT2_MAX_TARGETS)}
+ if(this.consumeInterruptWindow())return;
+ if(!this.enemyList)return;
+ const i=this.direction>0?1:-1,s=this.x+i*t.ATT6_CENTER_OFFSET,e=this.y,n=t.ATT6_RADIUS*t.ATT6_RADIUS;
+ let h=0;
+ for(const r of this.enemyList){
+ if(h>=t.ATT6_MAX_TARGETS)break;
+ if(!r.isAlive||r.removed||r.isUntagetable)continue;
+ const i=r.x-s,o=r.y-e,a=i*i+o*o;
+ if(a>n)continue;
+ if(this.doDamage(r,this.random.range(t.ATT6_DAMAGE_MIN,t.ATT6_DAMAGE_MAX),!0),h++,!r.isAlive||r.isImmovable)continue;
+ const c=Math.sqrt(a);
+ let l,u;
+ if(c<.01){
+ const t=this.random.next()*Math.PI*2;
+ l=Math.cos(t),u=Math.sin(t)}
+ else l=i/c,u=o/c;
+ const d=this.random.range(t.ATT6_PUSH_POWER_MIN,t.ATT6_PUSH_POWER_MAX);
+ r.knockBack(l*d,u*d,t.ATT6_PUSH_DURATION)}
+ }
- this.aoeDamage(this.x,this.y,t.ATT3_RADIUS,t.ATT3_DAMAGE_MIN,t.ATT3_DAMAGE_MAX,t.ATT3_MAX_TARGETS),this.radialBlow(this.x,this.y,t.ATT3_RADIUS,10,20,8,16)}
+ this.consumeInterruptWindow()||(this.aoeDamage(this.x,this.y,t.ATT3_RADIUS,t.ATT3_DAMAGE_MIN,t.ATT3_DAMAGE_MAX,t.ATT3_MAX_TARGETS),this.startShockwave(this.x,this.y,t.ATT3_RADIUS,t.ATT3_SHOCK_POWER_SCALE))}
- const i=this.getEnemyCentroid();
- i&&this.aoeDamage(i.x,i.y,t.ATT4_RADIUS,t.ATT4_DAMAGE_MIN,t.ATT4_DAMAGE_MAX,t.ATT4_MAX_TARGETS)}
- skillMain4(){
- this.isSummoning||this.aoeDamage(this.x,this.y,t.ATT5_RADIUS,t.ATT5_DAMAGE_MIN,t.ATT5_DAMAGE_MAX,t.ATT5_MAX_TARGETS)}
- skillN(i){
- if(i!==t.SKILL_TELEPORT)return i===t.SKILL_SUMMON_1||i===t.SKILL_SUMMON_2?(this.isSummoning=!0,this.summonDragon(i===t.SKILL_SUMMON_1?1:2),void super.skillN(i)):void super.skillN(i);
- this.startTeleport()}
- summonDragon(t){
+ }
+ startAtt4Charge(){
- if(!i)return;
- const s=s0.getInstance().getWeapon(wJ.SummonDragon);
- s.owner=this,s.x=i.x,s.y=i.y,s.setBattleController(this.battleController),s.setData(1),s.setBreath(t),s.play()}
+ let s=this.direction>0?1:-1,e=0;
+ if(i){
+ const t=i.x-this.x,n=i.y-this.y,h=Math.sqrt(t*t+n*n);
+ h>1&&(s=t/h,e=n/h)}
+ this.att4ChargeX=s,this.att4ChargeY=e,this.lookAt(s>=0?1:-1),this.state=sx.SKILL,this.loop=!0,this.attackCoolDown=t.ATT4_DURATION_FRAMES+10,this.numCurrentAttack=0,this.att4Phase="charge",this.att4Frames=0,this.att4HitCounts.clear(),this.resetBoneSync(),this.playSpine(this.aniSkills[2],!0)}
+ doAtt4Tick(){
+ if(!this.enemyList)return;
+ const i=this.x+this.att4ChargeX*t.ATT4_OFFSET,s=this.y+this.att4ChargeY*t.ATT4_OFFSET,e=t.ATT4_RADIUS*t.ATT4_RADIUS;
+ let n=0;
+ for(const h of this.enemyList){
+ if(n>=t.ATT4_MAX_TARGETS)break;
+ if(!h.isAlive||h.removed||h.isUntagetable)continue;
+ const r=h.x-i,o=h.y-s;
+ if(r*r+o*o>e)continue;
+ const a=this.att4HitCounts.get(h)??0;
+ a>=t.ATT4_MAX_HITS_PER_UNIT||(this.att4HitCounts.set(h,a+1),this.doDamage(h,this.random.range(t.ATT4_DAMAGE_MIN,t.ATT4_DAMAGE_MAX),!0),n++)}
+ }
+ endAtt4Charge(t=!0){
+ this.att4Phase=null,this.att4HitCounts.clear(),this.spine&&(this.spine.pivot.y=0),t&&this.gotoIdleState()}
+ skillMain4(){
+ this.consumeInterruptWindow()||this.isSummoning&&(this.isSummoning=!1,this.dragonLineActive=!0,this.dragonLineFrames=0,this.spawnLineDragon())}
+ skillN(i){
+ i!==t.SKILL_TELEPORT?super.skillN(i):this.startTeleport()}
+ performSkillN(i){
+ 3!==i?(i===t.SKILL_SUMMON&&(this.isSummoning=!0,this.prepareDragonLine(),eQ(this.kindNum,"dragon_shout")),super.performSkillN(i)):this.startAtt4Charge()}
+ prepareDragonLine(){
+ const i=this.getTopDamageCorpCenter()??this.getAggroCorpCenter()??this.getEnemyCentroid(),s=i?i.x:this.x-300,e=i?i.y:this.y;
+ this.dragonLineDirX=-1,this.dragonLineDirY=0,this.dragonLineX=Math.max(t.DRAGON_LINE_LEFT_LIMIT+t.DRAGON_LINE_LENGTH,Math.min(s+t.DRAGON_LINE_BACK,t.DRAGON_LINE_RIGHT_LIMIT)),this.dragonLineY=e,this.dragonsSpawned=0,this.dragonLineFrames=0,this.dragonWarningLine||(this.dragonWarningLine=new G2),this.dragonWarningLine.show(this.dragonLineX,this.dragonLineY,this.dragonLineDirX,this.dragonLineDirY,t.DRAGON_LINE_LENGTH,t.DRAGON_LINE_HALF_WIDTH)}
+ spawnLineDragon(){
+ const i=(.5+this.dragonsSpawned++)*(t.DRAGON_LINE_LENGTH/t.DRAGON_COUNT),s=bQ.getInstance().getWeapon(nj.SummonDragon);
+ s.owner=this,s.x=this.dragonLineX+this.dragonLineDirX*i,s.y=this.dragonLineY+this.dragonLineDirY*i,s.setBattleController(this.battleController),s.setData(1),s.setLine(this.dragonLineX,this.dragonLineY,this.dragonLineDirX,this.dragonLineDirY,t.DRAGON_LINE_LENGTH,t.DRAGON_LINE_HALF_WIDTH),s.play()}
+ updateDragonLine(){
+ var i,s;
+ if(!this.dragonLineActive)return void(null==(i=this.dragonWarningLine)||i.update(0));
+ this.dragonLineFrames++;
+ const e=(t.DRAGON_COUNT-1)*t.DRAGON_SPAWN_INTERVAL+t.DRAGON_HIT_FRAME;
+ this.dragonsSpawned<t.DRAGON_COUNT&&this.dragonLineFrames%t.DRAGON_SPAWN_INTERVAL===0&&this.spawnLineDragon(),null==(s=this.dragonWarningLine)||s.update(this.dragonLineFrames/e),this.dragonLineFrames>=e&&this.clearDragonLine()}
+ clearDragonLine(){
+ this.dragonLineActive=!1,this.dragonsSpawned=0,this.dragonLineFrames=0,this.dragonWarningLine&&(this.dragonWarningLine.dispose(),this.dragonWarningLine=null)}
- this.state=ex.SKILL,this.loop=!1,this.attackCoolDown=this.atkDuration,this.numCurrentAttack=0,this.attackable=!1,this.isUntagetable=!0,this.releaseEnemyTargets(),this.teleportPhase="out",this.teleportFrames=0,this.resetBoneSync(),this.playSpine("teleport_out",!1)}
+ this.closeInterruptWindow(),this.endAtt4Charge(!1),this.spearsFired=0,this.spearHitCounts.clear(),this.spearFireStartDelay=-1,this.state=sx.SKILL,this.loop=!1,this.attackCoolDown=this.atkDuration,this.numCurrentAttack=0,this.attackable=!1,this.isUntagetable=!0,this.releaseEnemyTargets(),this.teleportPhase="out",this.teleportFrames=0,this.resetBoneSync(),this.playSpine("teleport_out",!1)}
- this.x=s,this.y=e,this.tx=s,this.ty=e,this.resetBoneSync(),this.faceMajorityEnemies(),this.warningCircle||(this.warningCircle=new o3),this.warningCircle.show(s,e,t.SLAM_RADIUS),this.warningElapsed=0}
+ this.x=s,this.y=e,this.tx=s,this.ty=e,this.resetBoneSync(),this.faceMajorityEnemies(),this.warningCircle||(this.warningCircle=new SK),this.warningCircle.show(s,e,t.SLAM_RADIUS,t.SPEARFIRE_ASPECT_Y),this.warningElapsed=0}
- if(!this.executeRaidStunFrame()&&(super.execute(),this.isAlive)){
- if(this.warningCircle&&(this.warningElapsed++,this.warningCircle.update(this.warningElapsed/t.TELEPORT_UNDERGROUND_FRAMES)),"in"===this.teleportPhase&&this.isUntagetable){
+ if(super.execute(),this.isAlive){
+ if(this.spearFireStartDelay>0?this.spearFireStartDelay--:0===this.spearFireStartDelay&&(this.spearFireStartDelay=-1,this.startSpearFireZone()),this.updateSpearFireZone(),this.updateDragonLine(),this.warningCircle&&(this.warningElapsed++,this.warningCircle.update(this.warningElapsed/t.TELEPORT_UNDERGROUND_FRAMES)),"in"===this.teleportPhase&&this.isUntagetable){
- "underground"!==this.teleportPhase||++this.teleportFrames>=t.TELEPORT_UNDERGROUND_FRAMES&&(this.spine&&(this.spine.visible=!0),this.attackable=!0,this.teleportPhase="in",this.resetBoneSync(),this.faceMajorityEnemies(),this.playSpine("teleport_in",!1))}
+ if("underground"===this.teleportPhase)return this.updateSpearBombardment(),void(++this.teleportFrames>=t.TELEPORT_UNDERGROUND_FRAMES&&(this.spine&&(this.spine.visible=!0),this.attackable=!0,this.teleportPhase="in",this.resetBoneSync(),this.faceMajorityEnemies(),this.playSpine("teleport_in",!1)));
+ if("charge"===this.att4Phase&&this.state===sx.SKILL){
+ if(this.att4Frames++,this.x+=this.att4ChargeX*t.ATT4_CHARGE_SPEED,this.y+=this.att4ChargeY*t.ATT4_CHARGE_SPEED,this.spine){
+ const i=Math.min(1,this.att4Frames/15),s=Math.min(1,Math.max(0,t.ATT4_DURATION_FRAMES-this.att4Frames)/15);
+ this.spine.pivot.y=t.ATT4_AIR_LIFT*Math.min(i,s)}
+ return this.att4Frames<=t.ATT4_DURATION_FRAMES&&this.att4Frames%t.ATT4_TICK_INTERVAL===1&&this.doAtt4Tick(),void(this.att4Frames>=t.ATT4_DURATION_FRAMES&&this.endAtt4Charge())}
+ }
- return"att_05"===s&&(this.isSummoning=!1),"teleport_out"===s?(this.relocateForTeleport(),this.spine&&(this.spine.visible=!1),this.teleportPhase="underground",void(this.teleportFrames=0)):"teleport_in"===s?(this.teleportPhase=null,void this.gotoIdleState()):void super.onSpineAnimationComplete(t)}
+ if("att_04"!==s||"charge"!==this.att4Phase)return"att_05"===s&&(this.isSummoning=!1),"teleport_out"===s?(this.relocateForTeleport(),this.spine&&(this.spine.visible=!1),this.teleportPhase="underground",void(this.teleportFrames=0)):"teleport_in"===s?(this.teleportPhase=null,void this.gotoIdleState()):void super.onSpineAnimationComplete(t)}
- this.aoeDamage(this.x,this.y,t.SLAM_RADIUS,t.SLAM_DAMAGE_MIN,t.SLAM_DAMAGE_MAX,t.SLAM_MAX_TARGETS),this.radialBlow(this.x,this.y,t.SLAM_RADIUS,14,26,12,22),this.clearWarningCircle()}
+ let i=0;
+ if(this.enemyList){
+ const s=t.SLAM_RADIUS,e=s*t.SPEARFIRE_ASPECT_Y,n=s*s,h=e*e;
+ for(const r of this.enemyList){
+ if(i>=t.SLAM_MAX_TARGETS)break;
+ if(!r.isAlive||r.removed||r.isUntagetable)continue;
+ const s=r.x-this.x,e=r.y-this.y;
+ s*s/n+e*e/h>1||(this.doDamage(r,this.random.range(t.SLAM_DAMAGE_MIN,t.SLAM_DAMAGE_MAX),!0),i++)}
+ }
+ this.startShockwave(this.x,this.y,t.SLAM_SHOCK_MAX_RADIUS,t.SLAM_SHOCK_POWER_SCALE),this.clearWarningCircle(),0===i&&(this.addExhaustion(t.SLAM_WHIFF_EXHAUST_GAIN),this.showTextEffect(EQ,this.x,this.y-40))}
+ trySpearHit(i){
+ const s=this.spearHitCounts.get(i)??0;
+ return!(s>=t.SPEAR_MAX_HITS_PER_UNIT||(this.spearHitCounts.set(i,s+1),0))}
+ updateSpearBombardment(){
+ if(this.spearsFired>=t.SPEAR_COUNT)return;
+ const i=this.teleportFrames;
+ if(i<t.SPEAR_START_FRAME)return;
+ if((i-t.SPEAR_START_FRAME)%t.SPEAR_INTERVAL!==0)return;
+ const s=this.random.next()*Math.PI*2,e=t.SPEAR_SCATTER_RADIUS*Math.sqrt(this.random.next()),n=this.x+Math.cos(s)*e,h=this.y+Math.sin(s)*e*.6;
+ this.spearsFired++,this.spearsFired>=t.SPEAR_COUNT&&(this.spearFireStartDelay=t.SPEARFIRE_START_DELAY);
+ const r=bQ.getInstance().getWeapon(nj.DKSpear);
+ r.owner=this,r.target=null,r.x=n,r.y=t.SPEAR_SPAWN_Y,r.rotation=0,r.bounceCount=0,r.hitClassName="",r.setData(this.random.range(t.SPEAR_DAMAGE_MIN,t.SPEAR_DAMAGE_MAX)),r.setGroundTarget(h,t.SPEAR_AOE_RADIUS),r.setBattleController(this.battleController),mB.getInstance().addChild(r),r.play()}
+ startSpearFireZone(){
+ if(this.clearSpearFireZone(),!QA.hasSheet("RaidBattle"))return;
+ if(0===this.sandFireTextures.length){
+ for(let i=1;
+ i<=t.SANDFIRE_FRAME_COUNT;
+ i++){
+ const t=QA.getTexture("RaidBattle",`SandFire${
+ String(i).padStart(4,"0")}
+ `);
+ t&&this.sandFireTextures.push(t)}
+ if(0===this.sandFireTextures.length)return}
+ const i=new Ge;
+ i.eventMode="none";
+ const s=t.SPEARFIRE_RADIUS,e=s*t.SPEARFIRE_ASPECT_Y,n=new He(this.sandFireTextures[0]);
+ n.anchor.set(.5),n.position.set(this.x,this.y),n.width=2*s*t.SPEARFIRE_DECAL_SCALE,n.height=2*e*t.SPEARFIRE_DECAL_SCALE,i.addChild(n),i.alpha=0,tB.getInstance().addChild(i),this.spearFireZone=i,this.spearFireFrames=t.SPEARFIRE_DURATION_FRAMES,this.spearFireX=this.x,this.spearFireY=this.y,this.spearFireTick=0}
+ updateSpearFireZone(){
+ if(this.spearFireFrames<=0)return;
+ this.spearFireFrames--,this.spearFireTick++;
+ const i=this.spearFireZone;
+ if(i){
+ const s=Math.min(1,this.spearFireTick/12),e=Math.min(1,this.spearFireFrames/t.SPEARFIRE_FADE_FRAMES);
+ i.alpha=Math.min(s,e);
+ const n=Math.floor(this.spearFireTick/t.SANDFIRE_ANIM_DIV)%this.sandFireTextures.length;
+ for(const t of i.children)t.texture=this.sandFireTextures[n]}
+ if(this.spearFireFrames>t.SPEARFIRE_FADE_FRAMES&&this.spearFireFrames%t.SPEARFIRE_TICK_FRAMES===0&&this.enemyList){
+ const i=this.atkDmg*this.getRaidDamageMultiplier()*t.SPEARFIRE_DAMAGE_PER_SEC*t.SPEARFIRE_TICK_FRAMES/60;
+ if(i>0){
+ const s=t.SPEARFIRE_RADIUS,e=s*t.SPEARFIRE_ASPECT_Y,n=s*s,h=e*e;
+ for(const t of this.enemyList){
+ if(!t.isAlive||t.removed||t.isUntagetable)continue;
+ const s=t.x-this.spearFireX,e=t.y-this.spearFireY;
+ s*s/n+e*e/h>1||(this.totalDamageDealt+=i,t.health-=i)}
+ }
+ }
+ this.spearFireFrames<=0&&this.clearSpearFireZone()}
+ clearSpearFireZone(){
+ this.spearFireZone&&(this.spearFireZone.destroy({
+ children:!0}
+ ),this.spearFireZone=null),this.spearFireFrames=0}
- this.teleportPhase=null,this.isSummoning=!1,this.clearWarningCircle(),this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
+ super.onRaidStunStart(),this.endAtt4Charge(!1),this.clearSpearFireZone(),this.spearFireStartDelay=-1,this.teleportPhase=null,this.isSummoning=!1,this.clearDragonLine(),this.clearWarningCircle(),this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
- super.resetForPool(),this.teleportPhase=null,this.teleportFrames=0,this.isSummoning=!1,this.clearWarningCircle(),this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
+ super.resetForPool(),this.endAtt4Charge(!1),this.att4Frames=0,this.clearSpearFireZone(),this.spearsFired=0,this.spearHitCounts.clear(),this.spearFireStartDelay=-1,this.teleportPhase=null,this.teleportFrames=0,this.isSummoning=!1,this.clearDragonLine(),this.clearWarningCircle(),this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
- Kt(d3,"DragonKnight"),zt(d3,"SKILL_TELEPORT",7),zt(d3,"SKILL_SUMMON_1",5),zt(d3,"SKILL_SUMMON_2",6),zt(d3,"BLOW_SCALE",.45),zt(d3,"ATT1_RADIUS",250),zt(d3,"ATT1_MAX_TARGETS",40),zt(d3,"ATT1_DAMAGE_MIN",1),zt(d3,"ATT1_DAMAGE_MAX",2),zt(d3,"ATT2_RADIUS",120),zt(d3,"ATT2_MAX_TARGETS",14),zt(d3,"ATT2_DAMAGE_MIN",.4),zt(d3,"ATT2_DAMAGE_MAX",.8),zt(d3,"ATT3_RADIUS",360),zt(d3,"ATT3_MAX_TARGETS",60),zt(d3,"ATT3_DAMAGE_MIN",1.5),zt(d3,"ATT3_DAMAGE_MAX",3),zt(d3,"ATT4_RADIUS",140),zt(d3,"ATT4_MAX_TARGETS",16),zt(d3,"ATT4_DAMAGE_MIN",.6),zt(d3,"ATT4_DAMAGE_MAX",1.2),zt(d3,"ATT5_RADIUS",220),zt(d3,"ATT5_MAX_TARGETS",25),zt(d3,"ATT5_DAMAGE_MIN",.5),zt(d3,"ATT5_DAMAGE_MAX",1),zt(d3,"TELEPORT_UNDERGROUND_FRAMES",90),zt(d3,"TELEPORT_REVEAL_FRAME",12),zt(d3,"SLAM_RADIUS",200),zt(d3,"SLAM_MAX_TARGETS",80),zt(d3,"SLAM_DAMAGE_MIN",2.5),zt(d3,"SLAM_DAMAGE_MAX",4.5);
+ Vt(B2,"DragonKnight"),Kt(B2,"SKILL_TELEPORT",7),Kt(B2,"SKILL_SUMMON",5),Kt(B2,"ATT1_CENTER_OFFSET",50),Kt(B2,"ATT1_RADIUS",240),Kt(B2,"ATT1_DASH_FRAMES",50),Kt(B2,"ATT1_DASH_MIN_DIST",130),Kt(B2,"ATT1_DASH_STOP_DIST",80),Kt(B2,"ATT1_MAX_TARGETS",40),Kt(B2,"ATT1_DAMAGE_MIN",.7),Kt(B2,"ATT1_DAMAGE_MAX",1.2),Kt(B2,"ATT1_KNOCKBACK_POWER_MIN",6),Kt(B2,"ATT1_KNOCKBACK_POWER_MAX",9),Kt(B2,"ATT1_KNOCKBACK_DURATION",12),Kt(B2,"ATT6_CENTER_OFFSET",140),Kt(B2,"ATT6_RADIUS",260),Kt(B2,"ATT6_MAX_TARGETS",100),Kt(B2,"ATT6_DAMAGE_MIN",1),Kt(B2,"ATT6_DAMAGE_MAX",2),Kt(B2,"ATT6_PUSH_POWER_MIN",5),Kt(B2,"ATT6_PUSH_POWER_MAX",8),Kt(B2,"ATT6_PUSH_DURATION",14),Kt(B2,"ATT3_RADIUS",360),Kt(B2,"ATT3_MAX_TARGETS",80),Kt(B2,"ATT3_DAMAGE_MIN",1.5),Kt(B2,"ATT3_DAMAGE_MAX",2.4),Kt(B2,"ATT3_SHOCK_POWER_SCALE",1),Kt(B2,"ATT4_RADIUS",140),Kt(B2,"ATT4_MAX_TARGETS",16),Kt(B2,"ATT4_DAMAGE_MIN",.6),Kt(B2,"ATT4_DAMAGE_MAX",1.2),Kt(B2,"ATT4_CHARGE_SPEED",3.5),Kt(B2,"ATT4_DURATION_FRAMES",120),Kt(B2,"ATT4_TICK_INTERVAL",3),Kt(B2,"ATT4_OFFSET",60),Kt(B2,"ATT4_MAX_HITS_PER_UNIT",3),Kt(B2,"ATT4_AIR_LIFT",36),Kt(B2,"DRAGON_COUNT",4),Kt(B2,"DRAGON_SPAWN_INTERVAL",60),Kt(B2,"DRAGON_HIT_FRAME",60),Kt(B2,"DRAGON_LINE_LENGTH",720),Kt(B2,"DRAGON_LINE_HALF_WIDTH",100),Kt(B2,"DRAGON_LINE_BACK",180),Kt(B2,"DRAGON_LINE_LEFT_LIMIT",80),Kt(B2,"DRAGON_LINE_RIGHT_LIMIT",1560),Kt(B2,"TELEPORT_UNDERGROUND_FRAMES",240),Kt(B2,"TELEPORT_REVEAL_FRAME",12),Kt(B2,"SLAM_RADIUS",140),Kt(B2,"SLAM_MAX_TARGETS",80),Kt(B2,"SLAM_DAMAGE_MIN",2.5),Kt(B2,"SLAM_DAMAGE_MAX",4.5),Kt(B2,"SLAM_SHOCK_MAX_RADIUS",320),Kt(B2,"SLAM_SHOCK_POWER_SCALE",1.35),Kt(B2,"SLAM_WHIFF_EXHAUST_GAIN",50),Kt(B2,"SPEAR_COUNT",25),Kt(B2,"SPEAR_START_FRAME",30),Kt(B2,"SPEAR_INTERVAL",4),Kt(B2,"SPEAR_SCATTER_RADIUS",105),Kt(B2,"SPEARFIRE_START_DELAY",20),Kt(B2,"SPEAR_SPAWN_Y",-40),Kt(B2,"SPEAR_AOE_RADIUS",70),Kt(B2,"SPEAR_DAMAGE_MIN",1),Kt(B2,"SPEAR_DAMAGE_MAX",1.5),Kt(B2,"SPEAR_MAX_HITS_PER_UNIT",3),Kt(B2,"SPEARFIRE_DURATION_FRAMES",600),Kt(B2,"SPEARFIRE_DAMAGE_PER_SEC",.4),Kt(B2,"SPEARFIRE_TICK_FRAMES",5),Kt(B2,"SPEARFIRE_RADIUS",140),Kt(B2,"SPEARFIRE_FADE_FRAMES",36),Kt(B2,"SPEARFIRE_ASPECT_Y",.6),Kt(B2,"SPEARFIRE_DECAL_SCALE",1.2),Kt(B2,"SANDFIRE_FRAME_COUNT",8),Kt(B2,"SANDFIRE_ANIM_DIV",2),Kt(B2,"INTERRUPT_ALWAYS_OPEN",!0),Kt(B2,"INTERRUPT_WEAK_BONES",["head","weapon","body","L_shoulder","R_shoulder"]),Kt(B2,"INTERRUPT_WEAK_LABELS",["머리","창","몸통","왼쪽 어깨","오른쪽 어깨"]);
EventDataManager 2 hunks, 201 statements
+ static initEventList(){
+ this.getEventList(),setInterval(this.getEventList.bind(this),6e5)}
+ static async getEventList(){
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=await rD.getInstance().user.getEvents();
+ if(t.success&&0!=t.success){
+ if(this.objList={
+ }
+ ,t.body.loginEvents){
+ for(let i of t.body.loginEvents){
+ const t=new PG;
+ t.type=0,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.startHour=i.startHour,t.endHour=i.endHour,t.rewards=i.rewards,this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
+ this.isValidEvent(0)}
+ if(t.body.medalEvents){
+ for(let i of t.body.medalEvents){
+ const t=new PG;
+ t.type=2,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.day=i.day,t.max=i.max,t.multi=i.multi,t.userCount=i.userCount,this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
+ this.isValidEvent(2)}
+ if(t.body.heroResetEvents){
+ for(let i of t.body.heroResetEvents){
+ const t=new PG;
+ t.type=1,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.day=i.day,t.divide=i.divide,this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
+ this.isValidEvent(1)}
+ if(t.body.paymentEvents){
+ for(let i of t.body.paymentEvents){
+ const t=new PG;
+ t.type=3,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.day=i.day,t.date=i.date,t.rewards=i.rewards,t.rewardType=i.type,t.amounts=i.amounts,t.userAmount=i.userAmount,t.subType=this.normalizePaymentEventSubType(i.subType),this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
+ this.isValidEvent(3)}
+ if(t.body.mineEvents){
+ const i=t.body.mineEvents,s=new PG;
+ s.type=4,s.id=i.id,s.startTime=i.startTime,s.endTime=i.endTime,s.seasonId=i.seasonId,s.petKindNums=i.petKindNums,this.objList[s.type]||(this.objList[s.type]=[]),this.objList[s.type].push(s),this.isValidEvent(4)}
+ this.setRequestPending(!1)}
+ else this.setRequestPending(!1)}
+ static getVOWithType(t){
+ return this.objList[t]}
+ static updateCurrentMedalEvent(t){
+ this.currentMedalEvent&&(this.currentMedalEvent.multi=t.multi,this.currentMedalEvent.userCount=t.count)}
+ static isValidEvent(t){
+ let i=this.getVOWithType(t);
+ 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(1==t){
+ for(let t of i)if((new Date).toUTCString().slice(0,3).toUpperCase()===t.day.toUpperCase())return this.currentHeroResetEvent=t,!0;
+ this.currentHeroResetEvent=null}
+ if(2==t){
+ for(let t of i)if((new Date).toUTCString().slice(0,3).toUpperCase()===t.day.toUpperCase())return this.currentMedalEvent=t,!0;
+ this.currentMedalEvent=null}
+ if(3==t){
+ this.currentPaymentSpecialEvent=null,this.currentPaymentMonthEvent=null;
+ for(let t of i){
+ const i=new Date;
+ this.isPaymentEventActive(t,i)&&("special"==t.subType?this.currentPaymentSpecialEvent=t:"month"==t.subType&&(this.currentPaymentMonthEvent=t))}
+ return null!=this.currentPaymentSpecialEvent||null!=this.currentPaymentMonthEvent}
+ if(4==t){
+ for(let t of i){
+ const i=new Date;
+ if(this.isMineEventActive(t,i))return this.currentMineEvent=t,!0}
+ this.currentMineEvent=null}
+ return!1}
+ static isMineEventActive(t,i){
+ const s=i.getTime();
+ return!(t.startTime&&s<new Date(t.startTime).getTime()||t.endTime&&s>new Date(t.endTime).getTime())}
+ static isPaymentEventActive(t,i){
+ const s=i.getTime();
+ if(t.startTime&&s<new Date(t.startTime).getTime())return!1;
+ if(t.endTime&&s>new Date(t.endTime).getTime())return!1;
+ switch(t.rewardType){
+ case"range":return!0;
+ case"date":return t.date===i.getDate();
+ case"day":return this.isEventDayActive({
+ day:t.day,startTime:new Date(t.startTime),endTime:new Date(t.endTime)}
+ ,i);
+ default:return!1}
+ }
+ static normalizePaymentEventSubType(t){
+ return"month"===t||"special"===t?t:"special"}
+ static isEventDayActive(t,i){
+ const s=["SUN","MON","TUE","WED","THU","FRI","SAT"][i.getUTCDay()],e=t.day.toUpperCase()===s,n=!t.startTime||i>=t.startTime,h=!t.endTime||i<=t.endTime;
+ return e&&n&&h}
+ static isUsdCurrency(){
+ const t=AL.getInstance();
+ return t.isGoogleClient()||t.isAppleClient()}
+ static setRequestPending(t){
+ this.requestPending=t}
+ }
+ ;
+ Vt(OG,"EventDataManager"),Kt(OG,"objList",{
+ }
+ ),Kt(OG,"currentHeroResetEvent"),Kt(OG,"currentMedalEvent"),Kt(OG,"currentPaymentSpecialEvent"),Kt(OG,"currentPaymentMonthEvent"),Kt(OG,"currentMineEvent"),Kt(OG,"requestPending",!1);
+ let xG=OG;
+ var RG=(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))(RG||{
+ }
+ );
+ const NG=class t{
+ constructor(){
+ Kt(this,"type",-1),Kt(this,"id",0),Kt(this,"startTime",""),Kt(this,"endTime",""),Kt(this,"day",""),Kt(this,"divide",1),Kt(this,"startHour",0),Kt(this,"endHour",0),Kt(this,"max",0),Kt(this,"multi",0),Kt(this,"userCount",0),Kt(this,"rewards",[]),Kt(this,"date",0),Kt(this,"amounts",[]),Kt(this,"rewardType",""),Kt(this,"userAmount",0),Kt(this,"subType",""),Kt(this,"seasonId",0),Kt(this,"petKindNums",[])}
+ static getVO(){
+ let i;
+ return i=t.recycleList.length>0?t.recycleList.pop():new t,i}
+ remove(){
+ this.type=-1,t.recycleList.push(this)}
+ }
+ ;
+ Vt(NG,"EventVO"),Kt(NG,"recycleList",[]);
+ let PG=NG;
+ const DG=class{
- const dU=class{
- static initEventList(){
- this.getEventList(),setInterval(this.getEventList.bind(this),6e5)}
- static async getEventList(){
- if(1==this.requestPending)return;
- this.setRequestPending(!0);
- const t=await hD.getInstance().user.getEvents();
- if(t.success&&0!=t.success){
- if(this.objList={
- }
- ,t.body.loginEvents){
- for(let i of t.body.loginEvents){
- const t=new mU;
- t.type=0,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.startHour=i.startHour,t.endHour=i.endHour,t.rewards=i.rewards,this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
- this.isValidEvent(0)}
- if(t.body.medalEvents){
- for(let i of t.body.medalEvents){
- const t=new mU;
- t.type=2,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.day=i.day,t.max=i.max,t.multi=i.multi,t.userCount=i.userCount,this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
- this.isValidEvent(2)}
- if(t.body.heroResetEvents){
- for(let i of t.body.heroResetEvents){
- const t=new mU;
- t.type=1,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.day=i.day,t.divide=i.divide,this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
- this.isValidEvent(1)}
- if(t.body.paymentEvents){
- for(let i of t.body.paymentEvents){
- const t=new mU;
- t.type=3,t.id=i.id,t.startTime=i.startTime,t.endTime=i.endTime,t.day=i.day,t.date=i.date,t.rewards=i.rewards,t.rewardType=i.type,t.amounts=i.amounts,t.userAmount=i.userAmount,t.subType=this.normalizePaymentEventSubType(i.subType),this.objList[t.type]||(this.objList[t.type]=[]),this.objList[t.type].push(t)}
- this.isValidEvent(3)}
- this.setRequestPending(!1)}
- else this.setRequestPending(!1)}
- static getVOWithType(t){
- return this.objList[t]}
- static updateCurrentMedalEvent(t){
- this.currentMedalEvent&&(this.currentMedalEvent.multi=t.multi,this.currentMedalEvent.userCount=t.count)}
- static isValidEvent(t){
- let i=this.getVOWithType(t);
- 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),!1;
- if(1==t){
- for(let t of i)if((new Date).toUTCString().slice(0,3).toUpperCase()===t.day.toUpperCase())return this.currentHeroResetEvent=t,!0;
- this.currentHeroResetEvent=null}
- if(2==t){
- for(let t of i)if((new Date).toUTCString().slice(0,3).toUpperCase()===t.day.toUpperCase())return this.currentMedalEvent=t,!0;
- this.currentMedalEvent=null}
- if(3==t){
- this.currentPaymentSpecialEvent=null,this.currentPaymentMonthEvent=null;
- for(let t of i){
- const i=new Date;
- this.isPaymentEventActive(t,i)&&("special"==t.subType?this.currentPaymentSpecialEvent=t:"month"==t.subType&&(this.currentPaymentMonthEvent=t))}
- return null!=this.currentPaymentSpecialEvent||null!=this.currentPaymentMonthEvent}
- return!1}
- static isPaymentEventActive(t,i){
- const s=i.getTime();
- if(t.startTime&&s<new Date(t.startTime).getTime())return!1;
- if(t.endTime&&s>new Date(t.endTime).getTime())return!1;
- switch(t.rewardType){
- case"range":return!0;
- case"date":return t.date===i.getDate();
- case"day":return this.isEventDayActive({
- day:t.day,startTime:new Date(t.startTime),endTime:new Date(t.endTime)}
- ,i);
- default:return!1}
- }
- static normalizePaymentEventSubType(t){
- return"month"===t||"special"===t?t:"special"}
- static isEventDayActive(t,i){
- const s=["SUN","MON","TUE","WED","THU","FRI","SAT"][i.getUTCDay()],e=t.day.toUpperCase()===s,n=!t.startTime||i>=t.startTime,h=!t.endTime||i<=t.endTime;
- return e&&n&&h}
- static isUsdCurrency(){
- const t=EL.getInstance();
- return t.isGoogleClient()||t.isAppleClient()}
- static setRequestPending(t){
- this.requestPending=t}
- }
- ;
- Kt(dU,"EventDataManager"),zt(dU,"objList",{
- }
- ),zt(dU,"currentHeroResetEvent"),zt(dU,"currentMedalEvent"),zt(dU,"currentPaymentSpecialEvent"),zt(dU,"currentPaymentMonthEvent"),zt(dU,"requestPending",!1);
- let fU=dU;
- var pU=(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))(pU||{
- }
- );
- const gU=class t{
- constructor(){
- 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","")}
- static getVO(){
- let i;
- return i=t.recycleList.length>0?t.recycleList.pop():new t,i}
- remove(){
- this.type=-1,t.recycleList.push(this)}
- }
- ;
- Kt(gU,"EventVO"),zt(gU,"recycleList",[]);
- let mU=gU;
GuildRaidEmblemDetailSubMenu 3 hunks, 193 statements
- const g4t=class extends XI{
+ const k9t=class t extends u4t{
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
- super(),zt(this,"bg"),zt(this,"icon"),zt(this,"lblTitle"),zt(this,"lblDesc"),zt(this,"btnEnter"),this.bg=new CM({
- texture:ZA.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Guild","Guild_Quest_Raid_nor")),this.icon.x=2,this.addChild(this.icon),this.lblTitle=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblTitle.x=135,this.lblTitle.y=15,this.addChild(this.lblTitle),this.lblDesc=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblDesc.x=this.lblTitle.x,this.addChild(this.lblDesc),this.btnEnter=new QL(""),this.btnEnter.color=QL.BROWN,this.btnEnter.width=120,this.btnEnter.height=55,this.btnEnter.x=this.bg.width-this.btnEnter.width-15,this.btnEnter.y=.5*(this.bg.height-this.btnEnter.height),this.btnEnter.onClick=()=>this.onEnterClick(),this.addChild(this.btnEnter)}
- setData(t){
- this.data=t,this.lblTitle.text=t.name,t.live?t.hasOpen?this.lblDesc.text="진행중":this.lblDesc.text="":this.lblDesc.text="coming soon",this.lblDesc.textColor=t.hasOpen?16737894:11184810,this.lblDesc.text?(this.lblTitle.y=15,this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+5,this.lblDesc.visible=!0):(this.lblTitle.y=.5*(this.bg.height-this.lblTitle.height),this.lblDesc.visible=!1),this.icon.texture=ZA.getTexture("UI_Guild",t.live?"Guild_Quest_Raid":"Guild_Quest_Raid_nor"),this.icon.x=2,this.icon.y=.5*(this.bg.height-this.icon.height),this.lblTitle.alpha=t.live?1:.5,this.btnEnter.text=AG.getText("COMMON_376","입장"),this.btnEnter.activated=t.live}
- onEnterClick(){
- const t=this.data;
- t&&(t.live?t.onEnter(t.main):vV.getInstance().showMessage("coming soon"))}
- onClick(t,i){
- this.onEnterClick()}
- get height(){
- return this.bg.height+2}
+ super(),this.updateLanguage()}
+ updateLanguage(){
+ }
- Kt(g4t,"GuildRaidMainItemRenderer");
+ Vt(k9t,"GuildRaidEmblemDetailSubMenu"),Kt(k9t,"instance");
+ let O9t=k9t;
+ const x9t=class t extends fzt{
+ constructor(){
+ super(),Kt(this,"panel");
+ const t=O9t.getInstance(),i=t.height+14,s=Math.max(120,840-i-h9t.LIST_TOP-10);
+ this.panel=new h9t(s),this.panel.y=i,this.panel.onChange=()=>O9t.getInstance().setTitle(this.panel.emblemName),this.addChild(this.panel),this.addChild(t)}
+ static getInstance(){
+ return null==t.instance&&(t.instance=new t),t.instance}
+ async setData(t){
+ await this.panel.setData(t),O9t.getInstance().setTitle(this.panel.emblemName)}
+ updateLanguage(){
+ O9t.getInstance().setTitle(this.panel.emblemName)}
+ get className(){
+ return"GuildRaidEmblemDetailSubView"}
+ }
+ ;
+ Vt(x9t,"GuildRaidEmblemDetailSubView"),Kt(x9t,"instance");
+ let R9t=x9t;
+ const N9t=class t extends bzt{
+ constructor(){
+ super(),Kt(this,"slot",-1),Kt(this,"picks",[]),Kt(this,"merging",!1),Kt(this,"onChange",null),Kt(this,"lblTitle"),Kt(this,"lblHint"),Kt(this,"trayArea"),Kt(this,"lblInvTitle"),Kt(this,"runeList"),Kt(this,"lblEmpty"),Kt(this,"lblDetail"),Kt(this,"btnMerge"),this.bg.height<880&&(this.y=Math.max(0,VA.safeHeight-880),this.bg.height=VA.safeHeight-this.y),this.lblTitle=new JD(SG.getText("GAME_1325","크리스탈 합성"),16772744,cD.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblTitle.x=20,this.lblTitle.y=46,this.addChild(this.lblTitle),this.lblHint=new JD(SG.getText("GAME_1326","같은 휘장·같은 등급의 크리스탈 5개를 선택하세요 — 상위 등급 크리스탈 1개를 획득합니다 (종류 랜덤)"),11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblHint.x=20,this.lblHint.y=84,this.lblHint.setWrapWidth(600),this.addChild(this.lblHint),this.trayArea=new Ge,this.trayArea.x=20,this.trayArea.y=136,this.addChild(this.trayArea),this.lblInvTitle=new JD(SG.getText("GAME_1327","보유 크리스탈"),16763904,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblInvTitle.x=20,this.lblInvTitle.y=this.trayArea.y+t.CHIP+24,this.addChild(this.lblInvTitle);
+ const i=this.lblInvTitle.y+30,s=Math.max(3*s9t.ROW_H,this.bg.height-i-t.BOTTOM_H-6);
+ this.runeList=new d5(s9t,640,s),this.runeList.x=0,this.runeList.y=i,this.addChild(this.runeList),this.lblEmpty=new JD(SG.getText("GAME_1329","합성 재료로 쓸 수 있는 크리스탈이 없습니다 (장착중/잠금 제외)"),8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblEmpty.x=20,this.lblEmpty.y=i+16,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty);
+ const e=new Lf;
+ e.rect(0,this.bg.height-t.BOTTOM_H,this.bg.width,t.BOTTOM_H).fill({
+ color:1511952,alpha:.98}
+ ),e.rect(0,this.bg.height-t.BOTTOM_H,this.bg.width,1).fill({
+ color:16763904,alpha:.3}
+ ),e.eventMode="none",this.addChild(e),this.lblDetail=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDetail.x=20,this.lblDetail.y=this.bg.height-t.BOTTOM_H+14,this.lblDetail.setWrapWidth(400),this.addChild(this.lblDetail),this.btnMerge=new ZL(SG.getText("GAME_1328","합성")),this.btnMerge.color=ZL.GREEN,this.btnMerge.width=170,this.btnMerge.height=50,this.btnMerge.x=this.bg.width-this.btnMerge.width-20,this.btnMerge.y=this.bg.height-t.BOTTOM_H+.5*(t.BOTTOM_H-50),this.btnMerge.onClick=()=>{
+ this.doMerge()}
+ ,this.addChild(this.btnMerge)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ open(t=-1,i){
+ this.slot=t,this.onChange=i??null,this.picks=[],this.merging=!1,this.refresh(),this.show2(),this.loadFromServer()}
+ async loadFromServer(){
+ const t=KQt.getInstance();
+ if(await t.ensureLoaded()){
+ if(this.slot>=0)await t.seedBandIfNeeded(this.slot+1);
+ else for(let i=1;
+ i<=KQt.SLOT_COUNT;
+ i++)await t.seedBandIfNeeded(i);
+ this.refresh()}
+ else u2.getInstance().showMessage(SG.getText("GAME_1339","크리스탈 정보를 불러오지 못했습니다"))}
+ static typeOf(t){
+ return"ABCDEF"[Math.floor(t/100)-1]??"A"}
+ refresh(){
+ this.drawTray();
+ const t=this.buildRows();
+ this.runeList.dataProvider=t,this.lblEmpty.visible=0===t.length,this.updateDetail()}
+ drawTray(){
+ this.trayArea.removeChildren();
+ const i=t.CHIP;
+ for(let o=0;
+ o<t.NEED;
+ o++){
+ const s=this.picks[o],e=new Ge,n=new Lf;
+ if(s){
+ J7t(n,t.typeOf(s.kindNum),s.grade,i),e.eventMode="static",e.cursor="pointer",e.hitArea=new Ri(0,0,i,i);
+ const h=o;
+ e.on("pointerup",()=>{
+ this.picks.splice(h,1),this.refresh()}
+ )}
+ else n.roundRect(0,0,i,i,10).fill({
+ color:0,alpha:.35}
+ ).stroke({
+ width:1,color:6710886,alpha:.6}
+ );
+ e.addChild(n),e.x=o*(i+t.GAP),this.trayArea.addChild(e)}
+ const s=new JD("→",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_24);
+ s.x=t.NEED*(i+t.GAP)+8,s.y=.5*(i-s.height),s.eventMode="none",this.trayArea.addChild(s);
+ const e=this.picks.length>0?this.picks[0].grade+1:0,n=new Ge,h=new Lf;
+ e>=2&&e<=6?J7t(h,t.typeOf(this.picks[0].kindNum),e,i):h.roundRect(0,0,i,i,10).fill({
+ color:0,alpha:.35}
+ ).stroke({
+ width:1,color:6710886,alpha:.6}
+ ),n.addChild(h);
+ const r=new JD("?",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_24);
+ r.x=.5*(i-r.width),r.y=.5*(i-r.height),r.eventMode="none",n.addChild(r),n.x=s.x+s.width+8,n.eventMode="none",this.trayArea.addChild(n)}
+ buildStacks(){
+ const t=KQt.getInstance(),i=t.getEquippedIdSet(),s=(this.slot>=0?[this.slot+1]:DJt.map(t=>t+1)).flatMap(i=>t.getRunesByBand(i)),e=new Map;
+ for(const n of s){
+ if(n.locked||i.has(n.id))continue;
+ const t=`${
+ Math.floor(n.kindNum/100)}
+ :${
+ n.grade}
+ :${
+ n.subId>=0?1:0}
+ `;
+ let s=e.get(t);
+ s||(s={
+ kindNum:n.kindNum,grade:n.grade,subId:n.subId,vos:[]}
+ ,e.set(t,s)),s.vos.push(n)}
+ return[...e.values()]}
+ pickedFrom(t){
+ const i=Math.floor(t.kindNum/100),s=t.subId>=0;
+ return this.picks.filter(e=>Math.floor(e.kindNum/100)===i&&e.grade===t.grade&&e.subId>=0===s).length}
+ buildRows(){
+ const t=this.buildStacks().map(t=>{
+ const i=this.pickedFrom(t),s=t.vos.length-i;
+ return{
+ kindNum:t.kindNum,grade:t.grade,subId:t.subId,vos:t.vos,equipped:!1,countText:`×${
+ s}
+ `,pickedCount:i,dim:s<=0,onTap:Vt(()=>this.onStackTap(t),"onTap")}
+ }
+ ),i=[];
+ for(let s=0;
+ s<t.length;
+ s+=s9t.COLS)i.push({
+ cells:t.slice(s,s+s9t.COLS)}
+ );
+ return i}
+ onStackTap(i){
+ if(i.grade>=KQt.GRADE_MAX)return void u2.getInstance().showMessage(SG.getText("GAME_1333","신화 등급은 합성할 수 없습니다"));
+ const s=new Set(this.picks.map(t=>t.id)),e=i.vos.find(t=>!s.has(t.id)),n=this.picks.length>=t.NEED;
+ (e&&!n||!this.unpickFrom(i))&&(n?u2.getInstance().showMessage(SG.getText("GAME_1334","재료가 이미 5개 선택되었습니다")):this.picks.length>0&&this.picks[0].grade!==i.grade?u2.getInstance().showMessage(SG.getText("GAME_1335","같은 등급의 크리스탈만 함께 합성할 수 있습니다")):this.picks.length>0&&Math.floor(this.picks[0].kindNum/100)!==Math.floor(i.kindNum/100)?u2.getInstance().showMessage(SG.getText("GAME_1336","같은 휘장의 크리스탈만 함께 합성할 수 있습니다")):e?(this.picks.push(e),this.refresh()):u2.getInstance().showMessage(SG.getText("GAME_1337","보유 수량이 부족합니다")))}
+ unpickFrom(t){
+ const i=Math.floor(t.kindNum/100),s=t.subId>=0;
+ for(let e=this.picks.length-1;
+ e>=0;
+ e--){
+ const n=this.picks[e];
+ if(Math.floor(n.kindNum/100)===i&&n.grade===t.grade&&n.subId>=0===s)return this.picks.splice(e,1),this.refresh(),!0}
+ return!1}
+ updateDetail(){
+ const i=OQt.getInstance();
+ if(0===this.picks.length)this.lblDetail.text=SG.getText("GAME_1330","재료로 사용할 크리스탈을 선택하세요");
+ else{
+ const t=this.picks[0].grade,s=i.getGradeName(t)??SG.getValueReplace("GAME_1340","\\{
+ 0\\}
+ ",t,`${
+ t}
+ 등급`),e=i.getGradeName(t+1)??SG.getValueReplace("GAME_1340","\\{
+ 0\\}
+ ",t+1,`${
+ t+1}
+ 등급`);
+ this.lblDetail.text=SG.getValueReplaceMulti("GAME_1331",["\\{
+ 0\\}
+ ","\\{
+ 1\\}
+ ","\\{
+ 2\\}
+ "],[s,this.picks.length,e],`[${
+ s}
+ ] ${
+ this.picks.length}
+ /5 선택 → [${
+ e}
+ ] 1개 획득 (종류 랜덤)`)}
+ this.btnMerge.activated=this.picks.length===t.NEED&&!this.merging}
+ async doMerge(){
+ var i;
+ if(this.picks.length!==t.NEED||this.merging)return;
+ this.merging=!0,this.btnMerge.activated=!1;
+ const s=KQt.getInstance(),e=await s.merge(this.picks.map(t=>t.id));
+ if(this.merging=!1,!e.ok||!e.rune)return u2.getInstance().showMessage(KQt.errorText(e.error)??SG.getText("GAME_1338","합성에 실패했습니다")),this.picks=[],void this.refresh();
+ const n=OQt.getInstance(),h=n.getRune(e.rune.kindNum),r=n.getGradeName(e.rune.grade)??"",o=n.getSub(e.rune.subId),a=e.rune.subId>=0?`  (+${
+ SG.getText("GAME_1305","부옵")}
+ : ${
+ o?n.getSubDesc(o):"?"}
+ )`:"";
+ u2.getInstance().showMessage(`${
+ SG.getText("GAME_1332","합성 성공!")}
+   [${
+ r}
+ ] ${
+ h?n.formatRuneDesc(h,e.rune.grade):"?"}
+ ${
+ a}
+ `),this.picks=[],this.refresh(),null==(i=this.onChange)||i.call(this)}
+ get className(){
+ return"RuneMergePopup"}
+ }
+ ;
+ Vt(N9t,"RuneMergePopup"),Kt(N9t,"_instance"),Kt(N9t,"NEED",KQt.MERGE_COUNT),Kt(N9t,"CHIP",60),Kt(N9t,"GAP",8),Kt(N9t,"BOTTOM_H",96);
MailReceiveAllResultPopup 1 hunks, 187 statements
+ super(),Kt(this,"rewardPool",[]),Kt(this,"rewardIcon"),Kt(this,"rewardMessage"),Kt(this,"rewardBg"),Kt(this,"rewardContainer"),Kt(this,"heroSlotPool",[]),Kt(this,"heroSlotMessage"),Kt(this,"heroSlotBg"),Kt(this,"heroSlotContainer"),Kt(this,"heroBarrackPool",[]),Kt(this,"heroBarrackMessage"),Kt(this,"heroBarrackBg"),Kt(this,"heroBarrackContainer"),Kt(this,"inventoryPool",[]),Kt(this,"inventoryIcon"),Kt(this,"inventoryMessage"),Kt(this,"inventoryBg"),Kt(this,"inventoryContainer"),Kt(this,"btnConfirm"),this.title=SG.getText("GAME_1251","모두받기"),this.rewardIcon=new He(QA.getTexture("UI_Ekkorr","Icon_alarm_check_brown")),this.rewardIcon.x=30,this.rewardIcon.y=80,this.addChild(this.rewardIcon);
+ const t=cD.DEFAULT_FONT_OPTION_18;
+ t.fill=cD.COLOR_WHITE,t.fontWeight="normal",this.rewardMessage=new JD("일반 메일은 모두받기 할 수 있습니다.\n결제 메일은 수령할 때까지 보관됩니다.",t.fill,t),this.rewardMessage.x=this.rewardIcon.x+this.rewardIcon.width+5,this.rewardMessage.y=this.rewardIcon.y,this.addChild(this.rewardMessage),cD.setLabelWrapWidth(this.rewardMessage,this.width-60),this.rewardBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.rewardBg.alpha=.7,this.rewardBg.x=30,this.rewardBg.width=this.width-2*this.rewardBg.x,this.rewardBg.height=120,this.addChild(this.rewardBg),this.rewardContainer=new Ge,this.addChild(this.rewardContainer),this.heroSlotMessage=new JD("+ 슬롯에 추가되었습니다.",cD.DEFAULT_COLOR,t),this.heroSlotMessage.x=this.rewardMessage.x,this.addChild(this.heroSlotMessage),cD.setLabelWrapWidth(this.heroSlotMessage,this.width-60),this.heroSlotBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.heroSlotBg.alpha=this.rewardBg.alpha,this.heroSlotBg.x=this.rewardBg.x,this.heroSlotBg.width=this.rewardBg.width,this.heroSlotBg.height=this.rewardBg.height,this.addChild(this.heroSlotBg),this.heroSlotContainer=new Ge,this.addChild(this.heroSlotContainer),this.heroBarrackMessage=new JD("+ 병영에 추가되었습니다.",cD.DEFAULT_COLOR,t),this.heroBarrackMessage.x=this.rewardMessage.x,this.addChild(this.heroBarrackMessage),cD.setLabelWrapWidth(this.heroBarrackMessage,this.width-60),this.heroBarrackBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.heroBarrackBg.alpha=this.rewardBg.alpha,this.heroBarrackBg.x=this.rewardBg.x,this.heroBarrackBg.width=this.rewardBg.width,this.heroBarrackBg.height=this.rewardBg.height,this.addChild(this.heroBarrackBg),this.heroBarrackContainer=new Ge,this.addChild(this.heroBarrackContainer),this.inventoryIcon=new He(QA.getTexture("UI_Ekkorr","Icon_alarm_check_green")),this.inventoryIcon.x=this.rewardIcon.x,this.addChild(this.inventoryIcon),this.inventoryMessage=new JD("보석, 명예코인, 영웅, 초월권을 제외한 아이템은 인벤토리로 지급되었습니다.",t.fill,t),this.inventoryMessage.x=this.inventoryIcon.x+this.inventoryIcon.width+5,this.inventoryMessage.y=90,this.addChild(this.inventoryMessage),cD.setLabelWrapWidth(this.inventoryMessage,this.width-60),this.inventoryBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.inventoryBg.alpha=.7,this.inventoryBg.x=30,this.inventoryBg.width=this.width-2*this.inventoryBg.x,this.inventoryBg.height=120,this.addChild(this.inventoryBg),this.inventoryContainer=new Ge,this.addChild(this.inventoryContainer),this.btnConfirm=new eG("확인"),this.addChild(this.btnConfirm),this.btnConfirm.onClick=()=>{
+ this.hide()}
+ ,this.updateLayout()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ updateLayout(){
+ let t=80;
+ if(this.rewardContainer.visible){
+ this.rewardIcon.y=t,this.rewardMessage.y=t,this.rewardBg.x=.5*(this.width-this.rewardBg.width),this.rewardBg.y=this.rewardMessage.y+this.rewardMessage.height+10;
+ const i=this.rewardContainer.children.length>4?4:this.rewardContainer.children.length-1,s=this.rewardContainer.children[i];
+ this.rewardContainer.x=s?.5*(this.width-s.x-s.width):.5*(this.width-this.rewardContainer.width),this.rewardContainer.y=this.rewardBg.y+20,this.rewardBg.height=this.rewardContainer.height+2*(this.rewardContainer.y-this.rewardBg.y),t=this.rewardBg.y+this.rewardBg.height+30}
+ this.heroSlotContainer.visible&&(this.heroSlotMessage.y=t-10,this.heroSlotBg.x=.5*(this.width-this.heroSlotBg.width),this.heroSlotBg.y=this.heroSlotMessage.y+this.heroSlotMessage.height+10,this.heroSlotContainer.x=.5*(this.width-this.heroSlotContainer.width),this.heroSlotContainer.y=this.heroSlotBg.y+20,this.heroSlotBg.height=this.heroSlotContainer.height+2*(this.heroSlotContainer.y-this.heroSlotBg.y),t=this.heroSlotBg.y+this.heroSlotBg.height+30),this.heroBarrackContainer.visible&&(this.heroBarrackMessage.y=t-10,this.heroBarrackBg.x=.5*(this.width-this.heroBarrackBg.width),this.heroBarrackBg.y=this.heroBarrackMessage.y+this.heroBarrackMessage.height+10,this.heroBarrackContainer.x=.5*(this.width-this.heroBarrackContainer.width),this.heroBarrackContainer.y=this.heroBarrackBg.y+20,this.heroBarrackBg.height=this.heroBarrackContainer.height+2*(this.heroBarrackContainer.y-this.heroBarrackBg.y),t=this.heroBarrackBg.y+this.heroBarrackBg.height+30),this.inventoryContainer.visible&&(this.inventoryIcon.y=t,this.inventoryMessage.y=this.inventoryIcon.y,this.inventoryBg.x=.5*(this.width-this.inventoryBg.width),this.inventoryBg.y=this.inventoryMessage.y+this.inventoryMessage.height+10,this.inventoryContainer.x=.5*(this.width-this.inventoryContainer.width),this.inventoryContainer.y=this.inventoryBg.y+20,this.inventoryBg.height=this.inventoryContainer.height+2*(this.inventoryContainer.y-this.inventoryBg.y),t=this.inventoryBg.y+this.inventoryBg.height+30),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+30}
+ setData(t,i=null){
+ if(!t||!t.rewards)return;
+ this.title=SG.getText("GAME_1251","모두받기"),this.rewardMessage.text=SG.getText("GAME_1252","일반 메일은 모두받기 할 수 있습니다.")+"\n"+SG.getText("GAME_1253","결제 메일은 수령할 때까지 보관됩니다."),this.inventoryMessage.text=SG.getText("GAME_819","보석, 명예코인, 영웅, 초월권, 크리스탈 뽑기권을 제외한 아이템은 인벤토리로 지급되었습니다."),this.heroSlotMessage.text=`+ ${
+ SG.getText("GAME_300","슬롯에 추가되었습니다.")}
+ `,this.heroBarrackMessage.text=`+ ${
+ SG.getText("GAME_1257","병영에 추가되었습니다.")}
+ `,this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.update(t.rewards);
+ const{
+ heroSlotMap:s,heroBarrackMap:e}
+ =this.updateHeroInfoResult(t.rewards,i);
+ this.updateRewards(t.rewards,s,e),this.updateLayout()}
+ updateHeroInfoResult(t,i){
+ if(!i)return{
+ heroSlotMap:new Map,heroBarrackMap:new Map}
+ ;
+ const s=t.reduce((t,i,s,e)=>{
+ if("hero"===e[s].type&&"kindNum"in e[s]){
+ const i=Number(e[s].kindNum),n=Number(e[s].amount);
+ t.map.set(i,n),t.total+=n}
+ return t}
+ ,{
+ total:0,map:new Map}
+ ),e=s.map,n=s.total;
+ let h=new Map,r=new Map;
+ const o=wx.getInstance().getTeamIds();
+ wx.getInstance().setData(i.body.hero);
+ const a=wx.getInstance().getTeamIds();
+ if(a.length==o.length)r=new Map(e);
+ else if(a.length-o.length==n){
+ h=new Map(e);
+ for(let t=o.length;
+ t<a.length;
+ ++t){
+ const i=wx.getInstance().getVOWithId(a[t]);
+ i&&jhi.getInstance().hireHero(i)}
+ }
+ else{
+ for(let t=o.length;
+ t<a.length;
+ ++t){
+ const i=wx.getInstance().getVOWithId(a[t]);
+ i&&(h.set(i.kindNum,(h.get(i.kindNum)??0)+1),jhi.getInstance().hireHero(i))}
+ for(const[t,i]of e)r.set(t,i-(h.get(t)??0))}
+ return h.size>0&&CYt.getInstance().isHeroSubView()&&$qt.getInstance().setData(),r.size>0&&CYt.getInstance().isHeroRosterView()&&yqt.getInstance().setData(),{
+ heroSlotMap:h,heroBarrackMap:r}
+ }
+ updateRewards(t,i,s){
+ this.resetRewards();
+ const e=[],n=[];
+ let h,r=t.length;
+ for(let u=0;
+ u<r;
+ ++u)h=t[u].type,t[u].subType,"hero"!==h&&("ticket"===h?n.push(t[u]):e.push(t[u]));
+ this.setRewards(e,this.rewardPool,this.rewardContainer),this.setRewards(n,this.inventoryPool,this.inventoryContainer);
+ const o=e.length>0;
+ this.rewardIcon.visible=o,this.rewardMessage.visible=o,this.rewardBg.visible=o,this.rewardContainer.visible=o;
+ const a=n.length>0;
+ this.inventoryIcon.visible=a,this.inventoryMessage.visible=a,this.inventoryBg.visible=a,this.inventoryContainer.visible=a,this.setHeroRewards(i,this.heroSlotPool,this.heroSlotContainer),this.setHeroRewards(s,this.heroBarrackPool,this.heroBarrackContainer);
+ const c=i.size>0;
+ this.heroSlotMessage.visible=c,this.heroSlotBg.visible=c,this.heroSlotContainer.visible=c;
+ const l=s.size>0;
+ this.heroBarrackMessage.visible=l,this.heroBarrackBg.visible=l,this.heroBarrackContainer.visible=l}
+ setRewards(t,i,s){
+ let e,n,h,r,o,a;
+ const c=t.length;
+ for(let f=0;
+ f<c;
+ ++f)n=t[f].type,h=t[f].subType??"",r=t[f].amount??0,o=t[f].grade??-1,a=t[f].kindNum??-1,f<i.length?e=i[f]:(e=new t6t,i.push(e)),e.setData(n,r,o,a,h);
+ let l=0,u=0,d=Math.max(35,35+15*(5-i.length));
+ for(let f=0;
+ f<c;
+ ++f)e=i[f],e.x=l,e.y=u,s.addChild(e),e.type!=n5.ticket||e.subType!=n5.heroGacha&&e.subType!=n5.heroSelect&&e.subType!=n5.treasureGacha&&e.subType!=n5.petSelect?this.setItemEvent(e,!1):this.setItemEvent(e,!0),l+=e.width+d,l>465&&(l=0,u+=e.height+10)}
+ setHeroRewards(t,i,s){
+ let e,n=0;
+ for(const[a,c]of t)n<i.length?e=i[n]:(e=new t6t,i.push(e)),e.setData("hero",c,-1,a,""),n++;
+ let h=0,r=0,o=Math.max(30,30+15*(4-i.length));
+ for(let a=0;
+ a<n;
+ ++a)e=i[a],e.x=h,e.y=r,s.addChild(e),h+=e.width+o,h>465&&(h=0,r+=e.height+10)}
+ resetRewards(){
+ this.rewardContainer.removeChildren(),this.inventoryContainer.removeChildren(),this.heroSlotContainer.removeChildren(),this.heroBarrackContainer.removeChildren(),this.rewardPool.forEach(t=>{
+ t.reset(),this.setItemEvent(t,!1)}
+ ),this.inventoryPool.forEach(t=>{
+ t.reset(),this.setItemEvent(t,!1)}
+ ),this.heroSlotPool.forEach(t=>{
+ t.reset()}
+ ),this.heroBarrackPool.forEach(t=>{
+ t.reset()}
+ )}
+ setItemEvent(t,i){
+ t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
+ onItemTap(t){
+ const i=t.target;
+ i&&(i.type==n5.ticket&&i.subType==n5.heroGacha?NYt.getInstance().showGuideOfHeroGacha():i.type==n5.ticket&&i.subType==n5.heroSelect?Q3t.getInstance().setData(i.kindNum)&&Q3t.getInstance().show():i.type==n5.ticket&&i.subType==n5.treasureGacha?oXt.getInstance().showGuideOfTreasureGacha():i.type==n5.ticket&&i.subType==n5.petSelect&&w$t.getInstance().setData(i.kindNum)&&w$t.getInstance().show())}
+ async update(t){
+ if(!t)return;
+ let i;
+ i=t.findIndex(t=>t.type==n5.gem),-1!==i&&(p6t.getInstance().updateGem(),kF.getInstance().updateGem()),i=t.findIndex(t=>t.type==n5.redGem),-1!==i&&this.updateRedGem(),i=t.findIndex(t=>t.type==n5.honorCoin),-1!==i&&this.updateHonorCoin(),i=t.findIndex(t=>t.type==n5.guildCoin),-1!==i&&this.updateGuildCoin(),i=t.findIndex(t=>t.type==n5.raidCoin),-1!==i&&this.updateRaidCoin(),i=t.findIndex(t=>t.type==n5.runeTicket),-1!=i&&this.updateRuneGacha()}
+ updateRedGem(){
+ CYt.getInstance().isShopPaySubView()&&bYt.getInstance().updateRedGem()}
+ updateHonorCoin(){
+ CYt.getInstance().isHonorShopSubView()?J5t.getInstance().updateHonorCoin():CYt.getInstance().isBattleView()&&i3t.getInstance().updateHonorCoin()}
+ async updateGuildCoin(){
+ if(!AD.hasGuild)return;
+ let t=await rD.getInstance().guild.getMyMembership();
+ t.success&&AD.setMembershipData(t.body)}
+ async updateRaidCoin(){
+ if(!AD.hasGuild)return;
+ let t=await rD.getInstance().guild.getMyMembership();
+ t.success&&AD.setMembershipData(t.body)}
+ async updateRuneGacha(){
+ AD.hasGuild&&KQt.getInstance().ensureLoaded(!0)}
+ }
+ ;
+ Vt(i6t,"MailReceiveAllResultPopup"),Kt(i6t,"instance");
+ let s6t=i6t;
+ const e6t=class extends tN{
+ constructor(){
+ super(),this.sp.x=.5*-this.sp.width,this.sp.y=.5*-this.sp.height,this.offsetX=2,this.scale=.5}
+ getTextures(){
+ return QA.getTextures("Loading","loading_circle_60f_")}
+ }
+ ;
+ Vt(e6t,"MailLoading");
+ let n6t=e6t;
+ const h6t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage"),Kt(this,"rewardContainer"),Kt(this,"rewardBg"),Kt(this,"rewardPool",[]),Kt(this,"btnConfirm"),Kt(this,"btnShortcut"),Kt(this,"checkBox"),Kt(this,"lblCheck"),this.outSideClickHide=!1,this.btnClose.removeFromParent(),this.title=SG.getText("COMMON_4","알림");
+ const t=cD.LABEL_OPTION_NO_DROP_SHADOW;
+ t.fill=cD.COLOR_WHITE,t.fontSize=19,t.lineHeight=30,this.lblMessage=new JD("보석, 명예코인, 영웅을 제외한 아이템은 인벤토리로 지급되었습니다.",t.fill,t),this.lblMessage.y=90,this.addChild(this.lblMessage),cD.setLabelWrapWidth(this.lblMessage,this.width-60),this.rewardBg=new TM({
+ texture:QA.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.rewardBg.alpha=.7,this.rewardBg.width=this.width-60,this.addChild(this.rewardBg),this.rewardContainer=new Ge,this.addChild(this.rewardContainer),this.btnConfirm=new eG("확인"),this.addChild(this.btnConfirm),this.btnConfirm.onClick=()=>{
+ this.hide()}
+ ,this.btnShortcut=new CWt("인벤토리 바로가기"),this.addChild(this.btnShortcut),this.btnShortcut.onClick=()=>{
+ this.hide(),a6t.getInstance().hide(),p6t.getInstance().hide(),n2t.getInstance().goInventory()}
+ ,this.checkBox=new DWt,this.checkBox.x=30,this.addChild(this.checkBox),this.lblCheck=new JD("더 이상 보지 않기",11241316),this.lblCheck.textSize=17,this.lblCheck.x=this.checkBox.x+this.checkBox.width+10,this.addChild(this.lblCheck),this.lblCheck.eventMode="dynamic",this.lblCheck.on("pointertap",()=>{
+ this.checkBox.selected=!this.checkBox.selected}
+ ,this),this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.rewardBg.x=.5*(this.width-this.rewardBg.width),this.rewardBg.y=this.lblMessage.y+this.lblMessage.height+30,this.rewardContainer.x=.5*(this.width-this.rewardContainer.width),this.rewardContainer.y=this.rewardBg.y+20,this.rewardBg.height=this.rewardContainer.height+2*(this.rewardContainer.y-this.rewardBg.y),this.btnShortcut.x=.5*(this.width-this.btnShortcut.width-this.btnConfirm.width-20),this.btnConfirm.x=this.btnShortcut.x+this.btnShortcut.width+20,this.btnShortcut.y=this.rewardBg.y+this.rewardBg.height+30,this.btnConfirm.y=this.btnShortcut.y,this.checkBox.y=this.btnConfirm.y+this.btnConfirm.height+40,this.lblCheck.y=this.checkBox.y+.5*(this.checkBox.height-this.lblCheck.height)+2,this.height=this.checkBox.y+this.checkBox.height+30}
+ execute(t){
+ if(!t)return!1;
+ const i=t.typeArray,s=t.subTypeArray,e=t.amountArray,n=t.gradeArray,h=t.kindNumArray,r=i.reduce((t,i,s)=>("ticket"===i&&t.push(s),t),[]);
+ if(0==r.length)return!1;
+ let o;
+ this.title=SG.getText("COMMON_4","알림"),this.lblMessage.text=SG.getText("GAME_819","보석, 명예코인, 영웅, 초월권, 크리스탈 뽑기권을 제외한 아이템은 인벤토리로 지급되었습니다."),this.rewardContainer.removeChildren();
+ let a=0,c=0;
+ const l=r.length;
+ for(let u=0;
+ u<l;
+ ++u){
+ u<this.rewardPool.length?o=this.rewardPool[u]:(o=new t6t,this.rewardPool.push(o));
+ const t=i[r[u]],l=e[r[u]],d=n[r[u]],f=h[r[u]],p=s[r[u]];
+ o.setData(t,l,d,f,p),o.x=a,o.y=c,this.rewardContainer.addChild(o),u%6==5?(a=0,c+=o.height+10):a+=o.width+15}
+ return this.updateLayout(),a6t.getInstance().outSideClickHide=!1,this.show(),!0}
+ hide(){
+ super.hide(),a6t.getInstance().outSideClickHide=!0,this.checkBox.selected&&$A.saveDoNotMailBoxInventoryGuide("Y")}
+ }
+ ;
+ Vt(h6t,"MailInventoryGuidePopup"),Kt(h6t,"_instance");
+ let r6t=h6t;
+ const o6t=class t extends SKt{
+ constructor(){
Druid1 18 hunks, 180 statements
- super(),zt(this,"vines",[]),zt(this,"tendrils",[])}
+ super(),Kt(this,"vineHitCount",0),Kt(this,"vineHitDecayTimer",0),Kt(this,"vines",[]),Kt(this,"tendrils",[]),Kt(this,"vineTrails",[]),Kt(this,"tangledSet",new Set),Kt(this,"groundEnemyCache",[])}
- if(super.execute(),!this.isAlive)return this.cleanupAllVines(),void(this.tendrils.length=0);
- this.updateVines(),this.updateTendrils(),this.autoTangleCCEnemies()}
+ super.execute(),this.isAlive&&(this.updateVines(),(this.tendrils.length>0||this.vineTrails.length>0)&&(this.rebuildEnemyCache(),this.updateTendrils(),this.updateVineTrails()),this.vineHitDecayTimer>0&&0===--this.vineHitDecayTimer&&(this.vineHitCount=0))}
+ rebuildEnemyCache(){
+ this.groundEnemyCache.length=0;
+ for(const t of this.enemyList)!t.isAlive||t.isUntagetable||t.isAirUnit||this.groundEnemyCache.push(t);
+ this.tangledSet.clear();
+ for(const t of this.vines)t.target.isAlive&&this.tangledSet.add(t.target)}
- const i=t.TENDRIL_HIT_RADIUS*t.TENDRIL_HIT_RADIUS,s=t.TENDRIL_MAX_DIST*t.TENDRIL_MAX_DIST;
+ const i=t.TENDRIL_HIT_RADIUS*t.TENDRIL_HIT_RADIUS,s=this.groundEnemyCache,e=this.tangledSet;
- n.x,n.y,n.trailTick++,n.currentAngle+=this.random.range(-.15,t.TENDRIL_MAX_TURN),n.x+=Math.cos(n.currentAngle)*t.TENDRIL_SPEED,n.y+=Math.sin(n.currentAngle)*t.TENDRIL_SPEED,n.trailTick%t.TENDRIL_TRAIL_INTV===0&&this.placeTrailEffect(n.x,n.y);
- for(const t of this.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- if(t.isAirUnit)continue;
+ h.trailTick++,h.currentAngle+=this.random.range(-h.turnRate,h.turnRate),h.x+=Math.cos(h.currentAngle)*t.TENDRIL_SPEED,h.y+=Math.sin(h.currentAngle)*t.TENDRIL_SPEED,h.trailTick%t.TENDRIL_TRAIL_INTV===0&&this.placeTrailEffect(h.x,h.y);
+ for(let t=0,n=s.length;
+ t<n;
+ t++){
+ const n=s[t];
- if(this.isAlreadyTangled(t))continue;
+ if(e.has(n))continue;
- s*s+e*e<=i&&(n.hitEnemies.add(t),this.attachVine(t,!1,n.x,n.y))}
- n.x,n.y;
- const h=n.x-(this.x+this.firePoint.x*this.direction),r=n.y-(this.y+this.firePoint.y);
- h*h+r*r>=s&&(this.placeTrailEffect(n.x,n.y),n.done=!0)}
+ r*r+o*o<=i&&(h.hitEnemies.add(n),e.add(n),this.attachVine(n,!1,h.x,h.y))}
+ const r=h.x-h.startX,o=h.y-h.startY;
+ r*r+o*o>=h.maxDistSq&&(this.placeTrailEffect(h.x,h.y),h.done=!0)}
- e.x=i,e.y=s,e.scale.set(t.TENDRIL_TRAIL_SCALE),e.removed=!1,e.visible=!0,e.start(t.TENDRIL_TRAIL_LIFE),YG.getInstance().addChild(e)}
- autoTangleCCEnemies(){
- const i=t.TANGLE_SEARCH_RANGE*t.TANGLE_SEARCH_RANGE;
- for(const t of this.enemyList){
- if(!t.isAlive||t.isUntagetable)continue;
- if(t.isAirUnit)continue;
- if(this.isAlreadyTangled(t))continue;
- const s=t.x-this.x,e=t.y-this.y;
- if(s*s+e*e>i)continue;
- const n=t;
- ((0|n.numKnockBack)>0||(0|n.numBlow)>0||(0|n.numStun)>0||(0|n.numFreeze)>0||(0|n.numShock)>0)&&this.attachVine(t,!1)}
+ e.x=i,e.y=s,this.applySeasonStyle(e,t.TENDRIL_TRAIL_SCALE),e.removed=!1,e.visible=!0,e.start(t.TENDRIL_TRAIL_LIFE),tB.getInstance().addChild(e),this.vineTrails.push({
+ x:i,y:s,timer:t.TENDRIL_TRAIL_LIFE}
+ )}
+ updateVineTrails(){
+ const i=t.TRAIL_HIT_RADIUS*t.TRAIL_HIT_RADIUS,s=this.groundEnemyCache,e=this.tangledSet;
+ for(let t=this.vineTrails.length-1;
+ t>=0;
+ t--){
+ const n=this.vineTrails[t];
+ if(n.timer--,n.timer<=0)this.vineTrails.splice(t,1);
+ else for(let t=0,h=s.length;
+ t<h;
+ t++){
+ const h=s[t];
+ if(e.has(h))continue;
+ const r=h.x-n.x,o=h.y-n.y;
+ r*r+o*o<=i&&(e.add(h),this.attachVine(h,!1,n.x,n.y))}
+ }
+ getSeasonStyle(){
+ var t,i;
+ const s=this.battleController;
+ switch((null==(i=null==(t=null==s?void 0:s.map)?void 0:t.getSeason)?void 0:i.call(t))??cB.SUMMER){
+ case cB.SPRING:return{
+ scaleMult:1.1,tint:13434828}
+ ;
+ case cB.SUMMER:return{
+ scaleMult:1,tint:16777215}
+ ;
+ case cB.AUTUMN:return{
+ scaleMult:.95,tint:16764040}
+ ;
+ case cB.WINTER:return{
+ scaleMult:.85,tint:13426175}
+ ;
+ default:return{
+ scaleMult:1,tint:16777215}
+ }
+ }
+ applySeasonStyle(t,i){
+ const s=this.getSeasonStyle();
+ t.scale.set(i*s.scaleMult);
+ const e=t.sp;
+ e&&(e.tint=s.tint)}
- e&&(s.lastX=s.target.x,s.lastY=s.target.y),s.effect.x=s.lastX,s.effect.y=s.lastY,s.timer++,s.timer<=t.VINE_BIND_FRAMES?!s.bound&&e&&(s.target.binding(t.VINE_BIND_FRAMES,!1),s.bound=!0):(s.timer===t.VINE_BIND_FRAMES+1&&s.effect.scale.set(t.VINE_POST_SCALE),s.timer%t.VINE_DMG_INTERVAL===0&&e&&this.doDamage(s.target,t.VINE_DMG_PCT)),s.timer>=t.VINE_TOTAL_LIFE&&(s.effect.parent&&s.effect.parent.removeChild(s.effect),s.effect.removed=!0,this.vines.splice(i,1))}
+ if(e&&(s.lastX=s.target.x,s.lastY=s.target.y),s.effect.x=s.lastX,s.effect.y=s.lastY,s.timer++,!s.bound&&1===s.timer&&e&&(s.target.binding(t.VINE_BIND_FRAMES,!1),s.bound=!0),s.timer===t.VINE_BIND_FRAMES+1){
+ const i=this.getSeasonStyle();
+ s.effect.scale.set(t.VINE_POST_SCALE*i.scaleMult)}
+ s.timer%t.VINE_DMG_INTERVAL===0&&e&&this.doDamage(s.target,t.VINE_DMG_PCT),s.timer>=t.VINE_TOTAL_LIFE&&(s.effect.removed||s.effect.remove(),this.vines.splice(i,1))}
- onKillEnemy(i){
- var s;
- if(null==(s=super.onKillEnemy)||s.call(this,i),!i)return;
- if(i.isAirUnit)return;
- if(this.wasSpreadVine(i))return;
- const e=i.x-this.x,n=i.y-this.y;
- e*e+n*n>t.TANGLE_SEARCH_RANGE*t.TANGLE_SEARCH_RANGE||this.spreadAtPosition(i.x,i.y)}
- spreadAtPosition(i,s){
- const e=t.SPREAD_RADIUS*t.SPREAD_RADIUS;
- let n=0;
- for(const h of this.enemyList){
- if(n>=t.SPREAD_COUNT)break;
- if(!h.isAlive||h.isUntagetable)continue;
- if(h.isAirUnit)continue;
- if(this.isAlreadyTangled(h))continue;
- const r=h.x-i,o=h.y-s;
- r*r+o*o<=e&&(this.attachVine(h,!0,i,s),n++)}
- }
- wasSpreadVine(t){
- for(const i of this.vines)if(i.target===t&&i.fromSpread)return!0;
- return!1}
- isAlreadyTangled(t){
- for(const i of this.vines)if(i.target===t&&i.target.isAlive)return!0;
- return!1}
- for(const t of this.vines)t.effect.parent&&t.effect.parent.removeChild(t.effect),t.effect.removed=!0;
- this.vines=[]}
+ for(const t of this.vines)t.effect.removed||t.effect.remove();
+ this.vines.length=0,this.vineTrails.length=0,this.tangledSet.clear()}
- let i;
- if(this.target&&this.target.isAlive)i=Math.atan2(this.target.y-this.y,this.target.x-this.x);
+ let t=this.target;
+ if(!t||!t.isAlive||t.isAirUnit){
+ const i=this.getAttackableEnemyList(1,!0);
+ i.length>0&&(t=i[0])}
+ if(!t||!t.isAlive||t.isAirUnit)return;
+ const i=t.x-this.x,s=t.y-this.y,e=Math.atan2(s,i);
+ let n=e,h=-1;
+ const r=Math.PI/4;
+ for(const o of this.enemyList){
+ if(o===t||!o.isAlive||o.isUntagetable||o.isAirUnit)continue;
+ const i=o.x-this.x,s=o.y-this.y,a=Math.atan2(s,i);
+ let c=a-e;
+ for(;
+ c>Math.PI;
+ )c-=2*Math.PI;
+ for(;
+ c<-Math.PI;
+ )c+=2*Math.PI;
+ const l=Math.abs(c);
+ l>=r&&l>h&&(h=l,n=a)}
+ if(h<0){
+ const t=this.random.next()<.5?-1:1;
+ n=e+Math.PI/4*t}
+ this.spawnSplitDrill(this.x,this.y,Math.cos(e),Math.sin(e),0),this.spawnSplitDrill(this.x,this.y,Math.cos(n),Math.sin(n),0)}
+ onDrillSplit(t,i,s,e,n,h){
+ const r=n+1,o=h.getHitCenter(),a=o.x,c=o.y;
+ let l,u,d=0,f=0,p=1/0,g=!1;
+ for(const b of this.enemyList){
+ if(!b.isAlive||b.isUntagetable||b.isAirUnit)continue;
+ if(b===h)continue;
+ const t=b.x-a,i=b.y-c,s=t*t+i*i;
+ s<p&&(p=s,d=t,f=i,g=!0)}
+ if(g){
+ const t=Math.sqrt(d*d+f*f)||1;
+ l=d/t,u=f/t}
- const s=this.getEnemiesWithin(t.TANGLE_SEARCH_RANGE,!0);
- i=s.length>0?Math.atan2(s[0].y-this.y,s[0].x-this.x):this.direction>0?0:Math.PI}
- const s=this.x+this.firePoint.x*this.direction,e=this.y+this.firePoint.y,n=t.TENDRIL_SPREAD_ARC;
+ const t=Math.sqrt(s*s+e*e)||1;
+ l=s/t,u=e/t}
+ const m=Math.atan2(u,l)+(Math.PI/3+this.random.next()*(Math.PI/3))*(this.random.next()<.5?-1:1),w=Math.cos(m),v=Math.sin(m);
+ this.spawnSplitDrill(a,c,l,u,r),this.spawnSplitDrill(a,c,w,v,r)}
+ spawnSplitDrill(t,i,s,e,n){
+ const h=bQ.getInstance().getWeapon(nj.DruidDrill1);
+ h.owner=this,h.target=null,h.x=t,h.y=i,h.vx=s*h.speed,h.vy=e*h.speed,h.whirlCnt=0,h.whirlTotal=50,h.rotation=Math.atan2(h.vy,h.vx),h.removed=!1,h.visible=!0,h.generation=n,h.setData(KV.getGenDmg(n)),h.scale.set(KV.getGenScale(n)),h.setBattleController(this.battleController||jhi.getInstance()),mB.getInstance().addChild(h),(this.battleController||jhi.getInstance()).addWeapon(h)}
+ attachVine(i,s,e,n){
+ if(this.vines.length>=t.MAX_ACTIVE_VINES)return;
+ const h=e??this.x+this.firePoint.x*this.direction,r=n??this.y+this.firePoint.y,o=ej.getEffect(PF.DruidVine1);
+ o.x=h,o.y=r,this.applySeasonStyle(o,t.VINE_BIND_SCALE),o.removed=!1,o.visible=!0,o.start(t.VINE_TOTAL_LIFE),rB.getInstance().addChild(o),this.vines.push({
+ effect:o,target:i,lastX:h,lastY:r,timer:0,bound:!1,fromSpread:s,growTimer:t.VINE_GROW_FRAMES,growStartX:h,growStartY:r}
+ ),i.isAlive&&this.doDamage(i,t.VINE_DMG_ON_HIT),this.vineHitCount++,this.vineHitDecayTimer=t.VINE_TOTAL_LIFE;
+ const a=Math.min(t.ATKSPD_MAX,this.vineHitCount*t.ATKSPD_PER_HIT);
+ this.addAttackSpeedBuff(yK.Druid1_VINE_ATKSPD,a,t.VINE_TOTAL_LIFE)}
+ skillMain(){
+ const t=this.x+this.firePoint.x*this.direction,i=this.y+this.firePoint.y,s=2*Math.PI/6;
- h<t.TENDRIL_COUNT;
+ e<6;
- const r=i-n/2+n*(h/(t.TENDRIL_COUNT-1));
+ const n=s*e+this.random.range(-.08,.08);
- x:s,y:e,currentAngle:r,trailTick:0,hitEnemies:new Set,done:!1}
+ x:t,y:i,currentAngle:n,trailTick:0,hitEnemies:new Set,done:!1,maxDistSq:32400,turnRate:.18,startX:t,startY:i}
- attachVine(i,s,e,n){
- const h=e??this.x+this.firePoint.x*this.direction,r=n??this.y+this.firePoint.y,o=mJ.getEffect(yq.DruidVine1);
- o.x=h,o.y=r,o.removed=!1,o.visible=!0,o.start(t.VINE_TOTAL_LIFE),YG.getInstance().addChild(o),this.vines.push({
- effect:o,target:i,lastX:h,lastY:r,timer:0,bound:!1,fromSpread:s,growTimer:t.VINE_GROW_FRAMES,growStartX:h,growStartY:r}
- )}
- skillMain(){
- const t=this.getEnemiesWithin(400,!0);
- if(0===t.length){
- const t=this.random.next()*Math.PI*2,i=Math.cos(t),s=Math.sin(t),e=Math.PI*(.55+.9*this.random.next()),n=Math.cos(t+e),h=Math.sin(t+e);
- return this.spawnDrillRaw(i,s),this.spawnDrillRaw(n,h),void KL.getInstance().playSFX(KL.SFX_BATTLE_WIND_ATTACK1)}
- const i=this.target&&this.target.isAlive?this.target:t[0],s=this.pickDivergentTarget(i,t);
- this.spawnBigDrill(i),s&&s!==i?this.spawnBigDrill(s):this.spawnBigDrillReverse(i),KL.getInstance().playSFX(KL.SFX_BATTLE_WIND_ATTACK1)}
- pickDivergentTarget(t,i){
- const s=t.x-this.x,e=t.y-this.y,n=Math.sqrt(s*s+e*e);
- if(n<1)return null;
- const h=s/n,r=e/n;
- let o=null,a=1/0;
- for(const c of i){
- if(c===t)continue;
- const i=c.x-this.x,s=c.y-this.y,e=Math.sqrt(i*i+s*s);
- if(e<1)continue;
- const n=i/e*h+s/e*r;
- n<a&&(a=n,o=c)}
- return o}
- spawnBigDrill(t){
- const i=t.x-this.x,s=t.y-this.y,e=Math.sqrt(i*i+s*s),n=e>0?i/e:1,h=e>0?s/e:0;
- this.spawnDrillRaw(n,h)}
- spawnBigDrillReverse(t){
- const i=this.x-t.x,s=this.y-t.y,e=Math.sqrt(i*i+s*s),n=e>0?i/e:-1,h=e>0?s/e:0;
- this.spawnDrillRaw(n,h)}
- spawnDrillRaw(t,i){
- const s=s0.getInstance().getWeapon(wJ.DruidDrill1);
- s.owner=this,s.target=null,s.x=this.x,s.y=this.y,s.vx=t*s.speed,s.vy=i*s.speed,s.whirlCnt=0,s.whirlTotal=90,s.rotation=Math.atan2(s.vy,s.vx),s.removed=!1,s.visible=!0,s.setData(.6),s.scale.set(3),s.setBattleController(this.battleController||zii.getInstance()),lB.getInstance().addChild(s),(this.battleController||zii.getInstance()).addWeapon(s)}
- Kt(k5,"Druid1"),zt(k5,"TANGLE_SEARCH_RANGE",400),zt(k5,"VINE_BIND_FRAMES",60),zt(k5,"VINE_TOTAL_LIFE",150),zt(k5,"VINE_DMG_INTERVAL",30),zt(k5,"VINE_DMG_PCT",1),zt(k5,"VINE_POST_SCALE",.7),zt(k5,"SPREAD_RADIUS",150),zt(k5,"SPREAD_COUNT",4),zt(k5,"VINE_GROW_FRAMES",10),zt(k5,"TENDRIL_COUNT",4),zt(k5,"TENDRIL_SPEED",7),zt(k5,"TENDRIL_MAX_DIST",280),zt(k5,"TENDRIL_MAX_TURN",.15),zt(k5,"TENDRIL_SPREAD_ARC",.6*Math.PI),zt(k5,"TENDRIL_HIT_RADIUS",24),zt(k5,"TENDRIL_TRAIL_INTV",4),zt(k5,"TENDRIL_TRAIL_LIFE",240),zt(k5,"TENDRIL_TRAIL_SCALE",.55);
+ Vt(K1,"Druid1"),Kt(K1,"VINE_BIND_FRAMES",90),Kt(K1,"VINE_TOTAL_LIFE",240),Kt(K1,"VINE_DMG_INTERVAL",30),Kt(K1,"VINE_DMG_ON_HIT",.6),Kt(K1,"VINE_DMG_PCT",.9),Kt(K1,"MAX_ACTIVE_VINES",15),Kt(K1,"TRAIL_HIT_RADIUS",28),Kt(K1,"VINE_BIND_SCALE",.7),Kt(K1,"VINE_POST_SCALE",.5),Kt(K1,"VINE_GROW_FRAMES",10),Kt(K1,"TENDRIL_SPEED",7),Kt(K1,"TENDRIL_HIT_RADIUS",24),Kt(K1,"TENDRIL_TRAIL_INTV",4),Kt(K1,"TENDRIL_TRAIL_LIFE",240),Kt(K1,"TENDRIL_TRAIL_SCALE",.85),Kt(K1,"ATKSPD_PER_HIT",.04),Kt(K1,"ATKSPD_MAX",.6);
HarpyKing 21 hunks, 177 statements
- super(...arguments),zt(this,"att5Active",!1),zt(this,"att5BurstIndex",0),zt(this,"att1TargetCorp",-1),zt(this,"att4FacingLocked",!1)}
+ super(...arguments),Kt(this,"att4SlowPhase",!1),Kt(this,"att4LaunchCountdown",0),Kt(this,"att4WarningZone",null),Kt(this,"att4WarningActive",!1),Kt(this,"att4WarningTick",0),Kt(this,"att4WarningOriginX",0),Kt(this,"att4WarningOriginY",0),Kt(this,"att5Active",!1),Kt(this,"att5BurstIndex",0),Kt(this,"att1TargetCorp",-1),Kt(this,"att4FacingLocked",!1),Kt(this,"att4WindActive",!1),Kt(this,"att4WindPushCooldown",0),Kt(this,"att3TargetCorp",-1),Kt(this,"regroupCheckTimer",0),Kt(this,"hoverTick",0),Kt(this,"groundShadow",null),Kt(this,"rigShadowSlot",null)}
- this.spineKey="raids/raid1/Harpy",this.bossScale=1.3,this.spineTimeScale=.84,this.wanderEnabled=!0,this.wanderInterval=120,this.targetSwapChance=.3,this.wanderAfterAttackChance=.5,this.syncBoneName="Harpy",this.aniIdle="Harpy_idle",this.aniMove="Harpy_run",this.aniDie="Harpy_die",this.aniSkill0="Harpy_att1",this.aniSkills=["Harpy_att2","Harpy_att3","Harpy_att4","Harpy_att5"],this.eventSkill0Hit="att1_hit",this.eventSkillHits=["att2_hit","att3_hit","att4_hit","att5_hit"],this.isAir=!1,this.airTargetOnly=!0,this.hitWidth=60,this.hitHeight=200,this.skillRatio=[.75,.55,.35,.15,0],this.numForSkillAttack=2,this.attackOrderList=[[0,0,2,0,3,0,0,4,0,0]],this.raidPhases=[{
+ this.spineKey="raids/raid1/Harpy",this.bossScale=1.3,this.spineTimeScale=.84,this.wanderEnabled=!0,this.wanderInterval=120,this.targetSwapChance=.3,this.wanderAfterAttackChance=.5,this.syncBoneName="Harpy",this.aniIdle="Harpy_run",this.aniMove="Harpy_run",this.idleAnimTimeScale=.3,this.bulletTimeSpeed=25/60,this.bulletTimeSimFrames=80,this.aniDie="Harpy_die",this.aniSkill0="Harpy_att1",this.aniSkills=["Harpy_att2","Harpy_att3","Harpy_att4","Harpy_att5"],this.eventSkill0Hit="att1_hit",this.eventSkillHits=["att2_hit","att3_hit","att4_hit","att5_hit"],this.isAir=!1,this.airTargetOnly=!0,this.hitWidth=60,this.hitHeight=200,this.raidSpaceRadius=t.AIR_SPACE_RADIUS,this.airHeight=t.HOVER_HEIGHT,this.exhaustBarOffsetY=-82,this.skillRatio=[.75,.55,.35,.15,0],this.numForSkillAttack=2,this.exhaustEnabled=!0,this.interruptEnabled=!0,this.interruptAlwaysOpen=t.INTERRUPT_ALWAYS_OPEN,this.interruptWeakBones=t.INTERRUPT_WEAK_BONES,this.interruptWeakLabels=t.INTERRUPT_WEAK_LABELS,this.attackOrderList=[[0,0,2,0,3,0,0,4,0,0]],this.raidPhases=[{
- s?this.startAttackDashTo(s.x,s.y,t.ATT1_DASH_FRAMES):this.startAttackDash(300,400,t.ATT1_DASH_FRAMES)}
- skillN(t){
- if(super.skillN(t),1===t)this.startAttackDash(450,600,75);
+ if(s){
+ const i=Math.hypot(s.x-this.x,s.y-this.y),e=Math.max(t.ATT1_DASH_FRAMES,Math.ceil(i/t.ATT1_DASH_MAX_SPEED));
+ this.startAttackDashTo(s.x,s.y,e)}
+ else this.startAttackDash(300,400,58)}
+ performSkillN(i){
+ var s,e,n;
+ if(super.performSkillN(i),1===i)this.startAttackDash(450,600,75);
- const t=this.getHighestAggroCorpCenter()??this.computeEnemyCentroid();
- t&&this.startAttackDashTo(t.x,t.y,33)}
- else 3===t&&(this.faceMajorityEnemies(),this.att4FacingLocked=!0,this.startAttackDashTo(this.x+150*this.direction,this.y,50))}
+ const i=this.battleController;
+ this.att3TargetCorp=(null==(s=null==i?void 0:i.getHighestAggroCorpIndex)?void 0:s.call(i))??-1;
+ const e=(this.att3TargetCorp>=0?this.getCorpCenterByIndex(this.att3TargetCorp):null)??this.computeEnemyCentroid();
+ e&&this.startAttackDashTo(e.x,e.y,t.ATT3_DASH_FRAMES,!1)}
+ else if(3===i){
+ this.faceMajorityEnemies(),this.att4FacingLocked=!0;
+ const i=Math.max(40,Math.min(1560,this.x-t.ATT4_RETREAT_DIST*this.direction));
+ this.startAttackDashTo(i,this.y,t.ATT4_RETREAT_FRAMES,!1);
+ const s=null==(e=this.spine)?void 0:e.state.getCurrent(0);
+ (null==(n=null==s?void 0:s.animation)?void 0:n.name)===this.aniSkills[2]&&(s.timeScale=this.spineTimeScale*t.ATT4_ANIM_TIMESCALE),this.att4SlowPhase=!0,this.att4WarningActive=!0,this.att4WarningTick=0,this.att4WarningOriginX=i,this.att4WarningOriginY=this.y,this.weakWindowArmed&&this.startBulletTime()}
+ }
- if(!this.enemyList)return;
+ if(this.disposeGroundMarker(),!this.enemyList)return;
- }
+ this.consumeInterruptWindow()}
- if(this.enemyList){
- for(const i of this.enemyList){
+ if(!this.consumeInterruptWindow()&&this.enemyList)for(const i of this.enemyList){
+ if(this.doDamage(i,this.random.range(t.ATT3_DAMAGE_MIN,t.ATT3_DAMAGE_MAX),!0),!i.isAlive)continue;
- this.spawnSlamTornadoes()}
- spawnSlamTornadoes(){
- var i,s,e;
- const n=this.battleController,h=((null==(i=null==n?void 0:n.getBattleTimeFrames)?void 0:i.call(n))??0)>=t.TORNADO_TWO_AFTER_FRAMES?2:1,r=(null==(s=null==n?void 0:n.getCorpCount)?void 0:s.call(n))??0;
- if(r<=0){
- const t=this.computeEnemyCentroid()??{
- x:this.x,y:this.y}
- ;
- for(let i=0;
- i<h;
- i++)this.spawnTornado(()=>t);
- return}
- const o=(null==(e=n.getHighestAggroCorpIndex)?void 0:e.call(n))??-1;
- if(this.spawnTornado(()=>{
- var t,i;
- const s=(null==(t=n.getHighestAggroCorpIndex)?void 0:t.call(n))??o;
- return s>=0?(null==(i=n.getCorpCenter)?void 0:i.call(n,s))??null:null}
- ),h<2)return;
- let a=this.random.nextInt(r);
- r>1&&a===o&&(a=(a+1)%r),this.spawnTornado(()=>{
- var t;
- return a>=0?(null==(t=n.getCorpCenter)?void 0:t.call(n,a))??null:null}
- )}
- spawnTornado(i){
- const s=s0.getInstance().getWeapon(wJ.HarpyTornado);
- s.owner=this,s.target=null,s.x=this.x,s.y=this.y,s.setBattleController(this.battleController),s.setData(t.TORNADO_DAMAGE_PERCENT),s.setEllipseArea(t.TORNADO_RADIUS_X,t.TORNADO_RADIUS_Y,t.TORNADO_DURATION),s.setMoveTargetProvider(i),s.play()}
- skillMain3(){
+ forEachAtt4ConeEnemy(i){
- const i=this.direction,s=t.ATT4_RADIUS*t.ATT4_RADIUS,e=Math.cos(t.ATT4_CONE_HALF_ANGLE);
+ const s=this.direction,e=t.ATT4_RADIUS*t.ATT4_RADIUS,n=Math.cos(t.ATT4_CONE_HALF_ANGLE),h=this.x-this.boneSyncOffX,r=this.y-this.boneSyncOffY;
- const h=n.x-this.x,r=n.y-this.y,o=h*h+r*r;
+ const o=t.x-h,a=t.y-r,c=o*o+a*a;
- const a=Math.sqrt(o),c=a<.01?i:h/a,l=a<.01?0:r/a;
- if(!(c*i<e)&&(this.doDamage(n,this.random.range(t.ATT4_DAMAGE_MIN,t.ATT4_DAMAGE_MAX),!0),n.isAlive&&!n.isImmovable)){
- const i=this.random.range(t.ATT4_KNOCKBACK_POWER_MIN,t.ATT4_KNOCKBACK_POWER_MAX);
- n.knockBack(c*i,l*i,t.ATT4_KNOCKBACK_DURATION)}
+ const l=Math.sqrt(c),u=l<.01?s:o/l;
+ u*s<n||i(t,u,l<.01?0:a/l)}
+ skillMain3(){
+ this.endBulletTime(),this.consumeInterruptWindow()?this.clearAtt4Warning():this.att4LaunchCountdown=t.ATT4_LAUNCH_DELAY_FRAMES}
+ updateAtt4SlowPhase(){
+ var i,s;
+ if(!this.att4SlowPhase)return;
+ const e=null==(i=this.spine)?void 0:i.state.getCurrent(0);
+ (null==(s=null==e?void 0:e.animation)?void 0:s.name)===this.aniSkills[2]?e.trackTime*t.FEATHER_SPINE_FPS<t.ATT4_WIND_APPEAR_FRAME||(this.att4SlowPhase=!1,this.endBulletTime(),e.timeScale=this.spineTimeScale):this.att4SlowPhase=!1}
+ updateAtt4Launch(){
+ var t,i;
+ if(this.att4LaunchCountdown<=0)return;
+ const s=null==(t=this.spine)?void 0:t.state.getCurrent(0);
+ if((null==(i=null==s?void 0:s.animation)?void 0:i.name)!==this.aniSkills[2])return this.att4LaunchCountdown=0,void this.clearAtt4Warning();
+ 0===--this.att4LaunchCountdown&&this.fireAtt4Gust()}
+ fireAtt4Gust(){
+ this.clearAtt4Warning(),this.forEachAtt4ConeEnemy((i,s,e)=>{
+ if(this.doDamage(i,this.random.range(t.ATT4_DAMAGE_MIN,t.ATT4_DAMAGE_MAX),!0),!i.isAlive||i.isImmovable)return;
+ const n=this.random.range(t.ATT4_BLOW_POWER_MIN,t.ATT4_BLOW_POWER_MAX),h=t.BLOW_SCALE;
+ if(i.isAir)i.windPush(s*n*h,e*n*h,t.ATT4_AIR_PUSH_FRAMES);
+ else{
+ const r=this.random.range(t.ATT4_BLOW_LIFT_MIN,t.ATT4_BLOW_LIFT_MAX);
+ i.blow(s*n*h,e*n*h,-r*h)}
+ ),this.att4WindActive=!0,this.att4WindPushCooldown=0,this.spawnAtt4Tornado()}
+ spawnAtt4Tornado(){
+ const i=t.ATT4_TORNADO_WANDER,s=Math.max(i.minX,Math.min(i.maxX,this.x-this.boneSyncOffX+this.direction*t.ATT4_TORNADO_SPAWN_DIST)),e=Math.max(i.minY,Math.min(i.maxY,this.y-this.boneSyncOffY)),n=bQ.getInstance().getWeapon(nj.HarpyTornado);
+ n.owner=this,n.target=null,n.x=s,n.y=e,n.setBattleController(this.battleController),n.setData(t.ATT4_TORNADO_DPS_PERCENT),n.setEllipseArea(t.ATT4_TORNADO_RADIUS_X,t.ATT4_TORNADO_RADIUS_Y,t.ATT4_TORNADO_DURATION),n.startWander(i,()=>this.random.next()),n.play()}
+ updateAtt4Warning(){
+ var i,s;
+ if(!this.att4WarningActive)return;
+ const e=null==(i=this.spine)?void 0:i.state.getCurrent(0);
+ if((null==(s=null==e?void 0:e.animation)?void 0:s.name)!==this.aniSkills[2])return void this.clearAtt4Warning();
+ if(!this.att4WarningZone){
+ const t=new Lf;
+ t.eventMode="none",tB.getInstance().addChild(t),this.att4WarningZone=t}
+ const n=this.att4WarningZone;
+ this.att4WarningTick++;
+ const h=.14+.1*(.5+.5*Math.sin(.12*this.att4WarningTick)),r=this.att4WarningOriginX,o=this.att4WarningOriginY,a=this.direction>0?0:Math.PI,c=t.ATT4_CONE_HALF_ANGLE;
+ n.clear(),n.moveTo(r,o),n.arc(r,o,t.ATT4_RADIUS,a-c,a+c),n.lineTo(r,o),n.fill({
+ color:16724e3,alpha:h}
+ ),n.stroke({
+ color:16736336,alpha:Math.min(1,2.4*h),width:2}
+ )}
+ clearAtt4Warning(){
+ var t;
+ this.att4WarningActive=!1,null==(t=this.att4WarningZone)||t.clear()}
+ onRaidStunStart(){
+ super.onRaidStunStart(),this.att4LaunchCountdown=0,this.clearAtt4Warning()}
+ updateAtt4Wind(){
+ var i,s;
+ if(!this.att4WindActive)return;
+ const e=null==(i=this.spine)?void 0:i.state.getCurrent(0);
+ (null==(s=null==e?void 0:e.animation)?void 0:s.name)===this.aniSkills[2]?e.trackTime*t.FEATHER_SPINE_FPS>t.ATT4_WIND_END_FRAME?this.att4WindActive=!1:--this.att4WindPushCooldown>0||(this.att4WindPushCooldown=t.ATT4_WIND_PUSH_INTERVAL,this.forEachAtt4ConeEnemy((i,s,e)=>{
+ i.isImmovable||i.windPush(s*t.ATT4_WIND_PUSH_SPEED,e*t.ATT4_WIND_PUSH_SPEED,t.ATT4_WIND_PUSH_FRAMES)}
+ )):this.att4WindActive=!1}
- super.execute(),this.isAlive&&(this.updateAtt1Hover(),this.updateAtt4FacingLock(),this.updateAtt5Feathers())}
+ super.execute(),this.isAlive?(this.updateHoverVisual(),this.updateAtt1Hover(),this.updateAtt3Track(),this.updateAtt4FacingLock(),this.updateAtt4SlowPhase(),this.updateAtt4Launch(),this.updateAtt4Warning(),this.updateAtt4Wind(),this.updateAtt5Feathers(),this.updateRegroupReturn()):this.groundShadow&&(this.groundShadow.visible=!1)}
+ updateHoverVisual(){
+ var i,s;
+ const e=this.spine;
+ if(!e)return;
+ if(this.rigShadowSlot||(this.rigShadowSlot=(null==(s=null==(i=e.skeleton)?void 0:i.findSlot)?void 0:s.call(i,"shadow"))??null),this.rigShadowSlot&&(this.rigShadowSlot.color.a=0),!this.groundShadow){
+ const i=new Lf;
+ i.ellipse(0,0,t.SHADOW_RX,t.SHADOW_RY).fill({
+ color:0,alpha:.28}
+ ),i.eventMode="none",this.addChildAt(i,0),this.groundShadow=i}
+ this.hoverTick++;
+ const n=Math.sin(this.hoverTick*t.HOVER_BOB_SPEED),h=t.HOVER_HEIGHT+n*t.HOVER_BOB_AMP,r=Math.abs(e.scale.y)||1;
+ e.pivot.y=h/r;
+ const o=1-.08*(.5*n+.5);
+ this.groundShadow.scale.set(o),this.groundShadow.visible=!0}
+ resetForPool(){
+ var t;
+ super.resetForPool(),this.att1TargetCorp=-1,this.att3TargetCorp=-1,this.regroupCheckTimer=0,this.att4FacingLocked=!1,this.att4WindActive=!1,this.att4WindPushCooldown=0,this.att4LaunchCountdown=0,this.att4SlowPhase=!1,this.att4WarningActive=!1,this.att4WarningZone&&(null==(t=this.att4WarningZone.parent)||t.removeChild(this.att4WarningZone),this.att4WarningZone.destroy(),this.att4WarningZone=null),this.att5Active=!1,this.att5BurstIndex=0,this.hoverTick=0,this.spine&&(this.spine.pivot.y=0),this.groundShadow&&(this.groundShadow.visible=!1),this.rigShadowSlot&&(this.rigShadowSlot.color.a=1,this.rigShadowSlot=null)}
+ getAimOffsetY(t){
+ return.3*this.hitHeight*t}
- const n=e.x-this.x,h=e.y-this.y,r=Math.sqrt(n*n+h*h);
- if(r<=t.ATT1_HOVER_SPEED)return this.x=e.x,void(this.y=e.y);
+ const n=e.x-(this.x-this.boneSyncOffX),h=e.y-(this.y-this.boneSyncOffY),r=Math.sqrt(n*n+h*h);
+ if(r<=t.ATT1_HOVER_SPEED)return this.x=e.x+this.boneSyncOffX,void(this.y=e.y+this.boneSyncOffY);
+ updateRegroupReturn(){
+ this.entranceActive||this.state!==sx.IDLE&&this.state!==sx.MOVE||++this.regroupCheckTimer<t.REGROUP_CHECK_INTERVAL||(this.regroupCheckTimer=0,this.isAnyEnemyWithin(t.REGROUP_ENGAGE_DIST)||this.x>=t.REGROUP_HOME_X-40||this.startEntrance(t.REGROUP_HOME_X,Math.max(this.wanderMinY,Math.min(this.wanderMaxY,this.y)),2,!1))}
+ triggerWander(){
+ if(!this.isAnyEnemyWithin(t.REGROUP_ENGAGE_DIST)){
+ const i=t.REGROUP_HOME_X-100;
+ return this.tx=i+this.random.next()*(this.wanderMaxX-i),this.ty=this.wanderMinY+this.random.next()*(this.wanderMaxY-this.wanderMinY),this.target=null,this.resetBoneSync(),void this.gotoMoveState()}
+ super.triggerWander()}
+ updateAtt3Track(){
+ var i;
+ if(this.att3TargetCorp<0||!this.spine)return;
+ const s=this.spine.state.getCurrent(0);
+ if((null==(i=null==s?void 0:s.animation)?void 0:i.name)!==this.aniSkills[1])return void(this.att3TargetCorp=-1);
+ const e=s.trackTime*t.FEATHER_SPINE_FPS;
+ if(e<t.ATT3_TRACK_FROM_FRAME||e>t.ATT3_TRACK_TO_FRAME)return;
+ const n=this.getCorpCenterByIndex(this.att3TargetCorp);
+ if(!n)return;
+ const h=n.x-(this.x-this.boneSyncOffX),r=n.y-(this.y-this.boneSyncOffY),o=Math.sqrt(h*h+r*r);
+ if(o<=t.ATT3_TRACK_SPEED)return this.x=n.x+this.boneSyncOffX,void(this.y=n.y+this.boneSyncOffY);
+ this.x+=h/o*t.ATT3_TRACK_SPEED,this.y+=r/o*t.ATT3_TRACK_SPEED}
+ eQ(this.kindNum,"feather_bullet");
- Kt(n3,"HarpyKing"),zt(n3,"BLOW_SCALE",.75),zt(n3,"ATT1_CENTER_BONE","Harpy"),zt(n3,"ATT1_RADIUS",100),zt(n3,"ATT1_HITS_PER_EVENT",7),zt(n3,"ATT1_DAMAGE_MIN",1),zt(n3,"ATT1_DAMAGE_MAX",2),zt(n3,"ATT1_DASH_FRAMES",45),zt(n3,"ATT1_HOVER_SPEED",3),zt(n3,"ATT1_HOVER_START_FRAME",20),zt(n3,"ATT4_RADIUS",300),zt(n3,"ATT4_CONE_HALF_ANGLE",Math.PI/4),zt(n3,"ATT4_KNOCKBACK_POWER_MIN",8),zt(n3,"ATT4_KNOCKBACK_POWER_MAX",14),zt(n3,"ATT4_KNOCKBACK_DURATION",12),zt(n3,"ATT4_DAMAGE_MIN",1),zt(n3,"ATT4_DAMAGE_MAX",2),zt(n3,"FEATHER_SPINE_FPS",30),zt(n3,"FEATHER_FIRE_FRAMES",[28,30,32,34,36,38,40]),zt(n3,"FEATHER_PER_BURST",20),zt(n3,"FEATHER_SPAWN_RADIUS",30),zt(n3,"FEATHER_ORIGIN_BONE","shout"),zt(n3,"FEATHER_DAMAGE_MIN",1.2),zt(n3,"FEATHER_DAMAGE_MAX",2.5),zt(n3,"FEATHER_AGGRO_BURSTS",3),zt(n3,"TORNADO_DURATION",1200),zt(n3,"TORNADO_RADIUS_X",70),zt(n3,"TORNADO_RADIUS_Y",56),zt(n3,"TORNADO_DAMAGE_PERCENT",.5),zt(n3,"TORNADO_TWO_AFTER_FRAMES",5400);
- let h3=n3;
- const r3=class extends Be{
- constructor(){
- super(),zt(this,"g",new Gf),zt(this,"radius",0),this.eventMode="none",this.addChild(this.g)}
- show(t,i,s){
- this.x=t,this.y=i,this.radius=s,this.draw(.3,0),qG.getInstance().addChild(this)}
- update(t){
- const i=Math.max(0,Math.min(1,t)),s=.22+.18*(.5+.5*Math.sin(i*Math.PI*8));
- this.draw(s,i)}
- draw(t,i){
- const s=this.g;
- s.clear(),s.circle(0,0,this.radius).fill({
- color:16719904,alpha:.5*t}
- ),s.circle(0,0,this.radius).stroke({
- width:4,color:16732240,alpha:.9}
- ),i>0&&s.circle(0,0,this.radius*i).stroke({
- width:2,color:16777215,alpha:.55}
- )}
- dispose(){
- this.g.clear(),this.parent&&this.parent.removeChild(this)}
- }
- ;
- Kt(r3,"RaidWarningCircle");
+ Vt(I2,"HarpyKing"),Kt(I2,"BLOW_SCALE",.75),Kt(I2,"INTERRUPT_ALWAYS_OPEN",!0),Kt(I2,"INTERRUPT_WEAK_BONES",["Head","L_Arm","R_Arm","Body","L_leg"]),Kt(I2,"INTERRUPT_WEAK_LABELS",["머리","왼쪽 날개","오른쪽 날개","몸","다리"]),Kt(I2,"HOVER_HEIGHT",70),Kt(I2,"HOVER_BOB_AMP",6),Kt(I2,"HOVER_BOB_SPEED",.03),Kt(I2,"SHADOW_RX",60),Kt(I2,"SHADOW_RY",22),Kt(I2,"AIR_SPACE_RADIUS",28),Kt(I2,"ATT1_CENTER_BONE","Harpy"),Kt(I2,"ATT1_RADIUS",100),Kt(I2,"ATT1_HITS_PER_EVENT",7),Kt(I2,"ATT1_DAMAGE_MIN",1),Kt(I2,"ATT1_DAMAGE_MAX",1.3),Kt(I2,"ATT1_DASH_FRAMES",45),Kt(I2,"ATT1_DASH_MAX_SPEED",2),Kt(I2,"ATT1_HOVER_SPEED",3),Kt(I2,"ATT1_HOVER_START_FRAME",20),Kt(I2,"ATT4_RADIUS",420),Kt(I2,"ATT4_CONE_HALF_ANGLE",55*Math.PI/180),Kt(I2,"ATT4_DAMAGE_MIN",1),Kt(I2,"ATT4_DAMAGE_MAX",2.4),Kt(I2,"ATT4_BLOW_POWER_MIN",17),Kt(I2,"ATT4_BLOW_POWER_MAX",25),Kt(I2,"ATT4_BLOW_LIFT_MIN",5.5),Kt(I2,"ATT4_BLOW_LIFT_MAX",11),Kt(I2,"ATT4_AIR_PUSH_FRAMES",22),Kt(I2,"ATT4_WIND_END_FRAME",40),Kt(I2,"ATT4_WIND_PUSH_INTERVAL",3),Kt(I2,"ATT4_WIND_PUSH_FRAMES",4),Kt(I2,"ATT4_WIND_PUSH_SPEED",3),Kt(I2,"ATT4_RETREAT_DIST",120),Kt(I2,"ATT4_RETREAT_FRAMES",16),Kt(I2,"ATT4_ANIM_TIMESCALE",.5),Kt(I2,"ATT4_WIND_APPEAR_FRAME",6),Kt(I2,"ATT4_LAUNCH_DELAY_FRAMES",7),Kt(I2,"ATT4_TORNADO_SPAWN_DIST",210),Kt(I2,"ATT4_TORNADO_DURATION",900),Kt(I2,"ATT4_TORNADO_DPS_PERCENT",.4),Kt(I2,"ATT4_TORNADO_RADIUS_X",70),Kt(I2,"ATT4_TORNADO_RADIUS_Y",56),Kt(I2,"ATT4_TORNADO_WANDER",{
+ minX:300,maxX:1100,minY:550,maxY:895}
+ ),Kt(I2,"FEATHER_SPINE_FPS",30),Kt(I2,"FEATHER_FIRE_FRAMES",[28,30,32,34,36,38]),Kt(I2,"FEATHER_PER_BURST",20),Kt(I2,"FEATHER_SPAWN_RADIUS",30),Kt(I2,"FEATHER_ORIGIN_BONE","shout"),Kt(I2,"FEATHER_DAMAGE_MIN",1),Kt(I2,"FEATHER_DAMAGE_MAX",1.7),Kt(I2,"FEATHER_AGGRO_BURSTS",2),Kt(I2,"ATT3_DAMAGE_MIN",1),Kt(I2,"ATT3_DAMAGE_MAX",2.2),Kt(I2,"ATT3_DASH_FRAMES",47),Kt(I2,"ATT3_TRACK_FROM_FRAME",20),Kt(I2,"ATT3_TRACK_TO_FRAME",28),Kt(I2,"ATT3_TRACK_SPEED",3),Kt(I2,"REGROUP_ENGAGE_DIST",480),Kt(I2,"REGROUP_HOME_X",1100),Kt(I2,"REGROUP_CHECK_INTERVAL",30);
BattleManager 4 hunks, 158 statements
- zt(this,"isOpened",!0),zt(this,"savedIndex",0),zt(this,"tutorialIndex",0),zt(this,"enableMissionGuide",!0),zt(this,"bottomMenuUnlockList",[0,1,2,3,4,5]),zt(this,"isHelpHeroPopupped",!1),zt(this,"isHelpQuestPopupped",!1),zt(this,"isHelpRevivePopupped",!1)}
+ Kt(this,"currentBattle",null),Kt(this,"idleBattle",null),Kt(this,"battleState",xU.STOPPED),Kt(this,"battleFrameController"),this.battleFrameController=qG.getInstance()}
- return this.instance||(this.instance=new t),this.instance}
- async init(){
+ return t.instance||(t.instance=new t),t.instance}
+ startIdleBattle(t){
+ this.idleBattle&&this.idleBattle.cleanup(),this.idleBattle=t,this.currentBattle=t,this.battleState=xU.RUNNING,this.battleFrameController.add(this.currentBattle.execute,this.currentBattle)}
+ switchToBattle(t,i){
+ var s;
+ const e=(null==(s=this.currentBattle)?void 0:s.getBattleType())??OU.IDLE,n=t.getBattleType(),h=this.currentBattle===t;
+ this.currentBattle&&(this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),h||this.currentBattle.hide(),this.battleState=xU.PAUSED),Wni.getInstance().transition(e,n,i),rL.isIdleBattle=!1,pB.getInstance().visible=!1,tzt.getInstance().visible=!1,Xt(async()=>{
+ const{
+ SoulRestLayer:t}
+ =await Promise.resolve().then(()=>UB);
+ return{
+ SoulRestLayer:t}
- get isRunning(){
- return 0!=this.isOpened&&this.tutorialIndex>0}
- async startTutorial(){
- 0!=this.isOpened&&(_L.numRevive>0||(this.savedIndex=Number(await $A.getTutorialID()??0),_L.wave>this.savedIndex?1==_L.wave?(this.enableMissionGuide=!1,this.tutorialIndex!=t.TUTORIAL_INDEX_WAVE0&&(this.tutorialIndex=t.TUTORIAL_INDEX_WAVE0,await this.startTutorialWave0())):2==_L.wave?(this.enableMissionGuide=!1,this.tutorialIndex=_L.wave,await this.startTutorialWave2()):3==_L.wave?(this.enableMissionGuide=!1,this.tutorialIndex=t.TUTORIAL_INDEX_WAVE3,await this.startTutorialWave3()):(this.enableMissionGuide=!0,this.tutorialIndex=_L.wave,this.startTutorialWaveEtc()):1==_L.wave?(this.bottomMenuUnlockList=[2],Xti.getInstance().onMenuClickByIndex(2),Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),_9t.getInstance().opened=!1,this.enableMissionGuide=!1):2==_L.wave?(this.bottomMenuUnlockList=[1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList)):3==_L.wave?(this.bottomMenuUnlockList=[0,1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),this.enableMissionGuide=!0,HV.getInstance().init()):(this.bottomMenuUnlockList=[0,1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList))))}
- async startTutorialWave0(){
- this.bottomMenuUnlockList=[2],Xti.getInstance().onMenuClickByIndex(2),Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),_9t.getInstance().opened=!1,WG.getInstance().stop(),hL.getInstance().stopUpdate(),Jti.getInstance().onCompleteHandler=this.onTurotial0Toast1Complete.bind(this);
- const t=AG.getText("DIALOGUE_TEXT_75","윽.. 머리야.. 여긴 어디지? 뭔가 익숙한데...");
- Jti.getInstance().show("L_FRO",t)}
- onTurotial0Toast1Complete(){
- const t=sK.getInstance().getMainList();
- t&&(w4.getInstance().onHideHandler=this.onHelpCastlePopupHide.bind(this),w4.getInstance().showWith(t[0].main,2,!0,!1))}
- onHelpCastlePopupHide(){
- zii.getInstance().startTutorial0Wave(),Jti.getInstance().onCompleteHandler=this.onTurotial0Toast2Complete.bind(this);
- const t=AG.getText("DIALOGUE_TEXT_76","저 슬라임 녀석들.. 성을 공격하러 오는 것 같은데?");
- Jti.getInstance().show("L_SUR",t)}
- onTurotial0Toast2Complete(){
- WG.getInstance().stop(),this.bottomMenuUnlockList.push(1),Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList);
- const t=Xti.getInstance().getMenu(1),i=Xti.getInstance().getHeroPoint();
- XV.getInstance().show(i.x,i.y,t.width,t.height)}
- showHeroHelpPopup(){
- this.isHelpHeroPopupped||this.tutorialIndex==t.TUTORIAL_INDEX_WAVE0&&(XV.getInstance().hide(),setTimeout(()=>{
- const t=sK.getInstance().getMainList();
- t&&(w4.getInstance().onHideHandler=this.highlightHeroRosterButton.bind(this),w4.getInstance().showWith(t[1].main,0,!0,!1),this.isHelpHeroPopupped=!0)}
- ,100))}
- highlightHeroRosterButton(){
- const t=W9.getInstance().btnRoaster,i=W9.getInstance().getBtnRosterPoint();
- XV.getInstance().show(i.x+.5*t.width,i.y+.5*t.height,t.width,t.height)}
- highlightHeroHireButton(){
- const t=K9.getInstance().getItems();
- if(t.length<1)return void this.highlightHeroHireCloseButton();
- const i=t[0].btnHire,s=K9.getInstance().getBtnHirePoint();
- XV.getInstance().show(s.x+.5*i.width,s.y+.5*i.height,i.width,i.height)}
- highlightHeroHireCloseButton(){
- const t=q9.getInstance().btnClose,i=q9.getInstance().getBtnClosePoint();
- XV.getInstance().show(i.x+.5*t.width,i.y+.5*t.height,t.width,t.height)}
- clearTutorialWave0(){
- XV.getInstance().hide(),WG.getInstance().start()}
- async endTutorialWave0(){
- await $A.saveTutorialID(String(t.TUTORIAL_INDEX_WAVE0)),this.savedIndex=1}
- async startTutorialWave2(){
- this.bottomMenuUnlockList=[1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),Xti.getInstance().onMenuClickByIndex(1),_9t.getInstance().opened=!1}
- async startTutorialWave3(){
- if(this.bottomMenuUnlockList=[1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),_9t.getInstance().opened=!1,KD.getInstance().npcDialogue){
- const t=[],i=new JV;
- i.code="L_SAD",i.text=AG.getText("DIALOGUE_TEXT_5","영웅들을 무장시키고 성벽을 보강하려니... 생각보다 자금이 턱없이 부족하군."),i.position=1,t.push(i);
- const s=new JV;
- s.code="S_SMI",s.text=AG.getText("DIALOGUE_TEXT_6","이해합니다, 성주임. 마침 성주님의 명성을 듣고 도움을 청하는 이들이 줄을 섰답니다. [퀘스트]를 해결해 주시면 그들은 기꺼이 금화를 내놓을 거예요."),s.position=2,t.push(s),Jti.getInstance().onCompleteHandler=this.onTurotial3ToastComplete.bind(this),t.length>0&&Jti.getInstance().showDialogues(t)}
- else this.onTurotial3ToastComplete()}
- onTurotial3ToastComplete(){
- this.bottomMenuUnlockList=[0,1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),hL.getInstance().startUpdate();
- const t=Xti.getInstance().getMenu(0),i={
- x:t.x,y:t.y,width:t.width,height:t.height}
- ;
- VV.getInstance().showOnTarget(Xti.getInstance(),i)}
- showQuestHelpPopup(){
- this.isHelpQuestPopupped||setTimeout(()=>{
- const t=sK.getInstance().getMainList();
- t&&(w4.getInstance().onHideHandler=this.endTutorialWave3.bind(this),w4.getInstance().showWith(t[2].main,0,!0,!1),this.isHelpQuestPopupped=!0)}
- ,100)}
- async endTutorialWave3(){
- await $A.saveTutorialID(String(t.TUTORIAL_INDEX_WAVE3)),this.savedIndex=t.TUTORIAL_INDEX_WAVE3,this.enableMissionGuide=!0,HV.getInstance().init(),Mz.getInstance().doAccountCreate()}
- async startTutorialWaveEtc(){
- _9t.getInstance().opened=!1,_L.wave>=10?this.bottomMenuUnlockList=[0,1,2,5]:this.bottomMenuUnlockList=[0,1,2],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList)}
- async startTutorialRevive(){
- if(0!=this.isOpened&&0==this.isHelpRevivePopupped){
- const t=sK.getInstance().getMainList();
- t&&(w4.getInstance().onHideHandler=this.endTutorialRevive.bind(this),w4.getInstance().showWith(t[3].main,0,!0,!1),this.isHelpRevivePopupped=!0)}
+ ,void 0).then(({
+ SoulRestLayer:t}
+ )=>{
+ t.getInstance().hide()}
+ ),this.currentBattle=t,this.battleState=xU.RUNNING,this.battleFrameController.add(this.currentBattle.execute,this.currentBattle),this.currentBattle.show(),cS.getInstance().dispatchCustomEvent("BattleSwitch",{
+ fromType:e,toType:n}
+ )}
+ returnToIdleBattle(){
+ var t;
+ const i=(null==(t=this.currentBattle)?void 0:t.getBattleType())??OU.IDLE;
+ this.currentBattle&&this.currentBattle!==this.idleBattle&&(this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),this.currentBattle.cleanup()),Wni.getInstance().transition(i,OU.IDLE),this.idleBattle?(this.currentBattle=this.idleBattle,this.battleState=xU.RUNNING,this.battleFrameController.add(this.currentBattle.execute,this.currentBattle),this.currentBattle.show(),rL.isIdleBattle=!0,pB.getInstance().visible=!0,tzt.getInstance().visible=!0,Xt(async()=>{
+ const{
+ SoulRestLayer:t}
+ =await Promise.resolve().then(()=>UB);
+ return{
+ SoulRestLayer:t}
+ }
+ ,void 0).then(({
+ SoulRestLayer:t}
+ )=>{
+ t.getInstance().show()}
+ )):(this.currentBattle=null,this.battleState=xU.STOPPED),cS.getInstance().dispatchCustomEvent("BattleSwitch",{
+ fromType:i,toType:OU.IDLE}
+ )}
+ isIdleActive(){
+ return null===this.currentBattle||this.currentBattle===this.idleBattle}
+ pauseCurrentBattle(){
+ this.currentBattle&&(this.currentBattle!==this.idleBattle&&this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),this.battleState=xU.PAUSED)}
+ resumeCurrentBattle(){
+ this.currentBattle&&(this.battleFrameController.add(this.currentBattle.execute,this.currentBattle),this.battleState=xU.RUNNING)}
+ stopCurrentBattle(){
+ this.currentBattle&&(this.battleFrameController.remove(this.currentBattle.execute,this.currentBattle),this.currentBattle.cleanup(),this.currentBattle!==this.idleBattle&&(this.currentBattle=this.idleBattle),this.battleState=xU.STOPPED)}
+ getCurrentBattle(){
+ return this.currentBattle}
+ getIdleBattle(){
+ return this.idleBattle}
+ getCurrentBattleType(){
+ return this.currentBattle?this.currentBattle.getBattleType():null}
+ getBattleState(){
+ return this.battleState}
+ isIdleBattleActive(){
+ return this.currentBattle===this.idleBattle&&this.battleState===xU.RUNNING}
+ isSingleBattleActive(){
+ return this.currentBattle!==this.idleBattle&&null!==this.currentBattle&&this.battleState===xU.RUNNING}
+ printStatus(){
- Kt(Qti,"TutorialController"),zt(Qti,"instance"),zt(Qti,"TUTORIAL_INDEX_WAVE0",1),zt(Qti,"TUTORIAL_INDEX_WAVE3",3),zt(Qti,"TUTORIAL_INDEX_REVIVE",100);
+ Vt($ni,"BattleManager"),Kt($ni,"instance");
+ let jni=$ni;
+ const Vni=class t extends oS{
+ constructor(){
+ super(),Kt(this,"spine",null),Kt(this,"isLoaded",!1),Kt(this,"loadingStarted",!1),Kt(this,"overlay"),Kt(this,"onCompleteCallback",null),Kt(this,"onEarlyCallback",null),Kt(this,"earlyFrameCount",0),Kt(this,"safetyTimer",null),Kt(this,"listener",{
+ complete:Vt(()=>{
+ this.onAnimationComplete()}
+ ,"complete")}
+ ),this.overlay=new Lf,this.overlay.rect(0,-VA.SAFE_AREA_TOP,640,VA.stageHeight+VA.SAFE_AREA_TOP),this.overlay.fill({
+ color:0,alpha:.7}
+ ),this.addChild(this.overlay),this.visible=!1,this.eventMode="static"}
+ preload(){
+ this.loadSpine()}
+ async loadSpine(){
+ if(!this.loadingStarted){
+ this.loadingStarted=!0;
+ try{
+ const t=`${
+ YA.getBase()}
+ assets/spines/Reincarnation.skel`,i=`${
+ YA.getBase()}
+ assets/spines/Reincarnation.atlas`;
+ if(rd.add({
+ alias:"reincarnationAtlas",src:i}
+ ),rd.add({
+ alias:"reincarnationSkel",src:t}
+ ),await rd.load(["reincarnationAtlas","reincarnationSkel"]),this.spine=zJ.from({
+ skeleton:"reincarnationSkel",atlas:"reincarnationAtlas"}
+ ),!this.spine)throw new Error("Failed to create Reincarnation Spine");
+ this.spine.x=320,this.spine.y=.5*VA.stageHeight,this.spine.scale.set(1),this.spine.visible=!1,this.spine.autoUpdate=!1,this.addChild(this.spine),this.isLoaded=!0}
+ catch(t){
+ this.loadingStarted=!1}
+ }
+ }
+ async play(i,s){
+ this.safetyTimer&&(clearTimeout(this.safetyTimer),this.safetyTimer=null),this.onCompleteCallback=i,this.onEarlyCallback=s??null,this.earlyFrameCount=0,this.isLoaded||this.loadingStarted||await this.loadSpine();
+ let e=0;
+ for(;
+ !this.isLoaded&&this.loadingStarted&&e<100;
+ )await new Promise(t=>setTimeout(t,50)),e++;
+ if(!this.isLoaded||!this.spine)return null==s||s(),i(),this.onEarlyCallback=null,void(this.onCompleteCallback=null);
+ this.visible=!0,this.overlay.visible=!0,this.spine.visible=!0,this.spine.alpha=1,this.spine.autoUpdate=!1,this.spine.autoUpdate=!0,this.spine.state.removeListener(this.listener),this.spine.state.addListener(this.listener),this.spine.state.setAnimation(0,"Reincarnation",!1),this.onEarlyCallback&&(this.earlyFrameCount=0,LM.getInstance().add(this.onEarlyFrame,this)),this.safetyTimer=setTimeout(()=>this.forceFinish(),t.SAFETY_TIMEOUT_MS)}
+ onEarlyFrame(){
+ this.earlyFrameCount++,this.earlyFrameCount>=98&&(LM.getInstance().remove(this.onEarlyFrame,this),this.overlay.visible=!1,this.onEarlyCallback&&(this.onEarlyCallback(),this.onEarlyCallback=null))}
+ onAnimationComplete(){
+ this.spine&&(this.spine.state.removeListener(this.listener),this.spine.state.clearTracks(),this.spine.autoUpdate=!1,this.spine.visible=!1),this.visible=!1,this.onCompleteCallback&&(this.onCompleteCallback(),this.onCompleteCallback=null)}
+ forceFinish(){
+ this.safetyTimer=null;
+ const t=this.onEarlyCallback,i=this.onCompleteCallback;
+ (t||i)&&(LM.getInstance().remove(this.onEarlyFrame,this),this.spine&&(this.spine.state.removeListener(this.listener),this.spine.state.clearTracks(),this.spine.autoUpdate=!1,this.spine.visible=!1),this.overlay.visible=!1,this.visible=!1,t&&(this.onEarlyCallback=null,t()),i&&(this.onCompleteCallback=null,i()))}
+ }
+ ;
+ Vt(Vni,"ReviveLayer"),Kt(Vni,"SAFETY_TIMEOUT_MS",8e3);
+ let Kni=Vni;
+ const zni=class t{
+ constructor(){
+ Kt(this,"medals",[])}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ var i;
+ (null==(i=null==t?void 0:t[0])?void 0:i.medal)&&(this.medals=String(t[0].medal).split("|").map(Number))}
+ init(){
+ }
+ getMedal(t){
+ if(t<10)return 0;
+ const i=Math.floor(t/10)-1;
+ return i>=this.medals.length?this.medals[this.medals.length-1]??0:this.medals[i]??0}
+ }
+ ;
+ Vt(zni,"RebirthMedalManager"),Kt(zni,"instance");
+ let qni=zni;
+ const Yni=class extends M2t{
+ constructor(t,i=1){
+ super(t,i,"Icon_Arrow_Left_02_white","Icon_Arrow_Right_02_white",!0)}
+ }
+ ;
+ Vt(Yni,"ArrowButtonDouble");
DungeonTopMenu 3 hunks, 153 statements
- const M9t=class t extends Be{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- super()}
- }
- ;
- Kt(M9t,"DungeonTopMenu"),zt(M9t,"instance");
- let E9t=M9t;
- const A9t=class t extends Be{
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- constructor(){
- super()}
- }
- ;
- Kt(A9t,"PVPTopMenu"),zt(A9t,"instance");
- let S9t=A9t;
- static getNpcName(i){
- if(i.length>=2){
- const s=i.substring(0,2);
- if(t.NPC_NAMES[s])return AG.getText(`DIALOGUE_NPC_${
- s}
- `,t.NPC_NAMES[s])}
- const s=i.substring(0,1);
- return AG.getText(`DIALOGUE_NPC_${
- s}
- `,t.NPC_NAMES[s])??""}
- async showDialogues(i){
- if(0!==i.length&&KD.getInstance().npcDialogue){
- if(await this.waitForPopupsClosed(),!this.textureLoaded){
- const i="ktx2";
- await ZA.generateTexture(t.SHEET,i,!1),this.textureLoaded=!0}
- this.queue.push(...i),this.timeCount<=0&&this.playNext()}
- }
- waitForPopupsClosed(){
- return new Promise(t=>{
- if(!IL.getInstance().hasPopup)return void t();
- const i=Kt(()=>{
- IL.getInstance().hasPopup||(GM.getInstance().remove(i,this),t())}
- ,"check");
- GM.getInstance().add(i,this)}
- )}
- async show(i,s,e=360,n=1){
- if(!this.textureLoaded){
- const i="ktx2";
- await ZA.generateTexture(t.SHEET,i,!1),this.textureLoaded=!0}
- this.showCurrent(i,s,e,n)}
- playNext(){
- if(0===this.queue.length)return;
- const i=this.queue.shift(),s=AG.getText(i.getTextKey(),i.text);
- this.showCurrent(i.code,s,t.DURATION_PER_DIALOGUE,i.position)}
- showCurrent(i,s,e,n=1){
- const h=t.SHEET;
- this.currentPosition=n,this.frameLeft.visible=!1,this.frameRight.visible=!1,this.npcIcon.texture=ZA.getTexture(h,i);
- const r=125/this.npcIcon.texture.height;
- this.npcIcon.scale.set(r),this.lblName.text=t.getNpcName(i),aD.setLabelWrapWidth(this.lblMessage,480),this.lblMessage.text=s,this.relayout(),this.alpha=0,this.timeCount=e,this.isFadingOut=!1,GM.getInstance().remove(this.onFrame,this),GM.getInstance().add(this.onFrame,this),O9t.getInstance().addChild(this)}
- relayout(){
- const i=t.PAD,s=2===this.currentPosition,e=520,n=this.lblMessage.height+2*i+16,h=this.npcIcon.scale.x,r=this.npcIcon.texture.width*h,o=this.npcIcon.texture.height*h;
- this.bg.width=e,this.bg.height=n,this.bg.x=0,this.bg.y=0;
- const a=-o;
- s?(this.npcIcon.scale.x=-Math.abs(h),this.npcIcon.x=e-i,this.npcIcon.y=a,this.lblName.x=this.npcIcon.x-r-this.lblName.width+6,this.lblName.y=-this.lblName.height-4,this.lblMessage.x=.5*(e-this.lblMessage.width),this.lblMessage.y=.5*(n-this.lblMessage.height)):(this.npcIcon.scale.x=Math.abs(h),this.npcIcon.x=i,this.npcIcon.y=a,this.lblName.x=this.npcIcon.x+r-6,this.lblName.y=-this.lblName.height-4,this.lblMessage.x=.5*(e-this.lblMessage.width),this.lblMessage.y=.5*(n-this.lblMessage.height)),this.x=.5*(KA.stageWidth-e),this.y=460}
- onFrame(){
- IL.getInstance().hasPopup?this.visible=!1:(this.visible=!0,this.alpha<1&&!this.isFadingOut&&(this.alpha+=1/t.FADE_IN_FRAMES,this.alpha>1&&(this.alpha=1)),this.timeCount<=t.FADE_OUT_FRAMES&&!this.isFadingOut&&(this.isFadingOut=!0),this.isFadingOut&&(this.alpha-=1/t.FADE_OUT_FRAMES,this.alpha<0&&(this.alpha=0)),this.timeCount--,this.timeCount<=0&&(GM.getInstance().remove(this.onFrame,this),this.queue.length>0?this.playNext():(this.parent&&this.parent.removeChild(this),this.onCompleteHandler&&(this.onCompleteHandler(),this.onCompleteHandler=null))))}
+ constructor(){
+ super()}
- Kt(Yti,"NpcDialogueToast"),zt(Yti,"instance"),zt(Yti,"SHEET","Dialogue"),zt(Yti,"PAD",8),zt(Yti,"NPC_NAMES",{
- S:"정령",L:"성주",CH:"오크 부족장",SC:"오크 정찰병",CP:"휴먼 기사단장",LI:"리치 사령관",EC:"엘프 지휘관"}
- ),zt(Yti,"DURATION_PER_DIALOGUE",300),zt(Yti,"FADE_IN_FRAMES",10),zt(Yti,"FADE_OUT_FRAMES",30);
+ Vt(Gni,"DungeonTopMenu"),Kt(Gni,"instance");
+ let Bni=Gni;
+ const Uni=class t extends Ge{
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ constructor(){
+ super()}
+ }
+ ;
+ Vt(Uni,"PVPTopMenu"),Kt(Uni,"instance");
+ let Fni=Uni;
+ const Hni=class t{
+ static getInstance(){
+ return t.instance||(t.instance=new t),t.instance}
+ constructor(){
+ }
+ transition(t,i,s){
+ this.hideUI(t),this.showUI(i,s)}
+ showUI(t,i){
+ switch(t){
+ case OU.IDLE:this.showIdleUI();
+ break;
+ case OU.DUNGEON:this.showDungeonUI(null==i?void 0:i.dungeonId);
+ break;
+ case OU.PVP:this.showPVPUI();
+ break;
+ case OU.PVP2:this.showPVP2UI();
+ break;
+ case OU.TOWER:this.showTowerUI();
+ break;
+ case OU.GUILD_WAR:this.showGuildWarUI();
+ break;
+ case OU.RAID:this.showRaidUI()}
+ }
+ hideUI(t){
+ switch(t){
+ case OU.IDLE:this.hideIdleUI();
+ break;
+ case OU.DUNGEON:this.hideDungeonUI();
+ break;
+ case OU.PVP:this.hidePVPUI();
+ break;
+ case OU.PVP2:this.hidePVP2UI();
+ break;
+ case OU.TOWER:this.hideTowerUI();
+ break;
+ case OU.GUILD_WAR:this.hideGuildWarUI();
+ break;
+ case OU.RAID:this.hideRaidUI()}
+ }
+ showIdleUI(){
+ whi.getInstance().visible=!0,$2.getInstance().visible=!0,Lni.getInstance().visible=!0,Aei.getInstance().visible=!0,Zqt.getInstance().visible=!0,L2t.getInstance().visible=!0,QG.getInstance().setBackground(XG.IDLE),_B.getInstance().restoreSeasonColor()}
+ hideIdleUI(){
+ whi.getInstance().visible=!1,$2.getInstance().visible=!1,Lni.getInstance().visible=!1,Aei.getInstance().visible=!1,Zqt.getInstance().visible=!1,L2t.getInstance().visible=!1}
+ showDungeonUI(i){
+ Bni.getInstance().visible=!0;
+ const s=null!=i&&t.DUNGEON_BG_MAP[i]?t.DUNGEON_BG_MAP[i]:XG.DUNGEON;
+ QG.getInstance().setBackground(s),o1t.getInstance().show(),_B.getInstance().updateForDungeon(i??1);
+ const e=n0t.getInstance();
+ e5t.getInstance().addChild(e),e.show()}
+ hideDungeonUI(){
+ Bni.getInstance().visible=!1,o1t.getInstance().hide(),n0t.getInstance().hide()}
+ showPVPUI(){
+ Fni.getInstance().visible=!0,QG.getInstance().setBackground(XG.PVP),i5t.getInstance().show(),_B.getInstance().updateForPVP()}
+ hidePVPUI(){
+ Fni.getInstance().visible=!1,i5t.getInstance().hide()}
+ showPVP2UI(){
+ Fni.getInstance().visible=!0,i5t.getInstance().show(),_B.getInstance().updateForPVP()}
+ hidePVP2UI(){
+ Fni.getInstance().visible=!1,i5t.getInstance().hide()}
+ showTowerUI(){
+ QG.getInstance().setBackground(XG.TOWER),c1t.getInstance().show();
+ const t=n0t.getInstance();
+ e5t.getInstance().addChild(t),t.show()}
+ hideTowerUI(){
+ c1t.getInstance().hide(),n0t.getInstance().hide()}
+ showGuildWarUI(){
+ NU.getInstance().removeAll(),xL.getInstance().removeAll(),whi.getInstance().visible=!1,$2.getInstance().visible=!1,Lni.getInstance().visible=!1,Aei.getInstance().visible=!1,Zqt.getInstance().visible=!1,L2t.getInstance().visible=!1}
+ hideGuildWarUI(){
+ }
+ showRaidUI(){
+ NU.getInstance().removeAll(),xL.getInstance().removeAll(),whi.getInstance().visible=!1,$2.getInstance().visible=!1,Lni.getInstance().visible=!1,Aei.getInstance().visible=!1,Zqt.getInstance().visible=!1,L2t.getInstance().visible=!1}
+ hideRaidUI(){
+ }
+ }
+ ;
+ Vt(Hni,"BattleUIManager"),Kt(Hni,"instance"),Kt(Hni,"DUNGEON_BG_MAP",{
+ 1:XG.DUNGEON1,2:XG.DUNGEON2,3:XG.DUNGEON3,4:XG.DUNGEON4}
+ );
GuildRaidPopup 29 hunks, 131 statements
- const _4t=class t extends O8{
+ const gti="ef2.guildRaid.attackSquads.",mti=class t extends bzt{
- super(),zt(this,"viewContainer",new Be),zt(this,"currentSubView",null),zt(this,"mode",0),zt(this,"curMain",0),zt(this,"curRaidId",0),zt(this,"curDifficult",0),zt(this,"curMainInfo",null),this.bg.height<880&&(this.y=Math.max(0,KA.safeHeight-880),this.bg.height=KA.safeHeight-this.y),this.btnClose.y=-this.btnClose.height-1,this.viewContainer.x=0,this.viewContainer.y=t.CONTENT_TOP_Y,this.addChild(this.viewContainer)}
+ super(),Kt(this,"viewContainer",new Ge),Kt(this,"currentSubView",null),Kt(this,"mode",0),Kt(this,"curMain",0),Kt(this,"curRaidId",0),Kt(this,"curDifficult",0),Kt(this,"curMainInfo",null),Kt(this,"lastBattleBookVO",null),this.bg.height<880&&(this.y=Math.max(0,VA.safeHeight-880),this.bg.height=VA.safeHeight-this.y),this.btnClose.y=-this.btnClose.height-1,this.viewContainer.x=0,this.viewContainer.y=t.CONTENT_TOP_Y,this.addChild(this.viewContainer)}
- 2!==this.mode?1!==this.mode?this.hide():this.goMain():this.goDifficulty(this.curMain)}
+ 2!==this.mode?5!==this.mode?1!==this.mode&&3!==this.mode&&4!==this.mode&&6!==this.mode?this.hide():this.goMain():this.goEmblem():this.goDifficulty(this.curMain)}
+ get isSubMaster(){
+ var t;
+ const i=null==(t=AD.myMembershipVO)?void 0:t.role;
+ return(PD[i]??0)>3}
- this.mode=0,this.curRaidId=0,this.curDifficult=0,this.setCurrentSubView(y4t.getInstance()),await y4t.getInstance().setData()}
+ this.mode=0,this.curRaidId=0,this.curDifficult=0,await YQt(),this.setCurrentSubView(pti.getInstance()),await pti.getInstance().setData()}
- this.mode=1,this.curMain=t,this.curRaidId=0,this.curDifficult=0,this.setCurrentSubView(p4t.getInstance()),await p4t.getInstance().setData(t)}
+ this.mode=1,this.curMain=t,this.curRaidId=0,this.curDifficult=0,await YQt(),this.setCurrentSubView(I9t.getInstance()),await I9t.getInstance().setData(t)}
- this.mode=2,this.curRaidId=t,this.curDifficult=i,this.setCurrentSubView(a4t.getInstance()),await a4t.getInstance().setData(t,i)}
+ this.mode=2,this.curRaidId=t,this.curDifficult=i,await YQt(),this.setCurrentSubView(v9t.getInstance()),await v9t.getInstance().setData(t,i)}
+ async goEmblem(){
+ this.mode=3,this.setCurrentSubView(B9t.getInstance()),await B9t.getInstance().setData()}
+ async goEmblemDetail(t){
+ this.mode=5,this.setCurrentSubView(R9t.getInstance()),await R9t.getInstance().setData(t)}
+ async goShop(){
+ this.mode=4,this.setCurrentSubView(ati.getInstance()),await ati.getInstance().setData()}
+ async goRecord(){
+ this.mode=6,await YQt(),this.setCurrentSubView(Z9t.getInstance()),await Z9t.getInstance().setData()}
+ refreshBossListIfVisible(){
+ !this.parent||2!==this.mode||this.curRaidId<=0||v9t.getInstance().setData(this.curRaidId,this.curDifficult)}
+ const s=i.bookVO;
- ...i,initialSquads:t.loadLastSquads(),onSquadsChange:Kt(i=>t.saveLastSquads(i),"onSquadsChange"),onBattleStart:Kt((t,i)=>this.startRaidBattle(t,i),"onBattleStart")}
+ ...i,initialSquads:t.loadLastSquads(s.main,s.sub),onSquadsChange:Vt(i=>t.saveLastSquads(s.main,s.sub,i),"onSquadsChange"),onBattleStart:Vt((t,i)=>this.startRaidBattle(t,i),"onBattleStart"),onPracticeStart:Vt((t,i,s)=>this.startPracticeBattle(t,i,s),"onPracticeStart")}
+ async startPracticeBattle(i,s,e){
+ t.saveLastSquads(i.main,i.sub,s),this.hide(),u9t.getInstance().hide();
+ const{
+ Guild2Popup:n}
+ =await Xt(async()=>{
+ const{
+ Guild2Popup:t}
+ =await Promise.resolve().then(()=>rii);
+ return{
+ Guild2Popup:t}
+ }
+ ,void 0);
+ n.getInstance().hide();
+ const h=PJt.getInstance(),r=h.getBattleBossKindNum(i);
+ return u2.getInstance().showMessage(SG.getText("GAME_1487","연습 전투 — 티켓 소모 없이 기록되지 않습니다")),await uZt.getInstance().startBattle({
+ bossKindNum:r,bossSub:i.sub,bossName:h.getBossName(i),bossHp:e>0?e:i.hp,bossLevel:i.level||1,plusTribe:i.plusTribe,plusValue:i.plusValue,minusTribe:i.minusTribe,minusValue:i.minusValue,squads:s,practice:!0,onExit:Vt(()=>{
+ this.reopenBossListAfterBattle()}
+ ,"onExit")}
+ ),!0}
- var e,n;
- t.saveLastSquads(s);
+ var e,n,h;
+ t.saveLastSquads(i.main,i.sub,s);
+ {
+ const t=await rD.getInstance().guildRaid.getSubInfo(this.curRaidId),s=null==(e=null==t?void 0:t.body)?void 0:e.sub;
+ if((null==t?void 0:t.success)&&s&&("CLEAR"===s.status||Number(s.sub??0)!==i.sub||Number(s.curHp??0)<=0))return wG.getInstance().show(SG.getText("GAME_1509","보스 상태가 변경되었습니다. 목록을 다시 확인해주세요.")),u9t.getInstance().hide(),!1}
- if(!(null==h?void 0:h.success))return mG.getInstance().show(String((null==h?void 0:h.error)??"ERROR")),!1;
+ if(!(null==r?void 0:r.success))return wG.getInstance().show(SG.getErrorMessage(String((null==r?void 0:r.error)??"ERROR"))||String((null==r?void 0:r.error)??"ERROR")),!1;
- const a=Q6t.getInstance(),c=a.getByKindNum(Number(r.kindNum))??i,l=a.getBattleBossKindNum(c);
+ const c=PJt.getInstance(),l=c.getByKindNum(Number(o.kindNum))??i;
+ this.lastBattleBookVO=l;
+ const u=c.getBattleBossKindNum(l);
- bossKindNum:l,bossSub:c.sub,bossName:c.name,bossHp:Number(r.startHp)||0,squads:s,onBattleEnd:Kt((t,i,s)=>{
+ bossKindNum:u,bossSub:l.sub,bossName:c.getBossName(l),bossHp:Number(o.startHp)||0,bossLevel:l.level||1,plusTribe:l.plusTribe,plusValue:l.plusValue,minusTribe:l.minusTribe,minusValue:l.minusValue,squads:s,onBattleEnd:Vt((t,i,s)=>{
- ,"onBattleEnd")}
+ ,"onBattleEnd"),onExit:Vt(()=>{
+ this.reopenBossListAfterBattle()}
+ ,"onExit")}
- var n;
+ var n,h,r;
- if(!(null==h?void 0:h.success))return void mG.getInstance().show(String((null==h?void 0:h.error)??"ERROR"));
+ if(!(null==o?void 0:o.success))return void wG.getInstance().show(SG.getErrorMessage(String((null==o?void 0:o.error)??"ERROR"))||String((null==o?void 0:o.error)??"ERROR"));
- vV.getInstance().showMessage(e||(null==(n=h.body)?void 0:n.isClear)?`보스 격파!! (데미지 ${
+ u2.getInstance().showMessage(e||(null==(n=o.body)?void 0:n.isClear)?SG.getValueReplace("GAME_1292","\\{
+ 0\\}
+ ",a,`보스 격파!! (데미지 ${
- )`:`데미지 ${
+ )`):SG.getValueReplace("GAME_1293","\\{
+ 0\\}
+ ",a,`데미지 ${
-  기록!`)}
+  기록!`));
+ const c=(null==(h=this.lastBattleBookVO)?void 0:h.guildCoin)??0;
+ HJt.deliverRewards(c>0?[{
+ type:"guildCoin",amount:c}
+ ]:[]);
+ const l=Number(null==(r=o.body)?void 0:r.guildCoin);
+ Number.isFinite(l)&&AD.myMembershipVO&&(AD.myMembershipVO.coin=AD.myCoins=l)}
+ catch(Xst){
+ }
+ finally{
+ this.refreshBarracksStates()}
+ }
+ async reopenBossListAfterBattle(){
+ const{
+ Guild2Popup:t}
+ =await Xt(async()=>{
+ const{
+ Guild2Popup:t}
+ =await Promise.resolve().then(()=>rii);
+ return{
+ Guild2Popup:t}
+ }
+ ,void 0);
+ t.getInstance().show(),this.show2(),this.curRaidId>0?await this.goBoss(this.curRaidId,this.curDifficult):await this.goMain()}
+ async refreshBarracksStates(){
+ try{
+ const t=await rD.getInstance().guildBarracks.getAll(!0),i=(null==t?void 0:t.body)??t;
+ (null==i?void 0:i.states)&&kG.getInstance().setStates(i.states)}
- static attackSquadsLsKey(){
+ static attackSquadsLsKey(t,i){
- return t?`ef2.guildRaid.attackSquads.${
+ return s?`${
+ gti}
+ ${
+ s}
+ .${
+ t}
+ _${
- static loadLastSquads(){
- if(this.isValidSquads(this.lastSquads))return this.lastSquads;
- const t=this.attackSquadsLsKey();
- if(!t)return null;
+ static legacySquadsLsKey(){
+ const t=ML.userId;
+ return t?`${
+ gti}
+ ${
+ t}
+ `:null}
+ static loadLastSquads(t,i){
+ const s=`${
+ t}
+ _${
+ i}
+ `,e=this.lastSquadsByBoss.get(s);
+ if(this.isValidSquads(e))return e;
+ const e=this.attackSquadsLsKey(t,i);
+ if(e){
- return i?this.isValidSquads(i)?(this.lastSquads=i,i):(localStorage.removeItem(t),null):null}
+ if(t){
+ if(this.isValidSquads(t))return this.lastSquadsByBoss.set(s,t),t;
+ localStorage.removeItem(e)}
+ }
+ const n=this.legacySquadsLsKey();
+ if(n){
+ const t=localStorage.getItem(n);
+ if(t&&this.isValidSquads(t))return t}
+ return null}
- static saveLastSquads(t){
+ static saveLastSquads(t,i,s){
- this.lastSquads=t;
- const i=this.attackSquadsLsKey();
+ this.lastSquadsByBoss.set(`${
+ t}
+ _${
+ i}
+ `,s);
+ const e=this.attackSquadsLsKey(t,i);
- Kt(_4t,"GuildRaidPopup"),zt(_4t,"_instance"),zt(_4t,"lastSquads",null),zt(_4t,"CONTENT_TOP_Y",40);
+ Vt(mti,"GuildRaidPopup"),Kt(mti,"_instance"),Kt(mti,"lastSquadsByBoss",new Map),Kt(mti,"CONTENT_TOP_Y",40);
AladinCoinStorm 1 hunks, 122 statements
+ super(...arguments),Kt(this,"caster",null),Kt(this,"centerX",0),Kt(this,"centerY",0),Kt(this,"dirX",0),Kt(this,"dirY",0),Kt(this,"castleX",320),Kt(this,"castleY",320),Kt(this,"destX",0),Kt(this,"destY",0),Kt(this,"coins",[]),Kt(this,"stormOrbitRadius",155),Kt(this,"baseRadius",155),Kt(this,"bonusRadius",0),Kt(this,"currentRadius",155),Kt(this,"lifeTimer",0),Kt(this,"speedMult",1),Kt(this,"preLaunchTimer",t.PRE_LAUNCH_FRAMES),Kt(this,"launched",!1),Kt(this,"hitCooldowns",new Map),Kt(this,"engagedTargets",new Set),Kt(this,"absorbedSet",new Set),Kt(this,"wobblePhase",0)}
+ static getActive(){
+ return t.activeStorms}
+ static clearAll(){
+ for(const i of t.activeStorms)i.terminate();
+ t.activeStorms.length=0}
+ initializeTextureName(){
+ this.textureName="",this.sheetName=""}
+ generateSprite(){
+ }
+ initializeData(){
+ this.g=0,this.speed=0}
+ initStorm(i,s,e,n,h,r,o,a=1,c=0){
+ this.caster=i,this.centerX=s,this.centerY=e-t.ORBIT_Y_OFFSET,this.castleX=r,this.castleY=o,this.coins=h.slice(),this.preLaunchTimer=t.PRE_LAUNCH_FRAMES,this.launched=!1,this.lifeTimer=0,this.hitCooldowns.clear(),this.engagedTargets.clear(),this.absorbedSet.clear(),aK.burstHitCount=0,this.baseRadius=n-c,this.bonusRadius=c,this.stormOrbitRadius=n,this.currentRadius=n,this.speedMult=a,this.destX=this.centerX,this.destY=this.centerY,this.dirX=0,this.dirY=0,this.wobblePhase=0,this.totalDist=1,t.activeStorms.push(this),this.removed=!1}
+ registerToController(t){
+ t&&(this.battleController=t,t.addWeapon(this))}
+ execute(){
+ if(this.removed)return;
+ const i=this.caster;
+ if(!i)return void this.terminate();
+ if(!this.launched){
+ this.preLaunchTimer--;
+ let t=0,i=0;
+ for(const n of this.coins)n&&!n.removed&&(t++,n.isStormOrbiting&&i++);
+ if(0===t)return void this.terminate();
+ const s=i===t,e=this.preLaunchTimer<=0;
+ if(!s&&!e)return;
+ this.launched=!0}
+ this.lifeTimer++;
+ const s=Math.max(0,Math.min(1,this.lifeTimer/t.LIFE_DURATION));
+ if(s>=1)return void this.terminate();
+ const e=Math.max(0,1-s/t.BONUS_DECAY_END);
+ this.stormOrbitRadius=this.baseRadius+this.bonusRadius*e,this.currentRadius=this.stormOrbitRadius-(this.stormOrbitRadius-t.MIN_RADIUS)*s;
+ const n=this.centerY+t.ORBIT_Y_OFFSET;
+ for(const t of this.coins)t&&!t.removed&&t.isStormOrbiting&&(t.orbitCenterX=this.centerX,t.orbitCenterY=n,t.orbitRadius=this.currentRadius);
+ this.applyStormDamage(i),this.absorbNearbyCoins()}
+ applyStormDamage(i){
+ for(const[t,o]of this.hitCooldowns)o<=1?this.hitCooldowns.delete(t):this.hitCooldowns.set(t,o-1);
+ let s=0;
+ for(const t of this.coins)t&&!t.removed&&s++;
+ if(0===s)return;
+ const e="number"==typeof i.goldDmgMultiplier?i.goldDmgMultiplier:1,n=t.DAMAGE_PER_COIN*s*e,h=this.stormOrbitRadius,r=h*h;
+ for(const t of this.engagedTargets){
+ if(!t.isAlive||t.removed){
+ this.engagedTargets.delete(t);
+ continue}
+ const i=t.x-this.centerX,s=(t.y-this.centerY)/.6;
+ i*i+s*s>r&&this.engagedTargets.delete(t)}
+ for(const o of this.engagedTargets)o.isUntagetable||this.hitCooldowns.has(o)||(i.doDamage(o,n,!0),this.hitCooldowns.set(o,t.HIT_COOLDOWN));
+ if(this.engagedTargets.size<t.MAX_ENGAGED_TARGETS)for(const o of i.enemyList){
+ if(this.engagedTargets.size>=t.MAX_ENGAGED_TARGETS)break;
+ if(!o.isAlive||o.isUntagetable)continue;
+ if(this.engagedTargets.has(o))continue;
+ if(this.hitCooldowns.has(o))continue;
+ const s=o.x-this.centerX,e=(o.y-this.centerY)/.6;
+ s*s+e*e<=r&&(this.engagedTargets.add(o),i.doDamage(o,n,!0),this.hitCooldowns.set(o,t.HIT_COOLDOWN))}
+ }
+ absorbNearbyCoins(){
+ const i=this.stormOrbitRadius*this.stormOrbitRadius,s=this.caster&&this.caster.constructor.allCoins?this.caster.constructor.allCoins:null;
+ if(!s)return;
+ const e=this.centerY+t.ORBIT_Y_OFFSET;
+ for(const t of s){
+ if(!t||t.removed)continue;
+ if(this.absorbedSet.has(t))continue;
+ if(t.isOrbiting)continue;
+ const s=t.x-this.centerX,n=t.y-this.centerY;
+ if(s*s+n*n>i)continue;
+ const h=.1+.1*this.random.next(),r=this.random.next()<.5?-1:1;
+ t.absorbIntoStorm(this.centerX,e,this.currentRadius,h,r)&&(this.absorbedSet.add(t),this.coins.push(t))}
+ }
+ tryMerge(){
+ const i=t.activeStorms;
+ for(const s of i){
+ if(s===this||s.removed)continue;
+ if(!s.launched)continue;
+ const i=s.centerX-this.centerX,e=s.centerY-this.centerY;
+ if(i*i+e*e>t.MERGE_DIST*t.MERGE_DIST)continue;
+ const n=this.dirX*s.dirX+this.dirY*s.dirY;
+ if(!(Math.abs(n)<t.MERGE_DOT_THRESHOLD))return void this.absorbStorm(s)}
+ }
+ absorbStorm(i){
+ const s=this.coins.length||1,e=i.coins.length||1,n=s+e,h=(this.centerX*s+i.centerX*e)/n,r=(this.centerY*s+i.centerY*e)/n,o=this.dirX*i.dirX+this.dirY*i.dirY>=0?1:-1;
+ let a=this.dirX*s+i.dirX*e*o,c=this.dirY*s+i.dirY*e*o;
+ const l=Math.sqrt(a*a+c*c);
+ l>.001&&(this.dirX=a/l,this.dirY=c/l),this.centerX=h,this.centerY=r;
+ const u=this.destX-this.centerX,d=this.destY-this.centerY,f=Math.sqrt(u*u+d*d);
+ f>.001&&(this.dirX=u/f,this.dirY=d/f),this.totalDist=Math.max(200,f);
+ const p=this.centerY+t.ORBIT_Y_OFFSET,g=Vt(t=>{
+ if(!t||t.removed)return;
+ const i=t.x-this.centerX,s=(t.y-p)/.6,e=Math.sqrt(i*i+s*s);
+ e>.5&&(t.orbitAngle=Math.atan2(s,i),t.orbitRadius=e),t.orbitCenterX=this.centerX,t.orbitCenterY=p}
+ ,"rebindToNewCenter");
+ for(const t of this.coins)g(t);
+ for(const t of i.coins)t&&!t.removed&&(g(t),this.coins.push(t),this.absorbedSet.add(t));
+ for(const t of i.absorbedSet)this.absorbedSet.add(t);
+ i.terminateWithoutReleasingCoins()}
+ terminate(){
+ for(const t of this.coins)t&&!t.removed&&(t.isStormOrbiting?t.releaseFromStorm():t.inStorm=!1);
+ this.cleanup()}
+ terminateWithoutReleasingCoins(){
+ this.cleanup()}
+ cleanup(){
+ const i=t.activeStorms.indexOf(this);
+ i>=0&&t.activeStorms.splice(i,1),this.removed=!0}
+ }
+ ;
+ Vt(a2,"AladinCoinStorm"),Kt(a2,"MERGE_DOT_THRESHOLD",.7),Kt(a2,"MERGE_DIST",120),Kt(a2,"HIT_COOLDOWN",30),Kt(a2,"MAP_MIN",40),Kt(a2,"MAP_MAX",600),Kt(a2,"PRE_LAUNCH_FRAMES",180),Kt(a2,"STORM_SPEED",1),Kt(a2,"LIFE_DURATION",120),Kt(a2,"DAMAGE_PER_COIN",.15),Kt(a2,"MAX_ENGAGED_TARGETS",8),Kt(a2,"DEST_SCATTER_MIN",30),Kt(a2,"DEST_SCATTER_MAX",90),Kt(a2,"WOBBLE_FREQ",.045),Kt(a2,"WOBBLE_WEIGHT",.45),Kt(a2,"ORBIT_Y_OFFSET",-115),Kt(a2,"activeStorms",[]),Kt(a2,"BONUS_DECAY_END",.3),Kt(a2,"MIN_RADIUS",28);
+ let c2=a2;
+ const l2=class t extends tL{
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ constructor(){
+ super()}
+ showError(t,i=null,s=90){
+ let e=(null==t?void 0:t.errorMessage)??SG.getText("COMMON_77","네트워크 오류가 발생하였습니다."),n=SG.getErrorMessage(t.error);
+ n&&(e=n),i&&(e+="\n"+i),this.showMessage(e,s)}
+ }
+ ;
+ Vt(l2,"CommonToast"),Kt(l2,"instance");
+ let u2=l2;
+ const d2=class t extends Ge{
+ constructor(){
HeroIcon 5 hunks, 114 statements
- var _3=(t=>(t.GAME="GAME",t.PAYMENT="PAYMENT",t))(_3||{
+ var z2=(t=>(t[t.ROSTER=0]="ROSTER",t[t.HERO_LIST=1]="HERO_LIST",t[t.HERO_DETAIL=2]="HERO_DETAIL",t[t.BOOK=3]="BOOK",t[t.SHOP=4]="SHOP",t[t.HERO_PVP=5]="HERO_PVP",t[t.TOWER=6]="TOWER",t[t.TOWER_TEAM=7]="TOWER_TEAM",t))(z2||{
- const M3=class{
+ const q2=class extends Ge{
- zt(this,"index",-1),zt(this,"id"),zt(this,"gameId"),zt(this,"title"),zt(this,"content"),zt(this,"rewards"),zt(this,"receivedAt"),zt(this,"createdAt"),zt(this,"mailType"),zt(this,"typeArray"),zt(this,"subTypeArray"),zt(this,"amountArray"),zt(this,"gradeArray"),zt(this,"kindNumArray"),this.index=-1,this.id=-1,this.gameId="",this.title="",this.content="",this.rewards=[],this.createdAt=null,this.receivedAt=null,this.mailType="",this.typeArray=[],this.subTypeArray=[],this.amountArray=[],this.gradeArray=[],this.kindNumArray=[]}
- setData(t,i){
- t&&(this.id=Number(t.id),this.gameId=String(t.gameId),this.title=t.title,this.content=t.content,this.rewards=t.rewards,this.createdAt=t.createdAt,t.receivedAt?this.receivedAt=t.receivedAt:this.receivedAt=null,this.mailType=i,this.typeArray.length=0,this.subTypeArray.length=0,this.amountArray.length=0,this.gradeArray.length=0,this.kindNumArray.length=0)}
- get hasReward(){
- return!(!this.rewards||0==this.rewards.length)&&Object.values(this.rewards).some(t=>!!t&&("number"==typeof t?t>0:!!t))}
- get hasClaimableReward(){
- return this.hasReward&&null==this.receivedAt}
- get isDeletable(){
- return null!=this.receivedAt}
- reset(){
- this.index=-1,this.id=-1,this.gameId="",this.title="",this.content="",this.rewards.length=0,this.createdAt=null,this.receivedAt=null,this.mailType="",this.typeArray.length=0,this.subTypeArray.length=0,this.amountArray.length=0,this.gradeArray.length=0,this.kindNumArray.length=0}
- }
- ;
- Kt(M3,"MailVO");
- let E3=M3;
- const A3=class{
- static async getMailList(t=1){
- let i=await hD.getInstance().mail.list(t,this.pageSize);
- 0!=i.success?t>this.page?this.setData(i.body,!0):this.setData(i.body):lS.getInstance().dispatchCustomEvent("MailUpdate")}
- static setData(t,i=!1){
- let s,e,n,h;
- if(t.mailList){
- const r=t.mailList;
- for(0==i?(h=[...this.gameList],this.gameList.length=0):h=[],e=r.length,s=0;
- s<e;
- ++s){
- r[s].content=this.filterContent(r[s].content);
- const t=Number(r[s].id),i=h.findIndex(i=>i.id===t);
- -1===i?n=this.getMailEmptyVO():(n=h.splice(i,1)[0],n.reset()),n.setData(r[s],_3.GAME),this.gameList.push(n),this.gameMailMap[n.id]=n}
- this.addListPool(h)}
- if(t.paymentMailList){
- const r=t.paymentMailList;
- for(0==i?(h=[...this.paymentList],this.paymentList.length=0):h=[],e=r.length,s=0;
- s<e;
- ++s){
- r[s].content=this.filterContent(r[s].content);
- const t=Number(r[s].id),i=h.findIndex(i=>i.id===t);
- -1===i?n=this.getMailEmptyVO():(n=h.splice(i,1)[0],n.reset()),n.setData(r[s],_3.PAYMENT),this.paymentList.push(n),this.paymentMailMap[n.id]=n,n.index=this.paymentList.length}
- this.addListPool(h)}
- "mailTotal"in t&&(this.mailsTotal=Number(t.mailTotal)),"mailTotalPages"in t&&(this.mailTotalPages=Number(t.mailTotalPages)),"paymentTotal"in t&&(this.paymentMailsTotal=Number(t.paymentTotal)),"paymentTotalPages"in t&&(this.paymentTotalPages=Number(t.paymentTotalPages)),this.updatePage(),this.updateNeeded=!1,lS.getInstance().dispatchCustomEvent("MailUpdate"),this.log()}
- static filterContent(t){
- return t.replace(/\r\n/g,"\n")}
- static onMailDeleteAndUpdate(t){
- t==_3.PAYMENT?(this.paymentMailsTotal>0&&this.paymentMailsTotal--,this.paymentTotalPages=Math.floor((this.paymentMailsTotal-1)/this.pageSize)+1):(this.mailsTotal>0&&this.mailsTotal--,this.mailTotalPages=Math.floor((this.mailsTotal-1)/this.pageSize)+1),this.updatePage()}
- static updatePage(){
- const t=Math.max(this.gameList.length,this.paymentList.length);
- this.page=Math.floor((t-1)/this.pageSize)+1,this.page<1&&(this.page=1)}
- static log(){
- }
- static getGameMailWithId(t){
- return this.gameMailMap[t]}
- static getPaymentMailWithId(t){
- return this.paymentMailMap[t]}
- static getMailCount(t){
- return t==_3.PAYMENT?this.paymentList.length:this.gameList.length}
- static getMailTotal(t){
- return t==_3.PAYMENT?this.paymentMailsTotal:this.mailsTotal}
- static getMailTotalPage(t){
- return t==_3.PAYMENT?this.paymentTotalPages:this.mailTotalPages}
- static isAllMailLoaded(t){
- let i=0,s=0,e=0;
- return t==_3.PAYMENT?(i=this.paymentList.length,s=this.paymentMailsTotal,e=this.paymentTotalPages):(i=this.gameList.length,s=this.mailsTotal,e=this.mailTotalPages),!(Math.floor((i-1)/this.pageSize)+1<e||i<s)}
- static getPage(){
- return this.page}
- static getPageSize(){
- return this.pageSize}
- static getDisplaySize(){
- return this.displaySize}
- static setDisplaySize(t){
- t>0&&(this.displaySize=t)}
- static getMailEmptyVO(){
- if(this.mailPool.length>0){
- let t=this.mailPool.pop();
- return t?t.reset():t=new E3,t}
- return new E3}
- static addPool(t){
- t&&(t.reset(),this.mailPool.push(t))}
- static addListPool(t){
+ super(),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","Hero1"))),Kt(this,"lblLevel",new JD("Lv.1",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblEnhance",new JD("+1",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblCount",new JD("1",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_24)),Kt(this,"bg",new He(QA.getTexture("UI_Ekkorr","HeroFrame1"))),Kt(this,"cover",new He(QA.getTexture("UI_Ekkorr","HeroCover1"))),Kt(this,"mode",z2.HERO_LIST),Kt(this,"trans",new He(QA.getTexture("UI_Ekkorr","Trans0001"))),Kt(this,"_active",!1),this.addChild(this.bg),this.addChild(this.icon),this.addChild(this.cover),this.addChild(this.lblLevel),this.addChild(this.lblEnhance),this.addChild(this.lblCount),this.addChild(this.trans),this.bg.scale.x=.88,this.cover.scale.x=.88,this.icon.height=this.bg.height-4,this.icon.scale.x=this.icon.scale.y,this.icon.x=1,this.icon.y=2,this.lblLevel.textColor=16777215,this.lblLevel.x=(this.icon.width-this.lblLevel.width)/2,this.lblLevel.y=this.bg.height-this.lblLevel.height-1,this.lblCount.textColor=16777215,this.lblCount.x=this.bg.width-this.lblCount.width-38,this.lblCount.y=this.bg.height-this.lblCount.height,this.lblCount.visible=!1,this.lblEnhance.x=this.bg.width-this.lblEnhance.width-2,this.lblEnhance.y=7,this.trans.scale=1.2,this.trans.x=5,this.trans.y=7,this.trans.visible=!1}
+ setData(t){
+ this.setTextures(t.base,t.grade);
+ const i=K2.getInstance().getMaxLevel(t.grade,t.trans);
+ this.lblLevel.text=`Lv.${
+ t.level}
+ `,this.lblLevel.textColor=t.level>=i?16763904:16777215,this.lblEnhance.text=`+${
+ t.enhance}
+ `,this.lblEnhance.x=this.bg.width-this.lblEnhance.width-30,this.lblLevel.x=(this.bg.width-15-this.lblLevel.width)/2,t.trans>0?(this.trans.visible=!0,this.trans.texture=QA.getTexture("UI_Ekkorr",`Trans000${
+ t.trans}
+ `)):this.trans.visible=!1,this.mode===z2.HERO_LIST?(this.lblEnhance.visible=t.enhance>0,this.lblLevel.visible=!0,this.lblCount.visible=!1):this.mode===z2.ROSTER?(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!0):this.mode===z2.BOOK||this.mode===z2.SHOP?(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!1):this.mode===z2.HERO_PVP?(this.lblEnhance.visible=!1,this.lblLevel.visible=!0,this.lblCount.visible=!1):this.mode===z2.TOWER?(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!0,this.trans.visible=!1):this.mode===z2.TOWER_TEAM&&(this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!1,this.trans.visible=!1)}
+ setTextures(t,i){
+ t>0?(this.icon.visible=!0,this.icon.texture=QA.getTexture("UI_Ekkorr",`Hero${
+ t}
+ `)):this.icon.visible=!1,this.bg.texture=QA.getTexture("UI_Ekkorr",`HeroFrame${
+ i}
+ `),this.cover.texture=QA.getTexture("UI_Ekkorr",`HeroCover${
+ i}
+ `)}
+ setMode(t){
+ this.mode=t}
+ setNumber(t){
+ this.lblCount.text=t.toString()}
+ get active(){
+ return this._active}
+ set active(t){
+ this._active=t,t?(this.bg.tint=16777215,this.cover.tint=16777215,this.icon.tint=16777215,this.trans.tint=16777215,this.lblCount.textColor=16777215):(this.bg.tint=3355443,this.cover.tint=3355443,this.icon.tint=3355443,this.trans.tint=3355443,this.lblCount.textColor=3355443)}
+ showBackground(){
+ this.bg.visible=!0}
+ hideBackground(){
+ this.bg.visible=!1}
+ showIcon(){
+ this.icon.visible=!0}
+ hideIcon(){
+ this.icon.visible=!1}
+ showLevel(){
+ this.lblLevel.visible=!0}
+ hideLevel(){
+ this.lblLevel.visible=!1}
+ showEnhance(){
+ this.lblEnhance.visible=!0}
+ hideEnhance(){
+ this.lblEnhance.visible=!1}
+ setCountText(t){
+ this.lblCount.text=t,this.lblCount.visible=!0,this.lblCount.x=(this.bg.width-15-this.lblCount.width)/2}
+ hideTrans(){
+ this.trans.visible=!1}
+ setTransAlpha(t){
+ this.trans.alpha=t}
+ setDataWithKindNum(t,i=0){
+ if(t>0){
+ const i=wx.getInstance().getBookVO(t);
- let i;
- const s=t.length;
- for(let e=0;
- e<s;
- ++e)i=t[e],i&&(i.reset(),this.mailPool.push(i))}
- static removeGameMail(t){
- const i=this.gameList.findIndex(i=>i.id===t);
- -1!==i&&(this.gameList.splice(i,1),this.addPool(this.gameMailMap[t]),delete this.gameMailMap[t])}
- static removePaymentMail(t){
- const i=this.paymentList.findIndex(i=>i.id===t);
- -1!==i&&(this.paymentList.splice(i,1),this.addPool(this.paymentMailMap[t]),delete this.paymentMailMap[t])}
- static get hasDeletableGameMail(){
- return-1!==this.gameList.findIndex(t=>!0===t.isDeletable)}
- static get hasDeletablePaymentMail(){
- return-1!==this.paymentList.findIndex(t=>!0===t.isDeletable)}
- static get hasDeletableMail(){
- return this.hasClaimableGameReward||this.hasClaimablePaymentReward}
- static get hasClaimableReward(){
- return this.hasClaimableGameReward||this.hasClaimablePaymentReward}
- static get hasClaimableGameReward(){
- return this.checkClaimableReward(this.gameList)}
- static get hasClaimablePaymentReward(){
- return this.checkClaimableReward(this.paymentList)}
- static checkClaimableReward(t){
- const i=t.length;
- for(let s=0;
- s<i;
- ++s)if(t[s].hasClaimableReward)return!0;
- return!1}
+ this.setTextures(i.base,i.grade)}
+ else this.setTextures(0,1);
+ i>0?(this.trans.visible=!0,this.trans.texture=QA.getTexture("UI_Ekkorr",`Trans000${
+ i}
+ `)):this.trans.visible=!1,this.lblEnhance.visible=!1,this.lblLevel.visible=!1,this.lblCount.visible=!1}
- Kt(A3,"MailManager"),zt(A3,"updateNeeded",!0),zt(A3,"mailPool",[]),zt(A3,"gameList",[]),zt(A3,"paymentList",[]),zt(A3,"gameMailMap",{
- }
- ),zt(A3,"paymentMailMap",{
- }
- ),zt(A3,"mailsTotal",0),zt(A3,"mailTotalPages",0),zt(A3,"paymentMailsTotal",0),zt(A3,"paymentTotalPages",0),zt(A3,"page",1),zt(A3,"pageSize",20),zt(A3,"displaySize",8);
+ Vt(q2,"HeroIcon");
CrowKnight1 29 hunks, 97 statements
- super(),zt(this,"orbitCrows",[]),zt(this,"decayTimer",0),zt(this,"pendingExecutions",[])}
+ super(),Kt(this,"orbitCrows",[]),Kt(this,"decayTimer",0),Kt(this,"pendingExecutions",[]),Kt(this,"incomingCrows",[])}
- super.setData(i,s,e,n),this.orgAtkSpd=130,this.atkSpd=130,this.orgAtkDuration=this.atkDuration=1e4/130,this.orgAtkRange=this.atkRange=350,this.atkRange2=this.atkRange*this.atkRange,this.orgMaxHp=this.maxHp=1500,this.hp=this.maxHp,this.orgAtkDmg=this.atkDmg=12,this.cleanupOrbitCrows(),this.cleanupPendingExecutions(),this.decayTimer=0;
+ super.setData(i,s,e,n),this.orgAtkSpd=130,this.atkSpd=130,this.orgAtkDuration=this.atkDuration=1e4/130,this.orgAtkRange=this.atkRange=350,this.atkRange2=this.atkRange*this.atkRange,this.orgMaxHp=this.maxHp=1500,this.hp=this.maxHp,this.orgAtkDmg=this.atkDmg=12,this.cleanupOrbitCrows(),this.cleanupPendingExecutions(),this.cleanupIncomingCrows(),this.decayTimer=0;
- ,this.isAir=!0,this.airHeight=60,this.firePoint.set(26,-22-this.airHeight),this.startSound=KL.SFX_BATTLE_UNDEAD_GO,this.attackSound=KL.SFX_BATTLE_SWORD_ATTACK1,this.dieSound=KL.SFX_BATTLE_UNDEAD_DIE,this.hasSkill=!0,this.maxMana=500,this.normalSize=.9,this.evolSize=1}
+ ,this.isAir=!0,this.airHeight=60,this.firePoint.set(26,-2-this.airHeight),this.startSound=zL.SFX_BATTLE_UNDEAD_GO,this.attackSound=zL.SFX_BATTLE_SWORD_ATTACK1,this.dieSound=zL.SFX_BATTLE_UNDEAD_DIE,this.hasSkill=!0,this.maxMana=500,this.normalSize=.9,this.evolSize=1}
- super.execute(),this.isAlive&&(this.updateOrbitCrows(),this.updatePendingExecutions(),this.updateDecayTimer())}
+ super.execute(),this.isAlive&&(this.updateOrbitCrows(),this.updatePendingExecutions(),this.updateIncomingCrows(),this.updateDecayTimer())}
- const s=t.x-i.x,e=t.y-i.y,n=Math.sqrt(s*s+e*e);
+ const s=t.getHitCenter(),e=s.x-i.x,n=s.y-i.y,h=Math.sqrt(e*e+n*n);
- this.pendingExecutions.length>0||(this.orbitCrows.length<t.ORBIT_MAX_COUNT&&this.spawnOrbitCrow(),this.decayTimer=0)}
+ if(this.pendingExecutions.length>0)return;
+ if(this.orbitCrows.length+this.incomingCrows.length>=t.ORBIT_MAX_COUNT)return void(this.decayTimer=0);
+ const s=QA.getTextures("Game1",nj.CrowCompanion1);
+ if(!s||0===s.length)return this.spawnOrbitCrow(),void(this.decayTimer=0);
+ const e=i.x,n=i.y-10,h=new He(s[0]);
+ h.anchor.set(.5),h.scale.set(.5*t.CROW_SCALE),h.alpha=0,h.x=e,h.y=n,mB.getInstance().addChild(h),this.incomingCrows.push({
+ sprite:h,textures:s,frame:this.random.next()*s.length,startX:e,startY:n,timer:t.INCOMING_FRAMES}
+ ),this.decayTimer=0}
- s.angle+=t.ORBIT_SPEED,s.angle>2*Math.PI&&(s.angle-=2*Math.PI),s.sprite.x=this.x+Math.cos(s.angle)*t.ORBIT_RADIUS_X,s.sprite.y=this.y+t.ORBIT_HEIGHT+Math.sin(s.angle)*t.ORBIT_RADIUS_Y;
+ s.angle+=t.ORBIT_SPEED,s.angle>2*Math.PI&&(s.angle-=2*Math.PI),s.bobPhase+=s.bobSpeed;
+ const e=Math.sin(s.bobPhase)*s.bobAmp;
+ s.sprite.x=this.x+Math.cos(s.angle)*t.ORBIT_RADIUS_X,s.sprite.y=this.y+t.ORBIT_HEIGHT+Math.sin(s.angle)*t.ORBIT_RADIUS_Y+e;
- const h=e.x-i,r=e.y-s,o=Math.sqrt(h*h+r*r);
+ const h=e.getHitCenter(),r=h.x-i,o=h.y-s,a=Math.sqrt(r*r+o*o);
- const i=this.orbitCrows.length,s=i*t.ORBIT_ATKSPD_PER,e=i*t.ORBIT_ATKDMG_PER;
- this.addAttackSpeedBuff(RZ.CrowKnight1_ORBIT_ATKSPD,s,t.ORBIT_BUFF_DUR,!0),this.addAttackDamageBuff(RZ.CrowKnight1_ORBIT_ATKDMG,e,t.ORBIT_BUFF_DUR)}
+ }
+ makeBobParams(){
+ return{
+ bobPhase:this.random.next()*Math.PI*2,bobSpeed:.1+.06*this.random.next(),bobAmp:2+2*this.random.next()}
+ }
- sprite:s,textures:i,frame:this.random.next()*i.length,angle:e,fireTimer:t.ORBIT_FIRE_INTERVAL+Math.floor(30*this.random.next())}
+ sprite:s,textures:i,frame:this.random.next()*i.length,angle:e,fireTimer:t.ORBIT_FIRE_INTERVAL+Math.floor(30*this.random.next()),...this.makeBobParams()}
+ updateIncomingCrows(){
+ for(let i=this.incomingCrows.length-1;
+ i>=0;
+ i--){
+ const s=this.incomingCrows[i];
+ s.timer--;
+ const e=1-s.timer/t.INCOMING_FRAMES,n=1-Math.pow(1-e,2),h=s.startX-this.x,r=s.startY-(this.y+t.ORBIT_HEIGHT),o=Math.atan2(r/t.ORBIT_RADIUS_Y,h/t.ORBIT_RADIUS_X),a=this.x+Math.cos(o)*t.ORBIT_RADIUS_X,c=this.y+t.ORBIT_HEIGHT+Math.sin(o)*t.ORBIT_RADIUS_Y;
+ s.sprite.x=s.startX+(a-s.startX)*n;
+ const l=t.INCOMING_ARC_HEIGHT*Math.sin(n*Math.PI);
+ s.sprite.y=s.startY+(c-s.startY)*n+l,s.sprite.alpha=Math.min(1,3*e);
+ const u=.5+.5*n,d=a-s.startX>=0?1:-1;
+ s.sprite.scale.x=d*t.CROW_SCALE*u,s.sprite.scale.y=t.CROW_SCALE*u,s.frame+=t.ORBIT_ANIM_SPEED,s.frame>=s.textures.length&&(s.frame=0);
+ const f=Math.floor(s.frame);
+ f<s.textures.length&&(s.sprite.texture=s.textures[f]),s.timer<=0&&(this.incomingCrows.splice(i,1),this.orbitCrows.length<t.ORBIT_MAX_COUNT?(s.sprite.scale.set(t.CROW_SCALE),s.sprite.alpha=1,this.orbitCrows.push({
+ sprite:s.sprite,textures:s.textures,frame:s.frame,angle:o,fireTimer:t.ORBIT_FIRE_INTERVAL+Math.floor(30*this.random.next()),...this.makeBobParams()}
+ ),this.refreshOrbitBuff()):s.sprite.parent&&s.sprite.parent.removeChild(s.sprite))}
+ }
+ cleanupIncomingCrows(){
+ for(const t of this.incomingCrows)t.sprite.parent&&t.sprite.parent.removeChild(t.sprite);
+ this.incomingCrows.length=0}
- const n=2*e.length;
+ const n=2*e.length,h=[],r=[];
+ for(let t=0;
+ t<this.orbitCrows.length;
+ t++)h.push(t),r.push(2*t);
+ for(let t=r.length-1;
+ t>0;
+ t--){
+ const i=Math.floor(this.random.next()*(t+1)),s=r[t];
+ r[t]=r[i],r[i]=s}
- let s,r;
+ let s,a,c=null;
- s=i.x,r=i.y+t.SKILL_CROW_OFFSET_Y}
+ s=i.x,a=i.y+t.SKILL_CROW_OFFSET_Y,c=i}
+ const l=h[o];
- sprite:i.sprite,textures:i.textures,frame:i.frame,state:"flying",countdown:t.SKILL_FLY_FRAMES,flyStartX:i.sprite.x,flyStartY:i.sprite.y,targetX:s,targetY:r,fireDelay:h*t.SKILL_FIRE_INTERVAL,fireOrder:h,waveIdx:0}
+ sprite:i.sprite,textures:i.textures,frame:i.frame,state:"aiming",countdown:t.AIMING_FRAMES,flyStartX:i.sprite.x,flyStartY:i.sprite.y,targetX:s,targetY:a,fireDelay:r[o],fireOrder:l,waveIdx:0,shotsFired:0,targetEnemy:c}
+ let h=i,r=s,o=1/0,a=null;
+ for(const t of this.enemyList){
+ if(!t.isAlive||t.isUntagetable)continue;
+ const e=t.getHitCenter(),n=e.x-i,h=e.y-s,r=n*n+h*h;
+ r<6400&&r<o&&(o=r,a=t)}
+ if(a){
+ const t=a.getHitCenter();
+ h=t.x,r=t.y}
- if(n<i.textures.length&&(i.sprite.texture=i.textures[n]),i.countdown--,"flying"===i.state){
+ if(n<i.textures.length&&(i.sprite.texture=i.textures[n]),i.countdown--,i.targetEnemy&&i.targetEnemy.isAlive&&!i.targetEnemy.removed&&("aiming"===i.state||"flying"===i.state||"firing"===i.state&&0===i.shotsFired)&&(i.targetX=i.targetEnemy.x,i.targetY=i.targetEnemy.y+t.SKILL_CROW_OFFSET_Y),"aiming"===i.state){
+ const e=.05*i.flyStartX,n=Math.sin(s*t.SKILL_HOVER_SPEED+e)*t.SKILL_HOVER_AMP*.5;
+ i.sprite.x=i.flyStartX,i.sprite.y=i.flyStartY+n;
+ const h=i.targetX>=i.flyStartX?1:-1,r=1-i.countdown/t.AIMING_FRAMES,o=1+Math.sin(r*Math.PI)*t.AIMING_PULSE_AMP;
+ i.sprite.scale.x=h*t.CROW_SCALE*o,i.sprite.scale.y=t.CROW_SCALE*o,i.sprite.alpha=1,i.countdown<=0&&(i.state="flying",i.countdown=t.SKILL_FLY_FRAMES,i.sprite.scale.x=h*t.CROW_SCALE,i.sprite.scale.y=t.CROW_SCALE)}
+ else if("flying"===i.state){
- i.sprite.scale.x=h*t.CROW_SCALE,i.sprite.scale.y=t.CROW_SCALE,i.sprite.alpha=1,i.countdown<=0&&(i.sprite.x=i.targetX,i.sprite.y=i.targetY,i.state="firing",i.countdown=i.fireDelay)}
+ i.sprite.scale.x=h*t.CROW_SCALE,i.sprite.scale.y=t.CROW_SCALE,i.sprite.alpha=1,i.countdown<=0&&(i.sprite.x=i.targetX,i.sprite.y=i.targetY,i.state="firing",i.countdown=i.fireDelay,i.shotsFired=0)}
+ i.sprite.x=i.targetX;
- const e=i.sprite.x,n=i.targetY-t.SKILL_CROW_OFFSET_Y;
- this.fireSkillBullet(e,n),KL.getInstance().playSFX(this.attackSound);
+ const e=i.sprite.x,n=i.sprite.y;
+ if(this.fireSkillBullet(e,n),zL.getInstance().playSFX(this.attackSound),i.shotsFired++,i.shotsFired<t.SHOTS_PER_CROW){
+ const s=t.SHOT_INTERVAL_MAX-t.SHOT_INTERVAL_MIN;
+ i.countdown=t.SHOT_INTERVAL_MIN+Math.floor(this.random.next()*(s+1))}
+ else{
+ }
- i.sprite.scale.x+=.25*(s-i.sprite.scale.x),i.sprite.scale.y+=.25*(t.CROW_SCALE-i.sprite.scale.y),i.countdown<=0&&(i.state="waiting",i.sprite.alpha=1)}
+ i.sprite.scale.x+=.25*(s-i.sprite.scale.x),i.sprite.scale.y+=.25*(t.CROW_SCALE-i.sprite.scale.y),i.countdown<=0&&(i.state="waiting",i.sprite.alpha=1,i.countdown=0===i.waveIdx?t.HOLD_BETWEEN_WAVES:t.HOLD_BEFORE_RETURN)}
- i.sprite.y=i.targetY+n}
+ i.sprite.y=i.targetY+n,i.countdown>0&&i.countdown--}
- sprite:i.sprite,textures:i.textures,frame:i.frame,angle:s,fireTimer:t.ORBIT_FIRE_INTERVAL+Math.floor(30*this.random.next())}
+ sprite:i.sprite,textures:i.textures,frame:i.frame,angle:s,fireTimer:t.ORBIT_FIRE_INTERVAL+Math.floor(30*this.random.next()),...this.makeBobParams()}
- if(this.pendingExecutions.length>0&&this.pendingExecutions.every(t=>"waiting"===t.state))if(0===this.pendingExecutions[0].waveIdx)for(const e of this.pendingExecutions){
+ if(this.pendingExecutions.length>0&&this.pendingExecutions.every(t=>"waiting"===t.state&&t.countdown<=0))if(0===this.pendingExecutions[0].waveIdx){
+ const i=this.pendingExecutions.length,s=[];
+ for(let t=0;
+ t<i;
+ t++)s.push(2*t);
+ for(let t=s.length-1;
+ t>0;
+ t--){
+ const i=Math.floor(this.random.next()*(t+1)),e=s[t];
+ s[t]=s[i],s[i]=e}
+ let e=0;
+ for(const n of this.pendingExecutions){
- e.targetX=this.x+Math.cos(i)*s,e.targetY=this.y+Math.sin(i)*s*.7,e.fireDelay=e.fireOrder*t.SKILL_FIRE_INTERVAL,e.sprite.alpha=1}
+ n.targetX=this.x+Math.cos(i)*h,n.targetY=this.y+Math.sin(i)*h*.7,n.fireDelay=s[e++],n.sprite.alpha=1,n.targetEnemy=null}
+ }
- null==(t=super.onDie)||t.call(this),this.cleanupOrbitCrows(),this.cleanupPendingExecutions()}
+ null==(t=super.onDie)||t.call(this),this.cleanupOrbitCrows(),this.cleanupPendingExecutions(),this.cleanupIncomingCrows()}
- Kt(Q5,"CrowKnight1"),zt(Q5,"ORBIT_RADIUS_X",70),zt(Q5,"ORBIT_RADIUS_Y",25),zt(Q5,"ORBIT_HEIGHT",-80),zt(Q5,"ORBIT_SPEED",.045),zt(Q5,"ORBIT_BASE_COUNT",0),zt(Q5,"ORBIT_MAX_COUNT",12),zt(Q5,"ORBIT_ATKSPD_PER",.06),zt(Q5,"ORBIT_ATKDMG_PER",.04),zt(Q5,"ORBIT_BUFF_DUR",9999),zt(Q5,"ORBIT_FIRE_INTERVAL",150),zt(Q5,"ORBIT_FIRE_RANGE",220),zt(Q5,"ORBIT_FIRE_DMG",.4),zt(Q5,"ORBIT_ANIM_SPEED",.25),zt(Q5,"ORBIT_DECAY_FRAMES",300),zt(Q5,"CROW_SCALE",.6),zt(Q5,"SKILL_TARGET_MAX",12),zt(Q5,"SKILL_TARGET_RANGE",400),zt(Q5,"SKILL_MIN_CROWS",6),zt(Q5,"SKILL_FLY_FRAMES",20),zt(Q5,"SKILL_FIRE_INTERVAL",4),zt(Q5,"SKILL_DMG",3.5),zt(Q5,"SKILL_CROW_OFFSET_Y",-36),zt(Q5,"SKILL_BULLET_SPEED",14),zt(Q5,"SKILL_FLY_ARC_HEIGHT",-30),zt(Q5,"SKILL_HOVER_AMP",3),zt(Q5,"SKILL_HOVER_SPEED",.15),zt(Q5,"SKILL_FIRE_PULSE",1.35);
+ Vt(_2,"CrowKnight1"),Kt(_2,"ORBIT_RADIUS_X",70),Kt(_2,"ORBIT_RADIUS_Y",25),Kt(_2,"ORBIT_HEIGHT",-80),Kt(_2,"ORBIT_SPEED",.045),Kt(_2,"ORBIT_BASE_COUNT",0),Kt(_2,"ORBIT_MAX_COUNT",12),Kt(_2,"ORBIT_FIRE_INTERVAL",270),Kt(_2,"ORBIT_FIRE_RANGE",220),Kt(_2,"ORBIT_FIRE_DMG",.4),Kt(_2,"ORBIT_ANIM_SPEED",.25),Kt(_2,"ORBIT_DECAY_FRAMES",300),Kt(_2,"CROW_SCALE",.7),Kt(_2,"SKILL_TARGET_MAX",12),Kt(_2,"SKILL_TARGET_RANGE",400),Kt(_2,"SKILL_MIN_CROWS",6),Kt(_2,"SKILL_FLY_FRAMES",20),Kt(_2,"SKILL_DMG",3.5),Kt(_2,"SKILL_CROW_OFFSET_Y",-36),Kt(_2,"SKILL_BULLET_SPEED",14),Kt(_2,"INCOMING_FRAMES",35),Kt(_2,"INCOMING_ARC_HEIGHT",-25),Kt(_2,"AIMING_FRAMES",18),Kt(_2,"AIMING_PULSE_AMP",.25),Kt(_2,"SKILL_FLY_ARC_HEIGHT",-30),Kt(_2,"SKILL_HOVER_AMP",3),Kt(_2,"SKILL_HOVER_SPEED",.15),Kt(_2,"SKILL_FIRE_PULSE",1.35),Kt(_2,"SHOTS_PER_CROW",2),Kt(_2,"SHOT_INTERVAL_MIN",3),Kt(_2,"SHOT_INTERVAL_MAX",11),Kt(_2,"HOLD_BETWEEN_WAVES",45),Kt(_2,"HOLD_BEFORE_RETURN",35);
BaseUnit 28 hunks, 93 statements
- ),zt(this,"startSound",""),zt(this,"attackSound",""),zt(this,"skillSound",""),zt(this,"dieSound",""),zt(this,"weaponClass",wJ.NormalArrow),zt(this,"initDelay",0),zt(this,"firePoint",new mi(10,-20)),zt(this,"_tmpPoint",new mi(0,0)),zt(this,"container",new Be),zt(this,"hasTextEffect",!0),zt(this,"baseMaxHp",100),zt(this,"baseAtkDmg",7),zt(this,"baseDef",1),zt(this,"baseMoveSpd",1),zt(this,"baseAtkDuration",30),zt(this,"baseAtkRange",15),zt(this,"baseDetectRange",500),zt(this,"patrolPoint",new mi(0,0)),zt(this,"patrolRadius",0),zt(this,"isPatrolMode",!1),zt(this,"idleLookTimer",0),zt(this,"idleLookInterval",0),zt(this,"numBlock",2),zt(this,"isCastle",!1),zt(this,"flowField",null),zt(this,"losBlockedFrames",0),zt(this,"forceFlowFrames",0),zt(this,"windowStuckStreak",0),zt(this,"stuckFrames",0),zt(this,"lastStuckX",0),zt(this,"lastStuckY",0),zt(this,"lastDistToTarget2",1/0),zt(this,"windowDistOrigin2",1/0),zt(this,"windowFrames",0),zt(this,"pathCooldown",0),zt(this,"pathWaypoints",null),zt(this,"pathIndex",0),zt(this,"pathTargetX",0),zt(this,"pathTargetY",0),zt(this,"blockedEnemies",new Set),zt(this,"surroundedFrames",0),zt(this,"cachedTargetDistance",0),zt(this,"cacheFrame",0),zt(this,"cachedTarget",null),zt(this,"stateChangeTimer",0),zt(this,"minStateFrames",4),zt(this,"hysteresisMargin",5),zt(this,"aggressiveRetarget",!1),zt(this,"retargetCheckTimer",0),zt(this,"rallyMoveTimer",0),zt(this,"needsReposition",!1),zt(this,"repositionX",0),zt(this,"repositionY",0),zt(this,"repositionPatrolRadius",0),zt(this,"repositionTimeout",0),zt(this,"maxRepositionWaitFrames",600),zt(this,"commandPhase","none"),zt(this,"commandX",0),zt(this,"commandY",0),zt(this,"commandWaitTimer",0),zt(this,"commandSpeedMult",1),zt(this,"commandWaitFrames",60),zt(this,"commandFlowField",null),zt(this,"commandFrames",0),zt(this,"commandStuckFrames",0),zt(this,"showTombstone",!1),zt(this,"imgTombStone",null),zt(this,"txtReviveTimer",null),zt(this,"xDeath",0),zt(this,"yDeath",0),zt(this,"healthBar",new c0),zt(this,"healthBarVisible",!0),zt(this,"kindNum",0),zt(this,"grade",1),zt(this,"id",99999),zt(this,"dotDamager",new f0),zt(this,"dotHeal",new w0),zt(this,"activeDamageBuff",new b0),zt(this,"activeDefenseBuff",new b0),zt(this,"activeMaxHealthBuff",new b0),zt(this,"activeAttackSpeedBuff",new b0),zt(this,"activeMoveSpeedBuff",new b0),zt(this,"activeCritMultiplierBuff",new b0),zt(this,"activeCritChanceBuff",new b0),zt(this,"activeRangeEavdeBuff",new b0),zt(this,"orgMaxHp",100),zt(this,"orgAtkDmg",7),zt(this,"orgDef",1),zt(this,"orgPhyDef",1),zt(this,"orgMagDef",1),zt(this,"orgMoveSpd",1),zt(this,"orgAtkSpd",1),zt(this,"orgCritDmg",1.5),zt(this,"orgCritChance",.1),zt(this,"orgAtkRange",15),zt(this,"orgAtkDuration",30),zt(this,"orgRangeEvadeChange",0),zt(this,"raidIncomingDamageMult",1),zt(this,"ground",0),zt(this,"reviveAirProgress",1),zt(this,"shadow"),zt(this,"shadowSize",1),zt(this,"hasSkill",!1),zt(this,"maxMana",500),zt(this,"mana",0),zt(this,"_hpDroppedBelow60",!1),zt(this,"_hpDroppedBelow40",!1),zt(this,"_hpDroppedBelow20",!1),zt(this,"effectList",[]),zt(this,"battleController",null),zt(this,"isSummoned",!1),zt(this,"summonDuration",0),zt(this,"summonTimer",0),zt(this,"summoner",null),zt(this,"summonerGeneration",0),zt(this,"summonLeashRange",0),zt(this,"generation",0),zt(this,"weight",1),zt(this,"bossType",0),zt(this,"normalSize",1.05),zt(this,"evolSize",1.1),zt(this,"gameStarted",!1),zt(this,"level",1),zt(this,"gold",0),zt(this,"enhance",0),zt(this,"hasDroppedGold",!1),zt(this,"goldDropFrame",2),zt(this,"onGoldDrop",null),zt(this,"sex",rx.MALE),zt(this,"name",""),zt(this,"base",0),zt(this,"lastPercentHp",1),zt(this,"lastPercentAtkDmg",1),zt(this,"lastPercentDef",1),zt(this,"incFrame",1),zt(this,"dieIncFrame",.3),zt(this,"loop",!0),zt(this,"startFrame",0),zt(this,"endFrame",0),zt(this,"attackCoolDown",0),zt(this,"recoveryCoolDown",0),zt(this,"recoveryInterval",300),zt(this,"stateHandlers",{
+ ),Kt(this,"startSound",""),Kt(this,"attackSound",""),Kt(this,"skillSound",""),Kt(this,"dieSound",""),Kt(this,"weaponClass",nj.NormalArrow),Kt(this,"initDelay",0),Kt(this,"firePoint",new gi(10,-20)),Kt(this,"_tmpPoint",new gi(0,0)),Kt(this,"container",new Ge),Kt(this,"hasTextEffect",!0),Kt(this,"baseMaxHp",100),Kt(this,"baseAtkDmg",7),Kt(this,"baseDef",1),Kt(this,"baseMoveSpd",1),Kt(this,"baseAtkDuration",30),Kt(this,"baseAtkRange",15),Kt(this,"baseDetectRange",500),Kt(this,"patrolPoint",new gi(0,0)),Kt(this,"patrolRadius",0),Kt(this,"isPatrolMode",!1),Kt(this,"idleLookTimer",0),Kt(this,"idleLookInterval",0),Kt(this,"numBlock",2),Kt(this,"isCastle",!1),Kt(this,"flowField",null),Kt(this,"losBlockedFrames",0),Kt(this,"forceFlowFrames",0),Kt(this,"windowStuckStreak",0),Kt(this,"stuckFrames",0),Kt(this,"lastStuckX",0),Kt(this,"lastStuckY",0),Kt(this,"lastDistToTarget2",1/0),Kt(this,"windowDistOrigin2",1/0),Kt(this,"windowFrames",0),Kt(this,"pathCooldown",0),Kt(this,"pathWaypoints",null),Kt(this,"pathIndex",0),Kt(this,"pathTargetX",0),Kt(this,"pathTargetY",0),Kt(this,"blockedEnemies",new Set),Kt(this,"surroundedFrames",0),Kt(this,"cachedTargetDistance",0),Kt(this,"cacheFrame",0),Kt(this,"cachedTarget",null),Kt(this,"stateChangeTimer",0),Kt(this,"minStateFrames",4),Kt(this,"hysteresisMargin",5),Kt(this,"aggressiveRetarget",!1),Kt(this,"retargetCheckTimer",0),Kt(this,"rallyMoveTimer",0),Kt(this,"farFromCastleFrames",0),Kt(this,"needsReposition",!1),Kt(this,"repositionX",0),Kt(this,"repositionY",0),Kt(this,"repositionPatrolRadius",0),Kt(this,"repositionTimeout",0),Kt(this,"maxRepositionWaitFrames",600),Kt(this,"commandPhase","none"),Kt(this,"commandX",0),Kt(this,"commandY",0),Kt(this,"commandWaitTimer",0),Kt(this,"commandSpeedMult",1),Kt(this,"commandWaitFrames",60),Kt(this,"commandFlowField",null),Kt(this,"commandFrames",0),Kt(this,"commandStuckFrames",0),Kt(this,"showTombstone",!1),Kt(this,"imgTombStone",null),Kt(this,"txtReviveTimer",null),Kt(this,"xDeath",0),Kt(this,"yDeath",0),Kt(this,"healthBar",new CQ),Kt(this,"healthBarVisible",!0),Kt(this,"kindNum",0),Kt(this,"grade",1),Kt(this,"id",99999),Kt(this,"dotDamager",new xQ),Kt(this,"dotHeal",new DQ),Kt(this,"activeDamageBuff",new GQ),Kt(this,"activeDefenseBuff",new GQ),Kt(this,"activeMaxHealthBuff",new GQ),Kt(this,"activeAttackSpeedBuff",new GQ),Kt(this,"activeMoveSpeedBuff",new GQ),Kt(this,"activeCritMultiplierBuff",new GQ),Kt(this,"activeCritChanceBuff",new GQ),Kt(this,"activeRangeEavdeBuff",new GQ),Kt(this,"orgMaxHp",100),Kt(this,"orgAtkDmg",7),Kt(this,"orgDef",1),Kt(this,"orgPhyDef",1),Kt(this,"orgMagDef",1),Kt(this,"orgMoveSpd",1),Kt(this,"orgAtkSpd",1),Kt(this,"orgCritDmg",1.5),Kt(this,"orgCritChance",.1),Kt(this,"orgAtkRange",15),Kt(this,"orgAtkDuration",30),Kt(this,"orgRangeEvadeChange",0),Kt(this,"raidIncomingDamageMult",1),Kt(this,"raidPassiveIncomingMult",1),Kt(this,"ground",0),Kt(this,"reviveAirProgress",1),Kt(this,"shadow"),Kt(this,"shadowSize",1),Kt(this,"hasSkill",!1),Kt(this,"maxMana",500),Kt(this,"mana",0),Kt(this,"_hpDroppedBelow60",!1),Kt(this,"_hpDroppedBelow40",!1),Kt(this,"_hpDroppedBelow20",!1),Kt(this,"effectList",[]),Kt(this,"battleController",null),Kt(this,"isSummoned",!1),Kt(this,"summonDuration",0),Kt(this,"summonTimer",0),Kt(this,"summoner",null),Kt(this,"summonerGeneration",0),Kt(this,"summonLeashRange",0),Kt(this,"generation",0),Kt(this,"weight",1),Kt(this,"bossType",0),Kt(this,"normalSize",1.05),Kt(this,"evolSize",1.1),Kt(this,"gameStarted",!1),Kt(this,"level",1),Kt(this,"gold",0),Kt(this,"enhance",0),Kt(this,"hasDroppedGold",!1),Kt(this,"goldDropFrame",2),Kt(this,"onGoldDrop",null),Kt(this,"sex",hx.MALE),Kt(this,"name",""),Kt(this,"base",0),Kt(this,"lastPercentHp",1),Kt(this,"lastPercentAtkDmg",1),Kt(this,"lastPercentDef",1),Kt(this,"incFrame",1),Kt(this,"dieIncFrame",.3),Kt(this,"loop",!0),Kt(this,"startFrame",0),Kt(this,"endFrame",0),Kt(this,"attackCoolDown",0),Kt(this,"recoveryCoolDown",0),Kt(this,"recoveryInterval",300),Kt(this,"stateHandlers",{
- ),zt(this,"numHitted",0),zt(this,"numStun",0),zt(this,"numFreeze",0),zt(this,"numSlow",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,"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,"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"}
+ ),Kt(this,"numHitted",0),Kt(this,"numStun",0),Kt(this,"numFreeze",0),Kt(this,"numSlow",0),Kt(this,"numBurn",0),Kt(this,"numPoison",0),Kt(this,"numBleed",0),Kt(this,"numCurse",0),Kt(this,"numSilence",0),Kt(this,"numKnockBack",0),Kt(this,"numPowerShield",0),Kt(this,"numMagicalShield",0),Kt(this,"numPhysicalShield",0),Kt(this,"numTransparent",0),Kt(this,"knockBackVx",0),Kt(this,"knockBackVy",0),Kt(this,"numPriestShield",0),Kt(this,"priestShieldHits",0),Kt(this,"numBlow",0),Kt(this,"blowVx",0),Kt(this,"blowVy",0),Kt(this,"blowVh",0),Kt(this,"blowGravity",.3),Kt(this,"blowHeight",0),Kt(this,"numBinding",0),Kt(this,"numShock",0),Kt(this,"knockImmune",!1),Kt(this,"blowImmune",!1),Kt(this,"stunImmune",!1),Kt(this,"freezeImmune",!1),Kt(this,"poisonImmune",!1),Kt(this,"stunResistPct",0),Kt(this,"knockResistPct",0),Kt(this,"blowResistPct",0),Kt(this,"freezeResistPct",0),Kt(this,"currentSize",1.05),Kt(this,"_baseSize",0),Kt(this,"_baseHitHeight",0),Kt(this,"_baseHitWidth",0),Kt(this,"_baseRadius",0),Kt(this,"sizeScale",1),Kt(this,"direction",1),Kt(this,"hideHealthBarTimer",0),Kt(this,"maxRevive",0),Kt(this,"numRevive",0),Kt(this,"reviveCount",0),Kt(this,"reviveInterval",40),Kt(this,"immediateReviveDelay",60),Kt(this,"removed",!1),Kt(this,"stayAfterDeath",!1),Kt(this,"reviveHealthPercent",.6),Kt(this,"numShot",1),Kt(this,"numBounce",0),Kt(this,"multiShotDelay",0),Kt(this,"_poolReturned",!1),Kt(this,"targetAlpha",1),Kt(this,"t",0),Kt(this,"evolEffect",null),Kt(this,"evolStar",null),Kt(this,"numLove",0),Kt(this,"numLoveShield",0),Kt(this,"__airHeight",0),Kt(this,"_airHeight",0),Kt(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"}
+ var t;
- for(const t of this.effectList)t.remove();
+ for(let i=this.effectList.length-1;
+ i>=0;
+ i--)null==(t=this.effectList[i])||t.remove();
- 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.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.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.evolStage>=1?(this.showEvolEffect(),this.setSize(this.evolSize)):this.setSize(this.normalSize),this.mana=0,this.raidIncomingDamageMult=1,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.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.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.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.raidIncomingDamageMult=1,this.raidPassiveIncomingMult=1,this.currentFrame=0,this.frame=0,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){
+ clampToKnockbackBounds(){
+ const i=t.knockbackBounds;
+ i&&(this.x<i.minX?this.x=i.minX:this.x>i.maxX&&(this.x=i.maxX),this.y<i.minY?this.y=i.minY:this.y>i.maxY&&(this.y=i.maxY))}
- if(this.numKnockBack>0&&this.numBinding<0)if(!_0.enabled||this.isAir)this.x+=this.knockBackVx,this.y+=this.knockBackVy;
+ if(this.numKnockBack>0&&this.numBinding<0){
+ if(!UQ.enabled||this.isAir)this.x+=this.knockBackVx,this.y+=this.knockBackVy;
- if(this.numBlow>0&&this.numBinding<0)if(this.blowVh+=this.blowGravity,this.blowHeight-=this.blowVh,this.x+=this.blowVx,this.y+=this.blowVy,this.blowHeight<=0){
+ this.clampToKnockbackBounds()}
+ if(this.numBlow>0&&this.numBinding<0)if(this.blowVh+=this.blowGravity,this.blowHeight-=this.blowVh,this.x+=this.blowVx,this.y+=this.blowVy,this.clampToKnockbackBounds(),this.blowHeight<=0){
- this.blowHeight=0,this.numBlow=0,this.blowVx=0,this.blowVy=0,this.blowVh=0,super.y=this.ground,this.numStun>0&&(this.tx=this.x,this.ty=this.y,this.pathWaypoints=null,this.pathIndex=0,this.pathCooldown=0,this.stuckFrames=0,this.lastDistToTarget2=1/0),this.sp&&(this.sp.rotation=0),this.shadow&&(this.shadow.visible=!1)}
+ this.blowHeight=0,this.numBlow=0,this.blowVx=0,this.blowVy=0,this.blowVh=0,super.y=this.ground,this.numStun<=0&&!this.stunImmune&&t.BLOW_RECOVERY_STAGGER>0&&(this.numStun=t.BLOW_RECOVERY_STAGGER),this.numStun>0&&(this.tx=this.x,this.ty=this.y,this.pathWaypoints=null,this.pathIndex=0,this.pathCooldown=0,this.stuckFrames=0,this.lastDistToTarget2=1/0),this.sp&&(this.sp.rotation=0),this.shadow&&(this.shadow.visible=!1)}
+ forceRelocate(t,i){
+ this.target&&this.target.removeBlockedEnemy(this),this.clearBlockedEnemies(),this.target=null,this.x=t,this.y=i,this.pathWaypoints=null,this.pathCooldown=0,this.stuckFrames=0,this.lastStuckX=t,this.lastStuckY=i,this.lastDistToTarget2=1/0,this.windowFrames=0,this.windowDistOrigin2=1/0,this.resetToIdle()}
- 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.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){
- for(const t of this.effectList)t.remove();
+ var t;
+ 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){
+ for(let i=this.effectList.length-1;
+ i>=0;
+ i--)null==(t=this.effectList[i])||t.remove();
- if(this.random.chance(h)&&i.hasTextEffect)return this.showTextEffect("BlockEffect",i.x,i.y-i.hitHeight-10),!1;
- if(this.random.chance(r)&&i.hasTextEffect)return this.showTextEffect("EvadeEffect",i.x,i.y-i.hitHeight-10),!1;
+ if(this.random.chance(h)&&i.hasTextEffect){
+ const t=i.getTextEffectPoint(this.x,this.y);
+ return this.showTextEffect("BlockEffect",t.x,t.y),!1}
+ if(this.random.chance(r)&&i.hasTextEffect){
+ const t=i.getTextEffectPoint(this.x,this.y);
+ return this.showTextEffect("EvadeEffect",t.x,t.y),!1}
- if(l&&(c*=l[i.tribe]??1),this.random.chance(this.critChance)&&i.hasTextEffect&&(this.showTextEffect("CriticalEffect",i.x,i.y-i.hitHeight-10),c*=this.critDmg),1!==i.raidIncomingDamageMult&&(c*=Math.max(0,i.raidIncomingDamageMult)),i.numPriestShield>0&&i.priestShieldHits>0)return i.priestShieldHits--,i.priestShieldHits<=0&&(i.numPriestShield=0),!1;
+ if(l&&(c*=l[i.tribe]??1),this.random.chance(this.critChance)&&i.hasTextEffect){
+ const t=i.getTextEffectPoint(this.x,this.y);
+ this.showTextEffect(MQ,t.x,t.y),c*=this.critDmg}
+ if(t.raidDamageMultHook&&(c*=t.raidDamageMultHook(this,i)),1!==i.raidIncomingDamageMult&&(c*=Math.max(0,i.raidIncomingDamageMult)),i.numPriestShield>0&&i.priestShieldHits>0)return i.priestShieldHits--,i.priestShieldHits<=0&&(i.numPriestShield=0),!1;
- if(i.health-=c,u&&!i.isAlive&&this.onKillEnemy(i),i.onHitted(),this.bossType>0&&i.isAlive&&!i.isImmovable&&!i.knockImmune){
+ if(i.health-=c,u&&!i.isAlive&&this.onKillEnemy(i),i.onHitted(),t.raidDamageHook&&t.raidDamageHook(this,i,c),this.bossType>0&&i.isAlive&&!i.isImmovable&&!i.knockImmune){
+ getTextEffectPoint(t,i){
+ return{
+ x:this.x,y:this.y-this.hitHeight-10}
+ }
- const e=1-.2*(this.weight-1);
- this.numKnockBack=Math.round(s*e),this.knockBackVx=t*e,this.knockBackVy=i*e}
+ let e=1-.2*(this.weight-1);
+ e*=1-this.knockResistPct/100,e<=0||(this.numKnockBack=Math.round(s*e),this.knockBackVx=t*e,this.knockBackVy=i*e)}
+ windPush(t,i,s){
+ if(this.knockImmune)return;
+ let e=1-.2*(this.weight-1);
+ if(e*=1-this.knockResistPct/100,e<=0)return;
+ const n=t*e,h=i*e;
+ this.numKnockBack>0&&this.knockBackVx*this.knockBackVx+this.knockBackVy*this.knockBackVy>n*n+h*h||(this.numKnockBack=Math.round(s*e),this.knockBackVx=n,this.knockBackVy=h)}
- const e=1-.2*(this.weight-1);
- this.numBlow=1,this.blowVx=t*e,this.blowVy=i*e,this.blowVh=s*e,this.blowHeight=0}
+ let e=1-.2*(this.weight-1);
+ e*=1-this.blowResistPct/100,e<=0||(this.numBlow=1,this.blowVx=t*e,this.blowVy=i*e,this.blowVh=s*e,this.blowHeight=0)}
- for(const t of this.effectList)t.remove();
+ var t;
+ for(let i=this.effectList.length-1;
+ i>=0;
+ i--)null==(t=this.effectList[i])||t.remove();
+ getAimOffsetY(t){
+ return-this.hitHeight*(.1+.4*t)}
+ getAttackDamageBuffRemain(t){
+ return this.activeDamageBuff.getBuffRemain(t)}
+ getDefenseBuffRemain(t){
+ return this.activeDefenseBuff.getBuffRemain(t)}
+ getAttackSpeedBuffRemain(t){
+ return this.activeAttackSpeedBuff.getBuffRemain(t)}
+ getMoveSpeedBuffRemain(t){
+ return this.activeMoveSpeedBuff.getBuffRemain(t)}
+ getAttackDamageBuffTotal(){
+ return this.activeDamageBuff.value}
+ getDefenseBuffTotal(){
+ return this.activeDefenseBuff.value}
+ getAttackSpeedBuffTotal(){
+ return this.activeAttackSpeedBuff.value}
+ getMoveSpeedBuffTotal(){
+ return this.activeMoveSpeedBuff.value}
+ getAttackDamageBuffValue(t){
+ return this.activeDamageBuff.getBuffValue(t)}
+ getDefenseBuffValue(t){
+ return this.activeDefenseBuff.getBuffValue(t)}
+ getAttackSpeedBuffValue(t){
+ return this.activeAttackSpeedBuff.getBuffValue(t)}
+ getMoveSpeedBuffValue(t){
+ return this.activeMoveSpeedBuff.getBuffValue(t)}
- stun(t){
- this.stunImmune||t<this.numStun||(this.numStun=t,this.showEffect(yq.StunEffect,t,this.tmpPoint(0,this.getBuffPosY()),!0))}
- shock(t){
+ stun(t,i){
+ this.stunImmune||this.stunResistPct>0&&(t=Math.round(t*(1-this.stunResistPct/100)))<=0||t<this.numStun||(this.numStun=t,this.showEffect(PF.StunEffect,t,this.tmpPoint(0,this.getBuffPosY()),!0))}
+ shock(t,i){
- freeze(t){
- this.freezeImmune||t<this.numFreeze||(this.numFreeze=t,1==this.weight?this.showEffect(yq.FreezeEffectS,t,this.tmpPoint(0,0),!0):2==this.weight?this.showEffect(yq.FreezeEffectM,t,this.tmpPoint(0,0),!0):this.showEffect(yq.FreezeEffectL,t,this.tmpPoint(0,0),!0))}
- curse(t){
+ freeze(t,i){
+ this.freezeImmune||this.freezeResistPct>0&&(t=Math.round(t*(1-this.freezeResistPct/100)))<=0||t<this.numFreeze||(this.numFreeze=t,1==this.weight?this.showEffect(PF.FreezeEffectS,t,this.tmpPoint(0,0),!0):2==this.weight?this.showEffect(PF.FreezeEffectM,t,this.tmpPoint(0,0),!0):this.showEffect(PF.FreezeEffectL,t,this.tmpPoint(0,0),!0))}
+ curse(t,i){
- silence(t){
- t<this.numSilence||(this.numSilence=t,this.mana=Math.max(0,this.mana-200),this.showEffect(yq.SilenceEffect,t,this.tmpPoint(0,this.getBuffPosY()),!0))}
- binding(t,i=!0){
+ silence(t,i,s=!0){
+ t<this.numSilence||(this.numSilence=t,this.mana=Math.max(0,this.mana-200),s&&this.showEffect(PF.SilenceEffect,t,this.tmpPoint(0,this.getBuffPosY()),!0))}
+ binding(t,i=!0,s){
- poison(t){
- t<this.numSlow||this.numLoveShield>0||(this.numSlow=t,this.showEffect(yq.PoisonGreenEffect,t,this.tmpPoint(0,.2*-this.hitHeight/this.sizeScale),!0))}
+ poison(t,i){
+ this.poisonImmune||t<this.numSlow||this.numLoveShield>0||(this.numSlow=t,this.showEffect(PF.PoisonGreenEffect,t,this.tmpPoint(0,.2*-this.hitHeight/this.sizeScale),!0))}
- onFlyEnter(t=!1){
- if(this.reviveAirProgress<1&&(this.reviveAirProgress+=.03,this.reviveAirProgress>1&&(this.reviveAirProgress=1)),super.y=this.ground-this.airHeight*this.reviveAirProgress+6*Math.sin(this.t),!this.shadow)return void(this.t+=.07);
+ onFlyEnter(t=!1,i=!0){
+ if(this.reviveAirProgress<1&&i&&(this.reviveAirProgress+=.03,this.reviveAirProgress>1&&(this.reviveAirProgress=1)),super.y=this.ground-this.airHeight*this.reviveAirProgress+6*Math.sin(this.t),!this.shadow)return void(i&&(this.t+=.07));
- this.shadow.scale.set(s+.06*i),this.t+=.07}
+ this.shadow.scale.set(e+.06*s),i&&(this.t+=.07)}
- fallInLove(t){
+ fallInLove(t,i){
- Kt(A0,"BaseUnit"),zt(A0,"tribeRatio",[[1,1,1,1,1,1],[1,1,1.2,1,.8,1],[1,.8,1,1.2,1,1],[1,1,.8,1,1.2,1],[1,1.2,1,.8,1,1],[1,1,1,1,1,1]]),zt(A0,"CLOAKING_ATTACK_LIMIT",30),zt(A0,"CLOAKING_DURATION",420),zt(A0,"FLOW_MAX_FRAMES",15),zt(A0,"FLOW_ENTER_FRAMES",3),zt(A0,"FLOW_LOOK_AHEAD",400),zt(A0,"FLOW_LOOK_AHEAD_STUCK",24),zt(A0,"FLOW_TARGET_ALIGN_MIN",.25),zt(A0,"CHRONIC_STUCK_STREAK",5),zt(A0,"CHRONIC_HOP_DIST",56),zt(A0,"STUCK_THRESHOLD",30),zt(A0,"PATH_REACH_DIST2",256),zt(A0,"PATH_INVALIDATE_DIST2",6400),zt(A0,"PATH_COOLDOWN_FRAMES",60),zt(A0,"STUCK_WINDOW_FRAMES",30),zt(A0,"STUCK_WINDOW_MIN_PROGRESS_SQ",100),zt(A0,"SURROUNDED_THRESHOLD",8),zt(A0,"SURROUNDED_SEARCH_CELLS",15),zt(A0,"TRAPPED_RAY_CELLS",20),zt(A0,"RETARGET_CHECK_INTERVAL",10),zt(A0,"RETARGET_SWAP_RATIO",1.5),zt(A0,"COMMAND_ARRIVE_RADIUS",80),zt(A0,"COMMAND_MAX_FRAMES",600),zt(A0,"COMMAND_STUCK_LIMIT",45),zt(A0,"HIT_ROTATION_TABLE",(()=>{
+ Vt(WQ,"BaseUnit"),Kt(WQ,"tribeRatio",[[1,1,1,1,1,1],[1,1,1.2,1,.8,1],[1,.8,1,1.2,1,1],[1,1,.8,1,1.2,1],[1,1.2,1,.8,1,1],[1,1,1,1,1,1]]),Kt(WQ,"CLOAKING_ATTACK_LIMIT",30),Kt(WQ,"CLOAKING_DURATION",420),Kt(WQ,"FLOW_MAX_FRAMES",15),Kt(WQ,"FLOW_ENTER_FRAMES",3),Kt(WQ,"FLOW_LOOK_AHEAD",400),Kt(WQ,"FLOW_LOOK_AHEAD_STUCK",24),Kt(WQ,"FLOW_TARGET_ALIGN_MIN",.25),Kt(WQ,"CHRONIC_STUCK_STREAK",5),Kt(WQ,"CHRONIC_HOP_DIST",56),Kt(WQ,"STUCK_THRESHOLD",30),Kt(WQ,"PATH_REACH_DIST2",256),Kt(WQ,"PATH_INVALIDATE_DIST2",6400),Kt(WQ,"PATH_COOLDOWN_FRAMES",60),Kt(WQ,"STUCK_WINDOW_FRAMES",30),Kt(WQ,"STUCK_WINDOW_MIN_PROGRESS_SQ",100),Kt(WQ,"SURROUNDED_THRESHOLD",8),Kt(WQ,"SURROUNDED_SEARCH_CELLS",15),Kt(WQ,"TRAPPED_RAY_CELLS",20),Kt(WQ,"RETARGET_CHECK_INTERVAL",10),Kt(WQ,"RETARGET_SWAP_RATIO",1.5),Kt(WQ,"COMMAND_ARRIVE_RADIUS",80),Kt(WQ,"COMMAND_MAX_FRAMES",600),Kt(WQ,"COMMAND_STUCK_LIMIT",45),Kt(WQ,"BLOW_RECOVERY_STAGGER",12),Kt(WQ,"knockbackBounds",null),Kt(WQ,"raidDamageHook",null),Kt(WQ,"raidDamageMultHook",null),Kt(WQ,"HIT_ROTATION_TABLE",(()=>{
DeviceWeb 1 hunks, 86 statements
+ async getId(){
+ return{
+ identifier:this.getUid()}
+ }
+ async getInfo(){
+ if("undefined"==typeof navigator||!navigator.userAgent)throw this.unavailable("Device API not available in this browser");
+ const t=navigator.userAgent,i=this.parseUa(t);
+ return{
+ model:i.model,platform:"web",operatingSystem:i.operatingSystem,osVersion:i.osVersion,manufacturer:navigator.vendor,isVirtual:!1,webViewVersion:i.browserVersion}
+ }
+ async getBatteryInfo(){
+ if("undefined"==typeof navigator||!navigator.getBattery)throw this.unavailable("Device API not available in this browser");
+ let t={
+ }
+ ;
+ try{
+ t=await navigator.getBattery()}
+ catch(Xst){
+ }
+ return{
+ batteryLevel:t.level,isCharging:t.charging}
+ }
+ async getLanguageCode(){
+ return{
+ value:navigator.language.split("-")[0].toLowerCase()}
+ }
+ async getLanguageTag(){
+ return{
+ value:navigator.language}
+ }
+ parseUa(t){
+ const i={
+ }
+ ,s=t.indexOf("(")+1;
+ let e=t.indexOf(") AppleWebKit");
+ -1!==t.indexOf(") Gecko")&&(e=t.indexOf(") Gecko"));
+ const n=t.substring(s,e);
+ if(-1!==t.indexOf("Android")){
+ const t=n.replace(";
+  wv","").split(";
+  ").pop();
+ t&&(i.model=t.split(" Build")[0]),i.osVersion=n.split(";
+  ")[1]}
+ else if(i.model=n.split(";
+  ")[0],"undefined"!=typeof navigator&&navigator.oscpu)i.osVersion=navigator.oscpu;
+ else if(-1!==t.indexOf("Windows"))i.osVersion=n;
+ else{
+ const t=n.split(";
+  ").pop();
+ if(t){
+ const s=t.replace(" like Mac OS X","").split(" ");
+ i.osVersion=s[s.length-1].replace(/_/g,".")}
+ }
+ /android/i.test(t)?i.operatingSystem="android":/iPad|iPhone|iPod/.test(t)&&!window.MSStream?i.operatingSystem="ios":/Win/.test(t)?i.operatingSystem="windows":/Mac/i.test(t)?i.operatingSystem="mac":i.operatingSystem="unknown";
+ const h=!!window.ApplePaySession,r=!!window.chrome,o=/Firefox/.test(t),a=/Edg/.test(t),c=/FxiOS/.test(t),l=/CriOS/.test(t),u=/EdgiOS/.test(t);
+ if(h||r&&!a||c||l||u){
+ let s;
+ s=c?"FxiOS":l?"CriOS":u?"EdgiOS":h?"Version":"Chrome";
+ const e=t.split(" ");
+ for(const t of e)if(t.includes(s)){
+ const s=t.split("/")[1];
+ i.browserVersion=s}
+ }
+ else if(o||a){
+ const s=t.split("").reverse().join("").split("/")[0].split("").reverse().join("");
+ i.browserVersion=s}
+ return i}
+ getUid(){
+ if("undefined"!=typeof window&&window.localStorage){
+ let t=window.localStorage.getItem("_capuid");
+ return t||(t=this.uuid4(),window.localStorage.setItem("_capuid",t),t)}
+ return this.uuid4()}
+ uuid4(){
+ return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){
+ const i=16*Math.random()|0;
+ return("x"===t?i:3&i|8).toString(16)}
+ )}
+ }
+ ;
+ Vt(wfi,"DeviceWeb");
+ let vfi=wfi;
+ const bfi=Object.freeze(Object.defineProperty({
+ __proto__:null,DeviceWeb:vfi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),_fi=class extends x$t{
BerialKing 20 hunks, 82 statements
- super(...arguments),zt(this,"att5LastShotIdx",-1),zt(this,"tornadoHookSpine",null),zt(this,"teleportPhase",null),zt(this,"teleportFrames",0),zt(this,"nextLightningFrame",t.LIGHTNING_FIRST_FRAME)}
+ super(...arguments),Kt(this,"att5LastShotIdx",-1),Kt(this,"att4DotCooldown",0),Kt(this,"att4Warning",null),Kt(this,"att1CenterX",0),Kt(this,"att1CenterY",0),Kt(this,"att1Cone",null),Kt(this,"att1ConeFrames",0),Kt(this,"tornadoHookSpine",null),Kt(this,"teleportPhase",null),Kt(this,"teleportFrames",0),Kt(this,"nextLightningFrame",t.LIGHTNING_FIRST_FRAME),Kt(this,"knockBoundsPatched",!1)}
- this.spineKey="raids/raid1/Belial",this.bossScale=1,this.spineTimeScale=.8,this.wanderEnabled=!1,this.immobile=!0,this.targetSwapChance=.2,this.syncBoneName="",this.aniIdle="idle",this.aniMove="idle",this.aniDie="die",this.aniGroggy="groggy",this.aniSkill0="att_01",this.aniSkills=["att_02","att_03","att_04","att_05"],this.eventSkill0Hit="att_01_hit",this.eventSkillHits=["att_02_hit","att_03_hit","att_04_hit","att_05_hit"],this.isAir=!1,this.hitWidth=140,this.hitHeight=210,this.weakPointBone="Head",this.numForSkillAttack=2,this.skillRatio=[.78,.58,.4,.22,.08,0],this.attackOrderList=[[0,0,1,0,2,0,0,3,0,4,0,0]],this.raidPhases=[{
+ this.spineKey="raids/raid1/Belial",this.bossScale=1,this.spineTimeScale=.8,this.wanderEnabled=!1,this.immobile=!0,this.targetSwapChance=.2,this.syncBoneName="",this.aniIdle="idle",this.aniMove="idle",this.aniDie="die",this.aniGroggy="groggy",this.aniSkill0="att_01",this.aniSkills=["att_02","att_03","att_04","att_05"],this.eventSkill0Hit="att_01_hit",this.eventSkillHits=["att_02_hit","att_03_hit","att_04_hit","att_05_hit"],this.isAir=!1,this.hitWidth=140,this.hitHeight=210,this.weakPointBone="Head",this.exhaustEnabled=!0,this.interruptEnabled=!0,this.interruptAlwaysOpen=t.INTERRUPT_ALWAYS_OPEN,this.interruptWeakBones=t.INTERRUPT_WEAK_BONES,this.interruptWeakLabels=t.INTERRUPT_WEAK_LABELS,this.interruptPostCastGlowFrames=t.INTERRUPT_POSTCAST_GLOW_FRAMES,this.numForSkillAttack=2,this.skillRatio=[.78,.58,.4,.22,.08,0],this.attackOrderList=[[0,0,1,0,2,0,0,3,0,4,0,0]],this.raidPhases=[{
+ skill0(t){
+ super.skill0(t),this.att1CenterX=this.x,this.att1CenterY=this.y}
+ showAtt1Cone(){
+ this.att1Cone||(this.att1Cone=new N2);
+ const i=this.direction>0?0:Math.PI,s=t.ATT1_CONE_HALF_ANGLE_DEG*Math.PI/180;
+ this.att1Cone.show(this.att1CenterX,this.att1CenterY,t.ATT1_RADIUS,i,s),this.att1ConeFrames=0}
+ updateAtt1Windup(){
+ var i,s,e;
+ if(!this.att1Cone)return;
+ const n=null==(e=null==(s=null==(i=this.spine)?void 0:i.state.getCurrent(0))?void 0:s.animation)?void 0:e.name;
+ this.state===sx.ATTACK&&n===this.aniSkill0?(this.att1ConeFrames++,this.att1Cone.update(this.att1ConeFrames/t.MARKER_TOTAL)):this.disposeAtt1Cone()}
+ disposeAtt1Cone(){
+ this.att1Cone&&(this.att1Cone.dispose(),this.att1Cone=null)}
- this.aoeDamage(this.x,this.y,t.ATT1_RADIUS,t.ATT1_DAMAGE_MIN,t.ATT1_DAMAGE_MAX,t.ATT1_MAX_TARGETS),this.radialBlow(this.x,this.y,t.ATT1_RADIUS,4,9,3,7)}
+ this.disposeAtt1Cone();
+ const i=this.direction>0?1:-1;
+ this.coneDamage(i,t.ATT1_RADIUS,t.ATT1_CONE_HALF_ANGLE_DEG,t.ATT1_DAMAGE_MIN,t.ATT1_DAMAGE_MAX,t.ATT1_MAX_TARGETS),this.coneBlow(i,t.ATT1_RADIUS,t.ATT1_CONE_HALF_ANGLE_DEG,16,28,8,14)}
+ coneDamage(t,i,s,e,n,h){
+ if(!this.enemyList)return;
+ const r=i*i,o=Math.cos(s*Math.PI/180);
+ let a=0;
+ for(const c of this.enemyList){
+ if(a>=h)break;
+ if(!c.isAlive||c.removed||c.isUntagetable)continue;
+ const i=c.x-this.x,s=c.y-this.y,l=i*i+s*s;
+ if(l>r)continue;
+ const u=Math.sqrt(l);
+ u>=.01&&i*t/u<o||(this.doDamage(c,this.random.range(e,n),!0),a++)}
+ }
+ coneBlow(i,s,e,n,h,r,o){
+ if(!this.enemyList)return;
+ const a=s*s,c=Math.cos(e*Math.PI/180),l=t.BLOW_SCALE;
+ for(const t of this.enemyList){
+ if(!t.isAlive||t.isImmovable)continue;
+ const s=t.x-this.x,e=t.y-this.y,u=s*s+e*e;
+ if(u>a)continue;
+ const d=Math.sqrt(u);
+ if(d>=.01&&s*i/d<c)continue;
+ const f=d<.01?i:s/d,p=d<.01?0:e/d,g=(n+this.random.next()*(h-n))*l,m=-(r+this.random.next()*(o-r))*l;
+ t.blow(f*g,p*g,m)}
+ }
+ if(this.consumeInterruptWindow())return;
- this.aoeDamage(this.x,this.y,t.ATT3_RADIUS,t.ATT3_DAMAGE_MIN,t.ATT3_DAMAGE_MAX,t.ATT3_MAX_TARGETS),this.radialBlow(this.x,this.y,t.ATT3_RADIUS,10,20,8,16)}
+ this.consumeInterruptWindow()||(this.aoeDamage(this.x,this.y,t.ATT3_RADIUS,t.ATT3_DAMAGE_MIN,t.ATT3_DAMAGE_MAX,t.ATT3_MAX_TARGETS),this.radialBlow(this.x,this.y,t.ATT3_RADIUS,10,20,8,16))}
- spawnLightningArea(){
- const t=this.getAggroCorpCenter()??this.getEnemyCentroid();
- if(!t)return;
+ spawnLightningArea(t=1){
+ var i,s,e,n;
+ const h=this.battleController,r=(null==(i=null==h?void 0:h.getCorpIndicesByAggro)?void 0:i.call(h,!0))??[],o=r.length>0,a=o?r:(null==(s=null==h?void 0:h.getCorpIndicesByAggro)?void 0:s.call(h,!1))??[],c=[];
+ for(const l of a){
+ if(c.length>=t)break;
+ const i=(o?null==(e=null==h?void 0:h.getCorpRangedSoldierCenter)?void 0:e.call(h,l):null)??(null==(n=null==h?void 0:h.getCorpCenter)?void 0:n.call(h,l));
+ i&&c.push(i)}
+ if(0===c.length){
+ const t=this.getEnemyCentroid();
+ t&&c.push(t)}
+ eQ(this.kindNum,"beam");
+ for(const l of c){
+ }
- i!==t.SKILL_TELEPORT?(4===i&&(this.att5LastShotIdx=-1),super.skillN(i)):this.startTeleport()}
+ if(this.disposeAtt1Cone(),i===t.SKILL_TELEPORT)return this.closeInterruptWindow(),void this.startTeleport();
+ super.skillN(i)}
+ performSkillN(t){
+ 4===t&&(this.att5LastShotIdx=-1),super.performSkillN(t)}
- this.state=ex.SKILL,this.loop=!1,this.attackCoolDown=this.atkDuration,this.numCurrentAttack=0,this.attackable=!1,this.isUntagetable=!0,this.teleportPhase="out",this.teleportFrames=0,this.resetBoneSync(),this.playSpine("teleport_out",!1)}
+ this.state=sx.SKILL,this.loop=!1,this.attackCoolDown=this.atkDuration,this.numCurrentAttack=0,this.attackable=!1,this.isUntagetable=!0,this.releaseEnemyTargets(),this.teleportPhase="out",this.teleportFrames=0,this.disposeAtt1Cone(),this.disposeAtt4Warning(),this.resetBoneSync(),this.playSpine("teleport_out",!1)}
+ ensureKnockbackBounds(){
+ if(this.knockBoundsPatched)return;
+ const i=$Q.knockbackBounds;
+ i&&(this.knockBoundsPatched=!0,i.maxX<t.KNOCK_MAX_X&&(i.maxX=t.KNOCK_MAX_X),i.minX>t.KNOCK_MIN_X&&(i.minX=t.KNOCK_MIN_X))}
+ updateAtt4Warning(i){
+ const s=this.getSlotWorldCenter(t.ATT1_TORNADO_SLOT)??this.getBoneWorld(t.ATT1_TORNADO_SLOT)??{
+ x:this.x,y:this.y}
+ ;
+ this.att4Warning||(this.att4Warning=new SK,this.att4Warning.show(s.x,s.y,t.ATT4_TORNADO_RADIUS)),this.att4Warning.position.set(s.x,s.y),this.att4Warning.update(Math.min(1,i/t.ATT4_TORNADO_START_F))}
+ disposeAtt4Warning(){
+ this.att4Warning&&(this.att4Warning.dispose(),this.att4Warning=null)}
+ const i=--this.att4DotCooldown<=0;
+ i&&(this.att4DotCooldown=t.ATT4_DOT_INTERVAL_FRAMES);
- if(!(r>s)&&(this.doDamage(e,this.random.range(t.ATT4_DAMAGE_MIN,t.ATT4_DAMAGE_MAX),!0),r>=1&&!e.isImmovable&&!e.knockImmune)){
+ if(!(o>e)&&(i&&this.doDamage(n,this.random.range(t.ATT4_DAMAGE_MIN,t.ATT4_DAMAGE_MAX),!0),o>=1&&!n.isImmovable&&!n.knockImmune)){
- if(this.executeRaidStunFrame())return;
+ if(this.executeRaidStunFrame())return void this.updateRaidCommonSystems();
- this.ensureTornadoHook(),this.getRaidBattleTimeFrames()>=t.ATT1_TORNADO_START_FRAME&&"att_01"===(null==(e=null==(s=null==(i=this.spine)?void 0:i.state.getCurrent(0))?void 0:s.animation)?void 0:e.name)&&this.suckTornado();
+ this.ensureTornadoHook(),this.ensureKnockbackBounds(),this.updateAtt1Windup(),this.getRaidBattleTimeFrames()>=t.ATT1_TORNADO_START_FRAME&&"att_01"===(null==(e=null==(s=null==(i=this.spine)?void 0:i.state.getCurrent(0))?void 0:s.animation)?void 0:e.name)&&this.suckTornado();
+ else this.att4Warning&&this.disposeAtt4Warning();
- this.teleportPhase=null,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
+ super.onRaidStunStart(),this.disposeAtt1Cone(),this.disposeAtt4Warning(),this.teleportPhase=null,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
- super.resetForPool(),this.teleportPhase=null,this.teleportFrames=0,this.nextLightningFrame=t.LIGHTNING_FIRST_FRAME,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
+ super.resetForPool(),this.disposeAtt1Cone(),this.disposeAtt4Warning(),this.att4DotCooldown=0,this.teleportPhase=null,this.teleportFrames=0,this.nextLightningFrame=t.LIGHTNING_FIRST_FRAME,this.knockBoundsPatched=!1,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
- Kt(l3,"BerialKing"),zt(l3,"SKILL_TELEPORT",5),zt(l3,"BLOW_SCALE",.45),zt(l3,"ATT1_RADIUS",250),zt(l3,"ATT1_MAX_TARGETS",40),zt(l3,"ATT1_DAMAGE_MIN",1),zt(l3,"ATT1_DAMAGE_MAX",2),zt(l3,"ATT2_FIRE_BONE","magic_circle_fx01"),zt(l3,"ATT2_FIRE_PER_HIT",5),zt(l3,"ATT2_TARGET_RADIUS",220),zt(l3,"ATT2_FIRE_DAMAGE_MIN",1),zt(l3,"ATT2_FIRE_DAMAGE_MAX",2),zt(l3,"ATT3_RADIUS",360),zt(l3,"ATT3_MAX_TARGETS",60),zt(l3,"ATT3_DAMAGE_MIN",1.5),zt(l3,"ATT3_DAMAGE_MAX",3),zt(l3,"ATT4_TORNADO_START_F",24),zt(l3,"ATT4_TORNADO_END_F",64),zt(l3,"ATT4_TORNADO_RADIUS",200),zt(l3,"ATT4_SUCK_SPEED",2),zt(l3,"ATT4_DAMAGE_MIN",.1),zt(l3,"ATT4_DAMAGE_MAX",.3),zt(l3,"ATT5_RADIUS",220),zt(l3,"ATT5_START_F",24),zt(l3,"ATT5_END_F",72),zt(l3,"ATT5_INTERVAL_F",4),zt(l3,"ATT5_TARGETS",10),zt(l3,"ATT5_DAMAGE_MIN",1),zt(l3,"ATT5_DAMAGE_MAX",3),zt(l3,"LIGHTNING_FIRST_FRAME",420),zt(l3,"LIGHTNING_CYCLE_FRAMES",1200),zt(l3,"TELEPORT_UNDERGROUND_FRAMES",90),zt(l3,"ATT1_TORNADO_SLOT","tornado_fx01"),zt(l3,"ATT1_TORNADO_START_FRAME",5400),zt(l3,"ATT1_SUCK_RADIUS",150),zt(l3,"ATT1_SUCK_SPEED",1.5);
+ Vt(P2,"BerialKing"),Kt(P2,"SKILL_TELEPORT",5),Kt(P2,"BLOW_SCALE",.45),Kt(P2,"KNOCK_MIN_X",100),Kt(P2,"KNOCK_MAX_X",1400),Kt(P2,"INTERRUPT_ALWAYS_OPEN",!0),Kt(P2,"INTERRUPT_WEAK_BONES",["Head","Wing_L","Wing_R","body_05"]),Kt(P2,"INTERRUPT_WEAK_LABELS",["머리","왼쪽 날개","오른쪽 날개","몸통"]),Kt(P2,"INTERRUPT_POSTCAST_GLOW_FRAMES",45),Kt(P2,"ATT1_RADIUS",250),Kt(P2,"ATT1_MAX_TARGETS",40),Kt(P2,"ATT1_DAMAGE_MIN",1),Kt(P2,"ATT1_DAMAGE_MAX",2),Kt(P2,"ATT1_CONE_HALF_ANGLE_DEG",55),Kt(P2,"MARKER_TOTAL",45),Kt(P2,"ATT2_FIRE_BONE","magic_circle_fx01"),Kt(P2,"ATT2_FIRE_PER_HIT",5),Kt(P2,"ATT2_TARGET_RADIUS",220),Kt(P2,"ATT2_FIRE_DAMAGE_MIN",1),Kt(P2,"ATT2_FIRE_DAMAGE_MAX",2),Kt(P2,"ATT3_RADIUS",300),Kt(P2,"ATT3_MAX_TARGETS",75),Kt(P2,"ATT3_DAMAGE_MIN",1.5),Kt(P2,"ATT3_DAMAGE_MAX",3),Kt(P2,"ATT4_TORNADO_START_F",24),Kt(P2,"ATT4_TORNADO_END_F",64),Kt(P2,"ATT4_TORNADO_RADIUS",200),Kt(P2,"ATT4_SUCK_SPEED",1.2),Kt(P2,"ATT4_DAMAGE_MIN",.1),Kt(P2,"ATT4_DAMAGE_MAX",.3),Kt(P2,"ATT4_DOT_INTERVAL_FRAMES",5),Kt(P2,"ATT5_RADIUS",280),Kt(P2,"ATT5_START_F",24),Kt(P2,"ATT5_END_F",76),Kt(P2,"ATT5_INTERVAL_F",4),Kt(P2,"ATT5_TARGETS",10),Kt(P2,"ATT5_DAMAGE_MIN",1.2),Kt(P2,"ATT5_DAMAGE_MAX",2),Kt(P2,"LIGHTNING_FIRST_FRAME",420),Kt(P2,"LIGHTNING_CYCLE_FRAMES",1200),Kt(P2,"TELEPORT_UNDERGROUND_FRAMES",90),Kt(P2,"ATT1_TORNADO_SLOT","tornado_fx01"),Kt(P2,"ATT1_TORNADO_START_FRAME",5400),Kt(P2,"ATT1_SUCK_RADIUS",150),Kt(P2,"ATT1_SUCK_SPEED",1.5);
GolemKing 19 hunks, 81 statements
- super(...arguments),zt(this,"teleportPhase",null),zt(this,"teleportFrames",0),zt(this,"emergeSlamming",!1),zt(this,"att1SecondTick",0),zt(this,"att2Phase",null),zt(this,"att2Frames",0),zt(this,"att2ChargeX",1),zt(this,"att2ChargeY",0),zt(this,"att2HitCounts",new Map),zt(this,"att4Phase",null),zt(this,"att4Frames",0),zt(this,"att4BurstsFired",0),zt(this,"att4Zones",[]),zt(this,"att4Markers",[]),zt(this,"att4HitCounts",new Map),zt(this,"att3HitCount",0),zt(this,"att5HitCount",0)}
+ super(...arguments),Kt(this,"teleportPhase",null),Kt(this,"teleportFrames",0),Kt(this,"emergeSlamming",!1),Kt(this,"att1HitIndex",0),Kt(this,"att1CenterX",0),Kt(this,"att1CenterY",0),Kt(this,"att2Phase",null),Kt(this,"att2Frames",0),Kt(this,"att2ChargeX",1),Kt(this,"att2ChargeY",0),Kt(this,"att2HitCounts",new Map),Kt(this,"att4Phase",null),Kt(this,"att4Frames",0),Kt(this,"att4BurstsFired",0),Kt(this,"att4Zones",[]),Kt(this,"att4Markers",[]),Kt(this,"att4DotFrames",0),Kt(this,"att4HitCounts",new Map),Kt(this,"att3HitCount",0),Kt(this,"att5HitCount",0),Kt(this,"att5HitCounts",new Map)}
- this.spineKey="raids/raid1/Golem",this.bossScale=1.3,this.spineTimeScale=.8,this.wanderEnabled=!0,this.wanderInterval=240,this.targetSwapChance=.2,this.wanderAfterAttackChance=.25,this.syncBoneName="",this.aniIdle="idle",this.aniMove="run",this.aniDie="die",this.aniSkill0="att1",this.aniSkills=["att2","att3","att4","att5"],this.eventSkill0Hit="att1_hit",this.eventSkillHits=["att2_hit","att3_hit","att4_hit","att5_hit"],this.isAir=!1,this.hitWidth=120,this.hitHeight=180,this.weakPointBone="Head",this.weakPointOffsetX=-25,this.skillRatio=[.78,.6,.42,.26,.12,0],this.numForSkillAttack=2,this.attackOrderList=[[0,0,1,0,2,0,0,3,0,0]],this.raidPhases=[{
+ this.spineKey="raids/raid1/Golem",this.bossScale=1.3,this.spineTimeScale=.8,this.wanderEnabled=!0,this.wanderInterval=240,this.targetSwapChance=.2,this.wanderAfterAttackChance=.25,this.syncBoneName="",this.aniIdle="idle",this.aniMove="run",this.aniDie="die",this.aniSkill0="att1",this.aniSkills=["att2","att3","att4","att5"],this.eventSkill0Hit="att1_hit",this.eventSkillHits=["att2_hit","att3_hit","att4_hit","att5_hit"],this.isAir=!1,this.hitWidth=120,this.hitHeight=180,this.weakPointBone="Head",this.weakPointOffsetX=-25,this.exhaustEnabled=!0,this.interruptEnabled=!0,this.interruptAlwaysOpen=t.INTERRUPT_ALWAYS_OPEN,this.interruptWeakBones=t.INTERRUPT_WEAK_BONES,this.interruptWeakLabels=t.INTERRUPT_WEAK_LABELS,this.interruptPostCastGlowFrames=t.INTERRUPT_POSTCAST_GLOW_FRAMES,this.skillRatio=[.78,.6,.42,.26,.12,0],this.numForSkillAttack=2,this.attackOrderList=[[0,0,1,0,2,0,0,3,0,0]],this.raidPhases=[{
- i!==t.SKILL_TELEPORT?1!==i?3!==i?(2===i&&(this.att3HitCount=0),4===i&&(this.att5HitCount=0),super.skillN(i)):this.startAtt4():this.startAtt2Charge():this.startTeleport()}
+ if(i===t.SKILL_TELEPORT)return this.closeInterruptWindow(),void this.startTeleport();
+ super.skillN(i)}
+ performSkillN(t){
+ 1!==t?3!==t?(2===t&&(this.att3HitCount=0),4===t&&(this.att5HitCount=0,this.att5HitCounts.clear()),super.performSkillN(t)):this.startAtt4():this.startAtt2Charge()}
+ skill0(i){
+ super.skill0(i),this.attackCoolDown=Math.round(this.atkDuration*t.BASIC_ATTACK_COOLDOWN_MULT);
+ const s=this.direction>0?1:-1;
+ this.att1CenterX=this.x+t.ATT1_CENTER_OFFSET_X*s,this.att1CenterY=this.y+t.ATT1_CENTER_OFFSET_Y,this.att1HitIndex=0}
- this.doAtt1Damage()}
- doAtt1Damage(){
+ if(this.att1HitIndex++,1===this.att1HitIndex)this.doAtt1Damage(this.att1CenterX,this.att1CenterY);
+ else{
+ const i=this.getBoneWorld(t.ATT1_SECOND_BONE);
+ this.doAtt1Damage((null==i?void 0:i.x)??this.att1CenterX,(null==i?void 0:i.y)??this.att1CenterY)}
+ }
+ doAtt1Damage(i,s){
- const i=this.getBoneWorld(t.ATT1_CENTER_BONE)??{
- x:this.x,y:this.y}
- ,s=t.ATT1_RADIUS*t.ATT1_RADIUS;
+ const e=t.ATT1_RADIUS*t.ATT1_RADIUS;
- const h=n.x-i.x,r=n.y-i.y;
+ const r=h.x-i,o=h.y-s;
- this.emergeSlamming?this.emergeRadialBlow():this.att3HitCount>=t.ATT3_MAX_HITS||(this.att3HitCount++,this.doAtt3Damage(),this.radialBlow(this.x,this.y,t.ATT3_RADIUS,t.ATT3_POWER_MIN,t.ATT3_POWER_MAX,t.ATT3_VH_MIN,t.ATT3_VH_MAX))}
+ this.emergeSlamming?this.emergeRadialBlow():this.consumeInterruptWindow()||this.att3HitCount>=t.ATT3_MAX_HITS||(this.att3HitCount++,this.doAtt3Damage(),this.radialBlow(this.x,this.y,t.ATT3_RADIUS,t.ATT3_POWER_MIN,t.ATT3_POWER_MAX,t.ATT3_VH_MIN,t.ATT3_VH_MAX))}
- if(!(this.att5HitCount>=t.ATT5_MAX_HITS)){
+ if(!(this.consumeInterruptWindow()||this.att5HitCount>=t.ATT5_MAX_HITS)){
- if(!(c>e)){
- if(this.doDamage(r,this.random.range(t.ATT5_DAMAGE_MIN,t.ATT5_DAMAGE_MAX),!0),r.isAlive&&!r.isImmovable){
+ if(c>e)continue;
+ const l=this.att5HitCounts.get(r)??0;
+ if(!(l>=t.ATT5_MAX_HITS_PER_UNIT)){
+ if(this.att5HitCounts.set(r,l+1),this.doDamage(r,this.random.range(t.ATT5_DAMAGE_MIN,t.ATT5_DAMAGE_MAX),!0),r.isAlive&&!r.isImmovable){
- if(this.att4HitCounts.clear(),this.att4Zones=this.pickAtt4Zones(),0===this.att4Zones.length)return void super.skillN(3);
+ if(this.att4HitCounts.clear(),this.att4Zones=this.pickAtt4Zones(),0===this.att4Zones.length)return void super.performSkillN(3);
- this.att4Phase=null,this.clearAtt4Markers(),this.att4HitCounts.clear(),this.gotoIdleState()}
+ this.att4Phase=null,this.att4HitCounts.clear(),this.att4DotFrames=t.ATT4_DOT_DURATION_FRAMES;
+ for(const t of this.att4Markers)t.showCrater();
+ this.gotoIdleState()}
+ updateAtt4Dot(){
+ if(!(this.att4DotFrames<=0)){
+ this.att4DotFrames--;
+ for(const t of this.att4Markers)t.update(1);
+ if(this.att4DotFrames>t.ATT4_DOT_FADE_FRAMES&&this.att4DotFrames%t.ATT4_DOT_INTERVAL_FRAMES===0&&this.applyAtt4DotTick(),this.att4DotFrames===t.ATT4_DOT_FADE_FRAMES)for(const i of this.att4Markers)i.startFadeOut(t.ATT4_DOT_FADE_FRAMES);
+ this.att4DotFrames<=0&&this.clearAtt4Markers()}
+ }
+ applyAtt4DotTick(){
+ if(!this.enemyList||!this.isAlive)return;
+ const i=t.ATT4_ZONE_RADIUS*t.ATT4_DOT_ZONE_SCALE,s=i*t.ATT4_ZONE_ASPECT_Y,e=i*i,n=s*s,h=this.atkDmg*this.getRaidDamageMultiplier()*t.ATT4_DOT_DAMAGE_PER_SEC*t.ATT4_DOT_INTERVAL_FRAMES/60;
+ if(!(h<=0))for(const t of this.enemyList)if(t.isAlive&&!t.removed&&!t.isUntagetable)for(const i of this.att4Zones){
+ const s=t.x-i.x,r=t.y-i.y;
+ if(s*s/e+r*r/n<=1){
+ this.totalDamageDealt+=h,t.health-=h;
+ break}
+ }
+ }
- this.fireGolemStoneAtPoint(i.x+Math.cos(s)*e,i.y+Math.sin(s)*e)}
+ this.fireGolemStoneAtPoint(i.x+Math.cos(s)*e,i.y+Math.sin(s)*e*t.ATT4_ZONE_ASPECT_Y)}
- s.show(i.x,i.y,t.ATT4_ZONE_RADIUS),this.att4Markers.push(s)}
+ s.show(i.x,i.y,t.ATT4_ZONE_RADIUS,t.ATT4_ZONE_ASPECT_Y),this.att4Markers.push(s)}
- this.att4Markers.length=0}
+ this.att4Markers.length=0,this.att4DotFrames=0}
- if(!this.executeRaidStunFrame()&&(super.execute(),this.isAlive)){
- if(this.updateAtt4(),this.att1SecondTick>0&&0===--this.att1SecondTick&&this.doAtt1Damage(),"underground"!==this.teleportPhase)return"charge"===this.att2Phase&&this.state===ex.SKILL?(this.att2Frames++,this.x+=this.att2ChargeX*t.ATT2_CHARGE_SPEED,this.y+=this.att2ChargeY*t.ATT2_CHARGE_SPEED,this.att2Frames<=t.ATT2_DURATION_FRAMES&&this.att2Frames%t.ATT2_TICK_INTERVAL===1&&this.doAtt2Tick(),void(this.att2Frames>=t.ATT2_DURATION_FRAMES&&this.endAtt2())):void 0;
+ if(this.executeRaidStunFrame())this.updateRaidCommonSystems();
+ else if(super.execute(),this.isAlive){
+ if(this.updateAtt4(),this.updateAtt4Dot(),"underground"!==this.teleportPhase)return"charge"===this.att2Phase&&this.state===sx.SKILL?(this.att2Frames++,this.x+=this.att2ChargeX*t.ATT2_CHARGE_SPEED,this.y+=this.att2ChargeY*t.ATT2_CHARGE_SPEED,this.att2Frames<=t.ATT2_DURATION_FRAMES&&this.att2Frames%t.ATT2_TICK_INTERVAL===1&&this.doAtt2Tick(),void(this.att2Frames>=t.ATT2_DURATION_FRAMES&&this.endAtt2())):void 0;
- this.att1SecondTick=0,this.att2Phase=null,this.att4Phase=null,this.clearAtt4Markers(),this.att2HitCounts.clear(),this.att3HitCount=0,this.att5HitCount=0,this.teleportPhase=null,this.emergeSlamming=!1,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
+ super.onRaidStunStart(),this.att1HitIndex=0,this.att2Phase=null,this.att4Phase=null,this.clearAtt4Markers(),this.att2HitCounts.clear(),this.att3HitCount=0,this.att5HitCount=0,this.att5HitCounts.clear(),this.teleportPhase=null,this.emergeSlamming=!1,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
- super.resetForPool(),this.att1SecondTick=0,this.att2Phase=null,this.att4Phase=null,this.att4Frames=0,this.att4BurstsFired=0,this.clearAtt4Markers(),this.att4HitCounts.clear(),this.att2HitCounts.clear(),this.att3HitCount=0,this.att5HitCount=0,this.teleportPhase=null,this.teleportFrames=0,this.emergeSlamming=!1,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
+ super.resetForPool(),this.att1HitIndex=0,this.att2Phase=null,this.att4Phase=null,this.att4Frames=0,this.att4BurstsFired=0,this.clearAtt4Markers(),this.att4HitCounts.clear(),this.att2HitCounts.clear(),this.att3HitCount=0,this.att5HitCount=0,this.att5HitCounts.clear(),this.teleportPhase=null,this.teleportFrames=0,this.emergeSlamming=!1,this.attackable=!0,this.isUntagetable=!1,this.spine&&(this.spine.visible=!0)}
- Kt(a3,"GolemKing"),zt(a3,"SKILL_TELEPORT",5),zt(a3,"BLOW_SCALE",.75*.6),zt(a3,"ATT1_CENTER_BONE","R_Arm_01"),zt(a3,"ATT1_RADIUS",200),zt(a3,"ATT1_MAX_TARGETS",80),zt(a3,"ATT1_DAMAGE_MIN",1),zt(a3,"ATT1_DAMAGE_MAX",2),zt(a3,"ATT1_KB_POWER_MIN",5),zt(a3,"ATT1_KB_POWER_MAX",15),zt(a3,"ATT1_KB_VH_MIN",4),zt(a3,"ATT1_KB_VH_MAX",12),zt(a3,"ATT1_SECOND_TICK_DELAY",10),zt(a3,"ATT3_RADIUS",300),zt(a3,"ATT3_DAMAGE_MIN",1.5),zt(a3,"ATT3_DAMAGE_MAX",2.5),zt(a3,"ATT3_MAX_HITS",2),zt(a3,"ATT3_POWER_MIN",3),zt(a3,"ATT3_POWER_MAX",12),zt(a3,"ATT3_VH_MIN",2),zt(a3,"ATT3_VH_MAX",10),zt(a3,"ATT5_PILLAR_RADIUS",80),zt(a3,"ATT5_MAX_TARGETS",10),zt(a3,"ATT5_MAX_HITS",2),zt(a3,"ATT5_DAMAGE_MIN",1.4),zt(a3,"ATT5_DAMAGE_MAX",2.8),zt(a3,"ATT5_POWER_MIN",10),zt(a3,"ATT5_POWER_MAX",22),zt(a3,"ATT5_VH_MIN",8),zt(a3,"ATT5_VH_MAX",16),zt(a3,"ATT5_PILLAR_BONES",["stone_pillar_01","stone_pillar_02","stone_pillar_03","stone_pillar_04","stone_pillar_05","stone_pillar_06","stone_pillar_07","stone_pillar_08","stone_pillar_09"]),zt(a3,"ATT2_CHARGE_SPEED",3),zt(a3,"ATT2_DURATION_FRAMES",120),zt(a3,"ATT2_TICK_INTERVAL",3),zt(a3,"ATT2_OFFSET_X",50),zt(a3,"ATT2_RADIUS",80),zt(a3,"ATT2_MAX_TARGETS",20),zt(a3,"ATT2_DAMAGE_MIN",1.5),zt(a3,"ATT2_DAMAGE_MAX",2.5),zt(a3,"ATT2_MAX_HITS_PER_UNIT",3),zt(a3,"ATT2_DENSITY_RADIUS",300),zt(a3,"ATT4_WARNING_FRAMES",100),zt(a3,"ATT4_ANIM_TIMESCALE",.5),zt(a3,"ATT4_RAIN_BURSTS",7),zt(a3,"ATT4_RAIN_INTERVAL",4),zt(a3,"ATT4_ZONE_RADIUS",160),zt(a3,"ATT4_AOE_RADIUS",60),zt(a3,"STONE_PER_ZONE_PER_BURST",5),zt(a3,"ATT4_TWO_ZONE_FRAME",6600),zt(a3,"STONE_SPAWN_Y_MIN",-40),zt(a3,"STONE_SPAWN_Y_MAX",-20),zt(a3,"STONE_DAMAGE_MIN",1.2),zt(a3,"STONE_DAMAGE_MAX",3),zt(a3,"ATT4_MAX_HITS_PER_UNIT",8),zt(a3,"TELEPORT_UNDERGROUND_FRAMES",120),zt(a3,"EMERGE_RADIUS",480),zt(a3,"EMERGE_POWER_MIN",15.2),zt(a3,"EMERGE_POWER_MAX",24.3),zt(a3,"EMERGE_VH_MIN",10.6),zt(a3,"EMERGE_VH_MAX",18.2);
+ Vt(O2,"GolemKing"),Kt(O2,"SKILL_TELEPORT",5),Kt(O2,"BLOW_SCALE",.75*.6),Kt(O2,"INTERRUPT_ALWAYS_OPEN",!0),Kt(O2,"INTERRUPT_WEAK_BONES",["L_Arm","R_Arm_01","Head","Main"]),Kt(O2,"INTERRUPT_WEAK_LABELS",["왼쪽 팔","오른쪽 팔","머리","몸통"]),Kt(O2,"INTERRUPT_POSTCAST_GLOW_FRAMES",45),Kt(O2,"ATT1_CENTER_OFFSET_X",0),Kt(O2,"ATT1_CENTER_OFFSET_Y",0),Kt(O2,"ATT1_RADIUS",240),Kt(O2,"ATT1_MAX_TARGETS",80),Kt(O2,"ATT1_DAMAGE_MIN",.5),Kt(O2,"ATT1_DAMAGE_MAX",1),Kt(O2,"ATT1_KB_POWER_MIN",5),Kt(O2,"ATT1_KB_POWER_MAX",15),Kt(O2,"ATT1_KB_VH_MIN",4),Kt(O2,"ATT1_KB_VH_MAX",12),Kt(O2,"ATT1_SECOND_BONE","L_Arm_hand"),Kt(O2,"BASIC_ATTACK_COOLDOWN_MULT",1.4),Kt(O2,"ATT3_RADIUS",300),Kt(O2,"ATT3_DAMAGE_MIN",1.5),Kt(O2,"ATT3_DAMAGE_MAX",2.5),Kt(O2,"ATT3_MAX_HITS",2),Kt(O2,"ATT3_POWER_MIN",3),Kt(O2,"ATT3_POWER_MAX",12),Kt(O2,"ATT3_VH_MIN",2),Kt(O2,"ATT3_VH_MAX",10),Kt(O2,"ATT5_PILLAR_RADIUS",80),Kt(O2,"ATT5_MAX_TARGETS",10),Kt(O2,"ATT5_MAX_HITS",2),Kt(O2,"ATT5_DAMAGE_MIN",1.2),Kt(O2,"ATT5_DAMAGE_MAX",2.2),Kt(O2,"ATT5_MAX_HITS_PER_UNIT",4),Kt(O2,"ATT5_POWER_MIN",10),Kt(O2,"ATT5_POWER_MAX",22),Kt(O2,"ATT5_VH_MIN",8),Kt(O2,"ATT5_VH_MAX",16),Kt(O2,"ATT5_PILLAR_BONES",["stone_pillar_01","stone_pillar_02","stone_pillar_03","stone_pillar_04","stone_pillar_05","stone_pillar_06","stone_pillar_07","stone_pillar_08","stone_pillar_09"]),Kt(O2,"ATT2_CHARGE_SPEED",3),Kt(O2,"ATT2_DURATION_FRAMES",120),Kt(O2,"ATT2_TICK_INTERVAL",3),Kt(O2,"ATT2_OFFSET_X",50),Kt(O2,"ATT2_RADIUS",80),Kt(O2,"ATT2_MAX_TARGETS",20),Kt(O2,"ATT2_DAMAGE_MIN",1.5),Kt(O2,"ATT2_DAMAGE_MAX",2.5),Kt(O2,"ATT2_MAX_HITS_PER_UNIT",3),Kt(O2,"ATT2_DENSITY_RADIUS",300),Kt(O2,"ATT4_WARNING_FRAMES",100),Kt(O2,"ATT4_ANIM_TIMESCALE",.5),Kt(O2,"ATT4_RAIN_BURSTS",7),Kt(O2,"ATT4_RAIN_INTERVAL",4),Kt(O2,"ATT4_ZONE_RADIUS",160),Kt(O2,"ATT4_ZONE_ASPECT_Y",SK.CRATER_ASPECT_Y),Kt(O2,"ATT4_AOE_RADIUS",60),Kt(O2,"STONE_PER_ZONE_PER_BURST",5),Kt(O2,"ATT4_TWO_ZONE_FRAME",6600),Kt(O2,"STONE_SPAWN_Y_MIN",-40),Kt(O2,"STONE_SPAWN_Y_MAX",-20),Kt(O2,"STONE_DAMAGE_MIN",1),Kt(O2,"STONE_DAMAGE_MAX",1.3),Kt(O2,"ATT4_MAX_HITS_PER_UNIT",8),Kt(O2,"ATT4_DOT_DURATION_FRAMES",1200),Kt(O2,"ATT4_DOT_DAMAGE_PER_SEC",.4),Kt(O2,"ATT4_DOT_INTERVAL_FRAMES",5),Kt(O2,"ATT4_DOT_ZONE_SCALE",.8),Kt(O2,"ATT4_DOT_FADE_FRAMES",36),Kt(O2,"TELEPORT_UNDERGROUND_FRAMES",120),Kt(O2,"EMERGE_RADIUS",480),Kt(O2,"EMERGE_POWER_MIN",15.2),Kt(O2,"EMERGE_POWER_MAX",24.3),Kt(O2,"EMERGE_VH_MIN",10.6),Kt(O2,"EMERGE_VH_MAX",18.2);
+ let x2=O2;
+ const R2=class extends Ge{
+ constructor(){
+ super(),Kt(this,"g",new Lf),Kt(this,"radius",0),Kt(this,"centerAngle",0),Kt(this,"halfAngle",Math.PI/4),this.eventMode="none",this.addChild(this.g)}
+ show(t,i,s,e,n){
+ this.x=t,this.y=i,this.radius=s,this.centerAngle=e,this.halfAngle=n,this.draw(.3,0),tB.getInstance().addChild(this)}
+ update(t){
+ const i=Math.max(0,Math.min(1,t)),s=.22+.18*(.5+.5*Math.sin(i*Math.PI*8));
+ this.draw(s,i)}
+ draw(t,i){
+ const s=this.g;
+ s.clear();
+ const e=this.centerAngle-this.halfAngle,n=this.centerAngle+this.halfAngle;
+ s.moveTo(0,0),s.arc(0,0,this.radius,e,n),s.lineTo(0,0),s.fill({
+ color:16719904,alpha:.5*t}
+ ),s.moveTo(0,0),s.arc(0,0,this.radius,e,n),s.lineTo(0,0),s.stroke({
+ width:4,color:16732240,alpha:.9}
+ ),i>0&&(s.moveTo(0,0),s.arc(0,0,this.radius*i,e,n),s.lineTo(0,0),s.stroke({
+ width:2,color:16777215,alpha:.55}
+ ))}
+ dispose(){
+ this.g.clear(),this.parent&&this.parent.removeChild(this)}
+ }
+ ;
+ Vt(R2,"RaidWarningCone");
HScrollRow 2 hunks, 74 statements
- const X6t=class{
- constructor(){
- zt(this,"kindNum",0),zt(this,"main",0),zt(this,"difficult",0),zt(this,"sub",0),zt(this,"progress",0),zt(this,"openCost",0),zt(this,"limit",0),zt(this,"name",""),zt(this,"desc",""),zt(this,"bossKindNum",0),zt(this,"level",0),zt(this,"hp",0)}
- }
- ;
- Kt(X6t,"GuildRaidBookVO");
- let Y6t=X6t;
- const J6t=class t{
- constructor(){
- zt(this,"list",[]),zt(this,"byMain",new Map)}
- static getInstance(){
- return this.instance||(this.instance=new t),this.instance}
- async ensureLoaded(){
- if(this.list.length>0)return;
- await _D.getInstance().loadBook(bD.GUILD_RAID);
- const t=_D.getInstance().getBook(bD.GUILD_RAID);
- this.setBookData(t)}
- setBookData(t){
- if(this.list=[],this.byMain.clear(),Array.isArray(t)){
- for(const i of t){
- const t=new Y6t;
- t.kindNum=Number(i.kindNum)||0,t.main=Number(i.main)||0,t.difficult=Number(i.difficult)||0,t.sub=Number(i.sub)||0,t.progress=Number(i.progress)||0,t.openCost=Number(i.openCost)||0,t.limit=Number(i.limit)||0,t.name=String(i.name??""),t.desc=String(i.desc??""),t.bossKindNum=Number(i.bossKindNum)||0,t.level=Number(i.level)||0,t.hp=Number(i.hp)||0,this.list.push(t);
- let s=this.byMain.get(t.main);
- s||(s=[],this.byMain.set(t.main,s)),s.push(t)}
- for(const t of this.byMain.values())t.sort((t,i)=>t.difficult-i.difficult||t.sub-i.sub)}
- }
- hasBook(){
- return this.list.length>0}
- getMains(){
- return Array.from(this.byMain.keys()).sort((t,i)=>t-i)}
- getDifficulties(t){
- const i=this.byMain.get(t)??[];
- return[...new Set(i.map(t=>t.difficult))]}
- getSubs(t,i){
- return(this.byMain.get(t)??[]).filter(t=>t.difficult===i)}
- getSub(t,i,s){
- return this.getSubs(t,i).find(t=>t.sub===s)??null}
- getByKindNum(t){
- return this.list.find(i=>i.kindNum===t)??null}
- getBattleBossKindNum(i){
- return t.normalizeBossKindNum(i.bossKindNum)||t.FALLBACK_BOSS_KIND_BY_RAID_KIND[i.kindNum]||t.FALLBACK_BOSS_KIND_BY_SUB[i.sub]||0}
- static normalizeBossKindNum(t){
- return t?this.LEGACY_BOSS_KIND_MAP[t]?this.LEGACY_BOSS_KIND_MAP[t]:t>=1e5?t:0:0}
- getFirstSub(t,i){
- return this.getSub(t,i,1)}
- getMainName(i){
- return t.MAIN_NAMES[i]??`RAID ${
- i}
- `}
- isLiveMain(i){
- return t.LIVE_MAINS.includes(i)}
- }
- ;
- Kt(J6t,"GuildRaidDataManager"),zt(J6t,"instance"),zt(J6t,"LIVE_MAINS",[1]),zt(J6t,"MAIN_NAMES",{
- 1:"고대유적지",2:"불타는 대지",3:"죽음의 늪지",4:"지옥군주의 성채",5:"얼어붙은 고대 문명"}
- ),zt(J6t,"FALLBACK_BOSS_KIND_BY_SUB",{
- 1:1e5,2:100001,3:100002}
- ),zt(J6t,"LEGACY_BOSS_KIND_MAP",{
- 2001:1e5,2002:100001,2003:100002}
- ),zt(J6t,"FALLBACK_BOSS_KIND_BY_RAID_KIND",{
- 1:1e5,2:100001,3:100002}
+ const G7t=class extends Ge{
+ constructor(t,i){
+ super(),Kt(this,"inner",new Ge),Kt(this,"viewW"),Kt(this,"contentW",0),Kt(this,"dragging",!1),Kt(this,"lastX",0),this.viewW=t,this.addChild(this.inner);
+ const s=(new Lf).rect(0,0,t,i).fill(16777215);
+ this.addChild(s),this.inner.mask=s,this.eventMode="static",this.hitArea=new Ri(0,0,t,i),this.on("pointerdown",t=>{
+ this.contentW<=this.viewW||(this.dragging=!0,this.lastX=t.globalX)}
+ const e=Vt(()=>this.dragging=!1,"end");
+ this.on("pointerup",e),this.on("pointerupoutside",e),this.on("globalpointermove",t=>{
+ if(!this.dragging)return;
+ const i=t.globalX-this.lastX;
+ this.lastX=t.globalX,this.inner.x=Math.min(0,Math.max(this.viewW-this.contentW,this.inner.x+i))}
+ )}
+ addItem(t){
+ this.inner.addChild(t)}
+ setContentWidth(t){
+ this.contentW=t}
+ }
+ ;
+ Vt(G7t,"HScrollRow");
GuildWarSquadsPopup 20 hunks, 72 statements
- super(),zt(this,"lblTitle"),zt(this,"lblHeroHeader"),zt(this,"lblSoldierHeader"),zt(this,"lblHint1"),zt(this,"lblHint2"),zt(this,"heroSlotBtns",[]),zt(this,"soldierSlotBtns",[]),zt(this,"soldierCountLbls",[]),zt(this,"soldierStageBadges",[]),zt(this,"heroList"),zt(this,"soldierList"),zt(this,"btnSave"),zt(this,"btnCancel"),zt(this,"lblListHeader"),zt(this,"btnGuide"),zt(this,"squads",[]),zt(this,"mode",0),zt(this,"selectedSlot",-1),zt(this,"heroVOs",[]),zt(this,"barrackVOs",[]),zt(this,"onSaved",null);
+ super(),Kt(this,"lblTitle"),Kt(this,"lblHeroHeader"),Kt(this,"lblSoldierHeader"),Kt(this,"lblHint1"),Kt(this,"lblHint2"),Kt(this,"heroSlotBtns",[]),Kt(this,"soldierSlotBtns",[]),Kt(this,"soldierCountLbls",[]),Kt(this,"soldierStageBadges",[]),Kt(this,"heroCcBadges",[]),Kt(this,"soldierCcBadges",[]),Kt(this,"heroList"),Kt(this,"soldierList"),Kt(this,"btnSave"),Kt(this,"btnCancel"),Kt(this,"lblListHeader"),Kt(this,"btnGuide"),Kt(this,"squads",[]),Kt(this,"mode",0),Kt(this,"boostEnabled",!1),Kt(this,"raidVulns",null),Kt(this,"raidOrder",!1),Kt(this,"selectedSlot",-1),Kt(this,"heroVOs",[]),Kt(this,"barrackVOs",[]),Kt(this,"onSaved",null);
- const s=this.lblTitle.y+28;
+ const s=t.SLOT_GAP,e=t.SLOTS_X,n=this.lblTitle.y+28;
- t.scale=.7,t.x=115+92*r,t.y=s,t.onClick=()=>this.onHeroSlotClick(r),this.addChild(t),this.heroSlotBtns.push(t)}
+ t.scale=.7,t.x=e+a*s,t.y=n,t.onClick=()=>this.onHeroSlotClick(a),this.addChild(t),this.heroSlotBtns.push(t);
+ const i=new Ge;
+ i.x=t.x+2,i.y=t.y+3,i.eventMode="none",i.visible=!1,this.addChild(i),this.heroCcBadges.push(i)}
- t.scale=.7,t.x=115+92*r,t.y=e,t.onClick=()=>this.onSoldierSlotClick(r),this.addChild(t),this.soldierSlotBtns.push(t);
+ t.scale=.7,t.x=e+a*s,t.y=h,t.onClick=()=>this.onSoldierSlotClick(a),this.addChild(t),this.soldierSlotBtns.push(t);
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
- s.anchor.set(1,0),s.eventMode="none",s.visible=!1,this.addChild(s),this.soldierStageBadges.push(s)}
+ n.anchor.set(1,0),n.eventMode="none",n.visible=!1,this.addChild(n),this.soldierStageBadges.push(n);
+ const r=new Ge;
+ r.x=t.x+2,r.y=t.y+3,r.eventMode="none",r.visible=!1,this.addChild(r),this.soldierCcBadges.push(r)}
- async open(i,s,e){
- this.bindListCallbacks(),this.lblTitle.text=i;
+ async open(i,s,e,n=!1,h=null,r=!1,o=!1){
+ this.boostEnabled=n,this.raidVulns=h,this.raidOrder=r,this.layoutSlotColumns(),this.bindListCallbacks(),this.lblTitle.text=i;
- this.bindListCallbacks(),P4.skillCodeMap=null,this.selectedSlot=-1,this.setMode(0),this.refreshSlots(),this.refreshList(),IL.getInstance().addPopup(this)}
+ if(this.bindListCallbacks(),Uzt.skillCodeMap=null,this.selectedSlot=-1,this.setMode(0),o){
+ const t=this.squads.findIndex(t=>t.heroKindNum>0);
+ t>=0&&(this.selectedSlot=t,this.setMode(1))}
+ this.refreshSlots(),this.refreshList(),xL.getInstance().addPopup(this)}
- P4.onHeroClick=(t,i)=>this.onHeroPick(t,i),eni.onSelect=t=>this.onBarrackPick(t),eni.onUnlock=(t,i)=>{
+ Uzt.onHeroClick=(t,i)=>this.onHeroPick(t,i),Uzt.raidVulns=this.raidVulns,sai.onSelect=t=>this.onBarrackPick(t),sai.onUnlock=(t,i)=>{
- ,eni.onBoost=null}
+ ,sai.onBoost=this.boostEnabled?t=>this.onBarrackBoostConfirm(t):null}
+ layoutSlotColumns(){
+ for(let i=0;
+ i<t.NUM_SLOTS;
+ i++){
+ const s=this.raidOrder?DJt.indexOf(i):i,e=t.SLOTS_X+(s<0?i:s)*t.SLOT_GAP;
+ this.heroSlotBtns[i]&&(this.heroSlotBtns[i].x=e),this.soldierSlotBtns[i]&&(this.soldierSlotBtns[i].x=e),this.heroCcBadges[i]&&(this.heroCcBadges[i].x=e+2)}
+ }
- else h.kindNum=-1,e.setDataWith(i,h),e.hideBackground(),e.setAlphaToFrame(this.isSoldierSlotSelected(i)?.9:.4),e.selected=!1,r.visible=!1,o.visible=!1}
+ else h.kindNum=-1,e.setDataWith(i,h),e.hideBackground(),e.setAlphaToFrame(this.isSoldierSlotSelected(i)?.9:.4),e.selected=!1,r.visible=!1,o.visible=!1;
+ this.updateSlotCcBadge(this.heroCcBadges[i],t.heroKindNum),this.updateSlotCcBadge(this.soldierCcBadges[i],h.kindNum)}
+ updateSlotCcBadge(t,i){
+ if(!this.raidVulns||i<=0)return void(t.visible=!1);
+ const s=wx.getInstance().getBookVO(i);
+ t.visible=Dzt(t,Pzt(null==s?void 0:s.raidCc,this.raidVulns))}
+ var t;
- if(c.barrackKindNum=n,c.tribe=i,c.unitKindNums=o.unitKindNums.slice(),c.plusLevel=o.plusLevel.slice(),c.awakened=ON.getAwakenedBarrackTribes().has(i),c.unlocked=a,c.openCost=o.openCost,c.showBoost=!1,a){
+ if(l.barrackKindNum=h,l.tribe=s,l.unitKindNums=a.unitKindNums.slice(),l.plusLevel=a.plusLevel.slice(),l.awakened=IR.getAwakenedBarrackTribes().has(s),l.unlocked=c,l.openCost=a.openCost,l.showBoost=this.boostEnabled,l.raidCcMatched=this.raidVulns?Pzt(null==(t=wx.getInstance().getBookVO(a.unitKindNums.find(t=>t>0)??-1))?void 0:t.raidCc,this.raidVulns):[],c){
- c.counts=s.computeSoldiers(o,e,i).slice(),c.selected=t.barrackKindNum===n,c.usedByOther=!c.selected&&r.has(n),c.canBoost=!1,c.canTrainPerStage=[],c.trainTimeSec=[];
+ l.counts=e.computeSoldiers(a,n,t).slice(),l.selected=i.barrackKindNum===h,l.usedByOther=!l.selected&&o.has(h),l.canBoost=!!this.boostEnabled&&e.canBoostBarrack(a,n,t),l.canTrainPerStage=[],l.trainTimeSec=[];
+ static todayStr(){
+ const t=new Date(tx.time);
+ return`${
+ t.getFullYear()}
+ -${
+ t.getMonth()+1}
+ -${
+ t.getDate()}
+ `}
+ onBarrackBoostConfirm(i){
+ if(ML.gem<t.BOOST_GEM_COST)return void u2.getInstance().showMessage(SG.getText("COMMON_352","보석이 부족합니다."));
+ let s=!1;
+ try{
+ s=localStorage.getItem(t.BOOST_SKIP_LS_KEY)===t.todayStr()}
+ catch{
+ }
+ if(s)return void this.onBarrackBoost(i);
+ const e=b$t.getInstance();
+ e.title=SG.getText("COMMON_4","알림"),e.textAlignCenter=!0,e.setCheckbox(SG.getText("COMMON_19","오늘 하루 보지 않기")),e.show(SG.getValueReplace("GAME_1127","##",t.BOOST_GEM_COST,`보석 ${
+ t.BOOST_GEM_COST}
+ 개를 이용해서,\n병사훈련을 1시간동안 가속하시겠습니까?`),()=>{
+ if(e.isCheckboxChecked)try{
+ localStorage.setItem(t.BOOST_SKIP_LS_KEY,t.todayStr())}
+ catch{
+ }
+ this.onBarrackBoost(i)}
+ ),e.y=480}
+ async onBarrackBoost(i){
+ const s=Math.ceil(i/4);
+ try{
+ const e=await rD.getInstance().guildBarracks.boost(s,i,!0),n=(null==e?void 0:e.body)??e;
+ kG.getInstance().applyMutationResult(n),ML.updateGem(-t.BOOST_GEM_COST),kF.getInstance().updateGem(),this.refreshSlots(),this.refreshSoldierList()}
+ catch{
+ u2.getInstance().showMessage(SG.getText("GAME_1144","가속 실패"))}
+ }
- IL.getInstance().removePopup(this)}
+ Uzt.raidVulns=null,xL.getInstance().removePopup(this)}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
- Kt(cni,"GuildWarSquadsPopup"),zt(cni,"_instance"),zt(cni,"NUM_SLOTS",5);
+ Vt(aai,"GuildWarSquadsPopup"),Kt(aai,"_instance"),Kt(aai,"NUM_SLOTS",5),Kt(aai,"SLOT_GAP",92),Kt(aai,"SLOTS_X",115),Kt(aai,"BOOST_GEM_COST",100),Kt(aai,"BOOST_SKIP_LS_KEY","raidBoostConfirmSkipDate");
SummonDragon 6 hunks, 66 statements
- super(...arguments),zt(this,"hitFrames",t.BREATH1_HITS),zt(this,"struckFrames",new Set)}
+ super(...arguments),Kt(this,"lineX",0),Kt(this,"lineY",0),Kt(this,"lineDirX",1),Kt(this,"lineDirY",0),Kt(this,"lineLength",0),Kt(this,"lineHalfWidth",0),Kt(this,"struck",!1)}
- this.radius=t.RADIUS,this.radiusX=t.RADIUS,this.radiusY=t.RADIUS,this.damagePercent=1,this.durationFrames=t.BREATH1_DURATION,this.visualConfig={
+ this.radius=0,this.radiusX=0,this.radiusY=0,this.damagePercent=1,this.durationFrames=t.DURATION,this.visualConfig={
- super.setData(t),this.struckFrames.clear()}
- setBreath(i){
- const s=2===i;
- this.durationFrames=s?t.BREATH2_DURATION:t.BREATH1_DURATION,this.hitFrames=s?t.BREATH2_HITS:t.BREATH1_HITS,this.visualConfig={
- type:"spine",spineKey:"raids/raid1/Summon_dragon",animationName:s?"dragon_breath_02":"dragon_breath_01",layer:"unit",scale:1,loop:!1}
- }
+ super.setData(t),this.struck=!1}
+ setLine(t,i,s,e,n,h){
+ this.lineX=t,this.lineY=i,this.lineDirX=s,this.lineDirY=e,this.lineLength=n,this.lineHalfWidth=h}
+ play(){
+ var t;
+ super.play(),eQ((null==(t=this.owner)?void 0:t.kindNum)??0,"dragon_breath")}
- this.struckFrames.has(t)||this.hitFrames.includes(t)&&(this.struckFrames.add(t),this.dealBreathDamage())}
- dealBreathDamage(){
- if(this.owner&&this.owner.isAlive)for(const i of this.owner.enemyList)this.isEnemyInArea(i)&&this.owner.doDamage(i,this.random.range(t.DMG_MIN,t.DMG_MAX),!0)}
+ this.struck||i<t.HIT_FRAME||(this.struck=!0,this.dealLineDamage())}
+ dealLineDamage(){
+ if(this.owner&&this.owner.isAlive)for(const i of this.owner.enemyList){
+ if(!i.isAlive||i.removed||i.isUntagetable)continue;
+ const s=i.x-this.lineX,e=i.y-this.lineY,n=s*this.lineDirX+e*this.lineDirY;
+ n<0||n>this.lineLength||(Math.abs(s*-this.lineDirY+e*this.lineDirX)>this.lineHalfWidth||this.owner.doDamage(i,this.random.range(t.DMG_MIN,t.DMG_MAX),!0))}
+ }
- Kt(ZZ,"SummonDragon"),zt(ZZ,"RADIUS",150),zt(ZZ,"DMG_MIN",.5),zt(ZZ,"DMG_MAX",1),zt(ZZ,"BREATH1_DURATION",160),zt(ZZ,"BREATH1_HITS",[60,80,100,120,140]),zt(ZZ,"BREATH2_DURATION",120),zt(ZZ,"BREATH2_HITS",[44,60,80,100]);
+ Vt(pQ,"SummonDragon"),Kt(pQ,"DURATION",160),Kt(pQ,"HIT_FRAME",60),Kt(pQ,"DMG_MIN",1),Kt(pQ,"DMG_MAX",2);
+ let gQ=pQ;
+ const mQ=class t extends rj{
+ constructor(){
+ super(...arguments),Kt(this,"landed",!1),Kt(this,"landedFrame",0),Kt(this,"spawnX",0),Kt(this,"groundY",0),Kt(this,"aoeRadius",0)}
+ initializeTextureName(){
+ this.className=nj.DKSpear,this.sheetName="RaidBattle",this.textureName="DKSpear"}
+ generateSprite(){
+ super.generateSprite(),this.sp&&this.sp.anchor.set(t.TIP_ANCHOR_X,1)}
+ initializeData(){
+ this.hitClassName="",this.g=0,this.speed=t.FALL_SPEED,this.flyEnd=t.FLY_FRAME_COUNT,this.incFrame=1,this.minT=5,this.maxT=40,this.orientToPath=!1,this.weaponScale=t.WEAPON_SCALE}
+ setData(t=1){
+ super.setData(t),this.landed=!1,this.landedFrame=0,this.groundY=0,this.aoeRadius=0}
+ setGroundTarget(t,i){
+ this.groundY=t,this.aoeRadius=i}
+ play(){
+ this.spawnX=this.x,this.visible=!0,this.removed=!1,this.battleController&&this.battleController.addWeapon(this)}
+ execute(){
+ if(!this.removed)if(this.landed)this.updateLanded();
+ else{
+ if(this.delay>0)return this.delay--,void(this.visible=!1);
+ this.visible=!0,this.x=this.spawnX,this.y+=t.FALL_SPEED,this.rotation=0,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp&&(this.sp.texture=this.textures[Math.floor(this.currentFrame)]),this.y>=this.groundY&&(this.y=this.groundY,this.onHit())}
+ }
+ onHit(){
+ this.aoeRadius>0&&this.applyAoe(),this.landed=!0,this.landedFrame=t.FLY_FRAME_COUNT,this.vx=0,this.vy=0,this.sp&&(this.sp.texture=this.textures[t.FLY_FRAME_COUNT])}
+ updateLanded(){
+ const i=this.textures.length-1;
+ if(this.landedFrame+=t.LANDED_FRAME_SPEED,this.landedFrame>=i)return void this.remove();
+ const s=Math.min(i,Math.floor(this.landedFrame));
+ this.sp&&(this.sp.texture=this.textures[s])}
+ applyAoe(){
+ var t;
+ const i=null==(t=this.owner)?void 0:t.enemyList;
+ if(!this.owner||!i)return;
+ const s=this.owner,e=this.aoeRadius*this.aoeRadius;
+ for(const n of i){
+ if(!n.isAlive||n.removed||n.isUntagetable)continue;
+ const t=n.x-this.x,i=n.y-this.y;
+ t*t+i*i>e||s.trySpearHit&&!s.trySpearHit(n)||(this.owner.doDamage(n,this.damagePercent,!0),n.isAlive&&!n.isImmovable&&this.knockAwayFrom(n,this.x,this.y))}
+ }
+ knockAwayFrom(i,s,e){
+ let n=i.x-s,h=i.y-e,r=Math.sqrt(n*n+h*h);
+ r<.01&&(n=1,h=0,r=1);
+ const o=this.random.range(t.KNOCKBACK_DIST_MIN,t.KNOCKBACK_DIST_MAX),a=t.KNOCKBACK_DURATION;
+ i.knockBack(n/r*(o/a),h/r*(o/a),a)}
+ }
+ ;
+ Vt(mQ,"DKSpear"),Kt(mQ,"FLY_FRAME_COUNT",2),Kt(mQ,"LANDED_FRAME_SPEED",.5),Kt(mQ,"WEAPON_SCALE",.8),Kt(mQ,"KNOCKBACK_DIST_MIN",28),Kt(mQ,"KNOCKBACK_DIST_MAX",52),Kt(mQ,"KNOCKBACK_DURATION",14),Kt(mQ,"FALL_SPEED",50),Kt(mQ,"TIP_ANCHOR_X",.44);
HeroUpgradeManager 4 hunks, 66 statements
- 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 hD.getInstance().referral.getMyReferralCode();
- try{
- const i=new URL(t);
- Array.from(i.searchParams.keys()).length>0&&(this._referralCode=t)}
- catch(i){
+ constructor(){
+ Kt(this,"acc",[0])}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ setBookData(t){
+ const i=String(t[0].golds).split("|").map(Number);
+ i.length>0&&0===i[i.length-1]&&i.pop(),this.acc=[0,...i]}
+ init(){
- 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,lS.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;
+ getGoldForLevel(t){
+ return t<1||t>=this.acc.length?0:this.acc[t]-this.acc[t-1]}
+ getTotalGold(t,i){
+ return t>=i?0:(i>=this.acc.length&&(i=this.acc.length-1),t<0&&(t=0),this.acc[i]-this.acc[t])}
+ getMaxAffordableLevel(t,i){
+ let s=t,e=this.acc.length-1;
+ for(;
- ++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 hD.getInstance().referral.claimReward(i,!0);
- if(0==s.success){
- this.requestPending3=!1,lS.getInstance().dispatchCustomEvent("ReferralStatus");
- let e=s.errorMessage;
- const n=s.error;
- return"INSUFFICIENT_REFERRAL"==n?e=AG.getValueReplaceMulti("GAME_145",["##","@@"],[t.FRIEND_LEVEL,i]):"ALREADY_CLAIMED"==n&&(e=AG.getText("COMMON_276","이미 보상을 받았습니다.")),void mG.getInstance().show(e)}
- "status"in s.body&&this.setStatusData(s.body.status),this.requestPending3=!1,lS.getInstance().dispatchCustomEvent("ReferralStatus",s)}
- static hasReward(){
- return this.claimed<this.qualifiedReferrals}
+ ){
+ const n=Math.floor((s+e+1)/2);
+ this.acc[n]-this.acc[t]<=i?s=n:e=n-1}
+ return s}
+ static get BASE_MAX_LEVEL(){
+ if(-1==this._BASE_MAX_LEVEL){
+ let t=AL.getInstance().getClientData("HERO_MAX_LEVEL");
+ t||(t="1000"),this._BASE_MAX_LEVEL=Number(t)}
+ return this._BASE_MAX_LEVEL}
+ static getMaxLevelByGrade(){
+ if(null!==this._maxLevelByGrade)return this._maxLevelByGrade;
+ const t=AL.getInstance().getClientData("HERO_MAX_LEVEL_BY_GRADE");
+ return t?(this._maxLevelByGrade=t.split("|").map(Number),this._maxLevelByGrade):null}
+ static getBaseMaxLevelForGrade(t){
+ const i=this.getMaxLevelByGrade();
+ return i&&t>=1&&t<=i.length?i[t-1]:this.BASE_MAX_LEVEL}
+ getMaxLevel(i,s=0){
+ const e=VR.getInstance().getGameplayTotal(OR.MaxLv),n=cx.getInstance().getPetPoint(),h=Math.max(0,s)*t.TRANS_MAX_LEVEL_BONUS,r=Math.floor(wx.getInstance().totalTransPoint),o=IR.getWyvernRiderMaxLvContribution(),a=i?t.getBaseMaxLevelForGrade(i):t.BASE_MAX_LEVEL;
+ return Math.min(this.acc.length-1,a+e+n+h+r+o)}
- Kt(b3,"FriendInviteManager"),zt(b3,"FRIEND_LEVEL",50),zt(b3,"GEM_PER_FRIEND",100),zt(b3,"_referralCode",""),zt(b3,"requestPending1",!1),zt(b3,"requestPending2",!1),zt(b3,"_totalReferrals",0),zt(b3,"_qualifiedReferrals",0),zt(b3,"_claimed",0),zt(b3,"rewardList",[]),zt(b3,"requestPending3",!1);
+ Vt(V2,"HeroUpgradeManager"),Kt(V2,"instance"),Kt(V2,"_BASE_MAX_LEVEL",-1),Kt(V2,"_maxLevelByGrade",null),Kt(V2,"TRANS_MAX_LEVEL_BONUS",100);
ScorpionKing 22 hunks, 65 statements
- super(...arguments),zt(this,"att02PullFramesRemaining",0),zt(this,"att02DamageApplied",!1),zt(this,"att03BulletBatchesFired",0)}
+ super(...arguments),Kt(this,"att02PullFramesRemaining",0),Kt(this,"att02DamageApplied",!1),Kt(this,"att03BulletBatchesFired",0),Kt(this,"att3PoisonWarning",null),Kt(this,"att3PoisonWarningFrames",0),Kt(this,"att3PoisonPos",null),Kt(this,"att3PoisonSpawnPending",!1)}
- this.spineKey="raids/raid1/Scorpion",this.bossScale=1.3,this.spineTimeScale=.82,this.wanderEnabled=!0,this.wanderInterval=150,this.targetSwapChance=.25,this.wanderAfterAttackChance=.35,this.aniIdle="idle",this.aniMove="run",this.aniDie="die",this.aniSkill0="att_01",this.aniSkills=["att_02","att_03","att_04"],this.eventSkill0Hit="att_01_hit",this.eventSkillHits=["att_02_hit","att_03_hit","att_04_hit"],this.isAir=!1,this.hitWidth=150,this.hitHeight=100,this.weakPointBone="_face",this.weakPointSlotNames=t.FACE_POINT_NAMES,this.weakPointOffsetX=0,this.headTintSlots=t.FACE_POINT_NAMES,this.skillRatio=[.78,.55,.3,0],this.numForSkillAttack=2,this.attackOrderList=[[0,0,2,0,1,0,3,0,0]],this.raidPhases=[{
+ this.spineKey="raids/raid1/Scorpion",this.bossScale=1.3,this.spineTimeScale=.82,this.wanderEnabled=!0,this.wanderInterval=150,this.targetSwapChance=.25,this.wanderAfterAttackChance=.35,this.aniIdle="idle",this.aniMove="run",this.aniDie="die",this.aniSkill0="att_01",this.aniSkills=["att_02","att_03","att_04"],this.eventSkill0Hit="att_01_hit",this.eventSkillHits=["att_02_hit","att_03_hit","att_04_hit"],this.isAir=!1,this.hitWidth=150,this.hitHeight=100,this.weakPointBone="_face",this.weakPointSlotNames=t.FACE_POINT_NAMES,this.weakPointOffsetX=0,this.headTintSlots=t.FACE_POINT_NAMES,this.skillRatio=[.78,.55,.3,0],this.numForSkillAttack=2,this.exhaustEnabled=!0,this.interruptEnabled=!0,this.interruptAlwaysOpen=t.INTERRUPT_ALWAYS_OPEN,this.interruptWeakBones=t.INTERRUPT_WEAK_BONES,this.interruptWeakLabels=t.INTERRUPT_WEAK_LABELS,this.attackOrderList=[[0,0,2,0,1,0,3,0,0]],this.raidPhases=[{
- this.resetAtt02State(),super.skill0(t),this.startAttackDashTo(t.x,t.y,55)}
- skillN(t){
- if(super.skillN(t),this.resetAtt02State(),2===t){
+ this.resetAtt02State(),super.skill0(t),this.startAttackDashTo(t.x,t.y,75)}
+ performSkillN(i){
+ if(super.performSkillN(i),this.resetAtt02State(),2===i){
- t&&this.startAttackDashTo(t.x,t.y,55)}
+ if(i){
+ const s=this.x-i.x,e=this.y-i.y,n=Math.sqrt(s*s+e*e),h=n>.01?s/n:-this.direction,r=n>.01?e/n:0;
+ this.startAttackDashTo(this.x+h*t.ATT3_RETREAT_DIST,this.y+r*t.ATT3_RETREAT_DIST,t.ATT3_RETREAT_FRAMES)}
+ this.startAtt3PoisonWarning()}
+ startAtt3PoisonWarning(){
+ var i;
+ this.clearAtt3PoisonWarning();
+ const s=this.battleController,e=(null==(i=null==s?void 0:s.getTopRangedSoldierZone)?void 0:i.call(s))??this.computeEnemyCentroid();
+ e&&(this.att3PoisonPos={
+ x:e.x,y:e.y}
+ ,this.att3PoisonWarning=new SK,this.att3PoisonWarning.show(e.x,e.y,t.POISON_AREA_RADIUS_X,t.POISON_AREA_RADIUS_Y/t.POISON_AREA_RADIUS_X),this.att3PoisonWarningFrames=0)}
+ updateAtt3PoisonWarning(){
+ var i,s,e;
+ this.att3PoisonWarning&&(this.att3PoisonWarningFrames++,this.att3PoisonWarning.update(Math.min(1,this.att3PoisonWarningFrames/t.ATT3_POISON_WARNING_MIN_FRAMES)),this.att3PoisonSpawnPending?this.att3PoisonWarningFrames>=t.ATT3_POISON_WARNING_MIN_FRAMES&&this.spawnPoisonAreaAtWarning():this.att3PoisonWarningFrames>t.ATT3_RETREAT_FRAMES&&"att_03"!==(null==(e=null==(s=null==(i=this.spine)?void 0:i.state.getCurrent(0))?void 0:s.animation)?void 0:e.name)&&this.clearAtt3PoisonWarning())}
+ spawnPoisonAreaAtWarning(){
+ const t=this.att3PoisonPos;
+ this.clearAtt3PoisonWarning(),t&&this.spawnPoisonArea(t.x,t.y)}
+ clearAtt3PoisonWarning(){
+ var t;
+ null==(t=this.att3PoisonWarning)||t.dispose(),this.att3PoisonWarning=null,this.att3PoisonPos=null,this.att3PoisonSpawnPending=!1,this.att3PoisonWarningFrames=0}
- if(!this.enemyList)return;
+ if(!this.enemyList)return 0;
+ let e=0;
- this.doDamage(n,o,!0)}
- }
+ this.doDamage(h,a,!0),e++}
+ return e}
- this.att02PullFramesRemaining<=0?this.startAtt02Pull():this.pullEnemiesToAtt02Center(),this.att02DamageApplied||(this.att02DamageApplied=!0,this.applyAtt02Splash())}
+ this.consumeInterruptWindow()||(this.att02PullFramesRemaining<=0?this.startAtt02Pull():this.pullEnemiesToAtt02Center(),this.att02DamageApplied||(this.att02DamageApplied=!0,this.applyAtt02Splash()))}
- this.att03BulletBatchesFired>=t.POISON_BULLET_MAX_BATCHES||(this.att03BulletBatchesFired++,this.firePoisonBulletVolley(t.POISON_BULLET_BATCH_COUNT))}
+ this.consumeInterruptWindow()||this.att03BulletBatchesFired>=t.POISON_BULLET_MAX_BATCHES||(this.att03BulletBatchesFired++,this.firePoisonBulletVolley(t.POISON_BULLET_BATCH_COUNT),1===this.att03BulletBatchesFired&&this.att3PoisonPos&&(this.att3PoisonWarningFrames>=t.ATT3_POISON_WARNING_MIN_FRAMES?this.spawnPoisonAreaAtWarning():this.att3PoisonSpawnPending=!0))}
+ if(this.consumeInterruptWindow())return;
+ const i=this.getAtt04ImpactCenter();
+ this.applyAtt04ImpactDamage(i.x,i.y),this.startShockwave(i.x,i.y,t.ATT4_SHOCK_MAX_RADIUS)}
+ getAtt04ImpactCenter(){
+ ,s=this.x-i.x,e=this.y-i.y,n=Math.sqrt(s*s+e*e);
+ if(n<.01)return{
+ x:i.x,y:i.y}
- this.applyAtt04ImpactDamage(i.x,i.y),this.radialBlow(i.x,i.y,t.ATT4_BLOW_RADIUS,t.ATT4_BLOW_POWER_MIN,t.ATT4_BLOW_POWER_MAX,t.ATT4_BLOW_VH_MIN,t.ATT4_BLOW_VH_MAX)}
+ const h=t.ATT4_SHOCK_CENTER_TOWARD_BODY;
+ return{
+ x:i.x+s/n*h,y:i.y+e/n*h}
+ }
- this.resetAtt02State()}
+ super.onRaidStunStart(),this.resetAtt02State(),this.clearAtt3PoisonWarning()}
+ resetForPool(){
+ super.resetForPool(),this.resetAtt02State(),this.att03BulletBatchesFired=0,this.clearAtt3PoisonWarning()}
+ remove(){
+ this.clearAtt3PoisonWarning(),super.remove()}
- super.execute(),this.updateAtt02Pull()}
+ super.execute(),this.updateAtt02Pull(),this.updateAtt3PoisonWarning()}
- this.att02PullFramesRemaining=0,this.att02DamageApplied=!1}
+ this.att02PullFramesRemaining>0&&this.onAtt02PullReleased(),this.att02PullFramesRemaining=0,this.att02DamageApplied=!1}
+ onAtt02PullReleased(){
+ var i;
+ const s=this.getAtt02SplashCenter(),e=this.battleController;
+ null==(i=null==e?void 0:e.requestSeparationBurst)||i.call(e,s.x,s.y,t.ATT2_PULL_RADIUS,45)}
- this.att02PullFramesRemaining<=0||(this.state===ex.SKILL?(this.pullEnemiesToAtt02Center(),this.att02PullFramesRemaining--):this.att02PullFramesRemaining=0)}
+ if(!(this.att02PullFramesRemaining<=0)){
+ if(this.state!==sx.SKILL)return this.att02PullFramesRemaining=0,void this.onAtt02PullReleased();
+ this.pullEnemiesToAtt02Center(),this.att02PullFramesRemaining--,this.att02PullFramesRemaining<=0&&this.onAtt02PullReleased()}
+ }
- this.radialBlow(i.x,i.y,t.ATT2_SPLASH_RADIUS,3.5,8.5,2,5.5),this.spawnAtt02PoisonArea(i.x,i.y)}
+ this.radialBlow(i.x,i.y,t.ATT2_SPLASH_RADIUS,3.5,8.5,2,5.5)}
- spawnAtt02PoisonArea(i,s){
+ spawnPoisonArea(i,s){
- e.owner=this,e.target=null,e.x=i,e.y=s,e.setBattleController(this.battleController),e.setData(t.ATT2_POISON_AREA_DAMAGE_PER_SEC),e.setEllipseArea(t.ATT2_POISON_AREA_RADIUS_X,t.ATT2_POISON_AREA_RADIUS_Y,t.ATT2_POISON_AREA_DURATION),e.play()}
+ e.owner=this,e.target=null,e.x=i,e.y=s,e.setBattleController(this.battleController),e.setData(t.POISON_AREA_DAMAGE_PER_SEC),e.setEllipseArea(t.POISON_AREA_RADIUS_X,t.POISON_AREA_RADIUS_Y,t.POISON_AREA_DURATION),e.play()}
- const i=this.getBoneWorld(t.ATT4_HIT_BONE)??{
- x:this.x,y:this.y}
- ;
+ const i=this.getAtt04ImpactCenter();
+ eQ(this.kindNum,"poison_bullet");
- Kt(s3,"ScorpionKing"),zt(s3,"FACE_POINT_NAMES",["_face","face_"]),zt(s3,"BLOW_SCALE",.7),zt(s3,"POISON_BULLET_BATCH_COUNT",16),zt(s3,"POISON_BULLET_MAX_BATCHES",7),zt(s3,"POISON_BULLET_DAMAGE_MIN",1),zt(s3,"POISON_BULLET_DAMAGE_MAX",2),zt(s3,"ATT1_TARGET_BONE","target_01"),zt(s3,"ATT1_RADIUS",100),zt(s3,"ATT1_DAMAGE_MIN",1),zt(s3,"ATT1_DAMAGE_MAX",3),zt(s3,"ATT2_SPINE_FPS",30),zt(s3,"ATT2_SPLASH_START_SPINE_FRAME",24),zt(s3,"ATT2_SPLASH_END_SPINE_FRAME",58),zt(s3,"ATT2_SPLASH_RADIUS",150),zt(s3,"ATT2_DAMAGE_MIN",1.5),zt(s3,"ATT2_DAMAGE_MAX",3),zt(s3,"ATT2_POISON_MIN",100),zt(s3,"ATT2_POISON_MAX",150),zt(s3,"ATT2_SPLASH_BONE","Splash-01"),zt(s3,"ATT2_SPLASH_LOCAL_X",-133.46),zt(s3,"ATT2_SPLASH_LOCAL_Y",-17.69),zt(s3,"ATT2_SPLASH_CENTER_EPSILON",20),zt(s3,"ATT2_PULL_RADIUS",200),zt(s3,"ATT2_PULL_SPEED",12),zt(s3,"ATT2_POISON_AREA_RADIUS_X",112.5),zt(s3,"ATT2_POISON_AREA_RADIUS_Y",54),zt(s3,"ATT2_POISON_AREA_DURATION",1200),zt(s3,"ATT2_POISON_AREA_DAMAGE_PER_SEC",1),zt(s3,"ATT3_RADIUS",280),zt(s3,"ATT4_HIT_BONE","hit_01"),zt(s3,"ATT4_BABY_HIT_EVENT","baby_att_hit"),zt(s3,"ATT4_BLOW_RADIUS",200),zt(s3,"ATT4_BLOW_POWER_MIN",5),zt(s3,"ATT4_BLOW_POWER_MAX",14),zt(s3,"ATT4_BLOW_VH_MIN",3),zt(s3,"ATT4_BLOW_VH_MAX",9),zt(s3,"ATT4_IMPACT_RADIUS",110),zt(s3,"ATT4_DAMAGE_MIN",1),zt(s3,"ATT4_DAMAGE_MAX",3),zt(s3,"ATT4_STUN_DURATION",240),zt(s3,"ATT4_KNOCKBACK_RADIUS",100),zt(s3,"ATT4_KNOCKBACK_POWER_MIN",6),zt(s3,"ATT4_KNOCKBACK_POWER_MAX",10),zt(s3,"ATT4_KNOCKBACK_DURATION",18);
+ Vt(T2,"ScorpionKing"),Kt(T2,"FACE_POINT_NAMES",["_face","face_"]),Kt(T2,"BLOW_SCALE",.7),Kt(T2,"POISON_BULLET_BATCH_COUNT",16),Kt(T2,"POISON_BULLET_MAX_BATCHES",7),Kt(T2,"POISON_BULLET_DAMAGE_MIN",1),Kt(T2,"POISON_BULLET_DAMAGE_MAX",2),Kt(T2,"ATT1_TARGET_BONE","target_01"),Kt(T2,"ATT1_RADIUS",100),Kt(T2,"ATT1_DAMAGE_MIN",1),Kt(T2,"ATT1_DAMAGE_MAX",3),Kt(T2,"ATT2_SPINE_FPS",30),Kt(T2,"ATT2_SPLASH_START_SPINE_FRAME",24),Kt(T2,"ATT2_SPLASH_END_SPINE_FRAME",58),Kt(T2,"ATT2_SPLASH_RADIUS",150),Kt(T2,"ATT2_DAMAGE_MIN",1.5),Kt(T2,"ATT2_DAMAGE_MAX",3),Kt(T2,"ATT2_POISON_MIN",100),Kt(T2,"ATT2_POISON_MAX",150),Kt(T2,"ATT2_SPLASH_BONE","Splash-01"),Kt(T2,"ATT2_SPLASH_LOCAL_X",-133.46),Kt(T2,"ATT2_SPLASH_LOCAL_Y",-17.69),Kt(T2,"ATT2_SPLASH_CENTER_EPSILON",20),Kt(T2,"ATT2_PULL_RADIUS",200),Kt(T2,"ATT2_PULL_SPEED",12),Kt(T2,"POISON_AREA_RADIUS_X",112.5),Kt(T2,"POISON_AREA_RADIUS_Y",54),Kt(T2,"POISON_AREA_DURATION",1200),Kt(T2,"POISON_AREA_DAMAGE_PER_SEC",.4),Kt(T2,"ATT3_RETREAT_DIST",260),Kt(T2,"ATT3_RETREAT_FRAMES",38),Kt(T2,"ATT3_POISON_WARNING_MIN_FRAMES",90),Kt(T2,"ATT4_HIT_BONE","tail_ball"),Kt(T2,"ATT4_BABY_HIT_EVENT","baby_att_hit"),Kt(T2,"ATT4_SHOCK_MAX_RADIUS",300),Kt(T2,"ATT4_SHOCK_CENTER_TOWARD_BODY",55),Kt(T2,"ATT4_IMPACT_RADIUS",110),Kt(T2,"ATT4_DAMAGE_MIN",1),Kt(T2,"ATT4_DAMAGE_MAX",3),Kt(T2,"ATT4_STUN_DURATION",240),Kt(T2,"ATT4_KNOCKBACK_RADIUS",180),Kt(T2,"ATT4_KNOCKBACK_POWER_MIN",6),Kt(T2,"ATT4_KNOCKBACK_POWER_MAX",10),Kt(T2,"ATT4_KNOCKBACK_DURATION",18),Kt(T2,"INTERRUPT_ALWAYS_OPEN",!0),Kt(T2,"INTERRUPT_WEAK_BONES",["arm_L12","body","arm_R","body2f","tail_ball"]),Kt(T2,"INTERRUPT_WEAK_LABELS",["왼쪽 집게","중앙","오른쪽 집게","꼬리","독침"]);
RightMenu 12 hunks, 59 statements
- super(),zt(this,"btnSetting"),zt(this,"btnMail"),zt(this,"btnHelp"),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,"btnInvite"),zt(this,"btnPayback"),zt(this,"btnTournament"),zt(this,"dailyCheckCount",0),zt(this,"onDailyRedDotCheck",Kt(()=>{
- ++this.dailyCheckCount<60||(this.dailyCheckCount=0,this.updateRedDotForDaily())}
- ,"onDailyRedDotCheck")),zt(this,"onPetDataChangeBind"),zt(this,"_opened",!1),zt(this,"count",0),zt(this,"countUtc0",0),zt(this,"onReviveBind"),zt(this,"onMailChangeBind"),zt(this,"onReferralStatusBind"),zt(this,"onPaybackEventBind"),zt(this,"onPaymentSuccessBind"),zt(this,"onAchieveStatusBind"),zt(this,"onPassStatusBind"),zt(this,"onGuildInfoUpdateBind"),zt(this,"petPoint",new mi),zt(this,"petPointInitialized",!1),zt(this,"guildPoint",new mi),zt(this,"guildPointInitialized",!1),this.btnHelp=new mB("UI","Btn_help_p"),this.btnHelp.y=-50,this.btnHelp.onClick=this.onHelpBtnClick.bind(this),this.btnHelp.visible=TL.getInstance().development;
+ super(),Kt(this,"btnSetting"),Kt(this,"btnMail"),Kt(this,"btnHelp"),Kt(this,"indicator"),Kt(this,"indicatorArea"),Kt(this,"bg"),Kt(this,"container"),Kt(this,"btnRanking"),Kt(this,"btnAchieve"),Kt(this,"btnPass"),Kt(this,"btnGuild"),Kt(this,"btnPet"),Kt(this,"btnInventory"),Kt(this,"btnDaily"),Kt(this,"btnMine"),Kt(this,"btnInvite"),Kt(this,"btnPayback"),Kt(this,"btnTournament"),Kt(this,"_opened",!1),Kt(this,"count",0),Kt(this,"onPetDataChangeBind"),Kt(this,"countUtc0",0),Kt(this,"onReviveBind"),Kt(this,"onMailChangeBind"),Kt(this,"onReferralStatusBind"),Kt(this,"onPaybackEventBind"),Kt(this,"onPaymentSuccessBind"),Kt(this,"onAchieveStatusBind"),Kt(this,"onPassStatusBind"),Kt(this,"onGuildInfoUpdateBind"),Kt(this,"petPoint",new gi),Kt(this,"petPointInitialized",!1),Kt(this,"guildPoint",new gi),Kt(this,"guildPointInitialized",!1),Kt(this,"indicatorRedDot"),this.btnHelp=new MB("UI","Btn_help_p"),this.btnHelp.y=-50,this.btnHelp.onClick=this.onHelpBtnClick.bind(this),this.btnHelp.visible=CL.getInstance().development;
- ),this.container.addChild(this.bg),this.indicator=new We(ZA.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 We(ZA.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 mB("UI_Ekkorr","Icon_Ranking"),this.btnAchieve=new mB("UI_Ekkorr","Btn_Achieve"),this.btnPass=new mB("UI_Ekkorr","Btn_Pass"),this.btnGuild=new mB("UI_Ekkorr","Btn_Guild"),this.btnPet=new mB("UI_Ekkorr","Icon_Pet"),this.btnInventory=new mB("UI_Ekkorr","Icon_Inventory"),this.btnDaily=new mB("UI_Ekkorr","Icon_Daily"),this.btnMine=new mB("UI_Ekkorr","Btn_Mine"),this.btnInvite=new mB("UI_Ekkorr","Btn_Friend"),this.btnPayback=new mB("UI_Ekkorr","Btn_Payback"),this.btnTournament=new mB("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)}
+ ),this.container.addChild(this.bg),this.indicator=new He(QA.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 He(QA.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 MB("UI_Ekkorr","Icon_Ranking"),this.btnAchieve=new MB("UI_Ekkorr","Btn_Achieve"),this.btnPass=new MB("UI_Ekkorr","Btn_Pass"),this.btnGuild=new MB("UI_Ekkorr","Btn_Guild"),this.btnPet=new MB("UI_Ekkorr","Icon_Pet"),this.btnInventory=new MB("UI_Ekkorr","Icon_Inventory"),this.btnDaily=new MB("UI_Ekkorr","Icon_Daily"),this.btnMine=new MB("UI_Ekkorr","Btn_Mine"),this.btnInvite=new MB("UI_Ekkorr","Btn_Friend"),this.btnPayback=new MB("UI_Ekkorr","Btn_Payback"),this.btnTournament=new MB("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),Tei.getInstance().registerRightMenuIndicatorButtonGetter(t=>"indicatorArea"===t&&this.indicatorArea.visible?{
+ parent:this.container,btn:{
+ x:this.indicatorArea.x-10,y:this.indicatorArea.y-10,width:this.indicatorArea.width,height:this.indicatorArea.height}
+ }
+ :null),Tei.getInstance().registerDailyQuestButtonGetter(t=>"btnDaily"===t&&this.btnDaily.visible?{
+ parent:this.container,btn:{
+ x:this.btnDaily.x,y:this.btnDaily.y,width:this.btnDaily.width,height:this.btnDaily.height}
+ }
+ :null),Tei.getInstance().registerPetButtonGetter(t=>"btnPet"===t&&this.btnPet.visible?{
+ parent:this.container,btn:{
+ x:this.btnPet.x,y:this.btnPet.y,width:this.btnPet.width,height:this.btnPet.height}
+ }
+ :null),Tei.getInstance().registerMineButtonGetter(t=>"btnMine"===t&&this.btnMine.visible?{
+ parent:this.container,btn:{
+ x:this.btnMine.x,y:this.btnMine.y,width:this.btnMine.width,height:this.btnMine.height}
+ }
+ :null),Tei.getInstance().registerGuildButtonGetter(t=>"btnGuild"===t&&this.btnGuild.visible?{
+ parent:this.container,btn:{
+ x:this.btnGuild.x,y:this.btnGuild.y,width:this.btnGuild.width,height:this.btnGuild.height}
+ }
+ :null)}
- 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),GM.getInstance().add(this.onDailyRedDotCheck,this)}
+ 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(!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),GM.getInstance().remove(this.onDailyRedDotCheck,this)}
- setPetDataChange(t){
- lS.getInstance().removeEventListener("PetDataChanged",this.onPetDataChangeBind),t&&(this.onPetDataChangeBind=this.onPetDataChange.bind(this),lS.getInstance().addEventListener("PetDataChanged",this.onPetDataChangeBind))}
- onPetDataChange(){
- this.updateRedDotForPet()}
+ 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)}
- t!=this._opened&&(this._opened=t,this._opened?(this.indicator.texture=ZA.getTexture("UI_Ekkorr","UI_Menu_Close"),this.update(),this.openMotion()):(this.indicator.texture=ZA.getTexture("UI_Ekkorr","UI_Menu_Open"),this.closeMotion()))}
+ t!=this._opened&&(this._opened=t,this._opened?(this.indicator.texture=QA.getTexture("UI_Ekkorr","UI_Menu_Close"),this.update(),this.openMotion(),this.hideIndicatorRedDot()):(this.indicator.texture=QA.getTexture("UI_Ekkorr","UI_Menu_Open"),this.closeMotion(),this.checkIndicatorRedDot()))}
+ this.setEnterUpdate(!1);
- _L.numRevive>=1&&(t.push(this.btnDaily),this.updateRedDotForDaily(),0==hK.getInstance().isReviewShop()&&t.push(this.btnPass)),ED.opened&&ED.unlocked&&(t.push(this.btnGuild),this.setEnterUpdateUtc0(!0)),this.setEnterUpdateUtc0(!1),_L.maxWave>=lx.getInstance().unlockWave&&(t.push(this.btnPet),this.updateRedDotForPet()),_L.maxWave>=200&&t.push(this.btnMine);
+ ML.numRevive>=1&&(t.push(this.btnDaily),this.updateRedDotForDaily(),0==t5.getInstance().isReviewShop()&&t.push(this.btnPass));
+ let i=!1;
+ AD.opened&&AD.unlocked&&(i=!0,t.push(this.btnGuild),this.setEnterUpdateUtc0(!0)),this.setEnterUpdateUtc0(i),ML.maxWave>=cx.getInstance().unlockWave&&(t.push(this.btnPet),this.updateRedDotForPet()),ML.maxWave>=200&&xG.isValidEvent(RG.MINE_EVENT)&&t.push(this.btnMine);
- r&&(this.bg.width=e.length*r.width+50+10,this.bg.height=h+13),this.setEnterUpdate(!1)}
+ o&&(this.bg.width=n.length*o.width+50+10,this.bg.height=r+13),this.setEnterUpdate(!0)}
+ async executeOnInventoryBtnClick(){
+ this.onInventoryBtnClick()}
- ++this.count>60&&(this.count=0,this.onEnterUpdate())}
+ ++this.count<60||(this.count=0,this.onEnterUpdate())}
- const t=null!=this.btnPayback.parent,i=N3.isPaybackEnded();
- 1==t&&1==i&&(R8t.getInstance().hide(),this.update(),N3.getPaybackEvent(3))}
+ this._opened?ML.numRevive>=1&&this.updateRedDotForDaily():this.checkIndicatorRedDot(),ML.maxWave>=200&&(!this.btnMine.parent&&xG.isValidEvent(RG.MINE_EVENT)||this.btnMine.parent&&!xG.isValidEvent(RG.MINE_EVENT))&&this.update()}
+ setPetDataChange(t){
+ cS.getInstance().removeEventListener("PetDataChanged",this.onPetDataChangeBind),t&&(this.onPetDataChangeBind=this.onPetDataChange.bind(this),cS.getInstance().addEventListener("PetDataChanged",this.onPetDataChangeBind))}
+ onPetDataChange(){
+ this.updateRedDotForPet()}
+ showIndicatorRedDot(){
+ this.indicatorRedDot||(this.indicatorRedDot=new JL,this.indicator.addChild(this.indicatorRedDot)),this.indicatorRedDot.show(),this.updateIndicatorRedDot()}
+ hideIndicatorRedDot(){
+ this.indicatorRedDot&&this.indicatorRedDot.hide()}
+ updateIndicatorRedDot(){
+ this.indicatorRedDot&&(this.indicatorRedDot.x=-this.indicator.width,this.indicatorRedDot.y=-this.indicator.height+.5*this.indicatorRedDot.height)}
+ async checkIndicatorRedDot(){
+ let t=!1;
+ if(t=wVt.getInstance().hasReward(),t)this.showIndicatorRedDot();
+ else{
+ if(ML.numRevive>=1){
+ if(t=lVt.getInstance().hasClaimable(),t)return void this.showIndicatorRedDot();
+ if(0==t5.getInstance().isReviewShop()&&(t=gD.getInstance().hasReward(),t))return void this.showIndicatorRedDot()}
+ ML.maxWave>=cx.getInstance().unlockWave&&(t=cx.getInstance().hasAnyEvolvable(),t)||AD.opened&&AD.unlocked&&(t=await AD.checkRedDot(),t)||RVt.opened&&(t=RVt.hasReward(),t)||_Vt.opened&&(t=_Vt.hasReward(),t)?this.showIndicatorRedDot():this.hideIndicatorRedDot()}
+ }
ConfigManager 2 hunks, 48 statements
- zt(this,"_envPlatform",""),zt(this,"_buildType",""),zt(this,"_isPlayGamesPC",null),zt(this,"adWhiteUser",!1),zt(this,"clientData"),zt(this,"timeoutMilliSeconds",3e3),zt(this,"_deviceLanguage",""),zt(this,"HERO_TRANSCEND_TICKET",null),zt(this,"HERO_MASS_TRANSCEND",null),zt(this,"HERO_MASS_EVOLVE",null)}
+ Kt(this,"_envPlatform",""),Kt(this,"_buildType",""),Kt(this,"_isPlayGamesPC",null),Kt(this,"adWhiteUser",!1),Kt(this,"clientData"),Kt(this,"timeoutMilliSeconds",3e3),Kt(this,"_deviceLanguage",""),Kt(this,"HERO_TRANSCEND_TICKET",null),Kt(this,"HERO_MASS_TRANSCEND",null),Kt(this,"HERO_MASS_EVOLVE",null),Kt(this,"TREASURE_TRANSCEND_TICKET",null),Kt(this,"_sRegion",""),Kt(this,"_sOs",""),Kt(this,"_sOsVersion",""),Kt(this,"_sModel",""),Kt(this,"_sAfStatus",""),Kt(this,"_sMediaSource",""),Kt(this,"_sHttpReferrer",""),Kt(this,"_sAppBundleVersion",""),Kt(this,"_isConversionDataReady",!1),Kt(this,"_isConversionDataSent",!1)}
+ isTreasureTranscendTicket(){
+ return null===this.TREASURE_TRANSCEND_TICKET&&(this.TREASURE_TRANSCEND_TICKET=this.getClientData("TREASURE_TRANSCEND_TICKET")),"Y"===this.TREASURE_TRANSCEND_TICKET}
+ async getConversionData(){
+ if(window.appBundleVersion&&(this._sAppBundleVersion=window.appBundleVersion),"capacitor"===this._envPlatform&&(this.isGoogleClient()||this.isGoogleClientKr()?this._sOs="android":(this.isAppleClient()||this.isAppleClientKr())&&(this._sOs="ios"),zA.isAppBundleVersionGreaterThan("1.11.81"))){
+ const{
+ Device:i}
+ =await Xt(async()=>{
+ const{
+ Device:t}
+ =await Promise.resolve().then(()=>vai);
+ return{
+ Device:t}
+ }
+ ,void 0),s=await i.getInfo();
+ this._sOsVersion=s.osVersion,this._sModel=s.model;
+ try{
+ const t=(await i.getLanguageTag()).value.split("-");
+ t.length>1&&(this._sRegion=t[1].toUpperCase())}
+ catch(t){
+ }
+ }
+ if(!this._sRegion){
+ const t=navigator.language.split("-");
+ t.length>1&&(this._sRegion=t[1].toUpperCase())}
+ return this._isConversionDataReady&&(this._isConversionDataSent=!0),{
+ region:this._sRegion,os:this._sOs,osVersion:this._sOsVersion,model:this._sModel,afStatus:this._sAfStatus,mediaSource:this._sMediaSource,httpReferrer:this._sHttpReferrer,appBundleVersion:this._sAppBundleVersion}
+ }
+ setConversionData(t){
+ if(this._isConversionDataReady=!0,!t||!t.data)return;
+ const i=t.data;
+ "af_status"in i&&(this._sAfStatus=i.af_status),"media_source"in i&&(this._sMediaSource=i.media_source),"http_referrer"in i&&(this._sHttpReferrer=i.http_referrer)}
+ get isConversionDataReady(){
+ return this._isConversionDataReady}
+ get isConversionDataSent(){
+ return this._isConversionDataSent}
+ getAppBundleVerionInfo(){
+ if("capacitor"!=t.getInstance().envPlatform)return"";
+ let i="";
+ return window.appBundleVersion&&(i=`Bundle: ${
+ window.appBundleVersion}
+ `,window.appBundleLocalMainVersion&&window.appBundleLocalSubVersion&&(i+=` / M${
+ window.appBundleLocalMainVersion}
+  / S${
+ window.appBundleLocalSubVersion}
+ `),i=` (${
+ i}
+ )`),i}
HeroDrawGuidePopup 1 hunks, 44 statements
+ super(),Kt(this,"lblDesc"),Kt(this,"btnConfirm"),Kt(this,"icons",[]),this.outSideClickHide=!0,this.title=SG.getValueReplace("GAME_181","##",5,"5성 병사 뽑기"),this.lblDesc=new JD("",13421772,cD.DEFAULT_FONT_OPTION_16),this.lblDesc.align="center",this.contentContainer.addChild(this.lblDesc),this.btnConfirm=new ZL(SG.getText("COMMON_1","확인")),this.btnConfirm.color=ZL.GREEN,this.btnConfirm.width=160,this.btnConfirm.height=50,this.btnConfirm.onClick=()=>this.hide(),this.contentContainer.addChild(this.btnConfirm)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getValueReplace("GAME_181","##",5,"5성 병사 뽑기"),this.btnConfirm.text=SG.getText("COMMON_1","확인");
+ const t=wx.getInstance(),i=Number(AL.getInstance().getClientData("BUYABLE_HONOR_HERO_NUMBER")||1),s=t.bookList.filter(t=>5===t.grade&&0===t.evolStage&&t.canPurchase&&t.honor>=i+1&&t.kindNum<1e3);
+ this.update(s,this.title),await this.loadImage(),super.show()}
+ showGuideOfHeroGacha(){
+ this.title=SG.getText("GAME_764","5성 영웅 확정권"),this.btnConfirm.text=SG.getText("COMMON_1","확인");
+ const t=wx.getInstance(),i=t.honorNumberMax,s=t.bookList.filter(t=>5===t.grade&&0===t.evolStage&&t.canPurchase&&(t.honor>=1&&t.honor<i||t.honor<1)&&t.kindNum<1e3);
+ this.update(s,this.title),super.show()}
+ update(t,i){
+ var s,e;
+ for(const p of this.icons)this.contentContainer.removeChild(p);
+ this.icons=[];
+ const n=t.length,h=n>0?(100/n).toFixed(2):"0",r=SG.getText("GAME_602","아래 병사 중 랜덤한 병사를 획득합니다.")+" "+SG.getText("COMMON_475","획득 확률은 모두 동일합니다.")+`\n(${
+ SG.getText("COMMON_476","개별 획득 확률")}
+  : ${
+ h}
+ %(=1/${
+ n}
+ ))`;
+ this.lblDesc.text=r;
+ for(let p=0;
+ p<t.length;
+ p++){
+ const i=new Y2;
+ i.scale=.7,i.setDataWithKindNum(t[p].kindNum),this.contentContainer.addChild(i),this.icons.push(i)}
+ const o=(null==(s=this.icons[0])?void 0:s.width)??70,a=(null==(e=this.icons[0])?void 0:e.height)??70,c=Math.ceil(t.length/4),l=4*o+15;
+ this.width=520,this.title=i,cD.setLabelWrapWidth(this.lblDesc,this.width-55),this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.lblDesc.y=65;
+ const u=this.lblDesc.y+this.lblDesc.height+15,d=.5*(this.width-l)+5;
+ for(let p=0;
+ p<this.icons.length;
+ p++){
+ const t=p%4,i=Math.floor(p/4);
+ this.icons[p].x=d+t*(o+5),this.icons[p].y=u+i*(a+2)}
+ const f=u+c*(a+2)+35;
+ this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=f,this.height=f+this.btnConfirm.height+30,this.btnClose.x=this.width-this.btnClose.width-12}
+ }
+ ;
+ Vt(RYt,"HeroDrawGuidePopup"),Kt(RYt,"_instance");
+ let NYt=RYt;
+ const PYt=class t extends cG{
+ constructor(){
SettingContent 2 hunks, 40 statements
- const t=EL.getInstance().getCsEmail();
+ const t=AL.getInstance().getCsEmail(),i=await this.getInquiryInfo(),s=t+"\n--------------------\n"+SG.getText("GAME_1258","문의확인에 필요한 정보입니다.")+"\n"+i+"\n--------------------";
+ async getInquiryInfo(){
+ const t=AL.getInstance(),i=[`- ${
+ SG.getText("COMMON_58","닉네임")}
+  : ${
+ ML.name}
+ `,`- UID : ${
+ ML.uid}
+ `,`- Version : ${
+ zA.appVersion}
+ ${
+ t.getAppBundleVerionInfo()}
+ `];
+ if("capacitor"===t.envPlatform)if(t.isGoogleClient()||t.isGoogleClientKr()?i.push("- Platform : Android"):(t.isAppleClient()||t.isAppleClientKr())&&i.push("- Platform : iOS"),zA.isAppBundleVersionGreaterThan("1.11.81")){
+ const{
+ Device:t}
+ =await Xt(async()=>{
+ const{
+ Device:t}
+ =await Promise.resolve().then(()=>vai);
+ return{
+ Device:t}
+ }
+ ,void 0),s=await t.getInfo();
+ i.push(`- OS Version : ${
+ s.osVersion}
+ `),i.push(`- Device : ${
+ s.model}
+ `);
+ const e=await t.getLanguageTag();
+ i.push(`- Language : ${
+ e.value}
+ `)}
+ else i.push(`- Language : ${
+ navigator.language}
+ `);
+ else i.push(`- Language : ${
+ navigator.language}
+ `);
+ return i.join("\n")}
URLManager 5 hunks, 39 statements
- /user/getEvents`}
+ /user/getEvents`,SELL_TRANS_TICKET:`${
+ t.baseURL}
+ /user/sellTransTicket`,UPDATE_USER_DATA:`${
+ t.baseURL}
+ /user/updateUserData`}
- /mail/receive`,DELETE:`${
+ /mail/receive`,RECEIVE_ALL:`${
+ t.baseURL}
+ /mail/receiveAll`,DELETE:`${
- /shop/paymentAttempt`}
+ /shop/paymentAttempt`,CONFIRM_FREE_PAYMENT:`${
+ t.baseURL}
+ /shop/confirmFreePayment`}
- /guildWar/getGuildWarBuff`}
+ /guildWar/getGuildWarBuff`,GET_AWAKENED_TRIBES:`${
+ t.baseURL}
+ /guildWar/getAwakenedTribes`}
- /guildRaid/getGuildAndUserRanking`}
+ /guildRaid/getGuildAndUserRanking`,GET_RECORDS:`${
+ t.baseURL}
+ /guildRaid/getRecords`,GET_RECORD_DETAIL:`${
+ t.baseURL}
+ /guildRaid/getRecordDetail`}
+ }
+ static get RUNE(){
+ return{
+ GET_ALL:`${
+ t.baseURL}
+ /rune/getAll`,EQUIP_SLOT:`${
+ t.baseURL}
+ /rune/equipSlot`,MERGE:`${
+ t.baseURL}
+ /rune/merge`,LOCK:`${
+ t.baseURL}
+ /rune/lock`,SAVE_PRESET:`${
+ t.baseURL}
+ /rune/savePreset`,APPLY_PRESET:`${
+ t.baseURL}
+ /rune/applyPreset`,DRAW:`${
+ t.baseURL}
+ /rune/draw`,DEV_GRANT:`${
+ t.baseURL}
+ /rune/devGrant`}
HeartInfo 1 hunks, 38 statements
+ super(),Kt(this,"hearts",[]),Kt(this,"MAX_DISPLAY",5),Kt(this,"HEART_SPACING",22),Kt(this,"DEAD_TINT",3355443)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ getHeartPointAt(t){
+ const i=this.getGlobalPosition(),s=i.x+t*this.HEART_SPACING,e=i.y;
+ return new gi(s,e)}
+ playArriveMotionAt(t){
+ const i=this.hearts[t];
+ i&&(i.scale.set(1),FO.to(i.scale,{
+ x:.6,y:.6,duration:.3,ease:"back.out(3)"}
+ ))}
+ update(){
+ const t=ML.maxHeart,i=ML.heart;
+ if(t<=0)return void(this.visible=!1);
+ this.visible=!0;
+ const s=Math.min(t,this.MAX_DISPLAY);
+ for(;
+ this.hearts.length<s;
+ ){
+ const t=new He(QA.getTexture("UI_Ekkorr","Icon_Heart2"));
+ t.scale.set(.6),this.hearts.push(t),this.addChild(t)}
+ for(;
+ this.hearts.length>s;
+ ){
+ const t=this.hearts.pop();
+ this.removeChild(t)}
+ for(let e=0;
+ e<s;
+ e++){
+ const t=this.hearts[e];
+ t.x=e*this.HEART_SPACING,t.y=0,e<i?(t.tint=16777215,t.alpha=1):(t.tint=this.DEAD_TINT,t.alpha=.5)}
+ }
+ }
+ ;
+ Vt(Dei,"HeartInfo"),Kt(Dei,"_instance");
+ let Lei=Dei;
+ const Gei=class t extends qO{
+ constructor(){
RuneService 1 hunks, 37 statements
+ async getAll(t=!1){
+ return this.post(XR.RUNE.GET_ALL,{
+ }
+ ,t)}
+ async equipSlot(t,i,s=!1){
+ return this.post(XR.RUNE.EQUIP_SLOT,{
+ slot:t,runeIds:i}
+ ,s)}
+ async merge(t,i=!0){
+ return this.post(XR.RUNE.MERGE,{
+ runeIds:t}
+ ,i)}
+ async lock(t,i,s=!1){
+ return this.post(XR.RUNE.LOCK,{
+ runeId:t,locked:i}
+ ,s)}
+ async savePreset(t,i=!0){
+ return this.post(XR.RUNE.SAVE_PRESET,{
+ preset:t}
+ ,i)}
+ async applyPreset(t,i=!0){
+ return this.post(XR.RUNE.APPLY_PRESET,{
+ preset:t}
+ ,i)}
+ async draw(t,i=!0){
+ return this.post(XR.RUNE.DRAW,{
+ currency:t}
+ ,i)}
+ async devGrant(t,i=!1){
+ return this.post(XR.RUNE.DEV_GRANT,{
+ runes:t}
+ ,i)}
+ }
+ ;
+ Vt(eP,"RuneService");
+ let nP=eP;
+ const hP=class extends vN{
MailDeleteAllButton 1 hunks, 37 statements
+ super("UI_Ekkorr","Btn_Delete",1)}
+ get activated(){
+ return this._activated}
+ set activated(t){
+ t!=this._activated&&(this._activated=t,this._activated?this.bg.texture=QA.getTexture("UI_Ekkorr","Btn_Delete"):this.bg.texture=QA.getTexture("UI_Ekkorr","Btn_Delete_Gray"))}
+ }
+ ;
+ Vt($3t,"MailDeleteAllButton");
+ let j3t=$3t;
+ const V3t=class extends Kzt{
+ constructor(t){
+ super(t),Kt(this,"bgOff"),Kt(this,"_selected",!0),this.minWidth=180,this.resizable=!0,this.outlineText=!0,this.bgOff=new TM({
+ texture:QA.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.bg.visible=this._selected,this.bgOff.visible=!this._selected}
+ get selected(){
+ return this._selected}
+ set selected(t){
+ t!=this._selected&&(this._selected=t,this._selected?(this.bg.visible=!0,this.bgOff.visible=!1):(this.bg.visible=!1,this.bgOff.visible=!0))}
+ onTap(t){
+ this._selected||super.onTap(t)}
+ }
+ ;
+ Vt(V3t,"MailMenuButton");
+ let K3t=V3t;
+ const z3t=class extends MB{
+ constructor(){
+ super("UI_Ekkorr","Btn_ReceiveAll",1)}
+ get activated(){
+ return this._activated}
+ set activated(t){
+ t!=this._activated&&(this._activated=t,this._activated?this.bg.texture=QA.getTexture("UI_Ekkorr","Btn_ReceiveAll"):this.bg.texture=QA.getTexture("UI_Ekkorr","Btn_ReceiveAll_Gray"))}
+ }
+ ;
+ Vt(z3t,"MailReceiveAllButton");
+ let q3t=z3t;
+ const Y3t=class extends qO{
+ constructor(){
GuildRaidOpenDatePopup 1 hunks, 36 statements
+ const b9t=class t extends cG{
+ constructor(){
+ super(),Kt(this,"lblMessage",new JD("",cD.DEFAULT_COLOR,cD.ERROR_POPUP_LABEL_OPTION)),Kt(this,"lblCountdown",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_OUTLINE_FONT_OPTION_32)),Kt(this,"btnConfirm",new eG("확인")),Kt(this,"tickHandle",null),this.lblMessage.y=90;
+ const t=this.lblMessage.getStyle();
+ t.align="center",this.lblMessage.setStyle(t),this.lblCountdown.textColor=16737894,this.contentContainer.addChild(this.lblMessage,this.lblCountdown,this.btnConfirm),this.btnConfirm.onClick=()=>this.hide()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ show(){
+ this.title=SG.getText("COMMON_4","알림"),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.lblMessage.text=SG.getText("GAME_1510","길드전은 7월 25일 (UTC기준) 부터 시작됩니다."),this.updateCountdown(),this.updateLayout(),this.startTick(),super.show()}
+ startTick(){
+ this.stopTick(),this.tickHandle=setInterval(()=>this.updateCountdown(),1e3)}
+ stopTick(){
+ null!=this.tickHandle&&(clearInterval(this.tickHandle),this.tickHandle=null)}
+ updateCountdown(){
+ const t=PJt.OPEN_TIME_UTC_MS-tx.time;
+ if(t<=0)return void this.hide();
+ const i=Math.ceil(t/1e3),s=Math.floor(i/3600),e=Math.floor(i%3600/60),n=i%60;
+ this.lblCountdown.text=`${
+ String(s).padStart(2,"0")}
+ :${
+ String(e).padStart(2,"0")}
+ :${
+ String(n).padStart(2,"0")}
+ `,this.lblCountdown.x=.5*(this.width-this.lblCountdown.width)}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblCountdown.y=this.lblMessage.y+this.lblMessage.height+20,this.lblCountdown.x=.5*(this.width-this.lblCountdown.width),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=this.lblCountdown.y+this.lblCountdown.height+30,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ hideImmediately(){
+ this.stopTick(),super.hideImmediately()}
+ getDefaultPositionY(){
+ return.3*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(b9t,"GuildRaidOpenDatePopup"),Kt(b9t,"_instance");
+ let _9t=b9t;
BattleController 7 hunks, 34 statements
- this.executePlayer(),this.executeUnits(this.friendList),this.recallOutOfBoundsHeroes(),this.executeEnemies(),this.executeWeapons(),this.executeEffects();
+ this.executePlayer(),this.executeUnits(this.friendList),this.recallOutOfBoundsHeroes(),this.executeEnemies(),this.pullStalledEnemiesToCastle(),this.executeWeapons(),this.executeEffects();
- if(super.checkProgress(),!_L.isSoulResting){
- if(0==Zti.getInstance().isRunning&&this.player.isAlive&&!this.isGameOverFlag&&!1===this.goldGoblinSpawning&&0===this.goldGoblinList.length&&_L.numRevive>0){
+ if(!ML.isSoulResting){
+ if(super.checkProgress(),0==Yqt.getInstance().isRunning&&this.player.isAlive&&!this.isGameOverFlag&&!1===this.goldGoblinSpawning&&0===this.goldGoblinList.length&&ML.numRevive>0){
+ pullStalledEnemiesToCastle(){
+ if(!this.player.isAlive||this.isGameOverFlag)return;
+ const i=t.PULL_TRIGGER_RADIUS*t.PULL_TRIGGER_RADIUS;
+ for(let s=0;
+ s<this.enemyList.length;
+ s++){
+ const e=this.enemyList[s];
+ if(e.removed||!e.isAlive)continue;
+ if(e.initDelay>0)continue;
+ if(e.isUntagetable)continue;
+ const n=e.x-this.player.x,h=e.y-this.player.y,r=n*n+h*h;
+ if(r<=i){
+ e.farFromCastleFrames=0;
+ continue}
+ if(++e.farFromCastleFrames<t.PULL_STALL_FRAMES)continue;
+ e.farFromCastleFrames=0;
+ const o=Math.sqrt(r),a=this.player.x+n/o*t.PULL_SNAP_RADIUS,c=this.player.y+h/o*t.PULL_SNAP_RADIUS;
+ e.forceRelocate(a,c);
+ const l=ej.getEffect(PF.MagicalHitEffect);
+ l.x=a,l.y=c-.5*e.hitHeight-e.airHeight,l.start(10),sB.getInstance().addChild(l)}
+ }
- ),await hii.getInstance().showGameOver(_L.wave,this.onRebirth.bind(this),this.onRebirthWithBonus.bind(this),this.onContinueGame.bind(this)),0==_L.numRevive&&await Zti.getInstance().startTutorialRevive()}
+ ),await shi.getInstance().showGameOver(ML.wave,this.onRebirth.bind(this),this.onRebirthWithBonus.bind(this),this.onContinueGame.bind(this))&&0==ML.numRevive&&await Yqt.getInstance().startTutorialRevive()}
+ onSoulRestStart(){
+ for(let t=this.enemyList.length-1;
+ t>=0;
+ t--){
+ const i=this.enemyList[t];
+ i.target&&i.target.removeBlockedEnemy(i),i.clearBlockedEnemies(),i.remove()}
+ this.enemyList.length=0,this.clearAllWeapons(),this.clearGoldGoblins(),this.clearAdsGoblins()}
- this.skippedWave>0&&!this.shownDialogueWaves.has(this.skippedWave)&&(t.push(...ZV.getInstance().getByWave(this.skippedWave)),this.shownDialogueWaves.add(this.skippedWave)),this.shownDialogueWaves.has(_L.wave)||(t.push(...ZV.getInstance().getByWave(_L.wave)),this.shownDialogueWaves.add(_L.wave)),t.length>0&&Jti.getInstance().showDialogues(t)}
+ this.skippedWave>0&&!this.shownDialogueWaves.has(this.skippedWave)&&(t.push(...$Kt.getInstance().getByWave(this.skippedWave)),this.shownDialogueWaves.add(this.skippedWave)),this.shownDialogueWaves.has(ML.wave)||(t.push(...$Kt.getInstance().getByWave(ML.wave)),this.shownDialogueWaves.add(ML.wave)),t.length>0&&ezt.getInstance().showDialogues(t)}
- Kt(Kii,"BattleController"),zt(Kii,"instance"),zt(Kii,"DRAG_THRESHOLD",10),zt(Kii,"MELEE_ORBIT_RADIUS",110),zt(Kii,"RANGED_ORBIT_RADIUS",80),zt(Kii,"MELEE_PATROL_RADIUS",150),zt(Kii,"RANGED_PATROL_RADIUS",120),zt(Kii,"FIRST_WAVE_DELAY",60),zt(Kii,"AUTO_SAVE_INTERVAL",18e4),zt(Kii,"AUTO_SAVE_RETRY_DELAY",5e3),zt(Kii,"AUTO_SAVE_MAX_RETRY",3),zt(Kii,"AUTO_SAVE_WAVE_DIFF",10),zt(Kii,"zoomEnabled",!0);
+ Vt($hi,"BattleController"),Kt($hi,"instance"),Kt($hi,"DRAG_THRESHOLD",10),Kt($hi,"MELEE_ORBIT_RADIUS",110),Kt($hi,"RANGED_ORBIT_RADIUS",80),Kt($hi,"MELEE_PATROL_RADIUS",150),Kt($hi,"RANGED_PATROL_RADIUS",120),Kt($hi,"FIRST_WAVE_DELAY",60),Kt($hi,"PULL_STALL_FRAMES",400),Kt($hi,"PULL_TRIGGER_RADIUS",150),Kt($hi,"PULL_SNAP_RADIUS",50),Kt($hi,"AUTO_SAVE_INTERVAL",18e4),Kt($hi,"AUTO_SAVE_RETRY_DELAY",5e3),Kt($hi,"AUTO_SAVE_MAX_RETRY",3),Kt($hi,"AUTO_SAVE_WAVE_DIFF",10),Kt($hi,"zoomEnabled",!0);
DraggableContainer 1 hunks, 33 statements
+ const jWt=class extends Ge{
+ constructor(){
+ super(),Kt(this,"yPrev",0),Kt(this,"yHome",0),Kt(this,"vy",0),Kt(this,"yMax",0),Kt(this,"yMin",0),Kt(this,"yMouse",0),Kt(this,"yOffset",140),Kt(this,"min",0),Kt(this,"max",0),Kt(this,"dragSensorDistance",20),Kt(this,"_isDragging",!1),Kt(this,"onDragStart",null),Kt(this,"onDragEnd",null),this.eventMode="static",this.on("pointerdown",this.onDown,this)}
+ get isDragging(){
+ return this._isDragging}
+ onDown(t){
+ this.min>this.max||(this.yMin=this.min,this.yMax=this.max,this.yPrev=this.yHome=this.yMouse=t.globalY,this.off("pointermove",this.onMove,this),this.on("pointermove",this.onMove,this),this.off("pointerup",this.onUp,this),this.on("pointerup",this.onUp,this),this.off("pointerupoutside",this.onUp,this),this.on("pointerupoutside",this.onUp,this),LM.getInstance().remove(this.onFlickEnter,this),LM.getInstance().add(this.onDragEnter,this))}
+ onDragEnter(){
+ 0==this._isDragging&&Math.abs(this.yMouse-this.yHome)>this.dragSensorDistance&&(this._isDragging=!0,this.onDragStartCallback()),0!=this._isDragging&&(this.vy=this.yMouse-this.yPrev,this.y==this.yMin&&this.vy<0||this.y==this.yMax&&this.vy>0||(this.y+=this.vy,this.y>this.yMax&&(this.y=this.yMax),this.y<this.yMin&&(this.y=this.yMin),this.yPrev=this.yMouse))}
+ onMove(t){
+ this.yMouse=t.globalY}
+ onUp(t){
+ 1==this._isDragging&&(this.vy=2*this.vy,LM.getInstance().add(this.onFlickEnter,this),this._isDragging=!1,this.onDragEndCallback()),LM.getInstance().remove(this.onDragEnter,this),this.off("pointermove",this.onMove,this),this.off("pointerup",this.onUp,this),this.off("pointerupoutside",this.onUp,this)}
+ onFlickEnter(){
+ this.vy*=.98,this.y==this.yMin&&this.vy<0||this.y==this.yMax&&this.vy>0?LM.getInstance().remove(this.onFlickEnter,this):(this.y+=this.vy,this.y>this.yMax&&(this.y=this.yMax),this.y<this.yMin&&(this.y=this.yMin),Math.abs(this.vy)<1&&LM.getInstance().remove(this.onFlickEnter,this))}
+ onDragStartCallback(){
+ this.onDragStart&&this.onDragStart()}
+ onDragEndCallback(){
+ this.onDragEnd&&this.onDragEnd()}
+ setScroll(t){
+ let i=this.max-t;
+ i<this.min&&(i=this.min),this.y=i}
+ }
+ ;
+ Vt(jWt,"DraggableContainer");
+ let VWt=jWt;
+ const KWt=class extends iG{
+ constructor(t,i=150,s=30){
+ super(t,i,s),this.color=ZL.BROWN}
+ }
+ ;
+ Vt(KWt,"CommonBrownButton");
+ let zWt=KWt;
AttendanceAutoTrigger 10 hunks, 33 statements
- await ZA.generateTexture("UI",e,!1),await ZA.generateTexture("Effect",e,!1),await ZA.generateTexture("Loading",e,!1),await ZA.generateTexture("BG",e,!1),await ZA.generateTexture("GW_BG2",e,!1),await ZA.generateTexture("BgRaid2",e,!1),await ZA.generateTexture("bg/bg2",e,!1),await ZA.generateTexture("Game",e,!1),await ZA.generateTexture("Game1",e,!1),await ZA.generateTexture("LevelUp",e,!1),await ZA.generateTexture("HeroSkillEffect",e,!1),await ZA.generateTexture("ClickHand",e,!1),await ZA.generateTexture("UI_PET",e,!1),await ZA.generateTexture("UI_HELP",e,!1),await ZA.generateTexture("UI_GuildWar",e,!1);
+ await QA.generateTexture("UI",e,!1),await QA.generateTexture("Effect",e,!1),await QA.generateTexture("Loading",e,!1),await QA.generateTexture("BG",e,!1),await QA.generateTexture("GW_BG2",e,!1),await QA.generateTexture("BgRaid2",e,!1),await QA.generateTexture("bg/bg2",e,!1),await QA.generateTexture("Game",e,!1),await QA.generateTexture("Game1",e,!1),await QA.generateTexture("LevelUp",e,!1),await QA.generateTexture("HeroSkillEffect",e,!1),await QA.generateTexture("ClickHand",e,!1),await QA.generateTexture("UI_PET",e,!1),await QA.generateTexture("UI_HELP",e,!1),await QA.generateTexture("UI_HELP2",e,!1),await QA.generateTexture("UI_GuildWar",e,!1);
- if(nV.getInstance().setBookData(e),KN.getInstance().recalculate(),hei(7.7),"Y"==hK.getInstance().productBookEnableYn){
+ wVt.getInstance().setBookData(e),VR.getInstance().recalculate(),noi(7.7);
- hK.getInstance().setData(t)}
+ t5.getInstance().setData(n);
- sei=(null==(t=e.body)?void 0:t.offlineMarch)??null,hei(9.5),MV.getInstance().init(),hei(9.6),lV.getInstance().init(),hei(9.7),r9.getInstance().init(),hei(9.8),fP.getInstance().init(),hei(9.9),oei(),hei(10),S3.getMailList(),hei(10.1),nV.getInstance().getStatus().then(()=>{
+ if(Zri=(null==(t=e.body)?void 0:t.offlineMarch)??null,noi(9.5),K2.getInstance().init(),noi(9.6),qni.getInstance().init(),noi(9.7),wzt.getInstance().init(),noi(9.8),dN.getInstance().init(),noi(9.9),roi(),noi(10),SVt.getMailList(),noi(10.1),wVt.getInstance().getStatus().then(()=>{
- ),hei(10.2),await hK.getInstance().getProducts(0,!1),await pD.getInstance().getPassList(),hei(10.3),r6.getInstance().getInventory(0),hei(10.4),hei(10.5),hei(10.6);
+ ),noi(10.2),await t5.getInstance().getAvailProducts(0,!1),await gD.getInstance().getPassList(),noi(10.3),FVt.getInstance().getInventory(0),noi(10.4),ML.numRevive>=1){
+ const{
+ DailyQuestDataManager:t}
+ =await Xt(async()=>{
+ const{
+ DailyQuestDataManager:t}
+ =await Promise.resolve().then(()=>uVt);
+ return{
+ DailyQuestDataManager:t}
+ }
+ ,void 0);
+ t.getInstance().markDirty()}
+ noi(10.5),noi(10.6);
- i.getInstance().stop(),hL.getInstance().stopUpdate();
+ rL.getInstance().collectOverdueQuests(),i.getInstance().stop(),rL.getInstance().stopUpdate();
+ try{
+ }
+ catch(Xst){
+ }
+ finally{
+ }
- )}
+ ),soi()}
+ function soi(){
+ if(!0===ML.createdJustNow||""===ML.lastLoginTime){
+ const t=AL.getInstance();
+ 0==t.isConversionDataReady?cS.getInstance().addEventListener("AfConversionData",eoi):!1===t.isConversionDataSent&&rD.getInstance().user.updateUserData()}
+ }
+ function eoi(){
+ cS.getInstance().removeEventListener("AfConversionData",eoi),rD.getInstance().user.updateUserData()}
- Kt(eei,"checkOfflineMarch"),Kt(nei,"onGameMainStart"),Kt(hei,"updateProgress"),Kt(rei,"setPushSettings"),Kt(oei,"setupPush");
+ Vt(toi,"checkOfflineMarch"),Vt(ioi,"onGameMainStart"),Vt(soi,"updateUserData"),Vt(eoi,"onAfConversionData"),Vt(noi,"updateProgress"),Vt(hoi,"setPushSettings"),Vt(roi,"setupPush");
PetIcon 1 hunks, 32 statements
- var T3=(t=>(t.NOT_PURCHASE="NOT_PURCHASE",t.CREATED="CREATED",t.PENDING="PENDING",t.COMPLETED="COMPLETED",t.FAILED="FAILED",t))(T3||{
+ const X2=class extends Ge{
+ constructor(){
+ super(),Kt(this,"icon",new He),Kt(this,"bg",new He),Kt(this,"cover",new He),Kt(this,"star",new He),Kt(this,"posList",[30,26,24,19,16,13,9]),this.bg.x=3,this.bg.y=3,this.addChild(this.bg),this.icon.x=3,this.icon.y=3,this.addChild(this.icon),this.cover.x=0,this.cover.y=0,this.addChild(this.cover),this.addChild(this.star),this.setEmpty()}
+ setEmpty(){
+ this.bg.texture=QA.getTexture("UI_PET","HeroFrame_1_Bg"),this.cover.texture=QA.getTexture("UI_PET","HeroFrame_1"),this.icon.visible=!1,this.star.visible=!1}
+ setPet(t,i){
+ this.icon.visible=!0,this.star.visible=!0,this.icon.alpha=1,this.icon.tint=16777215,this.icon.texture=QA.getTexture("UI_PET",`UI_PET${
+ t}
+ `),this.icon.width=this.icon.height=this.cover.width-6,this.icon.x=3,this.icon.y=2;
+ const s=Math.max(1,Math.min(i,5));
+ this.star.texture=QA.getTextures("UI_PET","UI_UNIT_RARE")[s-1],this.star.x=this.posList[s-1],this.star.y=this.bg.height-this.star.height,this.bg.texture=QA.getTexture("UI_PET",`HeroFrame_${
+ s}
+ _Bg`),this.cover.texture=QA.getTexture("UI_PET",`HeroFrame_${
+ s}
+ `)}
+ setInactive(t){
+ this.icon.visible=!0,this.star.visible=!1,this.icon.texture=QA.getTexture("UI_PET",`UI_PET${
+ t}
+ `),this.icon.width=this.icon.height=this.cover.width-6,this.icon.x=3,this.icon.y=2,this.icon.alpha=.9,this.icon.tint=11184810,this.bg.texture=QA.getTexture("UI_PET","HeroFrame_1_Bg"),this.cover.texture=QA.getTexture("UI_PET","HeroFrame_1")}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ showStar(){
+ this.star.visible=!0}
+ hideStar(){
+ this.star.visible=!1}
+ }
+ ;
+ Vt(X2,"PetIcon");
+ let J2=X2;
+ var Q2=(t=>(t[t.Secretary=7001]="Secretary",t[t.Secretary_Day30=7002]="Secretary_Day30",t))(Q2||{
GuildRaidGuidePopup 1 hunks, 32 statements
- super(),zt(this,"lblTicket"),this.closeBtn.visible=!0,this.closeBtn.eventMode="static",this.closeBtn.on("pointertap",()=>{
+ super(),Kt(this,"pageNav"),this.outSideClickHide=!0,this.width=t.POPUP_WIDTH,this.pageNav=new IB(t.POPUP_WIDTH-40,16,cD.DEFAULT_COLOR,6),this.pageNav.setBgVisible(!1),this.pageNav.x=20,this.pageNav.y=t.NAV_TOP_Y,this.contentContainer.addChild(this.pageNav),this.pageNav.setPages([{
+ title:SG.getText("GAME_1419","레이드 기본"),content:[SG.getText("GAME_1420","# 길드마스터/부길드마스터가 레이드를 오픈할 수 있습니다."),SG.getText("GAME_1421","# 레이드는 하루 최대 2번 오픈할 수 있습니다."),SG.getText("GAME_1422","# 레이드가 오픈되면, 각 유저는 2번 전투를 할 수 있습니다.")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1423","전투 가이드"),content:[SG.getText("GAME_1424","# 레이드 전투는 2분 30초 동안 진행됩니다."),SG.getText("GAME_1425","# 유저는 5개의 군단( 군단 : 영웅 1명과 병사 30명 )을 편성하여 전투를 진행합니다."),SG.getText("GAME_1426","# 병사는 길드병영의 병사가 사용되고, 길드전에 참여한 모든 병사는 전투 후 사라집니다.")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1309","보스"),content:[SG.getText("GAME_1427","# 보스는 기력 게이지를 가지는데, 기력 게이지가 0이 되면, 일정시간 동안 그로기 상태가 됩니다."),SG.getText("GAME_1428","# 그로기 상태일 때 보스를 공격하면, 데미지가 60%만큼 추가로 들어갑니다."),SG.getText("GAME_1429","# 보스들은 일반적으로 [ 평타 - 평타 - 스킬 ] 형태의 공격 패턴을 가집니다."),SG.getText("GAME_1430","# 작살차가 등장하는 판에서는, 보스가 스킬을 시전할 경우, [ 약점 ]이 노출됩니다."),SG.getText("GAME_1431","# 작살을 조준하여 [ 약점 ]을 공격하면, 보스는 대량의 기력을 잃게 되고, 추가 데미지를 받게 됩니다.")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1260","휘장"),content:[SG.getText("GAME_1432","# 각 군단은 휘장을 가집니다."),SG.getText("GAME_1433","# 휘장에는 보석을 장착하여, 능력치를 향상시킬수 있습니다."),SG.getText("GAME_1434","  - 수호의 휘장 : 탱킹 전문"),SG.getText("GAME_1435","  - 맹공의 휘장 : 딜러 전문"),SG.getText("GAME_1436","  - 돌격의 휘장 : 딜러 + 서포터 전문"),SG.getText("GAME_1437","  - 마력의 휘장 : 마나 + 서포터 전문"),SG.getText("GAME_1438","  - 치유의 휘장 : 힐러 전문"),SG.getText("GAME_1439","  - 저격의 휘장 : 작살전문")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1440","어그로"),content:[SG.getText("GAME_1441","# 최근 일정 시간 동안 보스에게 가한 피해량이 많을수록 어그로가 증가합니다."),SG.getText("GAME_1442","# 보스는 어그로가 가장 높은 군단의 영웅을 바라봅니다.")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1288","후방공격"),content:[SG.getText("GAME_1443","# 특정 보스들은 뒤에서 공격할 때 추가 데미지( 30% )가 들어갑니다."),SG.getText("GAME_1444","# 후방공격이 가능한 보스와 전투할 경우, [ 수호의 휘장 ] 군단 영웅을 조종할 수 있는 버추얼 패드가 등장합니다."),SG.getText("GAME_1445","# 버추얼 패드로 수호 군단 영웅을 조종하여, 다른 군단들이 보스 후방을 공격하도록 하면, 높은 데미지를 기록할 수 있습니다.")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1310","작살차"),content:[SG.getText("GAME_1446","# 작살차가 등장하는 판에서는, 보스가 스킬 공격을 할 경우, [ 약점 ]이 노출됩니다."),SG.getText("GAME_1447","# 작살을 프레스 & 드래그를 통해 약점을 조준하여 공격하면, 보스는 대량의 기력을 잃고, 디버프를 받게 됩니다."),SG.getText("GAME_1448","# 작살을 한번 쏘고나면, 재장전하는데 시간이 걸립니다.")].join("\n")}
+ ,{
+ title:SG.getText("GAME_1289","취약"),content:[SG.getText("GAME_1449","# 보스는 CC 공격에 영향 받지 않지만, 특정 CC 공격에 대해, 취약을 가집니다."),SG.getText("GAME_1450","# 보스는 취약에 해당하는 공격을 받으면, 추가데미지를 받게 됩니다."),SG.getText("GAME_1451","# 예를들어 ( 기절 )에 대한 취약이 존재하는 보스에게, ( 기절 ) 공격이 들어가면, 보스는 10초동안 0.3%의 추가 데미지를 받는 디버프를 받게 됩니다. 이 디버프는 누적적용되며, 최대 20%를 넘을수 없습니다."),SG.getText("GAME_1452","# 보스는 일반적으로 4~5개의 취약을 가지는데, 취약을 일으키는 영웅/병사를 편성하면, 추가 데미지를 줄 수 있습니다.")].join("\n")}
+ ])}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=SG.getText("GAME_1418","레이드 안내"),this.height=this.pageNav.y+this.pageNav.height+t.NAV_BOTTOM_PAD,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.47*VA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Vt(E9t,"GuildRaidGuidePopup"),Kt(E9t,"_instance"),Kt(E9t,"POPUP_WIDTH",620),Kt(E9t,"NAV_TOP_Y",80),Kt(E9t,"NAV_BOTTOM_PAD",30);
+ let A9t=E9t;
+ const S9t=class t extends u4t{
+ constructor(){
+ super(),Kt(this,"ticketIcons",[]),Kt(this,"btnGuide"),this.closeBtn.visible=!0,this.closeBtn.eventMode="static",this.closeBtn.on("pointertap",()=>{
MailDetailPopup 6 hunks, 30 statements
+ setRewardsForTest(){
+ this.currentMail.rewards=[{
+ type:"gem",amount:1e3}
+ ,{
+ type:"guildCoin",amount:1e3}
+ ,{
+ type:"raidCoin",amount:1e3}
+ ,{
+ type:"runeTicket",amount:1}
+ ]}
- ++b)o=this.rewardItems[b],o.x=g,o.y=m,this.rewardContainer.addChild(o),o.type!=bK.ticket||o.subType!=bK.heroGacha&&o.subType!=bK.heroSelect&&o.subType!=bK.treasureGacha&&o.subType!=bK.petSelect?this.setItemEvent(o,!1):this.setItemEvent(o,!0),(b+1)%5==0?(g=0,m+=o.height+10):g+=o.width+w;
- if(f>0){
- const t=f>4?this.rewardItems[4]:this.rewardItems[f-1],i=this.rewardItems[f-1];
- this.rewardContainer.x=this.rewardBg.x+.5*(this.rewardBg.width-t.x-t.width),this.rewardBg.height=i.y+i.height+24,this.rewardBg.visible=!0,this.rewardContainer.visible=!0}
+ ++_)o=this.rewardItems[_],g+o.width+w>547&&(g=0,m+=o.height+10),o.x=g,o.y=m,this.rewardContainer.addChild(o),o.type!=n5.ticket||o.subType!=n5.heroGacha&&o.subType!=n5.heroSelect&&o.subType!=n5.treasureGacha&&o.subType!=n5.petSelect?this.setItemEvent(o,!1):this.setItemEvent(o,!0),g+=o.width+w,g>505&&(g=0,m+=o.height+10);
+ const b=this.rewardContainer.children;
+ if(b.length>0){
+ const t=this.rewardContainer.children.length>4?4:this.rewardContainer.children.length-1,i=this.rewardContainer.children[t],s=this.rewardItems[b.length-1];
+ this.rewardContainer.x=i?this.rewardBg.x+.5*(this.rewardBg.width-i.x-i.width):this.rewardBg.x+.5*(this.rewardBg.width-this.rewardContainer.width),this.rewardBg.height=s.y+s.height+24,this.rewardBg.visible=!0,this.rewardContainer.visible=!0}
- let s;
- this.currentMail.receivedAt=new Date,_L.setData(i.body),r6.getInstance().setData(i.body),BG.getInstance().setStatusData(null==(t=i.body)?void 0:t.mineStatus),c6.getInstance().setData(i.body.transTicket),lS.getInstance().dispatchCustomEvent("MailUpdate"),"inventory"in i.body&&(vV.getInstance().showMessage(AG.getText("GAME_819","보석, 명예코인, 영웅을 제외한 아이템은 인벤토리로 지급되었습니다."),120),C8.getInstance().isInventoryPopup()&&d2t.getInstance().refresh());
+ if(this.currentMail.receivedAt=new Date,ML.setUserInfo(i.body),FVt.getInstance().setData(i.body),jG.getInstance().setStatusData(null==(t=i.body)?void 0:t.mineStatus),$Vt.getInstance().setData(i.body.transTicket),cS.getInstance().dispatchCustomEvent("MailUpdate"),"inventory"in i.body){
+ const t=AL.getInstance();
- s=this.currentMail.typeArray.findIndex(t=>t==bK.gem),-1!=s&&(UV.getInstance().updateGem(),this.displayGemGathering(this.currentMail.amountArray[s])),s=this.currentMail.typeArray.findIndex(t=>t==bK.redGem),-1!=s&&(this.displayRedGemGathering(this.currentMail.amountArray[s]),this.updateRedGem()),s=this.currentMail.typeArray.findIndex(t=>t==bK.honorCoin),-1!=s&&(this.displayHonorCoinGathering(this.currentMail.amountArray[s]),this.updateHonorCoin()),s=this.currentMail.typeArray.findIndex(t=>t==bK.hero),-1!=s&&("hero"in i.body?this.updateHero(i.body.hero):e=!0,this.displayHeroGathering(this.currentMail.amountArray[s],this.currentMail.kindNumArray[s])),s=this.currentMail.typeArray.findIndex(t=>t==bK.pet),-1!=s&&(this.updatePetInfo(),this.displayPetGathering(this.currentMail.amountArray[s],this.currentMail.kindNumArray[s])),s=this.currentMail.typeArray.findIndex(t=>t==bK.guildCoin),-1!=s&&this.updateGuildCoin(this.currentMail.amountArray[s]),s=this.currentMail.typeArray.findIndex(t=>t==bK.raidCoin),-1!=s&&this.updateRaidCoin(this.currentMail.amountArray[s]),this.refresh(),this.currentMail.mailType===_3.PAYMENT?T2t.getInstance().updatePaymentMailList():T2t.getInstance().updateGameMailList(),this.setRequestPending(!1),e&&this.getHeroInfo()}
+ const s=parseInt(t.getClientData("MAILBOX_INVENTORY_WAVE"));
+ if(!isNaN(s)&&ML.maxWave<s){
+ let t=await $A.getDoNotMailBoxInventoryGuide();
+ t&&"Y"==t||(i=!0)}
+ let e=!1;
+ e=!i||!r6t.getInstance().execute(this.currentMail),e&&u2.getInstance().showMessage(SG.getText("GAME_819","보석, 명예코인, 영웅, 초월권, 크리스탈 뽑기권을 제외한 아이템은 인벤토리로 지급되었습니다."),120),CYt.getInstance().isInventoryPopup()&&W3t.getInstance().refresh()}
+ let s,e=!1;
+ s=this.currentMail.typeArray.findIndex(t=>t==n5.gem),-1!=s&&(kF.getInstance().updateGem(),this.displayGemGathering(this.currentMail.amountArray[s])),s=this.currentMail.typeArray.findIndex(t=>t==n5.redGem),-1!=s&&(this.displayRedGemGathering(this.currentMail.amountArray[s]),this.updateRedGem()),s=this.currentMail.typeArray.findIndex(t=>t==n5.honorCoin),-1!=s&&(this.displayHonorCoinGathering(this.currentMail.amountArray[s]),this.updateHonorCoin()),s=this.currentMail.typeArray.findIndex(t=>t==n5.hero),-1!=s&&("hero"in i.body?this.updateHero(i.body.hero):e=!0,this.displayHeroGathering(this.currentMail.amountArray[s],this.currentMail.kindNumArray[s])),s=this.currentMail.typeArray.findIndex(t=>t==n5.pet),-1!=s&&this.displayPetGathering(this.currentMail.amountArray[s],this.currentMail.kindNumArray[s]),s=this.currentMail.typeArray.findIndex(t=>t==n5.guildCoin),-1!=s&&this.updateGuildCoin(this.currentMail.amountArray[s]),s=this.currentMail.typeArray.findIndex(t=>t==n5.raidCoin),-1!=s&&this.updateRaidCoin(this.currentMail.amountArray[s]),s=this.currentMail.typeArray.findIndex(t=>t==n5.runeTicket),-1!=s&&this.updateRuneGacha(this.currentMail.amountArray[s]),this.refresh(),this.currentMail.mailType===yVt.PAYMENT?p6t.getInstance().updatePaymentMailList():p6t.getInstance().updateGameMailList(),this.setRequestPending(!1),e&&this.getHeroInfo()}
- async updatePetInfo(){
- const t=await hD.getInstance().spirit.getInfo();
- t.success&&_L.setUserInfo(t.body)}
+ async updateRuneGacha(t){
+ AD.hasGuild&&KQt.getInstance().ensureLoaded(!0)}
HarpyTornado 8 hunks, 29 statements
- super(...arguments),zt(this,"targetProvider",null)}
+ super(...arguments),Kt(this,"boundary",null),Kt(this,"targetProvider",null),Kt(this,"wanderBounds",null),Kt(this,"wanderRand",null),Kt(this,"wanderTarget",null)}
- type:"spine",spineKey:"raids/raid1/tornado_area",animationName:"tornado_area",layer:"unit",scale:.63,loop:!0}
+ type:"sheet",sheetName:"RaidBattle",textureName:"SandTornado",incFrame:.5,anchorX:.5,anchorY:.9,layer:"unit",scale:1.3,loop:!0}
- super.setData(t),this.targetProvider=null}
+ super.setData(t),this.targetProvider=null,this.wanderBounds=null,this.wanderRand=null,this.wanderTarget=null}
+ startWander(t,i){
+ this.wanderBounds=t,this.wanderRand=i,this.wanderTarget=null}
+ play(){
+ super.play(),this.boundary||(this.boundary=new SK);
+ const i=this.radiusX??this.radius,s=this.radiusY??this.radius;
+ this.boundary.show(this.x,this.y,i,i>0?s/i:1),this.boundary.setStyle(t.ZONE_FILL_COLOR,t.ZONE_STROKE_COLOR,t.ZONE_FILL_ALPHA_SCALE)}
- this.removed||(this.stepMove(),super.execute())}
+ this.removed||(this.stepMove(),this.boundary&&(this.boundary.x=this.x,this.boundary.y=this.y),super.execute())}
+ onAreaTick(t){
+ var i;
+ null==(i=this.boundary)||i.update(this.durationFrames>0?t/this.durationFrames:0)}
+ remove(){
+ var t;
+ null==(t=this.boundary)||t.dispose(),super.remove()}
+ if(this.wanderBounds&&this.wanderRand)return void this.stepWander(this.wanderBounds,this.wanderRand);
+ stepWander(i,s){
+ let e=this.wanderTarget;
+ if(e){
+ const i=e.x-this.x,s=e.y-this.y;
+ Math.sqrt(i*i+s*s)<=t.MOVE_SPEED&&(e=null)}
+ e||(e={
+ x:i.minX+s()*(i.maxX-i.minX),y:i.minY+s()*(i.maxY-i.minY)}
+ ,this.wanderTarget=e);
+ const n=e.x-this.x,h=e.y-this.y,r=Math.sqrt(n*n+h*h);
+ if(r<=t.MOVE_SPEED)return this.x=e.x,void(this.y=e.y);
+ this.x+=n/r*t.MOVE_SPEED,this.y+=h/r*t.MOVE_SPEED}
- Kt(jZ,"HarpyTornado"),zt(jZ,"DEFAULT_RADIUS_X",70),zt(jZ,"DEFAULT_RADIUS_Y",56),zt(jZ,"DEFAULT_DURATION_FRAMES",1200),zt(jZ,"DAMAGE_INTERVAL_FRAMES",5),zt(jZ,"DAMAGE_FPS",60),zt(jZ,"MOVE_SPEED",.33);
+ Vt(tQ,"HarpyTornado"),Kt(tQ,"DEFAULT_RADIUS_X",70),Kt(tQ,"DEFAULT_RADIUS_Y",56),Kt(tQ,"DEFAULT_DURATION_FRAMES",1200),Kt(tQ,"DAMAGE_INTERVAL_FRAMES",5),Kt(tQ,"DAMAGE_FPS",60),Kt(tQ,"MOVE_SPEED",.33),Kt(tQ,"ZONE_FILL_COLOR",16719904),Kt(tQ,"ZONE_STROKE_COLOR",16732240),Kt(tQ,"ZONE_FILL_ALPHA_SCALE",.4);
RaidWarningLine 1 hunks, 28 statements
- super(...arguments),zt(this,"teleportPhase",null),zt(this,"teleportFrames",0),zt(this,"warningCircle",null),zt(this,"warningElapsed",0),zt(this,"isSummoning",!1)}
+ super(),Kt(this,"g",new Lf),Kt(this,"len",0),Kt(this,"halfWidth",0),Kt(this,"tick",0),this.eventMode="none",this.addChild(this.g)}
+ show(t,i,s,e,n,h){
+ this.x=t,this.y=i,this.rotation=Math.atan2(e,s),this.len=n,this.halfWidth=h,this.tick=0,this.draw(.3,0),tB.getInstance().addChild(this)}
+ update(t){
+ this.tick++;
+ const i=.22+.18*(.5+.5*Math.sin(.4*this.tick));
+ this.draw(i,Math.max(0,Math.min(1,t)))}
+ draw(i,s){
+ const e=this.g;
+ if(e.clear(),e.rect(0,-this.halfWidth,this.len,2*this.halfWidth).fill({
+ color:t.FILL_COLOR,alpha:.5*i}
+ ),e.rect(0,-this.halfWidth,this.len,2*this.halfWidth).stroke({
+ width:4,color:t.STROKE_COLOR,alpha:.9}
+ ),s>0){
+ const t=this.len*s;
+ e.moveTo(t,-this.halfWidth).lineTo(t,this.halfWidth).stroke({
+ width:2,color:16777215,alpha:.55}
+ )}
+ }
+ dispose(){
+ this.g.clear(),this.parent&&this.parent.removeChild(this)}
+ }
+ ;
+ Vt(L2,"RaidWarningLine"),Kt(L2,"FILL_COLOR",16719904),Kt(L2,"STROKE_COLOR",16732240);
+ let G2=L2;
+ const B2=class t extends S2{
+ constructor(){
+ super(...arguments),Kt(this,"teleportPhase",null),Kt(this,"teleportFrames",0),Kt(this,"warningCircle",null),Kt(this,"warningElapsed",0),Kt(this,"spearsFired",0),Kt(this,"spearFireStartDelay",-1),Kt(this,"spearHitCounts",new Map),Kt(this,"spearFireFrames",0),Kt(this,"spearFireX",0),Kt(this,"spearFireY",0),Kt(this,"spearFireZone",null),Kt(this,"sandFireTextures",[]),Kt(this,"spearFireTick",0),Kt(this,"att4Phase",null),Kt(this,"att4Frames",0),Kt(this,"att4ChargeX",1),Kt(this,"att4ChargeY",0),Kt(this,"att4HitCounts",new Map),Kt(this,"isSummoning",!1),Kt(this,"dragonLineActive",!1),Kt(this,"dragonLineX",0),Kt(this,"dragonLineY",0),Kt(this,"dragonLineDirX",1),Kt(this,"dragonLineDirY",0),Kt(this,"dragonsSpawned",0),Kt(this,"dragonLineFrames",0),Kt(this,"dragonWarningLine",null)}
MailPopup 8 hunks, 28 statements
- super(),zt(this,"lblGem"),zt(this,"btnGame"),zt(this,"gameMailList"),zt(this,"btnPayment"),zt(this,"paymentMailList"),zt(this,"container"),zt(this,"currentMenuIndex",-1),zt(this,"btnDeleteAll"),zt(this,"line"),zt(this,"lastMailUpdated",0),zt(this,"requestPending1",!1),zt(this,"requestPending2",!1),zt(this,"onMailChangeBind"),zt(this,"gemPoint",new mi),zt(this,"gemPointInitialized",!1),zt(this,"_currentView",null),this.setTitle(AG.getText("COMMON_66","메일함")),this.lblGem=new GB("UI_GEM_ICON","0",aD.COLOR_DEEP_SKYBLUE,aD.DEFAULT_FONT_OPTION_18),this.addChild(this.lblGem),this.btnDeleteAll=new K3,this.addChild(this.btnDeleteAll),this.btnDeleteAll.onClick=this.onDeleteAll.bind(this),this.btnGame=new Y3(AG.getText("COMMON_282","일반")),this.addChild(this.btnGame),this.btnGame.onClick=this.onGameClick.bind(this),this.btnPayment=new Y3(AG.getText("COMMON_283","결제")),this.addChild(this.btnPayment),this.btnPayment.onClick=this.onPaymentClick.bind(this),this.line=new We(ZA.getTexture("UI_Ekkorr","whiteRect")),this.line.tint=6839879,this.line.width=566,this.line.height=2,this.addChild(this.line),this.container=new Be,this.addChild(this.container),this.updateLayout();
+ super(),Kt(this,"lblGem"),Kt(this,"btnGame"),Kt(this,"gameMailList"),Kt(this,"btnPayment"),Kt(this,"paymentMailList"),Kt(this,"container"),Kt(this,"currentMenuIndex",-1),Kt(this,"btnDeleteAll"),Kt(this,"btnReceiveAll"),Kt(this,"line"),Kt(this,"lastMailUpdated",0),Kt(this,"requestPending1",!1),Kt(this,"requestPending2",!1),Kt(this,"requestPending3",!1),Kt(this,"onMailChangeBind"),Kt(this,"gemPoint",new gi),Kt(this,"gemPointInitialized",!1),Kt(this,"_currentView",null),this.setTitle(SG.getText("COMMON_66","메일함")),this.lblGem=new $B("UI_GEM_ICON","0",cD.COLOR_DEEP_SKYBLUE,cD.DEFAULT_FONT_OPTION_18),this.addChild(this.lblGem),this.btnDeleteAll=new j3t,this.addChild(this.btnDeleteAll),this.btnDeleteAll.onClick=this.onDeleteAll.bind(this),this.btnReceiveAll=new q3t,this.addChild(this.btnReceiveAll),this.btnReceiveAll.onClick=this.onReceiveAll.bind(this),this.btnGame=new K3t(SG.getText("COMMON_282","일반")),this.addChild(this.btnGame),this.btnGame.onClick=this.onGameClick.bind(this),this.btnPayment=new K3t(SG.getText("COMMON_283","결제")),this.addChild(this.btnPayment),this.btnPayment.onClick=this.onPaymentClick.bind(this),this.line=new He(QA.getTexture("UI_Ekkorr","whiteRect")),this.line.tint=6839879,this.line.width=566,this.line.height=2,this.addChild(this.line),this.container=new Ge,this.addChild(this.container),this.updateLayout();
- this.lblGem.x=this.bg.x+35,this.lblGem.y=this.bg.y+20,this.btnPayment.x=this.bg.x+this.bg.width-this.btnPayment.width-25,this.btnPayment.y=this.lblGem.y+this.lblGem.height+5,this.btnGame.x=this.btnPayment.x-this.btnGame.width-5,this.btnGame.y=this.btnPayment.y,this.line.x=this.bg.x+.5*(this.bg.width-this.line.width),this.line.y=this.btnGame.y+this.btnGame.height+5,this.container.x=this.bg.x+27,this.container.y=this.line.y+this.line.height+10,this.btnDeleteAll.x=this.container.x,this.btnDeleteAll.y=this.btnGame.y+.5*(this.btnGame.height-this.btnDeleteAll.height)+3}
+ this.lblGem.x=this.bg.x+35,this.lblGem.y=this.bg.y+20,this.btnPayment.x=this.bg.x+this.bg.width-this.btnPayment.width-25,this.btnPayment.y=this.lblGem.y+this.lblGem.height+5,this.btnGame.x=this.btnPayment.x-this.btnGame.width-5,this.btnGame.y=this.btnPayment.y,this.line.x=this.bg.x+.5*(this.bg.width-this.line.width),this.line.y=this.btnGame.y+this.btnGame.height+5,this.container.x=this.bg.x+27,this.container.y=this.line.y+this.line.height+10,this.btnDeleteAll.x=this.container.x,this.btnDeleteAll.y=this.btnGame.y+.5*(this.btnGame.height-this.btnDeleteAll.height)+3,this.btnReceiveAll.x=this.btnDeleteAll.x+this.btnDeleteAll.width,this.btnReceiveAll.y=this.btnDeleteAll.y}
- this.setTitle(AG.getText("COMMON_66","메일함")),this.btnGame.text=AG.getText("COMMON_282","일반"),this.btnPayment.text=AG.getText("COMMON_283","결제"),this.updateGem(),this.updateLayout(),this.onGameClick(),F3.showItemsInHorizontal([this.btnDeleteAll,this.btnPayment,this.btnGame]),this.loadMailList()}
+ this.setTitle(SG.getText("COMMON_66","메일함")),this.btnGame.text=SG.getText("COMMON_282","일반"),this.btnPayment.text=SG.getText("COMMON_283","결제"),this.updateGem(),this.updateLayout(),this.onGameClick(),BVt.showItemsInHorizontal([this.btnDeleteAll,this.btnReceiveAll,this.btnPayment,this.btnGame]),this.loadMailList()}
- 0!=this.currentMenuIndex&&(this.setMenu(0),this.currentMenuIndex=0,this.gameMailList.setData(S3.gameList),this.currentView=this.gameMailList,this.updateDeleteAllBtn())}
+ 0!=this.currentMenuIndex&&(this.setMenu(0),this.currentMenuIndex=0,this.btnReceiveAll.visible=!0,this.gameMailList.setData(SVt.gameList),this.currentView=this.gameMailList,this.updateDeleteAllBtn())}
- 1!=this.currentMenuIndex&&(this.setMenu(1),this.currentMenuIndex=1,this.paymentMailList.setData(S3.paymentList),this.currentView=this.paymentMailList,this.updateDeleteAllBtn())}
+ 1!=this.currentMenuIndex&&(this.setMenu(1),this.currentMenuIndex=1,this.btnReceiveAll.visible=!1,this.paymentMailList.setData(SVt.paymentList),this.currentView=this.paymentMailList,this.updateDeleteAllBtn())}
+ setRequestPending3(t){
+ this.requestPending3=t}
- this.updateRedDotForGame(),this.updateRedDotForPayment(),this.updateDeleteAllBtn()}
+ this.updateRedDotForGame(),this.updateRedDotForPayment(),this.updateDeleteAllBtn(),this.updateReceiveAllBtn()}
+ updateReceiveAllBtn(){
+ 0===this.currentMenuIndex&&(this.btnReceiveAll.activated=SVt.hasReceivableGameMail)}
+ onReceiveAll(){
+ if(!this.btnReceiveAll.activated)return void u2.getInstance().showMessage(SG.getText("GAME_1256","모두받기 가능한 메시지가 없습니다."));
+ if(1==this.currentMenuIndex)return void u2.getInstance().showMessage(SG.getText("GAME_1255","결제 메일은 모두받기에서 제외됩니다."));
+ if(this.requestPending3)return;
+ const t=SG.getText("GAME_1254","모두받기 하시겠습니까?")+"\n"+SG.getText("GAME_1252","일반 메일은 모두받기 할 수 있습니다."),i=b$t.getInstance();
+ i.title=SG.getText("GAME_1251","모두받기"),i.show(t,this.onReceiveAllConfirm.bind(this))}
+ async onReceiveAllConfirm(){
+ var t;
+ if(1==this.requestPending3)return;
+ this.setRequestPending3(!0);
+ const i=await rD.getInstance().mail.receiveAll(!0);
+ if(0==i.success)return this.setRequestPending3(!1),void wG.getInstance().showError(i);
+ ML.setUserInfo(i.body),FVt.getInstance().setData(i.body),jG.getInstance().setStatusData(null==(t=i.body)?void 0:t.mineStatus),$Vt.getInstance().setData(i.body.transTicket),this.setRequestPending3(!1);
+ let s=null;
+ if(-1!==i.body.rewards.findIndex(t=>t.type==n5.hero)){
+ const t=await rD.getInstance().hero.getHeroInfo();
+ t.success&&(s=t)}
+ s6t.getInstance().setData(i.body,s),s6t.getInstance().show(),SVt.updateNeeded=!0,this.loadMailList(),"inventory"in i.body&&CYt.getInstance().isInventoryPopup()&&W3t.getInstance().refresh()}
IconButton 1 hunks, 27 statements
+ constructor(t,i="UI_Ekkorr"){
+ super(),Kt(this,"icon",new He),Kt(this,"stopEventPropagation",!1),Kt(this,"onClick",null),Kt(this,"_iconColor",16777215),Kt(this,"_iconName",""),Kt(this,"_sheetName","UI_Ekkorr"),this._iconName=t,this._sheetName=i,this.icon.texture=this.getTexture(this._iconName,this._sheetName),this.addChild(this.icon),this.update(),this.eventMode="dynamic",this.on("pointerdown",this.onDown,this),this.on("pointerup",this.onUp,this),this.on("pointerupoutside",this.onUp,this),this.on("pointertap",this.onTap,this)}
+ update(){
+ this.icon.pivot.set(.5*this.icon.width,.5*this.icon.height),this.icon.x=.5*this.icon.width,this.icon.y=.5*this.icon.height}
+ onDown(){
+ this.icon.scale=.9}
+ onUp(){
+ this.icon.scale=1}
+ onTap(){
+ zL.getInstance().playSFX(zL.SFX_NORMAL_CLICK),$L(),null!=this.onClick&&this.onClick()}
+ get iconColor(){
+ return this._iconColor}
+ set iconColor(t){
+ t!==this._iconColor&&(this._iconColor=t,this.icon.tint=this._iconColor)}
+ get iconName(){
+ return this._iconName}
+ set iconName(t){
+ this._iconName=t,this.icon.texture=this.getTexture(this._iconName,this._sheetName),this.update()}
+ getTexture(t,i){
+ return QA.getTexture(i,t)}
+ getIcon(){
+ return this.icon}
+ }
+ ;
+ Vt(e$t,"IconButton");
+ let n$t=e$t;
+ const h$t=class extends n$t{
WingKnight1 15 hunks, 25 statements
- super(),zt(this,"comboIndex",0),zt(this,"killCount",0),zt(this,"flashActive",!1),zt(this,"flashTimer",0),zt(this,"flashEndingSkill",!1),zt(this,"surviveCooldown",0),zt(this,"savedDetectRange",0),zt(this,"savedDetectRange2",0),zt(this,"flashBuffPoint",new mi(0,-20))}
+ super(),Kt(this,"comboIndex",0),Kt(this,"killCount",0),Kt(this,"flashActive",!1),Kt(this,"flashTimer",0),Kt(this,"surviveCooldown",0),Kt(this,"savedDetectRange",0),Kt(this,"savedDetectRange2",0),Kt(this,"flashBuffPoint",new gi(0,-20))}
- super.setData(t,i,s,e),this.restoreDetectRangeFromFlash(),this.comboIndex=0,this.killCount=0,this.flashActive=!1,this.flashTimer=0,this.flashEndingSkill=!1,this.surviveCooldown=0}
+ super.setData(t,i,s,e),this.restoreDetectRangeFromFlash(),this.comboIndex=0,this.killCount=0,this.flashActive=!1,this.flashTimer=0,this.surviveCooldown=0,this.resetHpTriggerLatches()}
+ resetHpTriggerLatches(){
+ const t=this;
+ t._hpDroppedBelow60=!1,t._hpDroppedBelow40=!1,t._hpDroppedBelow20=!1}
+ get isIdleBattle(){
+ return this.battleController instanceof jhi}
- const t=this.getAttackableEnemyList(1);
+ const t=this.getAttackableEnemyList(1,!0);
- const t=this.getAttackableEnemyList(1);
+ const t=this.getAttackableEnemyList(1,!0);
- const s=this.getEnemiesWithin(t.FLASH_DETECT_RANGE).find(t=>t!==this.target)??null;
+ const s=this.getEnemiesWithin(t.FLASH_DETECT_RANGE,!0).find(t=>t!==this.target)??null;
- this.flashActive=!0,this.flashTimer=t.FLASH_BUFF_DUR,0===this.savedDetectRange&&(this.savedDetectRange=this.detectRange,this.savedDetectRange2=this.detectRange2),this.detectRange=t.FLASH_DETECT_RANGE,this.detectRange2=t.FLASH_DETECT_RANGE*t.FLASH_DETECT_RANGE,this.addMoveSpeedBuff(RZ.WingKnight1_FLASH_MOVSPD,t.FLASH_MOVSPD,t.FLASH_BUFF_DUR,!0),this.addAttackDamageBuff(RZ.WingKnight1_DASH_BUFF,t.FLASH_ATKDMG,t.FLASH_BUFF_DUR),this.addAttackSpeedBuff(RZ.WingKnight1_FLASH_ATKSPD,t.FLASH_ATKSPD,t.FLASH_BUFF_DUR,!0),this.showEffect(yq.Accelerate,t.FLASH_BUFF_DUR,this.flashBuffPoint,!0,!1)}
+ this.flashActive=!0,this.flashTimer=t.FLASH_BUFF_DUR,0===this.savedDetectRange&&(this.savedDetectRange=this.detectRange,this.savedDetectRange2=this.detectRange2),this.detectRange=t.FLASH_DETECT_RANGE,this.detectRange2=t.FLASH_DETECT_RANGE*t.FLASH_DETECT_RANGE,this.addMoveSpeedBuff(yK.WingKnight1_FLASH_MOVSPD,t.FLASH_MOVSPD,t.FLASH_BUFF_DUR,!0);
+ const i=this.isIdleBattle?t.FLASH_ATKDMG:t.FLASH_ATKDMG_ALT;
+ this.addAttackDamageBuff(yK.WingKnight1_DASH_BUFF,i,t.FLASH_BUFF_DUR),this.addAttackSpeedBuff(yK.WingKnight1_FLASH_ATKSPD,t.FLASH_ATKSPD,t.FLASH_BUFF_DUR),this.showEffect(PF.Accelerate,t.FLASH_BUFF_DUR,this.flashBuffPoint,!0,!1)}
+ updateSurviveTrigger(){
+ !this.isAlive||this.maxHp<=0||(this.hp/this.maxHp>=t.SURVIVE_HP_THRESHOLD?this._hpDroppedBelow20=!1:this.surviveCooldown<=0&&this.activateSurviveBerserk())}
- this.surviveCooldown=t.SURVIVE_SKILL_COOLDOWN,this.showPowerShield(t.SURVIVE_SHIELD_DUR),this.addAttackSpeedBuff(RZ.WingKnight1_BERSERK_ATKSPD,t.SURVIVE_ATKSPD,t.SURVIVE_BERSERK_DUR,!0),this.addAttackDamageBuff(RZ.WingKnight1_BERSERK_ATKDMG,t.SURVIVE_ATKDMG,t.SURVIVE_BERSERK_DUR),this.showEffect(yq.Accelerate,t.SURVIVE_BERSERK_DUR,this.flashBuffPoint,!0,!1),this.gotoSkillState()}
+ this.surviveCooldown=t.SURVIVE_SKILL_COOLDOWN,this.showPowerShield(t.SURVIVE_SHIELD_DUR);
+ const i=this.isIdleBattle?t.SURVIVE_ATKDMG:t.SURVIVE_ATKDMG_ALT;
+ this.addAttackSpeedBuff(yK.WingKnight1_FLASH_ATKSPD,t.SURVIVE_ATKSPD,t.SURVIVE_BERSERK_DUR),this.addAttackDamageBuff(yK.WingKnight1_DASH_BUFF,i,t.SURVIVE_BERSERK_DUR),this.showEffect(PF.Accelerate,t.SURVIVE_BERSERK_DUR,this.flashBuffPoint,!0,!1),this.gotoSkillState()}
- if(super.execute(),this.surviveCooldown>0&&this.surviveCooldown--,this.flashActive){
+ if(super.execute(),this.surviveCooldown>0&&this.surviveCooldown--,this.updateSurviveTrigger(),this.flashActive){
- this.flashTimer--,this.flashTimer<=0&&(this.flashActive=!1,this.flashEndingSkill=!0,this.restoreDetectRangeFromFlash(),this.mana=0,this.gotoSkillState())}
+ this.flashTimer--,this.flashTimer<=0&&(this.flashActive=!1,this.restoreDetectRangeFromFlash())}
- this.flashEndingSkill?this.flashEndingSkill=!1:this.flashActive||this.activateFlashBuff();
- const i=this.evolStage>=1,s=this.getEnemiesWithin(t.SKILL_TARGET_RANGE)[0]??this.target;
+ this.flashActive||this.activateFlashBuff();
+ const i=this.evolStage>=1,s=this.getEnemiesWithin(t.SKILL_TARGET_RANGE,!0)[0]??this.target;
- if(s.stun(e),i){
+ if(s.stun(e,this),i){
- n*n+h*h<=i&&t.stun(e)}
+ n*n+h*h<=i&&t.stun(e,this)}
- Kt(A5,"WingKnight1"),zt(A5,"ATK_DMG",[.7,.8,1]),zt(A5,"KILL_THRESHOLD",6),zt(A5,"FLASH_BUFF_DUR",480),zt(A5,"FLASH_DETECT_RANGE",1200),zt(A5,"FLASH_ATKDMG",.5),zt(A5,"FLASH_MOVSPD",1.5),zt(A5,"FLASH_ATKSPD",.5),zt(A5,"SURVIVE_HP_THRESHOLD",.2),zt(A5,"SURVIVE_SHIELD_DUR",180),zt(A5,"SURVIVE_BERSERK_DUR",600),zt(A5,"SURVIVE_SKILL_COOLDOWN",3600),zt(A5,"SURVIVE_ATKSPD",1),zt(A5,"SURVIVE_ATKDMG",1),zt(A5,"COMBO_KB_VX",3),zt(A5,"COMBO_KB_VX_E",4),zt(A5,"COMBO_KB_VY",-2),zt(A5,"COMBO_KB_DUR",30),zt(A5,"COMBO_KB_DUR_E",40),zt(A5,"COMBO_SPLASH_RANGE",60),zt(A5,"DASH_STUN_DUR",30),zt(A5,"DASH_STUN_DUR_E",45),zt(A5,"DASH_STUN_RANGE",60),zt(A5,"SKILL_TARGET_RANGE",500),zt(A5,"SKILL_SLAM_RANGE",110),zt(A5,"SKILL_SLAM_RANGE_E",150),zt(A5,"SKILL_SLAM_DMG",2.5),zt(A5,"SKILL_SLAM_DMG_E",3);
+ Vt(W1,"WingKnight1"),Kt(W1,"ATK_DMG",[.7,.8,1]),Kt(W1,"KILL_THRESHOLD",6),Kt(W1,"FLASH_BUFF_DUR",480),Kt(W1,"FLASH_DETECT_RANGE",1200),Kt(W1,"FLASH_ATKDMG",.5),Kt(W1,"FLASH_ATKDMG_ALT",.3),Kt(W1,"FLASH_MOVSPD",1.5),Kt(W1,"FLASH_ATKSPD",.5),Kt(W1,"SURVIVE_HP_THRESHOLD",.2),Kt(W1,"SURVIVE_SHIELD_DUR",180),Kt(W1,"SURVIVE_BERSERK_DUR",600),Kt(W1,"SURVIVE_SKILL_COOLDOWN",3600),Kt(W1,"SURVIVE_ATKSPD",1),Kt(W1,"SURVIVE_ATKDMG",1),Kt(W1,"SURVIVE_ATKDMG_ALT",.4),Kt(W1,"COMBO_KB_VX",3),Kt(W1,"COMBO_KB_VX_E",4),Kt(W1,"COMBO_KB_VY",-2),Kt(W1,"COMBO_KB_DUR",30),Kt(W1,"COMBO_KB_DUR_E",40),Kt(W1,"COMBO_SPLASH_RANGE",60),Kt(W1,"DASH_STUN_DUR",30),Kt(W1,"DASH_STUN_DUR_E",45),Kt(W1,"DASH_STUN_RANGE",60),Kt(W1,"SKILL_TARGET_RANGE",500),Kt(W1,"SKILL_SLAM_RANGE",110),Kt(W1,"SKILL_SLAM_RANGE_E",150),Kt(W1,"SKILL_SLAM_DMG",2.5),Kt(W1,"SKILL_SLAM_DMG_E",3);
GolemStone 2 hunks, 24 statements
+ const sQ={
+ 1e5:new Set(["att_01","att_02","att_03","att_04","poison_bullet","teleport_in","teleport_out"]),100001:new Set(["att_01","att_02","att_03_jump","att_03_shockwave","att_04","att_05","feather_bullet"]),100002:new Set(["att_01","att_02","att_03","att_04","att_05","stone_bullet","teleport_in","teleport_out"]),100003:new Set(["att_01","att_02","att_03","att_04","att_05","beam","teleport_in","teleport_out"]),100004:new Set(["att_01","att_02","att_03","att_04","att_05","att_06","dragon_breath","dragon_shout","teleport_in","teleport_out"])}
+ ;
+ function eQ(t,i,s=.6){
+ const e=sQ[t];
+ if(!e||!e.has(i))return;
+ const n=t-1e5+1;
+ zL.getInstance().playSFX(`${
+ YA.getBase()}
+ assets/sounds/battle/raid/raid1/boss${
+ n}
+ /${
+ i}
+ .mp3`,s)}
+ function nQ(t,i){
+ "teleport_in"!==i&&"teleport_out"!==i?100001===t&&"Harpy_att3"===i&&eQ(t,"att_03_jump"):eQ(t,i)}
+ function hQ(t,i){
+ if(100001===t&&"att3_hit"===i)return void eQ(t,"att_03_shockwave");
+ const s=/^att_?(\d+)_hit$/.exec(i);
+ s&&eQ(t,`att_0${
+ Number(s[1])}
+ `)}
+ Vt(eQ,"playRaidBossSfx"),Vt(nQ,"playRaidBossAnimSfx"),Vt(hQ,"playRaidBossHitSfx");
- this.aoeRadius>0?this.applyAoe():this.owner&&this.target&&this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.target.isAlive&&!this.target.isImmovable&&this.knockAwayFrom(this.target,this.owner.x,this.owner.y)),this.landed=!0,this.landedFrame=t.FLY_FRAME_COUNT,this.landedHold=0,this.vx=0,this.vy=0,this.sp&&(this.sp.texture=this.textures[t.FLY_FRAME_COUNT])}
+ this.owner&&eQ(this.owner.kindNum,"att_01"),this.aoeRadius>0?this.applyAoe():this.owner&&this.target&&this.target.isAlive&&(this.owner.doDamage(this.target,this.damagePercent,!0),this.target.isAlive&&!this.target.isImmovable&&this.knockAwayFrom(this.target,this.owner.x,this.owner.y)),this.landed=!0,this.landedFrame=t.FLY_FRAME_COUNT,this.landedHold=0,this.vx=0,this.vy=0,this.sp&&(this.sp.texture=this.textures[t.FLY_FRAME_COUNT])}
GuildRaidDifficultySubView 9 hunks, 23 statements
- const u=c.map(i=>{
+ const u=c.filter(i=>{
+ const s=h.getFirstSub(t,i.difficult);
+ return!!i.open||!!s&&s.progress<=a+1}
+ ).map(i=>{
- main:t,difficult:i.difficult,open:!!i.open,openable:e,raidId:i.raidId??0,remainText:n>0?M4t.getInstance().remainText(n):"",openCost:(null==s?void 0:s.openCost)??0,isElder:M4t.getInstance().isElder,onEnter:Kt((t,i)=>{
+ main:t,difficult:i.difficult,open:!!i.open,openable:e,raidId:i.raidId??0,remainText:n>0?wti.getInstance().remainText(n):"",openCost:(null==s?void 0:s.openCost)??0,canOpen:wti.getInstance().isSubMaster,onEnter:Vt((t,i)=>{
- );
+ ).reverse();
+ if(tx.time<PJt.OPEN_TIME_UTC_MS)return void _9t.getInstance().show();
+ SG.getValueReplaceMulti("GAME_1269",["\\{
+ 0\\}
+ ","\\{
+ 1\\}
+ "],[s.getMainName(t),i],`${
- 단계를 오픈하시겠습니까?\n${
+ 단계를 오픈하시겠습니까?`)}
+ \n${
+ SG.getValueReplace("GAME_1270","\\{
+ 0\\}
+ ",n,`${
-  소모`;
+  소모`)}
+ `;
- if(!(null==h?void 0:h.success))return void mG.getInstance().show(String((null==h?void 0:h.error)??"ERROR"));
+ if(!(null==h?void 0:h.success)){
+ const t=String((null==h?void 0:h.error)??"ERROR");
+ return void wG.getInstance().show(SG.getErrorMessage(t)||t)}
- Number.isFinite(r)&&ED.myMembershipVO&&(ED.myMembershipVO.coin=ED.myCoins=r,UV.getInstance().updateGuildCoin());
+ Number.isFinite(r)&&AD.myGuildVO&&(AD.myGuildVO.coin=r);
PetDataManager 2 hunks, 22 statements
+ getRaidResist(i){
+ var s,e,n,h,r,o;
+ if(i<=0)return 0;
+ const a=`RESIST_${
+ i}
+ `;
+ let c=0;
+ for(let l=0;
+ l<this.list.length;
+ l++){
+ const i=this.list[l],u=this.bookMap.get(i.kindNum);
+ if(!u)continue;
+ if((null==(s=this.skillBookMap.get(u.skill1))?void 0:s.id)!==a&&(null==(e=this.skillBookMap.get(u.skill2))?void 0:e.id)!==a&&(null==(n=this.skillBookMap.get(u.masterSkill))?void 0:n.id)!==a)continue;
+ const d=i.kindNum===this.representPet?2:1;
+ (null==(h=this.skillBookMap.get(u.skill1))?void 0:h.id)===a&&(c+=this.getSkill1Value(i.kindNum)*d),(null==(r=this.skillBookMap.get(u.skill2))?void 0:r.id)===a&&(c+=this.getSkill2Value(i.kindNum)*d),(null==(o=this.skillBookMap.get(u.masterSkill))?void 0:o.id)===a&&(c+=this.getSkill3Value(i.kindNum)*d);
+ let f=0;
+ for(let t=0;
+ t<i.grade&&t<ox.length;
+ t++)f+=ox[t];
+ c+=(i.piece+f)*t.RAID_RESIST_PIECE_BONUS}
+ return c}
- Kt(cx,"PetDataManager"),zt(cx,"instance");
+ Vt(ax,"PetDataManager"),Kt(ax,"instance"),Kt(ax,"RAID_RESIST_PIECE_BONUS",10);
Aladin1 8 hunks, 21 statements
+ const h=c2.getActive();
+ for(let t=h.length-1;
+ t>=0;
+ t--)h[t].caster===this&&h[t].terminate();
+ c2.clearAll();
- ,this.startSound=KL.SFX_BATTLE_MALE_GO,this.attackSound=KL.SFX_BATTLE_STAFF_ATTACK1,this.dieSound=KL.SFX_BATTLE_MALE_DIE2,this.hasSkill=!0,this.maxMana=400,this.firePoint.set(23,-32),this.normalSize=.75,this.evolSize=.8}
+ ,this.startSound=zL.SFX_BATTLE_MALE_GO,this.attackSound=zL.SFX_BATTLE_STAFF_ATTACK1,this.dieSound=zL.SFX_BATTLE_MALE_DIE2,this.hasSkill=!0,this.maxMana=600,this.firePoint.set(23,-32),this.normalSize=.75,this.evolSize=.8}
- super.onHitted();
- const i=t.allCoins.filter(t=>!t.removed&&!t.isOrbiting);
- if(0===i.length)return;
- const s=i[Math.floor(this.random.next()*i.length)],e=this.random.next()*Math.PI*2,n=t.ATK_SPREAD_MIN+this.random.next()*(t.ATK_SPREAD_MAX-t.ATK_SPREAD_MIN),h=Math.max(t.MAP_MIN,Math.min(t.MAP_MAX,s.x+Math.cos(e)*n)),r=Math.max(t.MAP_MIN,Math.min(t.MAP_MAX,s.y+Math.sin(e)*n*.5));
- s.launch(h,r)}
+ super.onHitted()}
- const i=this.foresightArmed?t.WISH_FORESIGHT_RANGE_MULT:1,s=t.COLLECT_RADIUS*i,e=s*s,n=t.allCoins.filter(t=>{
+ const i=1*t.COLLECT_RADIUS,s=i*i,e=t.allCoins.filter(t=>{
- const h=t.ORBIT_RADIUS*i;
+ const n=1*t.ORBIT_RADIUS,h=this.x+30,r=this.y-115;
- r.joinPath(this.x+30,this.y-115,h,i,s),this.foresightArmed&&(r.damagePercent*=t.WISH_FORESIGHT_DMG_MULT)}
- this.foresightArmed=!1,this.scheduleWish()}
+ o.joinPath(h,r,n,i,s),o.inStorm=!0,this.foresightArmed&&(o.damagePercent*=t.WISH_FORESIGHT_DMG_MULT)}
+ this.spawnCoinStorm(h,r,n,1,e,0),this.foresightArmed=!1,this.scheduleWish()}
+ spawnCoinStorm(t,i,s,e,n,h=0){
+ const r=this.battleController;
+ if(!r)return;
+ const o=r.player,a=o?o.x:320,c=o?o.y:320,l=new c2;
+ l.initStorm(this,t,i,s,n,a,c,e,h),l.registerToController(r)}
- Kt(K5,"Aladin1"),zt(K5,"MAP_MIN",60),zt(K5,"MAP_MAX",580),zt(K5,"WANDER_RADIUS",180),zt(K5,"WANDER_INTERVAL_MIN",90),zt(K5,"WANDER_INTERVAL_MAX",200),zt(K5,"GLOBAL_COIN_CAP",50),zt(K5,"COIN_LIFE",900),zt(K5,"ATK_COIN_COUNT",3),zt(K5,"ATK_SPREAD_MIN",20),zt(K5,"ATK_SPREAD_MAX",120),zt(K5,"ATK_COOLDOWN",200),zt(K5,"ORBIT_RADIUS",155),zt(K5,"COLLECT_RADIUS",175),zt(K5,"GOLD_DMG_PER_COIN",.03),zt(K5,"GOLD_MAX_COINS",25),zt(K5,"allCoins",[]),zt(K5,"WISH_GOLD",0),zt(K5,"WISH_BLESSING",1),zt(K5,"WISH_FORESIGHT",2),zt(K5,"WISH_TRIGGER_DELAY",180),zt(K5,"WISH_GOLD_BONUS_COINS",8),zt(K5,"WISH_GOLD_FAST_FRAMES",300),zt(K5,"WISH_GOLD_FAST_RATIO",.5),zt(K5,"WISH_BLESSING_ATKDMG",.15),zt(K5,"WISH_BLESSING_FRAMES",480),zt(K5,"WISH_FORESIGHT_DMG_MULT",2),zt(K5,"WISH_FORESIGHT_RANGE_MULT",1.3),zt(K5,"COIN_EXPIRE_RAGE_CHANCE",.1),zt(K5,"COIN_EXPIRE_RAGE_SECONDS",.5);
+ Vt(p2,"Aladin1"),Kt(p2,"MAP_MIN",60),Kt(p2,"MAP_MAX",580),Kt(p2,"WANDER_RADIUS",280),Kt(p2,"WANDER_INTERVAL_MIN",80),Kt(p2,"WANDER_INTERVAL_MAX",180),Kt(p2,"GLOBAL_COIN_CAP",50),Kt(p2,"COIN_LIFE",900),Kt(p2,"ATK_COIN_COUNT",3),Kt(p2,"ATK_SPREAD_MIN",20),Kt(p2,"ATK_SPREAD_MAX",120),Kt(p2,"ATK_COOLDOWN",200),Kt(p2,"ORBIT_RADIUS",155),Kt(p2,"COLLECT_RADIUS",175),Kt(p2,"GOLD_DMG_PER_COIN",.03),Kt(p2,"GOLD_MAX_COINS",25),Kt(p2,"allCoins",[]),Kt(p2,"WISH_GOLD",0),Kt(p2,"WISH_BLESSING",1),Kt(p2,"WISH_FORESIGHT",2),Kt(p2,"WISH_TRIGGER_DELAY",180),Kt(p2,"WISH_GOLD_BONUS_COINS",8),Kt(p2,"WISH_GOLD_FAST_FRAMES",300),Kt(p2,"WISH_GOLD_FAST_RATIO",.5),Kt(p2,"WISH_BLESSING_ATKDMG",.15),Kt(p2,"WISH_BLESSING_FRAMES",480),Kt(p2,"WISH_FORESIGHT_DMG_MULT",2),Kt(p2,"COIN_EXPIRE_RAGE_CHANCE",.1),Kt(p2,"COIN_EXPIRE_RAGE_SECONDS",.5);
RaidShockwaveRing 1 hunks, 21 statements
- super(),zt(this,"spine",null),zt(this,"spineLoadPromise",null),zt(this,"spineKey",""),zt(this,"weakPointBone",""),zt(this,"weakPointSlotNames",[]),zt(this,"weakPointOffsetX",0),zt(this,"weakPointOffsetY",0),zt(this,"raidStunFrames",0),zt(this,"hitFlashFrames",0),zt(this,"hitFlashMax",1),zt(this,"hitFlashHead",!1),zt(this,"headTintSlots",["face","jaw"]),zt(this,"knockVx",0),zt(this,"knockVy",0),zt(this,"bossScale",1.3),zt(this,"spineFacesLeftByDefault",!0),zt(this,"spineTimeScale",.6),zt(this,"aniIdle","idle"),zt(this,"aniMove","run"),zt(this,"aniDie","die"),zt(this,"aniGroggy","groggy"),zt(this,"aniSkill0","att1"),zt(this,"aniSkills",["att2","att3","att4","att5"]),zt(this,"eventSkill0Hit","att1_hit"),zt(this,"eventSkillHits",["att2_hit","att3_hit","att4_hit","att5_hit"]),zt(this,"attackOrderList",[]),zt(this,"currentAttackOrderList",[]),zt(this,"attackOrderIndex",0),zt(this,"skillRatio",[.75,.55,.35,.15,0]),zt(this,"raidPhases",[]),zt(this,"numForSkillAttack",2),zt(this,"numCurrentAttack",0),zt(this,"interSkillIdleFrames",120),zt(this,"arrAttackTypeList",[]),zt(this,"incAttack",0),zt(this,"decSpeed",0),zt(this,"_power",1),zt(this,"attackable",!0),zt(this,"raidGroggyActive",!1),zt(this,"raidTintR",1),zt(this,"raidTintG",1),zt(this,"raidTintB",1),zt(this,"raidSlotBaseColors",new Map),zt(this,"wanderEnabled",!1),zt(this,"wanderInterval",240),zt(this,"immobile",!1),zt(this,"wanderMinX",100),zt(this,"wanderMaxX",540),zt(this,"wanderMinY",200),zt(this,"wanderMaxY",950),zt(this,"wanderTimer",0),zt(this,"hitBoxGfx",null),zt(this,"targetSwapChance",0),zt(this,"aggroFaceX",null),zt(this,"wanderAfterAttackChance",0),zt(this,"attackDashActive",!1),zt(this,"attackDashTargetX",0),zt(this,"attackDashTargetY",0),zt(this,"attackDashSpeed",0),zt(this,"syncBoneName",""),zt(this,"_prevBoneOffX",0),zt(this,"_prevBoneOffY",0),zt(this,"_syncLogCount",0),this.bossType=1,this.hasSkill=!1,this.weight=5,this.blowImmune=!0,this.stunImmune=!0,this.freezeImmune=!0,this.knockImmune=!0}
+ super(),Kt(this,"g",new Lf),this.eventMode="none",this.addChild(this.g)}
+ show(t,i){
+ this.x=t,this.y=i,this.g.clear(),tB.getInstance().addChild(this)}
+ update(t,i){
+ const s=Math.max(0,Math.min(1,i)),e=.55*(1-s),n=this.g;
+ if(n.clear(),t<=1||e<=.01)return;
+ const h=.5*t;
+ n.ellipse(0,0,t,h).stroke({
+ width:3+5*(1-s),color:16773576,alpha:e}
+ ),n.ellipse(0,0,.82*t,.82*h).stroke({
+ width:2,color:16777215,alpha:.5*e}
+ )}
+ dispose(){
+ this.g.clear(),this.parent&&this.parent.removeChild(this)}
+ }
+ ;
+ Vt(M2,"RaidShockwaveRing");
+ let E2=M2;
+ const A2=class t extends $Q{
+ constructor(){
+ super(),Kt(this,"spine",null),Kt(this,"spineLoadPromise",null),Kt(this,"spineKey",""),Kt(this,"weakPointBone",""),Kt(this,"weakPointSlotNames",[]),Kt(this,"weakPointOffsetX",0),Kt(this,"weakPointOffsetY",0),Kt(this,"raidStunFrames",0),Kt(this,"hitFlashFrames",0),Kt(this,"hitFlashMax",1),Kt(this,"hitFlashHead",!1),Kt(this,"headTintSlots",["face","jaw"]),Kt(this,"knockVx",0),Kt(this,"knockVy",0),Kt(this,"bossScale",1.3),Kt(this,"spineFacesLeftByDefault",!0),Kt(this,"spineTimeScale",.6),Kt(this,"aniIdle","idle"),Kt(this,"aniMove","run"),Kt(this,"aniDie","die"),Kt(this,"aniGroggy","groggy"),Kt(this,"aniSkill0","att1"),Kt(this,"aniSkills",["att2","att3","att4","att5"]),Kt(this,"eventSkill0Hit","att1_hit"),Kt(this,"eventSkillHits",["att2_hit","att3_hit","att4_hit","att5_hit"]),Kt(this,"attackOrderList",[]),Kt(this,"currentAttackOrderList",[]),Kt(this,"attackOrderIndex",0),Kt(this,"skillRatio",[.75,.55,.35,.15,0]),Kt(this,"raidPhases",[]),Kt(this,"numForSkillAttack",2),Kt(this,"numCurrentAttack",0),Kt(this,"interSkillIdleFrames",120),Kt(this,"arrAttackTypeList",[]),Kt(this,"incAttack",0),Kt(this,"decSpeed",0),Kt(this,"_power",1),Kt(this,"attackable",!0),Kt(this,"raidGroggyActive",!1),Kt(this,"raidSlotBaseColors",new Map),Kt(this,"wanderEnabled",!1),Kt(this,"wanderInterval",240),Kt(this,"immobile",!1),Kt(this,"wanderMinX",100),Kt(this,"wanderMaxX",540),Kt(this,"wanderMinY",200),Kt(this,"wanderMaxY",950),Kt(this,"wanderTimer",0),Kt(this,"hitBoxGfx",null),Kt(this,"targetSwapChance",0),Kt(this,"aggroFaceX",null),Kt(this,"wanderAfterAttackChance",0),Kt(this,"attackDashActive",!1),Kt(this,"attackDashTargetX",0),Kt(this,"attackDashTargetY",0),Kt(this,"attackDashSpeed",0),Kt(this,"entranceActive",!1),Kt(this,"entranceTargetX",0),Kt(this,"entranceTargetY",0),Kt(this,"entranceSpeed",2),Kt(this,"entranceBreakOnEngage",!0),Kt(this,"syncBoneName",""),Kt(this,"_prevBoneOffX",0),Kt(this,"_prevBoneOffY",0),Kt(this,"idleAnimTimeScale",1),Kt(this,"spineMixDuration",.25),Kt(this,"_syncLogCount",0),Kt(this,"vulnProcSink",null),Kt(this,"raidEventSink",null),Kt(this,"exhaustStunExtendMult",1),Kt(this,"exhaustStunExtendSec",0),Kt(this,"interruptStunExtendMult",1),Kt(this,"weakWindowExtendMult",1),Kt(this,"bulletTimeSpeed",5/60),Kt(this,"bulletTimeSimFrames",40),Kt(this,"bulletTimeRemaining",0),Kt(this,"bulletTimePrevSpeed",-1),Kt(this,"raidSpaceRadius",-1),Kt(this,"backstabZoneEnabled",!1),Kt(this,"backstabZone",null),Kt(this,"backstabZoneDir",0),Kt(this,"exhaustEnabled",!1),Kt(this,"exhaustMax",100),Kt(this,"exhaustPassivePerFrame",100/9e3),Kt(this,"exhaustStunFrames",300),Kt(this,"exhaustPoiseFrames",90),Kt(this,"exhaustDmgMult",1.6),Kt(this,"wakeShockRadius",210),Kt(this,"wakeShockPowerScale",1.15),Kt(this,"wakeTrembleFraction",.2),Kt(this,"wakeTrembleAmpMin",2),Kt(this,"wakeTrembleAmpMax",6),Kt(this,"exhaustBarWidth",90),Kt(this,"exhaustBarHeight",8),Kt(this,"exhaustBarOffsetY",-40),Kt(this,"exhaustGauge",0),Kt(this,"exhaustIncMult",1),Kt(this,"exhaustPoiseTimer",0),Kt(this,"inExhaustStun",!1),Kt(this,"exhaustStunTotalFrames",0),Kt(this,"exhaustTrembleTick",0),Kt(this,"exhaustTrembleActive",!1),Kt(this,"exhaustBar",null),Kt(this,"shockSpeed",26),Kt(this,"shockFarFalloff",.35),Kt(this,"shockBlowScale",.7),Kt(this,"shockBlowPowerMin",5),Kt(this,"shockBlowPowerMax",14),Kt(this,"shockBlowVhMin",3),Kt(this,"shockBlowVhMax",9),Kt(this,"shockActive",!1),Kt(this,"shockCx",0),Kt(this,"shockCy",0),Kt(this,"shockRadius",0),Kt(this,"shockMaxRadius",300),Kt(this,"shockPowerScale",1),Kt(this,"shockHit",new Set),Kt(this,"shockRing",null),Kt(this,"groundMarker",null),Kt(this,"groundMarkerFrames",0),Kt(this,"groundMarkerTotal",95),Kt(this,"groundMarkerValidState",sx.ATTACK),Kt(this,"interruptEnabled",!1),Kt(this,"interruptAlwaysOpen",!1),Kt(this,"interruptChance",.33),Kt(this,"interruptPityStreak",2),Kt(this,"interruptLeadTime",55),Kt(this,"interruptWindowMax",180),Kt(this,"interruptPostCastGlowFrames",0),Kt(this,"interruptStunFrames",240),Kt(this,"interruptStaggerFrames",75),Kt(this,"interruptDebuffFrames",480),Kt(this,"interruptHitRadius",44),Kt(this,"interruptWeakBones",[]),Kt(this,"interruptWeakLabels",[]),Kt(this,"interruptDefValue",-.5),Kt(this,"interruptAtkspdValue",-.4),Kt(this,"interruptIncdmgMult",1.5),Kt(this,"interruptMovespdValue",-.5),Kt(this,"interruptBleedAmp",.06),Kt(this,"interruptArmed",!1),Kt(this,"interruptMissStreak",0),Kt(this,"interruptWindowFrames",0),Kt(this,"interruptLeadFrames",0),Kt(this,"interruptPendingIdx",0),Kt(this,"skillInterrupted",!1),Kt(this,"interruptGlow",null),Kt(this,"interruptGlowTick",0),Kt(this,"interruptWeakIdx",-1),Kt(this,"interruptDebuffTimers",[0,0,0,0,0]),Kt(this,"interruptIncMult",1),Kt(this,"interruptBleedMult",1),Kt(this,"runeIncomingDamageMult",1),this.bossType=1,this.hasSkill=!1,this.weight=5,this.blowImmune=!0,this.stunImmune=!0,this.freezeImmune=!0,this.knockImmune=!0}
GuildRaidDifficultySubMenu 4 hunks, 19 statements
- ),this.lblTicket=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.addChild(this.lblTicket)}
+ );
+ for(let i=0;
+ i<t.TICKET_MAX;
+ i++){
+ const i=new He(QA.getTexture("UI_Ekkorr","PVP_TICKET_ON"));
+ i.scale.set(t.TICKET_SCALE),i.visible=!1,this.ticketIcons.push(i),this.addChild(i)}
+ this.btnGuide=new MB("UI_Ekkorr","UI_Alarm"),this.btnGuide.on("pointertap",()=>{
+ A9t.getInstance().showGuide()}
+ ),this.addChild(this.btnGuide)}
- this.setTitle(t),this.setTicket(i)}
+ this.setTitle(i),this.setTicket(s),this.btnGuide.x=this.lblTitle.x+this.lblTitle.width+8,this.btnGuide.y=.5*(this.bg.height-this.btnGuide.height)+t.GUIDE_NUDGE_Y}
- this.lblTicket.text=`오늘 남은 도전 횟수 : ${
- t}
- `,this.lblTicket.x=this.closeBtn.x-this.lblTicket.width-10,this.lblTicket.y=.5*(this.bg.height-this.lblTicket.height)}
+ var s;
+ const e=Math.max(0,Math.min(t.TICKET_MAX,i)),n=t.TICKET_OVERLAP_STEP,h=(null==(s=this.ticketIcons[0])?void 0:s.width)??0,r=e>0?h+(e-1)*n:0,o=this.closeBtn.x-10-r;
+ for(let t=0;
+ t<this.ticketIcons.length;
+ t++){
+ const i=this.ticketIcons[t];
+ i.visible=t<e,i.x=o+t*n,i.y=.5*(this.bg.height-i.height)}
+ }
- Kt(u4t,"GuildRaidDifficultySubMenu"),zt(u4t,"instance");
+ Vt(S9t,"GuildRaidDifficultySubMenu"),Kt(S9t,"instance"),Kt(S9t,"TICKET_MAX",2),Kt(S9t,"TICKET_SCALE",.94),Kt(S9t,"TICKET_OVERLAP_STEP",20),Kt(S9t,"GUIDE_NUDGE_Y",3);
GameOverPopup 4 hunks, 18 statements
- super(),zt(this,"lblMessage1",new YD("",aD.DEFAULT_COLOR,aD.DEFAULT_FONT_OPTION_18)),zt(this,"lblMessage2",new YD("",aD.COLOR_GRAY,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblMedalReward",new GB("UI_STAR_ICON","0",16750848,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"lblEventBonus",new YD("",4500223,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"rewardCardBg"),zt(this,"lblTabCurrentArrow"),zt(this,"lblTabCurrent",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblTabCenter",new YD("",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblTabReviveArrow"),zt(this,"lblTabRevive",new YD("",8947848,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblStartWave",new YD("",13421772,aD.DEFAULT_FONT_OPTION_16)),zt(this,"lblLastRevive",new YD("",10066329,aD.DEFAULT_FONT_OPTION_16)),zt(this,"btnMedalBuffGuide",new mB("UI_Ekkorr","UI_Alarm",.85)),zt(this,"btnRebirth",new kU("","","환생",.8,135,70)),zt(this,"btnRebirthBonus",new kU("UI_GEM","500","환생 (훈장 x 2)",.8,240,70)),zt(this,"btnContinue",new kU("Icon_Heart2","1","이어하기",.8,140,70)),zt(this,"reviveTeamBanner"),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),this.title=AG.getText("GAME_6","환생하기"),this.lblMessage1.y=85,this.lblMessage2.align="center",this.btnRebirth.showIconLabel=!1,this.btnRebirth.showTextLabel=!0,this.btnRebirth.text=AG.getText("GAME_5","환생"),this.btnRebirth.color=kU.GREEN,this.btnRebirthBonus.showIconLabel=!0,this.btnRebirthBonus.showTextLabel=!0,this.btnRebirthBonus.iconText="500",this.btnRebirthBonus.text=`${
+ super(),Kt(this,"lblMessage1",new JD("",cD.DEFAULT_COLOR,cD.DEFAULT_FONT_OPTION_18)),Kt(this,"lblMessage2",new JD("",cD.COLOR_GRAY,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblMedalReward",new $B("UI_STAR_ICON","0",16750848,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"lblEventBonus",new JD("",4500223,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"rewardCardBg"),Kt(this,"lblTabCurrentArrow"),Kt(this,"lblTabCurrent",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblTabCenter",new JD("",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblTabReviveArrow"),Kt(this,"lblTabRevive",new JD("",8947848,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblStartWave",new JD("",13421772,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"lblLastRevive",new JD("",10066329,cD.DEFAULT_FONT_OPTION_16)),Kt(this,"btnMedalBuffGuide",new MB("UI_Ekkorr","UI_Alarm",.85)),Kt(this,"btnRebirth",new kU("","","환생",.8,135,70)),Kt(this,"btnRebirthBonus",new kU("UI_GEM","500","환생 (훈장 x 2)",.8,240,70)),Kt(this,"btnContinue",new kU("Icon_Heart2","1","이어하기",.8,140,70)),Kt(this,"reviveTeamBanner"),Kt(this,"bannerSeparator"),Kt(this,"useReviveTeam",!1),Kt(this,"hasReviveTeam",!1),Kt(this,"reviveTeamKindNums",[]),Kt(this,"reviveTeamTrans",[]),Kt(this,"currentWave",1),Kt(this,"baseMedalCache",0),Kt(this,"normalMedalCache",0),Kt(this,"reviveTeamMedalCache",0),Kt(this,"eventMultiCache",1),Kt(this,"currentBuffMultiplier",1),Kt(this,"reviveBuffMultiplier",1),Kt(this,"onContinue",null),Kt(this,"onRebirth",null),Kt(this,"onRebirthBonus",null),Kt(this,"requestPending",!1),Kt(this,"isGameOverMode",!1),Kt(this,"pendingGameOver",null),Kt(this,"gameOverWave",0),cS.getInstance().addEventListener("BattleSwitch",this.onBattleSwitchEvent.bind(this)),this.title=SG.getText("GAME_6","환생하기"),this.lblMessage1.y=85,this.lblMessage2.align="center",this.btnRebirth.showIconLabel=!1,this.btnRebirth.showTextLabel=!0,this.btnRebirth.text=SG.getText("GAME_5","환생"),this.btnRebirth.color=kU.GREEN,this.btnRebirthBonus.showIconLabel=!0,this.btnRebirthBonus.showTextLabel=!0,this.btnRebirthBonus.iconText="500",this.btnRebirthBonus.text=`${
+ onBattleSwitchEvent(t){
+ var i;
+ const s=null==(i=t.detail)?void 0:i.toType;
+ if(void 0!==s){
+ if(s===OU.IDLE){
+ const t=this.pendingGameOver;
+ return void(t&&!this.parent&&(this.pendingGameOver=null,this.showGameOver(t.wave,t.onRebirth,t.onRebirthBonus,t.onContinue)))}
+ this.parent&&(this.isGameOverMode&&(this.pendingGameOver={
+ wave:this.gameOverWave,onRebirth:this.onRebirth,onRebirthBonus:this.onRebirthBonus,onContinue:this.onContinue}
+ ),this.hideImmediately(),qG.getInstance().start(),rL.getInstance().startUpdate())}
+ }
- if(TL.getInstance().parking)return;
- this.onRebirth=i,this.onRebirthBonus=s,this.onContinue=e,((null==(n=wN.getInstance().specialBookList[0])?void 0:n.level)??0)>0?(this.btnContinue.visible=!0,this.btnContinue.iconText=`${
+ if(CL.getInstance().parking)return!1;
+ if(!jni.getInstance().isIdleActive())return this.pendingGameOver={
+ wave:t,onRebirth:i,onRebirthBonus:s,onContinue:e}
+ ,!1;
+ this.onRebirth=i,this.onRebirthBonus=s,this.onContinue=e,this.gameOverWave=t,((null==(n=mR.getInstance().specialBookList[0])?void 0:n.level)??0)>0?(this.btnContinue.visible=!0,this.btnContinue.iconText=`${
- this.updateLayout(),WG.getInstance().stop(),hL.getInstance().stopUpdate(),this.btnClose.visible=!1,this.outSideClickHide=!1,super.show(),await this.loadAndUpdateReviveTeam(h,r)}
+ return this.updateLayout(),qG.getInstance().stop(),rL.getInstance().stopUpdate(),this.btnClose.visible=!1,this.outSideClickHide=!1,super.show(),await this.loadAndUpdateReviveTeam(h,r),!0}
UserService 1 hunks, 17 statements
+ async sellTransTicket(t,i=!1){
+ const s={
+ sellList:t}
+ ;
+ return this.post(XR.USER.SELL_TRANS_TICKET,s,i)}
+ async updateUserData(t=!1){
+ const{
+ ConfigManager:i}
+ =await Xt(async()=>{
+ const{
+ ConfigManager:t}
+ =await Promise.resolve().then(()=>SL);
+ return{
+ ConfigManager:t}
+ }
+ ,void 0),s=await i.getInstance().getConversionData();
+ return this.post(XR.USER.UPDATE_USER_DATA,s,t)}
GuildRaidBossSubView 8 hunks, 16 statements
- vo:t,state:i,curHp:t.sub===c?l:0,maxHp:t.sub===c?u:t.hp,canClaim:t.sub===c&&d,isElder:M4t.getInstance().isElder,onChallenge:Kt(()=>this.onChallenge(t,l,u),"onChallenge"),onClaim:Kt(()=>{
+ vo:t,state:i,curHp:t.sub===c?l:t.hp,maxHp:t.sub===c?u:t.hp,canClaim:t.sub===c&&d,isElder:wti.getInstance().isElder,onChallenge:Vt(()=>this.onChallenge(t,l,u),"onChallenge"),onClaim:Vt(()=>{
+ SG.getValueReplace("GAME_1267","\\{
+ 0\\}
+ ",this.difficult,`${
- 단계`;
+ 단계`)}
+ `;
- this.timeLimit&&(i="시간 초과 — 레이드가 종료되었습니다"),this.currentBattleUser&&(i+=`   (전투중 : ${
+ this.timeLimit&&(i=SG.getText("GAME_1275","시간 초과 — 레이드가 종료되었습니다")),this.currentBattleUser&&(i+=`   (${
+ SG.getValueReplace("GAME_1276","\\{
+ 0\\}
+ ",this.currentBattleUser,`전투중 : ${
+ `)}
- dK.getInstance().show("진행중인 레이드를 포기하시겠습니까?",async()=>{
+ b$t.getInstance().show(SG.getText("GAME_1279","진행중인 레이드를 포기하시겠습니까?"),async()=>{
- "CLEAR"===(null==e?void 0:e.status)?(vV.getInstance().showMessage("레이드 클리어! 보상이 우편으로 지급됩니다"),M4t.getInstance().goDifficulty(M4t.getInstance().curMain)):(vV.getInstance().showMessage("보상이 우편으로 지급됩니다"),this.setData(this.raidId,this.difficult))}
+ "CLEAR"===(null==e?void 0:e.status)?(u2.getInstance().showMessage(SG.getText("GAME_1280","레이드 클리어! 보상이 우편으로 지급됩니다")),wti.getInstance().goDifficulty(wti.getInstance().curMain)):(u2.getInstance().showMessage(SG.getText("GAME_1281","보상이 우편으로 지급됩니다")),this.setData(this.raidId,this.difficult))}
- this.timeLimit?vV.getInstance().showMessage("시간 초과 — 레이드가 종료되었습니다"):this.currentBattleUser?vV.getInstance().showMessage(`다른 길드원이 전투중입니다 (${
- this.currentBattleUser}
- )`):M4t.getInstance().userTicket<=0?vV.getInstance().showMessage("오늘 도전 횟수를 모두 사용했습니다"):M4t.getInstance().openBattleReady({
+ wti.getInstance().openBattleReady({
QuestDataManager 2 hunks, 15 statements
- for(let i=0;
- i<this.list.length;
- i++){
- const s=this.list[i];
- if(!s.isOpen)break;
- s.autoGold&&(s.clampLastCollectTime(t),t-s.lastCollectTime>=s.effectiveDurationMs&&(_L.updateGold(s.gold),s.lastCollectTime=t))}
- this.humanSecretDuration<999999999&&t-this.lastHumanSecretTime>=this.humanSecretDuration&&(this.triggerHumanSecret(t),this.lastHumanSecretTime=t)}
+ this.collectOverdueQuests(t),this.humanSecretDuration<999999999&&t-this.lastHumanSecretTime>=this.humanSecretDuration&&(this.triggerHumanSecret(t),this.lastHumanSecretTime=t)}
+ collectOverdueQuests(t=tx.time){
+ if(Number.isFinite(t)&&!(t<=0))for(let i=0;
+ i<this.list.length;
+ i++){
+ const s=this.list[i];
+ if(!s.isOpen)break;
+ s.autoGold&&(s.clampLastCollectTime(t),t-s.lastCollectTime>=s.effectiveDurationMs&&(ML.updateGold(s.gold),s.lastCollectTime=t))}
+ }
ActiveBuffVO 1 hunks, 15 statements
+ getBuffRemain(t){
+ let i=0;
+ for(let s=this.list.length-1;
+ s>=0;
+ s--){
+ const e=this.list[s];
+ e.id==t&&e.count>i&&(i=e.count)}
+ return i}
+ getBuffValue(t){
+ for(let i=this.list.length-1;
+ i>=0;
+ i--){
+ const s=this.list[i];
+ if(s.id==t&&s.count>0)return s.value}
+ return 0}
InventoryPetSelectView 10 hunks, 15 statements
- const i=e.getPetVO(t),s=AG.getText("GAME_850","등급"),h=i?i.piece:0,r=AG.getText("GAME_711","펫조각"),o=this.getPetSkill1String(t),a=this.getPetSkill2String(t),c=this.getPetSkill3String(t);
+ const i=e.getPetVO(t),s=SG.getText("GAME_850","등급"),h=Math.max(0,Math.min(5,Number((null==i?void 0:i.grade)??0))),r=i?i.piece:0,o=SG.getText("GAME_711","펫조각"),a=[this.getPetSkill1String(t,h),this.getPetSkill2String(t,h),this.getPetSkill3String(t,h)].filter(t=>t.length>0);
-  : 5, ${
+  : ${
+ h}
+ , ${
-  )\n`+o+"\n"+a;
- c&&(l+="\n"+c),this.lblDesc2.text=l;
+  )`;
+ a.length>0&&(c+="\n"+a.join("\n")),this.lblDesc2.text=c;
- getPetSkill1String(t){
+ getPetSkill1String(t,i){
- if(!s)return"";
- const e=AG.getText("GAME_706","스킬 1"),n=i.getSkillBookVO(s.skill1),h=s.value1.length>0?s.value1[s.value1.length-1]:0;
+ if(!e||i<1)return"";
+ const n=SG.getText("GAME_706","스킬 1"),h=s.getSkillBookVO(e.skill1),r=Math.min(i,e.value1.length)-1,o=r>=0?e.value1[r]:0;
- getPetSkill2String(t){
+ getPetSkill2String(t,i){
- if(!s)return"";
- const e=AG.getText("GAME_707","스킬 2"),n=i.getSkillBookVO(s.skill2),h=s.value2.length>0?s.value2[s.value2.length-1]:0;
+ if(!e||i<3||e.skill2<=0)return"";
+ const n=SG.getText("GAME_707","스킬 2"),h=s.getSkillBookVO(e.skill2),r=Math.min(i,e.value2.length)-1,o=r>=0?e.value2[r]:0;
- getPetSkill3String(t){
+ getPetSkill3String(t,i){
- if(!s)return"";
+ if(!e||i<5)return"";
- const t=i.getSkillBookVO(s.masterSkill),n=s.value3.length>0?s.value3[s.value3.length-1]:0;
+ const t=s.getSkillBookVO(e.masterSkill),h=Math.min(i,e.value3.length)-1,r=h>=0?e.value3[h]:0;
LocalDataManager 4 hunks, 13 statements
+ static async getDoNotMailBoxInventoryGuide(){
+ return await this.getData(this.getKey("mIG"),!0)}
+ static async saveDoNotMailBoxInventoryGuide(t){
+ await this.saveData(this.getKey("mIG"),t,!0)}
- static async getTowerTeam(t){
- const i=this.getKey(`tT_${
+ static async getTowerTeam(t,i){
+ const s=-1===t?this.getKey(`tT_${
+ i}
+ `):this.getKey(`tT_${
+ t}
+ |${
- static async saveTowerTeam(t,i,s){
+ static async saveTowerTeam(t,i,s,e){
+ |${
+ i}
ScorpionPoisonArea 3 hunks, 13 statements
+ constructor(){
+ super(...arguments),Kt(this,"boundary",null)}
+ play(){
+ super.play(),this.boundary||(this.boundary=new SK);
+ const i=this.radiusX??this.radius,s=this.radiusY??this.radius;
+ this.boundary.show(this.x,this.y,i,i>0?s/i:1),this.boundary.setStyle(t.ZONE_FILL_COLOR,t.ZONE_STROKE_COLOR,t.ZONE_FILL_ALPHA_SCALE)}
+ onAreaTick(t){
+ var i;
+ null==(i=this.boundary)||i.update(this.durationFrames>0?t/this.durationFrames:0)}
+ remove(){
+ var t;
+ null==(t=this.boundary)||t.dispose(),super.remove()}
- Kt(UZ,"ScorpionPoisonArea"),zt(UZ,"DEFAULT_RADIUS",112.5),zt(UZ,"DEFAULT_DURATION_FRAMES",1200),zt(UZ,"DAMAGE_INTERVAL_FRAMES",5),zt(UZ,"DAMAGE_FPS",60);
+ Vt(XJ,"ScorpionPoisonArea"),Kt(XJ,"DEFAULT_RADIUS",112.5),Kt(XJ,"DEFAULT_DURATION_FRAMES",1200),Kt(XJ,"DAMAGE_INTERVAL_FRAMES",5),Kt(XJ,"DAMAGE_FPS",60),Kt(XJ,"ZONE_FILL_COLOR",16719904),Kt(XJ,"ZONE_STROKE_COLOR",16732240),Kt(XJ,"ZONE_FILL_ALPHA_SCALE",.4);
PetSelectGuideItemRenderer 5 hunks, 13 statements
- let t;
- super(),zt(this,"bg"),zt(this,"icons"),zt(this,"_actualWidth",0),this.bg=new We(ZA.getTexture("UI_Ekkorr","blackRect")),this.bg.alpha=.1,this.bg.width=540,this.bg.height=75,this.addChild(this.bg),this.icons=[];
+ super(),Kt(this,"bg"),Kt(this,"icons"),Kt(this,"amountLabels"),Kt(this,"_actualWidth",0),this.bg=new He(QA.getTexture("UI_Ekkorr","blackRect")),this.bg.alpha=.1,this.bg.width=545,this.bg.height=80,this.addChild(this.bg),this.icons=[],this.amountLabels=[];
+ const t=cD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ let i,s;
+ t.fill=16777215;
- i<5;
- ++i)t=new vK,t.scale=.8,t.x=i*(t.width+3),t.y=2,this.addChild(t),this.icons.push(t)}
+ e<7;
+ ++e)i=new J2,i.scale=.9,i.x=e*(i.width+5),i.y=2,this.addChild(i),this.icons.push(i),s=new JD("x0",t.fill,t),s.eventMode="none",s.x=i.x+.5*(i.width-s.width),s.y=i.y+i.height-s.height-2,this.addChild(s),this.amountLabels.push(s)}
- const i=t;
- if(!i)return;
- let s;
+ let i,s;
- ++n)s=this.icons[n],n<e?(s.setDataWithKindNum(i[n]),s.visible=!0,this._actualWidth=s.x+s.width):s.visible=!1}
+ ++n)i=this.icons[n],s=this.amountLabels[n],n<e?(i.setPet(t[n].kindNum,1),i.hideStar(),i.visible=!0,this._actualWidth=i.x+i.width,s.text=`x${
+ t[n].amount}
+ `,s.x=i.x+.5*(i.width-s.width),s.visible=!0):(i.visible=!1,s.visible=!1)}
- Kt(O1t,"HeroSelectGuideItemRenderer");
+ Vt(p$t,"PetSelectGuideItemRenderer");
SettingPopup 2 hunks, 13 statements
- let n=this.getAppBundleVerionInfo();
+ let n=t.getAppBundleVerionInfo();
- getAppBundleVerionInfo(){
- if("capacitor"!=EL.getInstance().envPlatform)return"";
- let t="";
- return window.appBundleVersion&&(t=`Bundle: ${
- window.appBundleVersion}
- `,window.appBundleLocalMainVersion&&window.appBundleLocalSubVersion&&(t+=` / M${
- window.appBundleLocalMainVersion}
-  / S${
- window.appBundleLocalSubVersion}
- `),t=` (${
- t}
- )`),t}
LanguageManager 1 hunks, 12 statements
+ case"INSUFFICIENT_CORE":s=t.getText("GAME_155","유물재료가 부족합니다.");
+ break;
+ case"GUILD_COIN_NOT_ENOUGH":case"INSUFFICIENT_GUILD_COIN":s=t.getText("GAME_520","길드코인이 부족합니다.");
+ break;
+ case"GUILD_RAID_ALREADY_OPENED":s=t.getText("GAME_1503","이미 진행 중인 레이드가 있습니다.");
+ break;
+ case"GUILD_RAID_DAILY_OPEN_LIMIT":s=t.getText("GAME_1504","오늘은 더 이상 레이드를 오픈할 수 없습니다.");
+ break;
+ case"GUILD_RAID_DAILY_USER_TICKET_LIMIT":s=t.getText("GAME_1505","오늘 도전 횟수를 모두 사용했습니다.");
+ break;
+ case"GUILD_RAID_BATTLE_IN_PROGRESS":s=t.getText("GAME_1506","다른 길드원이 전투 중입니다. 잠시 후 다시 시도해주세요.");
+ break;
CastleUpgradeItemRenderer 2 hunks, 12 statements
- t<this.btnBuy.x&&iti.getInstance().show(this.data)}
+ t<(this.btnSoulRest.visible?this.btnSoulRest.x:this.btnBuy.x)&&Wei.getInstance().show(this.data)}
+ BattleController:s}
+ =await Xt(async()=>{
+ const{
+ BattleController:t}
+ =await Promise.resolve().then(()=>Vhi);
+ return{
+ BattleController:t}
+ }
+ ,void 0);
+ s.getInstance().onSoulRestStart();
+ const{
BookManager 2 hunks, 11 statements
- var bD=(t=>(t.CASTLE="CASTLE",t.CASTLE_SPECIAL="CASTLE_SPECIAL",t.UNIT="UNIT",t.QUEST="QUEST",t.TREASURE="TREASURE",t.SCENARIO="SCENARIO",t.SCENARIO_PATTERN="SCENARIO_PATTERN",t.HERO_MEDAL_ENHANCE_TIER="HERO_MEDAL_ENHANCE_TIER",t.HERO_MEDAL_ENHANCE_SEGMENT="HERO_MEDAL_ENHANCE_SEGMENT",t.HERO_UPGRADE_TIER="HERO_UPGRADE_TIER",t.HERO_REBIRTH_MEDAL_TIER="HERO_REBIRTH_MEDAL_TIER",t.HERO_GOLD_SKILL="HERO_GOLD_SKILL",t.HERO_UNIQUE_SKILL="HERO_UNIQUE_SKILL",t.DUNGEON="DUNGEON",t.TREASURE_VALUE="TREASURE_VALUE",t.TREASURE_SET="TREASURE_SET",t.ACHIEVEMENT="ACHIEVEMENT",t.PVP_RANK_REWARD="PVP_RANK_REWARD",t.PASS_REWARD="PASS_REWARD",t.TIP="TIP",t.DIALOGUE="DIALOGUE",t.TOWER_BATTLE_POOL="TOWER_BATTLE_POOL",t.TOWER_SEASON_SET="TOWER_SEASON_SET",t.TOWER_REWARD="TOWER_REWARD",t.MISSION_GUIDE="MISSION_GUIDE",t.MISSION_GUIDE_STEP="MISSION_GUIDE_STEP",t.GUILD_LEVEL="GUILD_LEVEL",t.PET="PET",t.PET_SKILL="PET_SKILL",t.SPIRIT_LAND="SPIRIT_LAND",t.GUILD_BARRACK="GUILD_BARRACK",t.SELECT_TICKET="SELECT_TICKET",t.PRODUCT="PRODUCT",t.GUILD_WAR_CONFIG="GUILD_WAR_CONFIG",t.GUILD_RAID="GUILD_RAID",t.TREASURE_LIMIT_BREAK="TREASURE_LIMIT_BREAK",t.MINE_LEVEL="MINE_LEVEL",t.MINE_CHEST_REWARD="MINE_CHEST_REWARD",t.GUILD_WAR_TOURNAMENT_REWARD="GUILD_WAR_TOURNAMENT_REWARD",t))(bD||{
+ var _D=(t=>(t.CASTLE="CASTLE",t.CASTLE_SPECIAL="CASTLE_SPECIAL",t.UNIT="UNIT",t.QUEST="QUEST",t.TREASURE="TREASURE",t.SCENARIO="SCENARIO",t.SCENARIO_PATTERN="SCENARIO_PATTERN",t.HERO_MEDAL_ENHANCE_TIER="HERO_MEDAL_ENHANCE_TIER",t.HERO_MEDAL_ENHANCE_SEGMENT="HERO_MEDAL_ENHANCE_SEGMENT",t.HERO_UPGRADE_TIER="HERO_UPGRADE_TIER",t.HERO_REBIRTH_MEDAL_TIER="HERO_REBIRTH_MEDAL_TIER",t.HERO_GOLD_SKILL="HERO_GOLD_SKILL",t.HERO_UNIQUE_SKILL="HERO_UNIQUE_SKILL",t.DUNGEON="DUNGEON",t.TREASURE_VALUE="TREASURE_VALUE",t.TREASURE_SET="TREASURE_SET",t.ACHIEVEMENT="ACHIEVEMENT",t.PVP_RANK_REWARD="PVP_RANK_REWARD",t.PASS_REWARD="PASS_REWARD",t.TIP="TIP",t.DIALOGUE="DIALOGUE",t.TOWER_BATTLE_POOL="TOWER_BATTLE_POOL",t.TOWER_SEASON_SET="TOWER_SEASON_SET",t.TOWER_REWARD="TOWER_REWARD",t.MISSION_GUIDE="MISSION_GUIDE",t.MISSION_GUIDE_STEP="MISSION_GUIDE_STEP",t.GUILD_LEVEL="GUILD_LEVEL",t.PET="PET",t.PET_SKILL="PET_SKILL",t.SPIRIT_LAND="SPIRIT_LAND",t.GUILD_BARRACK="GUILD_BARRACK",t.SELECT_TICKET="SELECT_TICKET",t.PRODUCT="PRODUCT",t.GUILD_WAR_CONFIG="GUILD_WAR_CONFIG",t.GUILD_RAID="GUILD_RAID",t.TREASURE_LIMIT_BREAK="TREASURE_LIMIT_BREAK",t.MINE_LEVEL="MINE_LEVEL",t.MINE_CHEST_REWARD="MINE_CHEST_REWARD",t.GUILD_WAR_TOURNAMENT_REWARD="GUILD_WAR_TOURNAMENT_REWARD",t.EMBLEM="EMBLEM",t.EMBLEM_SKILL="EMBLEM_SKILL",t.RUNE="RUNE",t.RUNE_GRADE="RUNE_GRADE",t.RUNE_SUB="RUNE_SUB",t))(_D||{
+ ,EMBLEM:{
+ name:"EMBLEM",priority:2,dependencies:[]}
+ ,EMBLEM_SKILL:{
+ name:"EMBLEM_SKILL",priority:2,dependencies:[]}
+ ,RUNE:{
+ name:"RUNE",priority:2,dependencies:[]}
+ ,RUNE_GRADE:{
+ name:"RUNE_GRADE",priority:2,dependencies:[]}
+ ,RUNE_SUB:{
+ name:"RUNE_SUB",priority:2,dependencies:[]}
GuildRaidDifficultyItemRenderer 5 hunks, 11 statements
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new We(ZA.getTexture("UI_Guild","Guild_Quest_Raid_nor")),this.icon.x=2,this.addChild(this.icon),this.lblTitle=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblTitle.x=135,this.lblTitle.y=15,this.addChild(this.lblTitle),this.lblDesc=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblDesc.x=this.lblTitle.x,this.addChild(this.lblDesc),this.btnAction=new QL(""),this.btnAction.color=QL.BROWN,this.btnAction.width=120,this.btnAction.height=55,this.btnAction.x=this.bg.width-this.btnAction.width-15,this.btnAction.y=.5*(this.bg.height-this.btnAction.height),this.btnAction.onClick=()=>this.onActionClick(),this.addChild(this.btnAction)}
+ ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.icon=new He,this.icon.x=5,this.addChild(this.icon),this.lblTitle=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblTitle.x=135,this.lblTitle.y=15,this.addChild(this.lblTitle),this.lblDesc=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblDesc.x=this.lblTitle.x,this.addChild(this.lblDesc),this.btnAction=new ZL(""),this.btnAction.color=ZL.BROWN,this.btnAction.width=120,this.btnAction.height=55,this.btnAction.x=this.bg.width-this.btnAction.width-15,this.btnAction.y=.5*(this.bg.height-this.btnAction.height),this.btnAction.onClick=()=>this.onActionClick(),this.addChild(this.btnAction)}
- this.data=t,this.icon.texture=ZA.getTexture("UI_Guild",t.open?"Guild_Quest_Raid":"Guild_Quest_Raid_nor"),this.icon.y=.5*(this.bg.height-this.icon.height),this.lblTitle.text=`${
+ this.data=t;
+ const i=QA.getTexture("UI_RAID",`Raid${
+ t.main}
+ _Main.png`)??QA.getTexture("UI_RAID","Raid1_Main.png");
+ i&&(this.icon.texture=i,this.icon.width=i.width+7,this.icon.height=i.height),this.icon.tint=t.open?16777215:6710886,this.icon.y=.5*(this.bg.height-this.icon.height),this.lblTitle.text=SG.getValueReplace("GAME_1267","\\{
+ 0\\}
+ ",t.difficult,`${
- 단계`,t.open?(this.lblDesc.text=`${
+ 단계`),t.open?(this.lblDesc.text=`${
- this.lblTitle.alpha=i?1:.45,this.bg.alpha=i?1:.7,t.open?(this.btnAction.text=AG.getText("COMMON_376","입장"),this.btnAction.visible=!0,this.btnAction.activated=!0):t.openable?(this.btnAction.text=AG.getText("GAME_985","오픈"),this.btnAction.visible=!0,this.btnAction.activated=t.isElder):this.btnAction.visible=!1}
+ this.lblTitle.alpha=s?1:.45,this.bg.alpha=s?1:.7,t.open?(this.btnAction.text=SG.getText("COMMON_376","입장"),this.btnAction.visible=!0,this.btnAction.activated=!0):t.openable?(this.btnAction.text=SG.getText("GAME_985","오픈"),this.btnAction.visible=!0,this.btnAction.activated=t.canOpen):this.btnAction.visible=!1}
- if(!t.isElder)return void vV.getInstance().showMessage("장로 이상만 오픈할 수 있습니다");
+ if(!t.canOpen)return void u2.getInstance().showMessage(SG.getText("GAME_1511","길드마스터/부길드마스터만 오픈할 수 있습니다"));
CitadelItemRenderer 5 hunks, 11 statements
- super(),zt(this,"bg"),zt(this,"lblName",new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"lblDesc",new YD("",13421772,aD.DEFAULT_OUTLINE_FONT_OPTION_16)),zt(this,"lblManagerStatus",new YD("",16764006,aD.DEFAULT_OUTLINE_FONT_OPTION_17)),zt(this,"btnSecretary",new aK("",100,20)),zt(this,"iconEvent",new We(ZA.getTexture("UI_Ekkorr","UI_Event"))),zt(this,"icon",new We(ZA.getTexture("UI_Ekkorr","Hero83"))),zt(this,"isSecretaryRow",!1),zt(this,"nextClaimAt",0),zt(this,"petEventActive",!1),zt(this,"lastRefreshMs",0),zt(this,"lastDisplayedMin",NaN),zt(this,"frameRegistered",!1),this.bg=new CM({
+ super(),Kt(this,"bg"),Kt(this,"lblName",new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"lblDesc",new JD("",13421772,cD.DEFAULT_OUTLINE_FONT_OPTION_16)),Kt(this,"lblManagerStatus",new JD("",16764006,cD.DEFAULT_OUTLINE_FONT_OPTION_17)),Kt(this,"btnSecretary",new zWt("",100,20)),Kt(this,"iconEvent",new He(QA.getTexture("UI_Ekkorr","UI_Event"))),Kt(this,"icon",new He(QA.getTexture("UI_Ekkorr","Hero83"))),Kt(this,"isSecretaryRow",!1),Kt(this,"nextClaimAt",0),Kt(this,"petEventActive",!1),Kt(this,"lastRefreshMs",0),Kt(this,"lastDisplayedMin",NaN),Kt(this,"frameRegistered",!1),Kt(this,"requestPending",!1),this.bg=new TM({
-  )`,this.lblDesc.text=AG.getText("","잠시만 기다려 주세요...")}
+  )`,this.lblDesc.text=SG.getText("COMMON_85","잠시만 기다려주세요.")}
- var t,i,s,e,n,h,r,o,a,c,l,u,d,f,p,g;
- if(this.nextClaimAt>0&&ix.time<this.nextClaimAt)return void mG.getInstance().show(AG.getText("","최소 4시간이 지나야 호출을 할 수 있습니다."));
+ var t,i,s,e,n,h,r,o,a,c,l,u,d,f,p,g,m,w;
+ if(this.nextClaimAt>0&&tx.time<this.nextClaimAt)return void wG.getInstance().show(SG.getText("GAME_1246","최소 4시간이 지나야 호출을 할 수 있습니다."));
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
- if(!m.success)return void mG.getInstance().showError(m);
+ if(!v.success)return this.setRequestPending(!1),void("COOL_TIME"==v.error?wG.getInstance().show(SG.getText("GAME_1246","최소 4시간이 지나야 호출을 할 수 있습니다.")):wG.getInstance().showError(v));
- const E="premium"===(null==(g=null==(p=m.body)?void 0:p.assistant)?void 0:g.tier)?"premium":"basic";
- L9t.getInstance().showResult(v,b,y,E,_,M),this.refreshSecretaryStatus()}
+ const S=(null==(g=null==(p=v.body)?void 0:p.claim)?void 0:g.runeTicket)??0,T="premium"===(null==(w=null==(m=v.body)?void 0:m.assistant)?void 0:w.tier)?"premium":"basic";
+ Ijt.getInstance().showResult(_,y,M,T,E,A,S),this.refreshSecretaryStatus(),this.setRequestPending(!1)}
+ setRequestPending(t){
+ this.requestPending=t}
GuildBarrackRowItemRenderer 8 hunks, 11 statements
- super(),zt(this,"panel"),zt(this,"slots",[]),zt(this,"btnSelect"),zt(this,"btnUnlock"),zt(this,"btnBoost"),zt(this,"defenseIcon"),this.panel=new Gf,this.addChild(this.panel);
+ super(),Kt(this,"panel"),Kt(this,"slots",[]),Kt(this,"btnSelect"),Kt(this,"btnUnlock"),Kt(this,"btnBoost"),Kt(this,"defenseIcon"),Kt(this,"ccBadge"),this.panel=new Lf,this.addChild(this.panel);
- i.cell.x=25+75*t,i.cell.y=2.5,this.addChild(i.cell),this.slots.push(i)}
+ i.cell.x=25+75*t,i.cell.y=2.5,this.slots.push(i)}
+ for(let t=4;
+ t>=0;
+ t--)this.addChild(this.slots[t].cell);
- `,AG.getText("GAME_984","가속")),this.btnBoost.labelOrder=kU.TEXT_FIRST,this.btnBoost.color=kU.BROWN,this.btnBoost.iconScale=.55,this.btnBoost.textLabel.textSize=14,this.btnBoost.width=100,this.btnBoost.height=60,this.btnBoost.x=524,this.btnBoost.y=20,this.btnBoost.onClick=()=>this.onBoostClick(),this.addChild(this.btnBoost),this.btnUnlock=new kU("UI_GEM","0",AG.getText("GAME_985","오픈")),this.btnUnlock.labelOrder=kU.TEXT_FIRST,this.btnUnlock.color=kU.RED,this.btnUnlock.iconScale=.6,this.btnUnlock.textLabel.textSize=15,this.btnUnlock.width=204,this.btnUnlock.height=60,this.btnUnlock.x=420,this.btnUnlock.y=20,this.btnUnlock.visible=!1,this.btnUnlock.onClick=()=>this.onUnlockClick(),this.addChild(this.btnUnlock),this.defenseIcon=new We(ZA.getTexture("UI_Ekkorr","Icon_RedDot_Red")),this.defenseIcon.width=18,this.defenseIcon.height=18,this.defenseIcon.visible=!1,this.defenseIcon.eventMode="none",this.addChild(this.defenseIcon)}
+ `,SG.getText("GAME_984","가속")),this.btnBoost.labelOrder=kU.TEXT_FIRST,this.btnBoost.color=kU.BROWN,this.btnBoost.iconScale=.55,this.btnBoost.textLabel.textSize=14,this.btnBoost.width=100,this.btnBoost.height=60,this.btnBoost.x=524,this.btnBoost.y=20,this.btnBoost.onClick=()=>this.onBoostClick(),this.addChild(this.btnBoost),this.btnUnlock=new kU("UI_GEM","0",SG.getText("GAME_985","오픈")),this.btnUnlock.labelOrder=kU.TEXT_FIRST,this.btnUnlock.color=kU.RED,this.btnUnlock.iconScale=.6,this.btnUnlock.textLabel.textSize=15,this.btnUnlock.width=204,this.btnUnlock.height=60,this.btnUnlock.x=420,this.btnUnlock.y=20,this.btnUnlock.visible=!1,this.btnUnlock.onClick=()=>this.onUnlockClick(),this.addChild(this.btnUnlock),this.defenseIcon=new He(QA.getTexture("UI_Ekkorr","Icon_RedDot_Red")),this.defenseIcon.width=18,this.defenseIcon.height=18,this.defenseIcon.visible=!1,this.defenseIcon.eventMode="none",this.addChild(this.defenseIcon),this.ccBadge=new Ge,this.ccBadge.eventMode="none",this.ccBadge.visible=!1,this.addChild(this.ccBadge)}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- const i=!t.showBoost,s=i?.78:.67,e=i?0:-20,n=i?35:25,h=i?520:420,r=i?482:382,o=i?78:68,a=i?-7:-15,c=i?36:19,l=i?3:0;
+ const i=!t.showBoost,s=i?.78:.67,e=i?0:-20,n=i?35:25,h=i?520:420,r=i?482:382,o=i?78:68,a=i?-7:-15,c=i?3:0,l=86*s;
- `,h.countLbl.x=.5*(95-h.countLbl.width)+a,h.countLbl.y=8+c,h.countLbl.alpha=r?1:.35,i>0){
+ `,h.countLbl.x=.5*(95-h.countLbl.width)+a,h.countLbl.y=8+l-h.countLbl.height-2,h.countLbl.alpha=r?1:.35,i>0){
- this.btnUnlock.width=u,this.btnSelect.x=h,this.btnUnlock.x=h,this.btnBoost.x=h+100+4,this.defenseIcon.x=r,this.defenseIcon.y=6,this.defenseIcon.visible=t.usedByDefense,t.unlocked?(this.btnUnlock.visible=!1,this.btnSelect.visible=!0,this.btnBoost.visible=t.showBoost,t.selected?(this.btnSelect.text=AG.getText("GAME_1081","배치됨"),this.btnSelect.color=QL.GREEN):t.usedByOther?(this.btnSelect.text=AG.getText("GAME_1142","사용중"),this.btnSelect.color=QL.BROWN):(this.btnSelect.text=AG.getText("GAME_1038","배치"),this.btnSelect.color=QL.BROWN),t.canBoost?(this.btnBoost.activated=!0,this.btnBoost.alpha=1):(this.btnBoost.activated=!1,this.btnBoost.alpha=.55)):(this.btnSelect.visible=!1,this.btnBoost.visible=!1,this.btnUnlock.visible=!0,this.btnUnlock.iconText=`${
+ this.btnUnlock.width=u,this.btnSelect.x=h,this.btnUnlock.x=h,this.btnBoost.x=h+100+4,this.defenseIcon.x=r,this.defenseIcon.y=6,this.defenseIcon.visible=t.usedByDefense,this.ccBadge.x=n+2,this.ccBadge.y=12.5,this.ccBadge.alpha=t.unlocked?1:.5,this.ccBadge.visible=Dzt(this.ccBadge,t.raidCcMatched),t.unlocked?(this.btnUnlock.visible=!1,this.btnSelect.visible=!0,this.btnBoost.visible=t.showBoost,t.selected?(this.btnSelect.text=SG.getText("GAME_1081","배치됨"),this.btnSelect.color=ZL.GREEN):t.usedByOther?(this.btnSelect.text=SG.getText("GAME_1142","사용중"),this.btnSelect.color=ZL.BROWN):(this.btnSelect.text=SG.getText("GAME_1038","배치"),this.btnSelect.color=ZL.BROWN),t.canBoost?(this.btnBoost.activated=!0,this.btnBoost.alpha=1):(this.btnBoost.activated=!1,this.btnBoost.alpha=.55)):(this.btnSelect.visible=!1,this.btnBoost.visible=!1,this.btnUnlock.visible=!0,this.btnUnlock.iconText=`${
GuildWarBattleReadyPopup 9 hunks, 11 statements
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- var h;
+ var h,r;
- `,this.lblOppName.text=i.userName??"",this.lblOppLevel.text=`Lv.${
+ `;
+ const a=await rD.getInstance().guildWar.getAwakenedTribes(i.userId),c=(null==(h=null==a?void 0:a.body)?void 0:h.awakenedTribes)??[];
+ this.lblOppName.text=i.userName??"",this.lblOppLevel.text=`Lv.${
- t.setDataWithKindNum(e.heroKindNum),t.showIcon()}
+ t.setDataWithKindNum(e.heroKindNum,e.heroTrans),t.showIcon()}
- const t=u.getBook(n),e=null==(h=i.barrackCounts)?void 0:h[n],o=this.getRepresentativeSoldierStageIndex(e),a=this.getSoldierKindAt(null==t?void 0:t.unitKindNums,o);
+ const t=p.getBook(n),e=null==(r=i.barrackCounts)?void 0:r[n],o=this.getRepresentativeSoldierStageIndex(e),a=this.getSoldierKindAt(null==t?void 0:t.unitKindNums,o),l=!!t&&c.indexOf(t.tribe)>-1;
- const t=this.stageBadgeText(o);
+ const t=this.shiftedStageBadge(o,l);
- const[t,,n]=s[e].split("-").map(Number);
+ const[t,n,h]=s[e].split("-").map(Number);
- heroKindNum:t,barrackKindNum:n||0}
+ heroKindNum:t,heroTrans:n||0,barrackKindNum:h||0}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
AccountService 2 hunks, 10 statements
- return n&&(o.referralCode=n),h&&(o.referrer=h),o.timezone=EL.getInstance().getDeviceTimezone(),this.post(JN.ACCOUNT.CREATE_ACCOUNT,o,r)}
+ n&&(o.referralCode=n),h&&(o.referrer=h),o.timezone=AL.getInstance().getDeviceTimezone();
+ const a=await AL.getInstance().getConversionData(),c={
+ ...o,...a}
+ ;
+ return this.post(XR.ACCOUNT.CREATE_ACCOUNT,c,r)}
- return e&&(r.referrer=e),n&&(r.language=n),r.timezone=EL.getInstance().getDeviceTimezone(),this.post(JN.ACCOUNT.LOGIN_BY_PLATFORM,r,h)}
+ e&&(r.referrer=e),n&&(r.language=n),r.timezone=AL.getInstance().getDeviceTimezone();
+ const o=await AL.getInstance().getConversionData(),a={
+ ...r,...o}
+ ;
+ return this.post(XR.ACCOUNT.LOGIN_BY_PLATFORM,a,h)}
GuildBuildingSubView 1 hunks, 10 statements
- this.list.dataProvider=t}
+ this.list.dataProvider=t,this.goDefaultView()}
+ goDefaultView(){
+ const t=t8t.getInstance(),i=_4t.getInstance();
+ i.parent&&i.parent.removeChild(i);
+ const s=C4t.getInstance();
+ s.parent&&s.parent.removeChild(s);
+ const e=v4t.getInstance();
+ e.parent&&e.parent.removeChild(e);
+ const n=Y4t.get();
+ t.addChildAt(n,0),this.y=n.height,t.currentSubView=this}
GuildQuestItemRenderer 3 hunks, 10 statements
- if(this.data=t,this.lblTitle.text=t.name||"",this.lblDesc.text=t.desc||"",t.desc?(this.lblTitle.y=15,this.lblDesc.visible=!0):(this.lblTitle.y=.5*(this.bg.height-this.lblTitle.height),this.lblDesc.visible=!1),t.icon&&(this.icon.texture=ZA.getTexture("UI_Guild",t.icon)),this.icon.x=2,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),1===t.type)this.btnAction.text=AG.getText("GAME_467","출석"),this.btnAction.visible=!0,this.btnAction.activated=!ED.attendedToday;
- else if(2===t.type)this.btnAction.text=AG.getText("COMMON_376","입장"),this.btnAction.visible=!0,this.btnAction.activated=!0;
- else if(5===t.type)this.btnAction.text=AG.getText("COMMON_376","입장"),this.btnAction.visible=!0,this.btnAction.activated=!0;
- else if(3===t.type){
- const t=TL.getInstance().development;
- this.btnAction.text=AG.getText("COMMON_376","입장"),this.btnAction.visible=t,this.btnAction.activated=t}
- else this.btnAction.visible=!1;
- 1===t.type&&(ED.checkAttend()?this.showRedDot():this.hideRedDot())}
+ this.data=t,this.lblTitle.text=t.name||"",this.lblDesc.text=t.desc||"",t.desc?(this.lblTitle.y=15,this.lblDesc.visible=!0):(this.lblTitle.y=.5*(this.bg.height-this.lblTitle.height),this.lblDesc.visible=!1),t.icon&&(this.icon.texture=QA.getTexture("UI_Guild",t.icon)),this.icon.x=2,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),1===t.type?(this.btnAction.text=SG.getText("GAME_467","출석"),this.btnAction.visible=!0,this.btnAction.activated=!AD.attendedToday):2===t.type||5===t.type||3===t.type?(this.btnAction.text=SG.getText("COMMON_376","입장"),this.btnAction.visible=!0,this.btnAction.activated=!0):this.btnAction.visible=!1,1===t.type&&(AD.checkAttend()?this.showRedDot():this.hideRedDot())}
- this.data&&(1===this.data.type?await this.onAttend():2===this.data.type?(ED.isTournamenEntered=!1,Z4t.getInstance().show()):5===this.data.type?await this.ShowTournamentPopup():3===this.data.type&&(TL.getInstance().development?M4t.getInstance().show():vV.getInstance().showMessage("coming soon")))}
+ this.data&&(1===this.data.type?await this.onAttend():2===this.data.type?(AD.isTournamenEntered=!1,Yti.getInstance().show()):5===this.data.type?await this.ShowTournamentPopup():3===this.data.type&&wti.getInstance().show())}
- if(this.data)return 2===this.data.type?(ED.isTournamenEntered=!1,void Z4t.getInstance().show()):void(5!==this.data.type?3!==this.data.type?4===this.data.type&&vV.getInstance().showMessage("coming soon"):TL.getInstance().development?M4t.getInstance().show():vV.getInstance().showMessage("coming soon"):await this.ShowTournamentPopup())}
+ if(this.data)return 2===this.data.type?(AD.isTournamenEntered=!1,void Yti.getInstance().show()):void(5!==this.data.type?3!==this.data.type?4===this.data.type&&u2.getInstance().showMessage("coming soon"):wti.getInstance().show():await this.ShowTournamentPopup())}
CastleSubMenu 2 hunks, 10 statements
- super(),zt(this,"lblMaxCapacity",new GB("menu_icon_02_on","0/10",16711680,aD.DEFAULT_OUTLINE_FONT_OPTION_18)),zt(this,"btnUpgrade",new aK("신전",120)),zt(this,"btnCitadel",new aK("성채",120)),zt(this,"redDot",new We(ZA.getTexture("UI_Ekkorr","Icon_RedDot_Red"))),this.btnUpgrade.width=120,this.btnUpgrade.height=45,this.btnUpgrade.x=640-this.btnUpgrade.width-5,this.btnUpgrade.y=.5*(this.bg.height-this.btnUpgrade.height),this.addChild(this.btnUpgrade),this.btnCitadel.width=120,this.btnCitadel.height=45,this.btnCitadel.x=this.btnUpgrade.x-this.btnCitadel.width-5,this.btnCitadel.y=.5*(this.bg.height-this.btnCitadel.height),this.addChild(this.btnCitadel),this.redDot.scale.set(1.2),this.redDot.anchor.set(.5),this.redDot.x=this.btnUpgrade.width-15,this.redDot.y=5,this.redDot.visible=!1,this.btnUpgrade.addChild(this.redDot),this.btnUpgrade.on("pointertap",this.onUpgrade,this),this.btnCitadel.on("pointertap",this.onCitadel,this),HV.getInstance().registerSubMenuButtonGetter(t=>"btnUpgrade"===t&&this.btnUpgrade.visible?{
- parent:this,btn:{
- x:this.btnUpgrade.x,y:this.btnUpgrade.y,width:this.btnUpgrade.width,height:this.btnUpgrade.height}
- }
- :null),this.updateLanguage()}
+ super(),Kt(this,"lblMaxCapacity",new $B("menu_icon_02_on","0/10",16711680,cD.DEFAULT_OUTLINE_FONT_OPTION_18)),Kt(this,"btnUpgrade",new zWt("신전",120)),Kt(this,"btnCitadel",new zWt("성채",120)),Kt(this,"redDot",new He(QA.getTexture("UI_Ekkorr","Icon_RedDot_Red"))),this.btnUpgrade.width=120,this.btnUpgrade.height=45,this.btnUpgrade.x=640-this.btnUpgrade.width-5,this.btnUpgrade.y=.5*(this.bg.height-this.btnUpgrade.height),this.addChild(this.btnUpgrade),this.btnCitadel.width=120,this.btnCitadel.height=45,this.btnCitadel.x=this.btnUpgrade.x-this.btnCitadel.width-5,this.btnCitadel.y=.5*(this.bg.height-this.btnCitadel.height),this.addChild(this.btnCitadel),this.redDot.scale.set(1.2),this.redDot.anchor.set(.5),this.redDot.x=this.btnUpgrade.width-15,this.redDot.y=5,this.redDot.visible=!1,this.btnUpgrade.addChild(this.redDot),this.btnUpgrade.on("pointertap",this.onUpgrade,this),this.btnCitadel.on("pointertap",this.onCitadel,this),this.updateLanguage()}
- this.btnUpgrade.x=640-this.btnUpgrade.width-6,this.btnCitadel.x=this.btnUpgrade.x-this.btnCitadel.width-5,this.btnUpgrade.visible=_L.maxWave>=50,this.btnCitadel.visible=_L.maxWave>=100}
+ this.btnUpgrade.x=640-this.btnUpgrade.width-6,this.btnCitadel.x=this.btnUpgrade.x-this.btnCitadel.width-5,this.btnUpgrade.visible=ML.maxWave>=50,this.btnCitadel.visible=ML.maxWave>=100,this.btnUpgrade.visible&&Tei.getInstance().registerSubMenuButtonGetter(t=>"btnUpgrade"===t&&this.btnUpgrade.visible?{
+ parent:this,btn:{
+ x:this.btnUpgrade.x,y:this.btnUpgrade.y,width:this.btnUpgrade.width,height:this.btnUpgrade.height}
+ }
+ :null)}
GuildRaidService 1 hunks, 8 statements
+ async getRecords(t=!1){
+ return this.post(XR.GUILD_RAID.GET_RECORDS,{
+ }
+ ,t)}
+ async getRecordDetail(t,i=!1){
+ return this.post(XR.GUILD_RAID.GET_RECORD_DETAIL,{
+ raidId:t}
+ ,i)}
MineDataManager 4 hunks, 8 statements
- zt(this,"bookList",[]),zt(this,"chestRewardList",[]),zt(this,"bookMap",new Map),zt(this,"chestRewardMap",new Map),zt(this,"maxLevel",0),zt(this,"status",new RG),zt(this,"instance",null),zt(this,"revealedChests",[]),zt(this,"discoveredBoxes",[]),zt(this,"isStatusLoaded",!1)}
+ Kt(this,"bookList",[]),Kt(this,"chestRewardList",[]),Kt(this,"bookMap",new Map),Kt(this,"chestRewardMap",new Map),Kt(this,"maxLevel",0),Kt(this,"status",new FG),Kt(this,"instance",null),Kt(this,"revealedChests",[]),Kt(this,"discoveredBoxes",[]),Kt(this,"isStatusLoaded",!1),Kt(this,"currentSeasonId",0)}
+ if(1==this.isSeasonChanged())return!0;
+ isSeasonChanged(){
+ const t=xG.currentMineEvent;
+ return!t||this.currentSeasonId!=t.seasonId}
- i.userId=t.userId||"",i.mineLevel=Number(t.mineLevel)||1,i.mineExp=Number(t.mineExp)||0,i.hammerCount=Number(t.hammerCount)||0,i.hammerLevel=Number(t.hammerLevel)||1,i.lastTicketTime=t.lastTicketTime||"",i.dailyPurchaseCount=Number(t.dailyPurchaseCount)||0,i.dailyExitCount=Number(t.dailyExitCount)||0,i.lastResetDate=t.lastResetDate||"",i.currentMineId=t.currentMineId??null,i.totalClears=Number(t.totalClears)||0,this.status=i,this.isStatusLoaded=!0}
+ i.userId=t.userId||"",i.mineLevel=Number(t.mineLevel)||1,i.mineExp=Number(t.mineExp)||0,i.hammerCount=Number(t.hammerCount)||0,i.hammerLevel=Number(t.hammerLevel)||1,i.lastTicketTime=t.lastTicketTime||"",i.dailyPurchaseCount=Number(t.dailyPurchaseCount)||0,i.dailyExitCount=Number(t.dailyExitCount)||0,i.lastResetDate=t.lastResetDate||"",i.currentMineId=t.currentMineId??null,i.totalClears=Number(t.totalClears)||0,this.status=i,this.isStatusLoaded=!0;
+ const s=xG.currentMineEvent;
+ this.currentSeasonId=s?s.seasonId:0}
Abyss1 5 hunks, 8 statements
- t++)this.placeLightning(s[t].x,s[t].y,s[t].radius,s[t+1])}
+ t++){
+ const i=s[t].getHitCenter();
+ this.placeLightning(i.x,i.y,s[t].radius,s[t+1])}
+ }
- const h=n.x-i,r=n.y-s,o=Math.sqrt(h*h+r*r);
+ const h=n.getHitCenter(),r=h.x-i,o=h.y-s,a=Math.sqrt(r*r+o*o);
- const s=mJ.getEffect(yq.UndeadLightningExplosion1);
+ const s=ej.getEffect(PF.UndeadLightningExplosion1),e=i.getHitCenter();
- const s=this.evolStage>=1?3:2;
+ const s=this.evolStage>=1?3:2,e=i.getHitCenter();
- e.scale.set(2),e.x=i.x,e.y=i.y+40,e.start(t.SKILL_DUR),YG.getInstance().addChild(e),this.doDamage(i,s,!0),i.shock(60)}
+ n.scale.set(2),n.x=e.x,n.y=e.y+40,n.start(t.SKILL_DUR),sB.getInstance().addChild(n),this.doDamage(i,s,!0),i.shock(60,this)}
GuildRaidBossItemRenderer 4 hunks, 8 statements
- ),this.bg.width=630,this.bg.height=t.ROW_HEIGHT,this.addChild(this.bg),this.icon=new We,this.icon.x=24,this.addChild(this.icon),this.lblName=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=135,this.lblName.y=16,this.addChild(this.lblName),this.lblState=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblState.x=this.lblName.x,this.lblState.y=50,this.addChild(this.lblState),this.barBg=new Gf,this.barBg.x=this.lblName.x,this.barBg.y=52,this.addChild(this.barBg),this.barFill=new Gf,this.barFill.x=this.barBg.x,this.barFill.y=this.barBg.y,this.addChild(this.barFill),this.lblHp=new YD("",16777215,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblHp.eventMode="none",this.addChild(this.lblHp),this.btnAction=new QL(""),this.btnAction.color=QL.BROWN,this.btnAction.width=120,this.btnAction.height=55,this.btnAction.x=this.bg.width-this.btnAction.width-15,this.btnAction.y=.5*(this.bg.height-this.btnAction.height),this.btnAction.onClick=()=>this.onActionClick(),this.addChild(this.btnAction)}
+ ),this.bg.width=630,this.bg.height=t.ROW_HEIGHT,this.addChild(this.bg),this.icon=new He,this.icon.x=t.ICON_X,this.addChild(this.icon),this.lblName=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=135,this.lblName.y=16,this.addChild(this.lblName),this.lblState=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblState.x=this.lblName.x,this.lblState.y=50,this.addChild(this.lblState),this.barBg=new Lf,this.barBg.x=this.lblName.x,this.barBg.y=52,this.addChild(this.barBg),this.barFill=new Lf,this.barFill.x=this.barBg.x,this.barFill.y=this.barBg.y,this.addChild(this.barFill),this.lblHp=new JD("",16777215,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblHp.eventMode="none",this.addChild(this.lblHp),this.btnAction=new ZL(""),this.btnAction.color=ZL.BROWN,this.btnAction.width=120,this.btnAction.height=55,this.btnAction.x=this.bg.width-this.btnAction.width-15,this.btnAction.y=.5*(this.bg.height-this.btnAction.height),this.btnAction.onClick=()=>this.onActionClick(),this.addChild(this.btnAction)}
- if(this.icon.visible=!!s,s){
- const i=t.ICON_SIZE;
- this.icon.texture=s,this.icon.width=i,this.icon.height=i,this.icon.y=.5*(this.bg.height-i)}
- this.lblName.text=`${
- i.vo.name}
+ this.icon.visible=!!s,s&&(this.icon.texture=s,this.icon.width=t.ICON_W,this.icon.height=t.ICON_H,this.icon.y=.5*(this.bg.height-t.ICON_H)),this.lblName.text=`${
+ PJt.getInstance().getBossName(i.vo)}
- this.bg.alpha=e?.7:1,this.lblName.alpha=e?.5:1,1===i.state?(this.lblState.visible=!1,this.drawHpBar(i.curHp,i.maxHp),this.barBg.visible=this.barFill.visible=this.lblHp.visible=!0,this.btnAction.visible=!0,i.canClaim?(this.btnAction.text=AG.getText("COMMON_22","보상"),this.btnAction.activated=i.isElder):(this.btnAction.text=AG.getText("COMMON_378","도전"),this.btnAction.activated=!0)):(this.barBg.visible=this.barFill.visible=this.lblHp.visible=!1,this.btnAction.visible=!1,this.lblState.visible=!0,0===i.state?(this.lblState.text="격파 완료",this.lblState.textColor=8965256):(this.lblState.text="이전 보스 격파 후 도전 가능",this.lblState.textColor=8947848))}
+ this.bg.alpha=e?.7:1,this.lblName.alpha=e?.5:1,1===i.state?(this.lblState.visible=!1,this.drawHpBar(i.curHp,i.maxHp),this.barBg.visible=this.barFill.visible=this.lblHp.visible=!0,this.btnAction.visible=!0,i.canClaim?(this.btnAction.text=SG.getText("COMMON_22","보상"),this.btnAction.activated=i.isElder):(this.btnAction.text=SG.getText("COMMON_378","도전"),this.btnAction.activated=!0)):(this.barBg.visible=this.barFill.visible=this.lblHp.visible=!1,this.btnAction.visible=!1,this.lblState.visible=!0,0===i.state?(this.lblState.text=SG.getText("GAME_1273","격파 완료"),this.lblState.textColor=8965256):(this.lblState.text=SG.getText("GAME_1274","이전 보스 격파 후 도전 가능"),this.lblState.textColor=8947848))}
- Kt(e4t,"GuildRaidBossItemRenderer"),zt(e4t,"ROW_HEIGHT",100),zt(e4t,"BAR_WIDTH",320),zt(e4t,"BAR_HEIGHT",20),zt(e4t,"ICON_SIZE",84);
+ Vt(f9t,"GuildRaidBossItemRenderer"),Kt(f9t,"ROW_HEIGHT",90),Kt(f9t,"BAR_WIDTH",320),Kt(f9t,"BAR_HEIGHT",20),Kt(f9t,"ICON_W",117),Kt(f9t,"ICON_H",f9t.ROW_HEIGHT-10),Kt(f9t,"ICON_X",6);
ProfilePopup 4 hunks, 8 statements
- revive:"30 웨이브 이상에서 환생한 횟수입니다.",knightLevel:"최대 웨이브 100당 레벨이 1씩 올라갑니다. 최대 웨이브가 100이면 1레벨, 200이면 2레벨이 됩니다.",medalBuff:"기사단 레벨 1당 훈장버프가 3%씩 증가합니다.",questGold:"30 웨이브 이상에서 환생할때마다, 퀘스트 골드 획득이 50%씩 증가합니다. ( 최대 250% )",questTime:"30 웨이브 이상에서 환생할때마다, 퀘스트 시간이 20%씩 단축됩니다. ( 최대 100% )",questCost:"30 웨이브 이상에서 환생할때마다, 퀘스트 오픈비용이 20%씩 감소합니다. ( 최대 100% )"}
+ revive:"30 웨이브 이상에서 환생한 횟수입니다.",knightLevel:"최대 웨이브 100당 레벨이 1씩 올라갑니다. 최대 웨이브가 100이면 1레벨, 200이면 2레벨이 됩니다.",medalBuff:"기사단 레벨 1당 훈장버프가 3%씩 증가합니다.",questGold:"30 웨이브 이상에서 환생할때마다, 퀘스트 골드 획득이 50%씩 증가합니다. ( 최대 250% )",questTime:"30 웨이브 이상에서 환생할때마다, 퀘스트 시간이 20%씩 단축됩니다. ( 최대 100% )",questCost:"30 웨이브 이상에서 환생할때마다, 퀘스트 오픈비용이 20%씩 감소합니다. ( 최대 100% )",raceChange:"30 웨이브 이상에서 환생할 경우, 종족이 무작위로 변경됩니다."}
- super(),zt(this,"lblMessage"),zt(this,"lblTribeBuff"),zt(this,"topContainer"),zt(this,"decorationTop"),zt(this,"decorationBottom"),zt(this,"decorationLine"),zt(this,"rows",[]),zt(this,"helpBg"),zt(this,"lblHelp"),zt(this,"image"),this.title=AG.getText("GAME_258","프로필"),this.width=580,this.outSideClickHide=!0,this.decorationTop=new We(ZA.getTexture("UI_Ekkorr","Shadow_Upward")),this.decorationTop.alpha=.7,this.contentContainer.addChild(this.decorationTop),this.decorationBottom=new We(ZA.getTexture("UI_Ekkorr","Shadow_Upward")),this.decorationBottom.alpha=.7,this.decorationBottom.scale.y=-1,this.contentContainer.addChild(this.decorationBottom),this.decorationLine=new We(ZA.getTexture("UI_Ekkorr","Patter_Diamond_01")),this.contentContainer.addChild(this.decorationLine),this.topContainer=new Be,this.contentContainer.addChild(this.topContainer),this.lblMessage=new YD("",16763904,aD.DEFAULT_FONT_OPTION_18),this.topContainer.addChild(this.lblMessage),this.lblTribeBuff=new YD("",16763904,aD.DEFAULT_FONT_OPTION_17),this.lblTribeBuff.align="center",aD.setLabelWrapWidth(this.lblTribeBuff,520),this.topContainer.addChild(this.lblTribeBuff),this.helpBg=new CM({
+ super(),Kt(this,"lblMessage"),Kt(this,"btnMessageGuide"),Kt(this,"lblTribeBuff"),Kt(this,"topContainer"),Kt(this,"decorationTop"),Kt(this,"decorationBottom"),Kt(this,"decorationLine"),Kt(this,"rows",[]),Kt(this,"helpBg"),Kt(this,"lblHelp"),Kt(this,"image"),this.title=SG.getText("GAME_258","프로필"),this.width=580,this.outSideClickHide=!0,this.decorationTop=new He(QA.getTexture("UI_Ekkorr","Shadow_Upward")),this.decorationTop.alpha=.7,this.contentContainer.addChild(this.decorationTop),this.decorationBottom=new He(QA.getTexture("UI_Ekkorr","Shadow_Upward")),this.decorationBottom.alpha=.7,this.decorationBottom.scale.y=-1,this.contentContainer.addChild(this.decorationBottom),this.decorationLine=new He(QA.getTexture("UI_Ekkorr","Patter_Diamond_01")),this.contentContainer.addChild(this.decorationLine),this.topContainer=new Ge,this.contentContainer.addChild(this.topContainer),this.lblMessage=new JD("",16763904,cD.DEFAULT_FONT_OPTION_18),this.topContainer.addChild(this.lblMessage),this.btnMessageGuide=new MB("UI_Ekkorr","UI_Alarm"),this.topContainer.addChild(this.btnMessageGuide),this.btnMessageGuide.onClick=()=>{
+ this.showHelp("raceChange")}
+ ,this.lblTribeBuff=new JD("",16763904,cD.DEFAULT_FONT_OPTION_17),this.lblTribeBuff.align="center",cD.setLabelWrapWidth(this.lblTribeBuff,520),this.topContainer.addChild(this.lblTribeBuff),this.helpBg=new TM({
- case"questCost":i=AG.getText("GAME_273",pii[t])}
+ case"questCost":i=SG.getText("GAME_273",uhi[t]);
+ break;
+ case"raceChange":i=SG.getText("GAME_1259",uhi[t])}
- this.lblMessage.x=.5*(this.topContainer.width-this.lblMessage.width),this.lblTribeBuff.x=.5*(this.topContainer.width-this.lblTribeBuff.width),this.lblTribeBuff.y=this.lblMessage.y+this.lblMessage.height+3,this.topContainer.x=.5*(this.width-this.topContainer.width),this.topContainer.y=110-.5*this.topContainer.height;
+ this.lblMessage.x=.5*(this.topContainer.width-this.lblMessage.width),this.btnMessageGuide.x=this.lblMessage.x+this.lblMessage.width+3,this.lblTribeBuff.x=.5*(this.topContainer.width-this.lblTribeBuff.width),this.lblTribeBuff.y=this.lblMessage.y+this.lblMessage.height+3,this.topContainer.x=.5*(this.width-this.topContainer.width),this.topContainer.y=110-.5*this.topContainer.height;
GuildWarBattlePopupV3 8 hunks, 8 statements
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:11}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:11}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
- const t=await hD.getInstance().guildWar.getCombatLog(this.warId,100,!1),e=(null==(i=null==t?void 0:t.body)?void 0:i.entries)??[];
+ const t=await rD.getInstance().guildWar.getCombatLog(this.warId,120,!1),e=(null==(i=null==t?void 0:t.body)?void 0:i.entries)??[];
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
BaseService 1 hunks, 7 statements
+ if(CL.getInstance().parking&&0==CL.getInstance().isWhiteUser)return{
+ success:!1,header:{
+ sts:(new Date).getTime(),errorInfo:{
+ message:"Server is parking"}
+ }
+ }
+ ;
BladeMaster1 2 hunks, 7 statements
- ,this.startSound=KL.SFX_BATTLE_MALE_GO,this.attackSound=KL.SFX_BATTLE_SWORD_ATTACK2,this.dieSound=KL.SFX_BATTLE_ORC_DIE,this.hasSkill=!0,this.maxMana=900,this.firePoint.set(8,-17.4),this.normalSize=.9,this.evolSize=1,this.addMoveSpeedBuff(RZ.BladeMaster1_MELEE_MOVESPD,t.MELEE_MOVESPD_BUFF,t.MODE_BUFF_DUR,!0),this.addAttackDamageBuff(RZ.BladeMaster1_MELEE_ATKDMG,t.MELEE_ATKDMG_BUFF,t.MODE_BUFF_DUR)}
+ ,this.startSound=zL.SFX_BATTLE_MALE_GO,this.attackSound=zL.SFX_BATTLE_SWORD_ATTACK2,this.dieSound=zL.SFX_BATTLE_ORC_DIE,this.hasSkill=!0,this.maxMana=900,this.firePoint.set(8,-17.4),this.normalSize=.9,this.evolSize=1,this.applyMeleeModeBuffs()}
+ applyMeleeModeBuffs(){
+ this.addMoveSpeedBuff(yK.BladeMaster1_MELEE_MOVESPD,t.MELEE_MOVESPD_BUFF,t.MODE_BUFF_DUR,!0),this.addAttackDamageBuff(yK.BladeMaster1_MELEE_ATKDMG,t.MELEE_ATKDMG_BUFF,t.MODE_BUFF_DUR)}
- super.setData(t,i,s,e),this.killStack=0,this.mode=0,this.rangeComboIdx=0,this.rangeCycleAngle=0,this.rangeCycleSign=1,this.rangeKillStack=0,this.rangeTripleArmed=!1,this.reapTargets.length=0,this.reapIdx=0,this.reapStepTimer=0,this.reapActive=!1,this.reapOriginX=0,this.reapOriginY=0,this.unitType=sx.MELEE}
+ super.setData(t,i,s,e),this.killStack=0,this.mode=0,this.rangeComboIdx=0,this.rangeCycleAngle=0,this.rangeCycleSign=1,this.rangeKillStack=0,this.rangeTripleArmed=!1,this.reapTargets.length=0,this.reapIdx=0,this.reapStepTimer=0,this.reapActive=!1,this.reapOriginX=0,this.reapOriginY=0,this.unitType=ix.MELEE,this.atkRange=this.orgAtkRange,this.atkRange2=this.orgAtkRange*this.orgAtkRange,this.applyMeleeModeBuffs()}
+ onDie(){
+ var t;
+ null==(t=super.onDie)||t.call(this),this.reapActive=!1,this.reapTargets.length=0,this.reapIdx=0,this.reapStepTimer=0}
CommonRedButton 1 hunks, 7 statements
+ const TWt=class extends iG{
+ constructor(t,i=150,s=30){
+ super(t,i,s),this.color=ZL.RED}
+ }
+ ;
+ Vt(TWt,"CommonRedButton");
+ let CWt=TWt;
HeroSelectGuidePopup 5 hunks, 7 statements
- super(),zt(this,"lblDesc"),zt(this,"list"),zt(this,"btnConfirm"),this.outSideClickHide=!0,this.title=AG.getText("GAME_858","펫 선택권");
+ super(),Kt(this,"lblDesc"),Kt(this,"list"),Kt(this,"btnConfirm"),this.outSideClickHide=!0,this.title=SG.getText("GAME_769","영웅 선택권");
- t.fill=aD.COLOR_WHITE,this.lblDesc=new YD(AG.getText("GAME_859","펫 선택권에서 선택 가능한 펫 목록입니다.")+"\n"+AG.getText("GAME_860","펫 선택권은 인벤토리에서 사용할 수 있습니다."),t.fill,t),this.lblDesc.y=80,this.addChild(this.lblDesc);
- const i=this.width-55;
+ t.fill=cD.COLOR_WHITE,this.lblDesc=new JD(SG.getText("GAME_836","영웅 선택권에서 선택 가능한 영웅 목록입니다.")+"\n"+SG.getText("GAME_837","영웅 선택권은 인벤토리에서 사용할 수 있습니다."),t.fill,t),this.lblDesc.y=80,this.addChild(this.lblDesc);
+ const i=this.width-60;
- this.title=AG.getText("GAME_858","펫 선택권"),this.lblDesc.text=AG.getText("GAME_859","펫 선택권에서 선택 가능한 펫 목록입니다.")+"\n"+AG.getText("GAME_860","펫 선택권은 인벤토리에서 사용할 수 있습니다."),this.btnConfirm.text=AG.getText("COMMON_1","확인"),this.list.y=this.lblDesc.y+this.lblDesc.height+20;
- let h=ZI.chunkArray(s,7);
+ this.title=SG.getText("GAME_769","영웅 선택권"),this.lblDesc.text=SG.getText("GAME_836","영웅 선택권에서 선택 가능한 영웅 목록입니다.")+"\n"+SG.getText("GAME_837","영웅 선택권은 인벤토리에서 사용할 수 있습니다."),this.btnConfirm.text=SG.getText("COMMON_1","확인"),this.list.y=this.lblDesc.y+this.lblDesc.height+20;
+ let h=QO.chunkArray(s,5);
- let c=s.length<7?o.actualWidth:this.list.getListWidth();
+ let c=s.length<5?o.actualWidth:this.list.getListWidth();
- Kt(g2t,"PetSelectGuidePopup"),zt(g2t,"_instance");
+ Vt(J3t,"HeroSelectGuidePopup"),Kt(J3t,"_instance");
SpiritLandDataManager 5 hunks, 6 statements
- get:()=>e?h()?Number(t^s):(hP.O(nP.G_SENTINEL),n):0,set:t=>!(!isFinite(t)||t<0||(e&&!h()?(hP.O(nP.G_SENTINEL),1):(r(t),0))),setTrusted(t){
+ get:()=>e?h()?Number(t^s):(nN.I(eN.G_SENTINEL),n):0,set:t=>!(!isFinite(t)||t<0||(e&&!h()?(nN.I(eN.G_SENTINEL),1):(r(t),0))),setTrusted(t){
- if(!r())return hP.O(nP.W_SENTINEL),n;
+ if(!r())return nN.I(eN.W_SENTINEL),n;
- return!isFinite(i)||i<1?(hP.O(nP.W_DECODE),n):i}
+ return!isFinite(i)||i<1?(nN.I(eN.W_DECODE),n):i}
- if(i>h)return hP.O(nP.W_CEILING),!1;
- if(e&&!r())return hP.O(nP.W_SENTINEL),!1;
+ if(i>h)return nN.I(eN.W_CEILING),!1;
+ if(e&&!r())return nN.I(eN.W_SENTINEL),!1;
- if(Math.abs(i-e)>50)return hP.O(nP.W_DELTA),!1}
+ if(Math.abs(i-e)>50)return nN.I(eN.W_DELTA),!1}
GuildGiftSubView 2 hunks, 6 statements
- const i=t.sort((t,i)=>{
- const s=ED.giftSendersToday.indexOf(t.memberId)>-1?1:0,e=ED.giftSendersToday.indexOf(i.memberId)>-1?1:0;
- if(s!==e)return e-s;
- const n=ED.giftedToday.indexOf(t.memberId)>-1?1:0,h=ED.giftedToday.indexOf(i.memberId)>-1?1:0;
+ const i=Number(AL.getInstance().getClientData("GUILD_DAILY_GIFT_MAX_RECEIVE")||5),s=t.sort((t,s)=>{
+ const e=Vt(t=>{
+ const s=AD.giftSendersToday.includes(t.memberId),e=AD.giftedToday.includes(t.memberId),n=t.giftCountReceivedToday>=i;
+ return!s||e||n?n?3:e?2:1:0}
+ ,"getPriority"),n=e(t),h=e(s);
- if(0===i.length)this.list.visible=!1,0===ED.remainingGifts?this.lblMessage.text=AG.getText("GAME_480","오늘은 더이상 선물을 보낼 수 없습니다."):this.lblMessage.text=AG.getText("","선물을 보낼 대상이 없습니다."),this.lblMessage.x=.5*(640-this.lblMessage.width),this.lblMessage.visible=!0;
+ if(0===s.length)this.list.visible=!1,0===AD.remainingGifts?this.lblMessage.text=SG.getText("GAME_480","오늘은 더이상 선물을 보낼 수 없습니다."):this.lblMessage.text=SG.getText("GAME_1247","선물을 보낼 대상이 없습니다."),this.lblMessage.x=.5*(640-this.lblMessage.width),this.lblMessage.visible=!0;
TutorialController 1 hunks, 6 statements
- async endTutorialRevive(){
- this.bottomMenuUnlockList=[0,1,2,3,4,5],Xti.getInstance().hideLockIconsTo(this.bottomMenuUnlockList),await $A.saveTutorialID(String(t.TUTORIAL_INDEX_REVIVE))}
- async showHeroHelpPopupByPresent(t){
- if(t<5||t>7)return;
- const i=sK.getInstance().getMainList();
- i&&(w4.getInstance().onHideHandler=this.endTutorialWave3.bind(this),w4.getInstance().showWith(i[t].main,0,!0,!1),this.isHelpQuestPopupped=!0)}
PermissionError 1 hunks, 6 statements
+ )),wai=k$t("Device",{
+ web:Vt(()=>Xt(()=>Promise.resolve().then(()=>bfi),void 0).then(t=>new t.DeviceWeb),"web")}
+ ),vai=Object.freeze(Object.defineProperty({
+ __proto__:null,Device:wai}
+ ,Symbol.toStringTag,{
+ value:"Module"}
CapacitorBridge 2 hunks, 6 statements
- const t=e.getInstance().getProductIdByStoreProductId(n.productId);
- if(t<=0)continue;
- const i=n.productId;
+ const t=-1,i=n.productId;
- const t=e.getInstance().getProductIdByStoreProductId(n.productId);
- if(t<=0)continue;
- const i=n.productId;
+ const t=-1,i=n.productId;
TransConfirmPopup 1 hunks, 6 statements
- )),Xoi=IK("Browser",{
- web:Kt(()=>Jt(()=>Promise.resolve().then(()=>A_i),void 0).then(t=>new t.BrowserWeb),"web")}
- ),Yoi=Object.freeze(Object.defineProperty({
- __proto__:null,Browser:Xoi}
- ,Symbol.toStringTag,{
- value:"Module"}
FavoritePetSelectItemRenderer 1 hunks, 6 statements
+ )),Zui=k$t("Browser",{
+ web:Vt(()=>Xt(()=>Promise.resolve().then(()=>ySi),void 0).then(t=>new t.BrowserWeb),"web")}
+ ),tdi=Object.freeze(Object.defineProperty({
+ __proto__:null,Browser:Zui}
+ ,Symbol.toStringTag,{
+ value:"Module"}
BatchableSprite 5 hunks, 5 statements
- ...I.defaultTextStyle,...t}
+ ...O.defaultTextStyle,...t}
- ...I.defaultDropShadow,...t}
+ ...O.defaultDropShadow,...t}
- ...I.defaultDropShadow}
+ ...O.defaultDropShadow}
- ...xu.defaultFillStyle,...t}
+ ...Ou.defaultFillStyle,...t}
- ...xu.defaultStrokeStyle,...t}
+ ...Ou.defaultStrokeStyle,...t}
BasePopup 3 hunks, 5 statements
- this.txtTitle.text=t,this.txtTitle.x=.5*(this.width-this.txtTitle.width),this.txtTitle.y=.5*(53-this.txtTitle.height)}
+ this.txtTitle.text=t,this.updateTitleWorkWrap(),this.txtTitle.x=.5*(this.width-this.txtTitle.width),this.txtTitle.y=.5*(53-this.txtTitle.height)}
+ updateTitleWorkWrap(){
+ let t;
+ t=this.btnClose.parent&&this.btnClose.visible?this.width-2*(this.width-this.btnClose.x):this.width-40,this.txtTitle.style.wordWrap=!0,this.txtTitle.style.wordWrapWidth=t,this.txtTitle.style.breakWords=!0}
- this.bg.width=t,this.txtTitle&&(this.txtTitle.style.wordWrap=!0,this.txtTitle.style.wordWrapWidth=t-40,this.txtTitle.style.breakWords=!0),this.btnClose&&(this.btnClose.x=this.width-this.btnClose.width-12),this.pivot.set(this.width/2,this.height/2)}
+ this.bg.width=t,this.txtTitle&&this.updateTitleWorkWrap(),this.btnClose&&(this.btnClose.x=this.width-this.btnClose.width-12),this.pivot.set(this.width/2,this.height/2)}
HeavyWarrior1 1 hunks, 5 statements
- null!=this.target&&(this.doMeleeAttack(this.target,1),this.showPowerShield(150))}
+ var t;
+ if(null!=this.target&&(this.doMeleeAttack(this.target,1),this.showPowerShield(150),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(this.evolStage>=1?.35:.2))){
+ const t=this.target.x-this.x,i=this.target.y-this.y,s=Math.sqrt(t*t+i*i)||1;
+ this.target.knockBack(t/s,i/s,10)}
+ }
Fairy1 5 hunks, 5 statements
- ),zt(I1,"SKILL_MAX_TARGETS",20);
+ ),Kt(qZ,"SKILL_MAX_TARGETS",20),Kt(qZ,"SKILL_MAX_HEAL_TARGETS_RAID",80);
+ var i;
- const c=Math.min(t.SKILL_MAX_TARGETS,a.length);
+ const l=!0===(null==(i=this.battleController)?void 0:i.isRaidBattle)?t.SKILL_MAX_TARGETS_RAID:t.SKILL_MAX_TARGETS,u=Math.min(l,c.length);
- r.heal(o,this,!0),r.isCastle||(r.mana+=e),r.addMoveSpeedBuff(this.kindNum,n,h),r.isImmovable||r.showFariyWing(h)}
+ i.heal(o,this,!0),d<t.SKILL_MAX_TARGETS&&(i.isCastle||(i.mana+=n),i.addMoveSpeedBuff(this.kindNum,h,r),i.isImmovable||i.showFariyWing(r))}
- Kt(N1,"Fairy1"),zt(N1,"SKILL_MAX_TARGETS",20),zt(N1,"SKILL_RADIUS_SQ",122500);
+ Vt(XZ,"Fairy1"),Kt(XZ,"SKILL_MAX_TARGETS",20),Kt(XZ,"SKILL_MAX_TARGETS_RAID",80),Kt(XZ,"SKILL_RADIUS_SQ",122500);
Digest 5 hunks, 5 statements
- ,"decode$5"),oTt=Kt((t,i,s)=>{
+ ,"decode$6"),Bft=Vt((t,i,s)=>{
- ,"encode$4"),aTt=Kt(({
+ ,"encode$5"),Uft=Vt(({
- Kt(VTt,"encode$3");
+ Vt(Mpt,"encode$4");
- const rCt=Kt(t=>[hCt.decode(t),hCt.decode.bytes],"decode$3"),oCt=Kt((t,i,s=0)=>(hCt.encode(t,i,s),i),"encodeTo"),aCt=Kt(t=>hCt.encodingLength(t),"encodingLength"),cCt=Object.freeze(Object.defineProperty({
+ const Gpt=Vt(t=>[Lpt.decode(t),Lpt.decode.bytes],"decode$4"),Bpt=Vt((t,i,s=0)=>(Lpt.encode(t,i,s),i),"encodeTo"),Upt=Vt(t=>Lpt.encodingLength(t),"encodingLength"),Fpt=Object.freeze(Object.defineProperty({
- ,"decode$2"),dCt=Kt((t,i)=>t===i||t.code===i.code&&t.size===i.size&&$St(t.bytes,i.bytes),"equals"),fCt=class{
+ ,"decode$3"),$pt=Vt((t,i)=>t===i||t.code===i.code&&t.size===i.size&&yft(t.bytes,i.bytes),"equals"),jpt=class{
HeroSelectGuideItemRenderer 4 hunks, 5 statements
- super(),zt(this,"bg"),zt(this,"icons"),zt(this,"_actualWidth",0),this.bg=new We(ZA.getTexture("UI_Ekkorr","blackRect")),this.bg.alpha=.1,this.bg.width=545,this.bg.height=80,this.addChild(this.bg),this.icons=[];
+ super(),Kt(this,"bg"),Kt(this,"icons"),Kt(this,"_actualWidth",0),this.bg=new He(QA.getTexture("UI_Ekkorr","blackRect")),this.bg.alpha=.1,this.bg.width=540,this.bg.height=75,this.addChild(this.bg),this.icons=[];
- i<7;
- ++i)t=new gK,t.scale=.9,t.x=i*(t.width+5),t.y=2,this.addChild(t),this.icons.push(t)}
+ i<5;
+ ++i)t=new Y2,t.scale=.8,t.x=i*(t.width+3),t.y=2,this.addChild(t),this.icons.push(t)}
- ++n)s=this.icons[n],n<e?(s.setPet(i[n],1),s.hideStar(),s.visible=!0,this._actualWidth=s.x+s.width):s.visible=!1}
+ ++n)s=this.icons[n],n<e?(s.setDataWithKindNum(i[n]),s.visible=!0,this._actualWidth=s.x+s.width):s.visible=!1}
- Kt(f2t,"PetSelectGuideItemRenderer");
+ Vt(Y3t,"HeroSelectGuideItemRenderer");
GuildWarActiveItemRenderer 1 hunks, 5 statements
- const E4t=class t extends XI{
+ const vti=Object.freeze(Object.defineProperty({
+ __proto__:null,GuildRaidPopup:wti}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),bti=class t extends qO{
GuildWarHistoryItemRenderer 3 hunks, 5 statements
- this.lblResult.text=i,this.lblResult.textColor=s,this.lblResult.x=.5*(120-this.lblResult.width),this.lblResult.y=.5*(this.bg.height-this.lblResult.height),this.lblOppName.text=`${
+ this.lblResult.text=i,this.lblResult.textColor=s,this.lblResult.x=.5*(120-this.lblResult.width),this.lblResult.y=.5*(this.bg.height-this.lblResult.height),this.lblOppName.text=t.oppName!==t.oppGuildId?`${
- `,this.lblScore.text=`${
+ `:`( ${
+ SG.getText("GAME_448","길드 해체")}
+  )`,this.lblScore.text=`${
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GpuGraphicsContext 2 hunks, 4 statements
- ...zc,extension:{
- ...zc.extension,name:"ellipse"}
+ ...Kc,extension:{
+ ...Kc.extension,name:"ellipse"}
- ...zc,extension:{
- ...zc.extension,name:"roundedRectangle"}
+ ...Kc,extension:{
+ ...Kc.extension,name:"roundedRectangle"}
GuildWarService 1 hunks, 4 statements
+ async getAwakenedTribes(t,i=!1){
+ return await this.post(XR.GUILD_WAR.GET_AWAKENED_TRIBES,{
+ targetUserId:t}
+ ,i)}
MailService 1 hunks, 4 statements
+ async receiveAll(t=!1){
+ return this.post(XR.MAIL.RECEIVE_ALL,{
+ }
+ ,t)}
ShopService 1 hunks, 4 statements
+ async confirmFreePayment(t,i=!1){
+ return this.post(XR.SHOP.CONFIRM_FREE_PAYMENT,{
+ productId:t}
+ ,i)}
TreasureService 4 hunks, 4 statements
- async changeTransMaterials(t,i=!0){
+ async changeTransMaterials(t,i,s=!0){
- grade:t}
+ grade:t,trans:i}
- async transTreasure(t,i=!0){
+ async transTreasure(t,i,s,e=!0){
- grade:t}
+ grade:t,trans:i,useTicket:s}
BerialLightning 1 hunks, 4 statements
- if(this.owner&&this.owner.isAlive)for(const t of this.owner.enemyList)this.isEnemyInArea(t)&&this.owner.doDamage(t,this.damagePercent,!0)}
+ var t,i;
+ if(!this.owner||!this.owner.isAlive)return;
+ const s=(null==(i=(t=this.owner).getRaidDamageMultiplier)?void 0:i.call(t))??1,e=this.owner.atkDmg*s*this.damagePercent;
+ if(!(e<=0))for(const n of this.owner.enemyList)this.isEnemyInArea(n)&&(this.owner.totalDamageDealt+=e,n.health-=e)}
Golem1 4 hunks, 4 statements
- null!=this.target&&this.target.isAlive&&!this.target.isAir&&(this.doMeleeAttack(this.target,1),this.target&&this.target.isAlive&&this.random.chance(t)&&(this.target.stun(i),e++));
+ null!=this.target&&this.target.isAlive&&!this.target.isAir&&(this.doMeleeAttack(this.target,1),this.target&&this.target.isAlive&&this.random.chance(t)&&(this.target.stun(i,this),e++));
- for(const h of n)null!=h&&h!=this.target&&h.isAlive&&(h.isAir||(this.doMeleeAttack(h,.3),h.isAlive&&e<s&&this.random.chance(t)&&(h.stun(i),e++)))}
+ for(const h of n)null!=h&&h!=this.target&&h.isAlive&&(h.isAir||(this.doMeleeAttack(h,.3),h.isAlive&&e<s&&this.random.chance(t)&&(h.stun(i,this),e++)))}
- null!=this.target&&this.target.isAlive&&!this.target.isAir&&(this.doMeleeAttack(this.target,i),this.target&&this.target.isAlive&&(this.target.stun(60),h++));
+ null!=this.target&&this.target.isAlive&&!this.target.isAir&&(this.doMeleeAttack(this.target,i),this.target&&this.target.isAlive&&(this.target.stun(60,this),h++));
- for(const o of r)null!=o&&o!=this.target&&o.isAlive&&(o.isAir||(this.doMeleeAttack(o,s),o.isAlive&&h<n&&this.random.chance(e)&&(o.stun(60),h++)))}
+ for(const o of r)null!=o&&o!=this.target&&o.isAlive&&(o.isAir||(this.doMeleeAttack(o,s),o.isAlive&&h<n&&this.random.chance(e)&&(o.stun(60,this),h++)))}
SettingEtcInfo 3 hunks, 4 statements
- n&&t.push(this.btnPromotion),t.push(this.btnWithdraw),TL.getInstance().development&&t.push(this.btnLineMarketLink);
+ n&&t.push(this.btnPromotion),t.push(this.btnWithdraw),CL.getInstance().development&&t.push(this.btnLineMarketLink),t.push(this.btnAttendReward);
- this.btnLangChange.text=AG.getText("COMMON_54","언어변경"),this.updateLayout()}
+ this.btnLangChange.text=SG.getText("COMMON_54","언어변경"),this.btnAttendReward.text=SG.getText("GAME_245","출석 보상"),this.updateLayout()}
+ async onAttendRewardBtnClick(){
+ await eei.getInstance().setData(),eei.getInstance().show(),eei.getInstance().y=450}
Archery2GameScene 4 hunks, 4 statements
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16777215}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16777215}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16766720}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16766720}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16737792}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16737792}
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16777215}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16777215}
PassthroughFilter 2 hunks, 3 statements
- const of=class extends or{
+ const rf=class extends rr{
- Kt(of,"PassthroughFilter");
- let af=of;
+ Vt(rf,"PassthroughFilter");
+ let of=rf;
PassDataManager 1 hunks, 3 statements
- return this.getMains(t).find(i=>-1!==this.getFirstRewardIndex(t,i))||-1}
+ const i=this.getMains(t),s=i.find(i=>-1!==this.getFirstRewardIndex(t,i));
+ if(s)return s;
+ return i.find(i=>this.hasRewardWithCategoryAndMain(t,i))||-1}
OrcBigFoot1 3 hunks, 3 statements
- this.doMeleeAttack(this.target),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(s)&&this.target.freeze(e);
+ this.doMeleeAttack(this.target),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(s)&&this.target.freeze(e,this);
- for(const l of a)if(null!=l&&0!=l.isAlive&&l!==this.target&&(this.doMeleeAttack(l,.4),l.isAlive&&this.random.chance(s)&&l.freeze(e),c++,c>=n))break;
+ for(const l of a)if(null!=l&&0!=l.isAlive&&l!==this.target&&(this.doMeleeAttack(l,.4),l.isAlive&&this.random.chance(s)&&l.freeze(e,this),c++,c>=n))break;
- for(const c of o)if(null!=c&&(this.doDamage(c,1),c.isAlive&&this.random.chance(e)&&c.freeze(n),a++,a>=s))break;
+ for(const c of o)if(null!=c&&(this.doDamage(c,1),c.isAlive&&this.random.chance(e)&&c.freeze(n,this),a++,a>=s))break;
Fo 3 hunks, 3 statements
- function Ugt(t){
+ function get(t){
- [ggt.AUTHORIZED]:Ugt(h),[ggt.MESSAGE]:Vgt(h),[ggt.CHANNEL_PERSISTENCE]:qgt(h),[ggt.CLIENTS_CONNECTED]:Hgt(h,t),[ggt.KEYS_EXCHANGED]:$gt(h,t),[ggt.SOCKET_DISCONNECTED]:zgt(h),[ggt.SOCKET_RECONNECT]:Kgt(h),[ggt.CLIENTS_DISCONNECTED]:Wgt(h),[ggt.KEY_INFO]:()=>{
+ [jst.AUTHORIZED]:get(h),[jst.MESSAGE]:yet(h),[jst.CHANNEL_PERSISTENCE]:Aet(h),[jst.CLIENTS_CONNECTED]:wet(h,t),[jst.KEYS_EXCHANGED]:_et(h,t),[jst.SOCKET_DISCONNECTED]:Eet(h),[jst.SOCKET_RECONNECT]:Met(h),[jst.CLIENTS_DISCONNECTED]:vet(h),[jst.KEY_INFO]:()=>{
- Kt(Ugt,"Fo"),Kt(Fgt,"zo"),Kt(Hgt,"qo"),Kt(Wgt,"Wo"),Kt(jgt,"Vo"),Kt($gt,"Go"),Kt(Vgt,"Yo"),Kt(Kgt,"Zo"),Kt(zgt,"Jo"),Kt(qgt,"Qo"),Kt(Xgt,"Xo"),Kt(Ygt,"es"),(Lgt||(Lgt={
+ Vt(get,"Fo"),Vt(met,"zo"),Vt(wet,"qo"),Vt(vet,"Wo"),Vt(bet,"Vo"),Vt(_et,"Go"),Vt(yet,"Yo"),Vt(Met,"Zo"),Vt(Eet,"Jo"),Vt(Aet,"Qo"),Vt(Tet,"Xo"),Vt(Cet,"es"),(det||(det={
SHA256 3 hunks, 3 statements
- ...lTt,...dTt,...pTt,...mTt,...bTt,...OTt,...NTt,...DTt,...FTt}
+ ...Hft,...$ft,...Vft,...zft,...Xft,...rpt,...cpt,...dpt,...wpt}
- ...ECt,...SCt}
+ ...tgt,...sgt}
- utf8:skt,"utf-8":skt,hex:YCt.base16,latin1:ekt,ascii:ekt,binary:ekt,...YCt}
+ utf8:Ngt,"utf-8":Ngt,hex:Cgt.base16,latin1:Pgt,ascii:Pgt,binary:Pgt,...Cgt}
SuiProvider 3 hunks, 3 statements
- namespace:zLt.NameSpaceKeyAptos,addresses:s,methods:[...XLt.AptosMethods],extra:h}
+ namespace:AAt.NameSpaceKeyAptos,addresses:s,methods:[...TAt.AptosMethods],extra:h}
- namespace:sGt.NameSpaceKeyTON,addresses:o,methods:[...hGt.TONMethods],extra:a,data:{
+ namespace:NAt.NameSpaceKeyTON,addresses:o,methods:[...LAt.TONMethods],extra:a,data:{
- namespace:cGt.NameSpaceKeySui,addresses:i,methods:[...dGt.SuiMethods],extra:s}
+ namespace:FAt.NameSpaceKeySui,addresses:i,methods:[...$At.SuiMethods],extra:s}
WalletPopup 3 hunks, 3 statements
- ...aD.ERROR_POPUP_LABEL_OPTION,fontSize:24,fontWeight:"bold"}
+ ...cD.ERROR_POPUP_LABEL_OPTION,fontSize:24,fontWeight:"bold"}
- ...aD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
+ ...cD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
- ...aD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
+ ...cD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
OfflineCountdown 3 hunks, 3 statements
- super(),zt(this,"countText"),zt(this,"currentNum",0),zt(this,"resolve",null);
+ super(),Kt(this,"countText"),Kt(this,"currentNum",0),Kt(this,"resolve",null),Kt(this,"failsafeTimer",null);
- this.visible=!0,this.resolve=i,this.currentNum=t,this.showNumber(this.currentNum)}
+ this.visible=!0,this.resolve=i,this.currentNum=t,this.showNumber(this.currentNum),null!==this.failsafeTimer&&clearTimeout(this.failsafeTimer),this.failsafeTimer=setTimeout(()=>this.finish(),1e3*(t+2))}
- HI.killTweensOf(this.countText),HI.killTweensOf(this.countText.scale),this.visible=!1,this.resolve&&(this.resolve(),this.resolve=null)}
+ null!==this.failsafeTimer&&(clearTimeout(this.failsafeTimer),this.failsafeTimer=null),FO.killTweensOf(this.countText),FO.killTweensOf(this.countText.scale),this.visible=!1,this.resolve&&(this.resolve(),this.resolve=null)}
TilingSpriteShader 1 hunks, 2 statements
- ...ip,vertex:{
- ...ip.vertex,header:ip.vertex.header.replace("group(1)","group(2)")}
+ ...tp,vertex:{
+ ...tp.vertex,header:tp.vertex.header.replace("group(1)","group(2)")}
CanvasRenderer 1 hunks, 2 statements
- const Gv=[...Sv,cw,uw,Lv,Rv],Bv=[Pw,Fm,Iw,mw,zm,sw,Xm,fw],Uv=[Pm,kw],Fv=[],Hv=[],Wv=[];
- ii.handleByNamedList(Qt.CanvasSystem,Fv),ii.handleByNamedList(Qt.CanvasPipes,Hv),ii.handleByNamedList(Qt.CanvasPipesAdaptor,Wv),ii.add(...Gv,...Bv,...Uv);
+ const Lv=[...Av,aw,lw,Dv,Nv],Gv=[Rw,Um,kw,gw,Km,iw,qm,dw],Bv=[Rm,Cw],Uv=[],Fv=[],Hv=[];
+ ti.handleByNamedList(Jt.CanvasSystem,Uv),ti.handleByNamedList(Jt.CanvasPipes,Fv),ti.handleByNamedList(Jt.CanvasPipesAdaptor,Hv),ti.add(...Lv,...Gv,...Bv);
WebGLRenderer 1 hunks, 2 statements
- const Vy=[...Sv,Gb,fb,Qv,bb,Yv,Fy,Hb,lb,py,cy,wb,wy,Ab,gb],Ky=[...Tv],zy=[Dm,$y,Wy],qy=[],Xy=[],Yy=[];
- ii.handleByNamedList(Qt.WebGLSystem,qy),ii.handleByNamedList(Qt.WebGLPipes,Xy),ii.handleByNamedList(Qt.WebGLPipesAdaptor,Yy),ii.add(...Vy,...Ky,...zy);
+ const j_=[...Av,Lb,db,Jv,vb,Yv,U_,Fb,cb,f_,a_,mb,m_,Eb,pb],V_=[...Sv],K_=[Pm,$_,H_],z_=[],q_=[],Y_=[];
+ ti.handleByNamedList(Jt.WebGLSystem,z_),ti.handleByNamedList(Jt.WebGLPipes,q_),ti.handleByNamedList(Jt.WebGLPipesAdaptor,Y_),ti.add(...j_,...V_,...K_);
WebGPURenderer 1 hunks, 2 statements
- const oM=[...Sv,E_,f_,u_,g_,h_,sM,G_,U_,W_,x_,c_,w_,i_],aM=[...Tv,T_],cM=[Bm,rM,nM],lM=[],uM=[],dM=[];
- ii.handleByNamedList(Qt.WebGPUSystem,lM),ii.handleByNamedList(Qt.WebGPUPipes,uM),ii.handleByNamedList(Qt.WebGPUPipesAdaptor,dM),ii.add(...oM,...aM,...cM);
+ const rM=[...Av,My,dy,ly,py,ny,iM,Ly,By,Hy,Oy,ay,my,ty],oM=[...Sv,Sy],aM=[Gm,hM,eM],cM=[],lM=[],uM=[];
+ ti.handleByNamedList(Jt.WebGPUSystem,cM),ti.handleByNamedList(Jt.WebGPUPipes,lM),ti.handleByNamedList(Jt.WebGPUPipesAdaptor,uM),ti.add(...rM,...oM,...aM);
ServerTimeManager 2 hunks, 2 statements
- this.oldDate.setTime(this.serverTime),this.newDate.setTime(t);
+ this.oldDate.setTime(this.oldServerTime),this.newDate.setTime(t),this.oldServerTime=t;
- Kt(pP,"ServerTimeManager"),zt(pP,"serverTime",-1),zt(pP,"timeOffset",0),zt(pP,"lastLocalTime",0),zt(pP,"syncThreshold",1e3),zt(pP,"oldDate",new Date(-1)),zt(pP,"newDate",new Date(-1)),zt(pP,"lastSyncReqTime",0),zt(pP,"_count",0),zt(pP,"syncInterval",6e4),zt(pP,"delayCount",0),zt(pP,"syncCallback",null),zt(pP,"requestPending",!1);
+ Vt(fN,"ServerTimeManager"),Kt(fN,"serverTime",-1),Kt(fN,"timeOffset",0),Kt(fN,"lastLocalTime",0),Kt(fN,"syncThreshold",1e3),Kt(fN,"oldDate",new Date(-1)),Kt(fN,"newDate",new Date(-1)),Kt(fN,"oldServerTime",-1),Kt(fN,"lastSyncReqTime",0),Kt(fN,"_count",0),Kt(fN,"syncInterval",6e4),Kt(fN,"delayCount",0),Kt(fN,"syncCallback",null),Kt(fN,"requestPending",!1);
RequestManager 2 hunks, 2 statements
- n.success=!1,"object"==typeof n.header.errorInfo.message?(n.error=n.header.errorInfo.message.error||"UNKNOWN",n.errorMessageFromServer=n.header.errorInfo.message.message||"UNKNOWN"):(n.error=n.header.errorInfo.message,n.errorMessageFromServer=n.header.errorInfo.message);
+ n.success=!1,"object"==typeof n.header.errorInfo.message?(n.error=n.header.errorInfo.message.error||"UNKNOWN",n.errorMessageFromServer=n.header.errorInfo.message.message||"UNKNOWN"):(n.error=n.header.errorInfo.message,n.errorMessageFromServer=n.header.errorInfo.message),n.errorAdditional=n.header.errorInfo.additional||null;
- const s=hP.I();
+ const s=nN.O();
GameSpeedMode 1 hunks, 2 statements
- get:()=>h?o()?Number(s^n):(hP.O(t),r):r,set(i){
- isFinite(i)&&(h&&!o()&&hP.O(t),a(i))}
+ get:()=>h?o()?Number(s^n):(nN.I(t),r):r,set(i){
+ isFinite(i)&&(h&&!o()&&nN.I(t),a(i))}
HammerKnight1 2 hunks, 2 statements
- this.doMeleeAttack(this.target,s),null!=this.target&&this.target.isAlive&&this.target.stun(h);
+ this.doMeleeAttack(this.target,s),null!=this.target&&this.target.isAlive&&this.target.stun(h,this);
- for(const l of a)if(null!=l&&l!==this.target&&(this.doDamage(l,.3),l.isAlive&&this.random.chance(e)&&l.stun(n),c++,c>=3))break}
+ for(const l of a)if(null!=l&&l!==this.target&&(this.doDamage(l,.3),l.isAlive&&this.random.chance(e)&&l.stun(n,this),c++,c>=3))break}
GreatHammer1 2 hunks, 2 statements
- this.random.chance(t?.4:.2)&&this.target.stun(t?40:30)}
+ this.random.chance(t?.4:.2)&&this.target.stun(t?40:30,this)}
- for(const e of i)if(null!=e&&e!=this.target&&(this.doDamage(e,t?.7:.5),e.isAlive&&this.random.chance(.6)&&e.stun(60),s++,s>4))return}
+ for(const e of i)if(null!=e&&e!=this.target&&(this.doDamage(e,t?.7:.5),e.isAlive&&this.random.chance(.6)&&e.stun(60,this),s++,s>4))return}
ElfArcher1 1 hunks, 2 statements
- this.numShot=3,super.attackMain()}
+ var t;
+ this.numShot=3,super.attackMain(),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(this.evolStage>=1?.4:.25)&&this.target.silence(50,this,!1)}
Priest1 2 hunks, 2 statements
+ var i;
- const u=h.slice().sort((t,i)=>(t.maxHp>0?t.hp/t.maxHp:1)-(i.maxHp>0?i.hp/i.maxHp:1)),d=Math.min(r,u.length);
+ const d=r.slice().sort((t,i)=>(t.maxHp>0?t.hp/t.maxHp:1)-(i.maxHp>0?i.hp/i.maxHp:1)),f=!0===(null==(i=this.battleController)?void 0:i.isRaidBattle)?t.SKILL_MAX_HEAL_TARGETS_RAID:o,p=Math.min(f,d.length);
Ghost1 1 hunks, 2 statements
- this.transparent(this.evolved?90:70)}
+ var t;
+ this.transparent(this.evolved?90:70),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(this.evolved?.45:.3)&&this.target.curse(50,this)}
DarkArcher1 2 hunks, 2 statements
- this.attackIndex++,i&&i.isAlive&&(this.doRangeAttack(i),i.silence(t))}
+ this.attackIndex++,i&&i.isAlive&&(this.doRangeAttack(i),i.silence(t,this))}
- for(const n of e)null!=n&&n.isAlive&&(this.doDamage(n,s),n.isAlive&&n.silence(i))}
+ for(const n of e)null!=n&&n.isAlive&&(this.doDamage(n,s),n.isAlive&&n.silence(i,this))}
DeathKnight1 2 hunks, 2 statements
- this.target&&this.target.isAlive&&this.random.chance(i)&&this.target.curse(s);
+ this.target&&this.target.isAlive&&this.random.chance(i)&&this.target.curse(s,this);
- for(const c of o)if(null!=c&&c!==this.target&&(this.doDamage(c,n),c.isAlive&&this.random.chance(i)&&c.curse(s),a++,a>=h))break}
+ for(const c of o)if(null!=c&&c!==this.target&&(this.doDamage(c,n),c.isAlive&&this.random.chance(i)&&c.curse(s,this),a++,a>=h))break}
Client 2 hunks, 2 statements
- ,parseAs:m="json",querySerializer:w,bodySerializer:v=h??mrt,body:b,...y}
+ ,parseAs:m="json",querySerializer:w,bodySerializer:v=h??V5,body:b,..._}
- redirect:"follow",...a,...y,body:E,headers:A}
+ redirect:"follow",...a,..._,body:E,headers:A}
Bo 2 hunks, 2 statements
-  socket event=reconnect`,i),Cgt(t).catch(t=>{
+  socket event=reconnect`,i),set(t).catch(t=>{
- `,i),t.state.manualDisconnect||(t.emit(ggt.SOCKET_DISCONNECTED),Cgt(t).catch(t=>{
+ `,i),t.state.manualDisconnect||(t.emit(jst.SOCKET_DISCONNECTED),set(t).catch(t=>{
OKXConnectUiError 2 hunks, 2 statements
- ):t[i]=s,"__defNormalProp"),g$t=Kt((t,i)=>{
+ ):t[i]=s,"__defNormalProp$2"),Kxt=Vt((t,i)=>{
- ,"__spreadValues"),m$t=Kt((t,i)=>c$t(t,l$t(i)),"__spreadProps"),w$t=Kt((t,i,s)=>(p$t(t,"symbol"!=typeof i?i+"":i,s),s),"__publicField"),v$t=Kt((t,i,s)=>{
+ ,"__spreadValues"),zxt=Vt((t,i)=>Fxt(t,Hxt(i)),"__spreadProps"),qxt=Vt((t,i,s)=>(Vxt(t,"symbol"!=typeof i?i+"":i,s),s),"__publicField$2"),Yxt=Vt((t,i,s)=>{
TicketDataManager 2 hunks, 2 statements
- kindNum:Number(i.kindNum),type:i.type,targetKindNums:ZI.convertToNumber(i.targetKindNums.split("|"))}
+ kindNum:Number(i.kindNum),type:i.type,targetKindNums:QO.convertToNumber(i.targetKindNums.split("|")),targetAmounts:i.targetAmounts?QO.convertToNumber(i.targetAmounts.split("|")):[]}
- i.targetAmounts&&(t.targetAmounts=ZI.convertToNumber(i.targetAmounts.split("|"))),this.obj[t.kindNum]=t,this.objListWithType[t.type]||(this.objListWithType[t.type]=[]),this.objListWithType[t.type].push(t)}
+ this.obj[t.kindNum]=t,this.objListWithType[t.type]||(this.objListWithType[t.type]=[]),this.objListWithType[t.type].push(t)}
GuildQuestSubView 2 hunks, 2 statements
- const t=TL.getInstance().development,i=[{
+ const t=[{
- type:i8t.GUILD_RAID,name:AG.getText("GAME_630","길드레이드"),desc:t?"":"coming soon",icon:t?"Guild_Quest_Raid":"Guild_Quest_Raid_nor"}
+ type:Jti.GUILD_RAID,name:SG.getText("GAME_630","길드레이드"),desc:"",icon:"Guild_Quest_Raid"}
BattleUIManager 1 hunks, 2 statements
- static getInstance(){
- return t.instance||(t.instance=new t),t.instance}
NpcDialogueToast 1 hunks, 2 statements
- constructor(){
- super(),zt(this,"frameLeft"),zt(this,"frameRight"),zt(this,"npcIcon"),zt(this,"lblName"),zt(this,"lblMessage"),zt(this,"bg"),zt(this,"timeCount",0),zt(this,"isFadingOut",!1),zt(this,"currentPosition",1),zt(this,"queue",[]),zt(this,"textureLoaded",!1),zt(this,"onCompleteHandler",null),this.eventMode="none",this.bg=new QD,this.bg.alpha=.6,this.bg.setIndex(7),this.addChild(this.bg),this.frameLeft=new We,this.addChild(this.frameLeft),this.npcIcon=new We,this.addChild(this.npcIcon),this.lblName=new YD("",16768324,aD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblName),this.lblMessage=new YD("",aD.COLOR_WHITE,aD.DEFAULT_FONT_OPTION_16),this.addChild(this.lblMessage),this.frameRight=new We,this.addChild(this.frameRight)}
GuildBarrackRowVO 2 hunks, 2 statements
- zt(this,"barrackKindNum",0),zt(this,"tribe",0),zt(this,"unitKindNums",[]),zt(this,"plusLevel",[]),zt(this,"counts",[]),zt(this,"awakened",!1),zt(this,"selected",!1),zt(this,"usedByOther",!1),zt(this,"usedByDefense",!1),zt(this,"unlocked",!1),zt(this,"openCost",0),zt(this,"canBoost",!1),zt(this,"canTrainPerStage",[]),zt(this,"trainTimeSec",[]),zt(this,"showBoost",!0)}
+ Kt(this,"barrackKindNum",0),Kt(this,"tribe",0),Kt(this,"unitKindNums",[]),Kt(this,"plusLevel",[]),Kt(this,"counts",[]),Kt(this,"awakened",!1),Kt(this,"selected",!1),Kt(this,"usedByOther",!1),Kt(this,"usedByDefense",!1),Kt(this,"unlocked",!1),Kt(this,"openCost",0),Kt(this,"canBoost",!1),Kt(this,"canTrainPerStage",[]),Kt(this,"trainTimeSec",[]),Kt(this,"showBoost",!0),Kt(this,"raidCcMatched",[])}
- t.barrackKindNum=0,t.tribe=0,t.unitKindNums=[],t.plusLevel=[],t.counts=[],t.awakened=!1,t.selected=!1,t.usedByOther=!1,t.usedByDefense=!1,t.unlocked=!1,t.openCost=0,t.canBoost=!1,t.canTrainPerStage=[],t.trainTimeSec=[],t.showBoost=!0,this.recycleList.push(t)}
+ t.barrackKindNum=0,t.tribe=0,t.unitKindNums=[],t.plusLevel=[],t.counts=[],t.awakened=!1,t.selected=!1,t.usedByOther=!1,t.usedByDefense=!1,t.unlocked=!1,t.openCost=0,t.canBoost=!1,t.canTrainPerStage=[],t.trainTimeSec=[],t.showBoost=!0,t.raidCcMatched=[],this.recycleList.push(t)}
GuildWarTierAssignPopup 2 hunks, 2 statements
- const i=[...ED.memberList??[]].sort((t,i)=>i.roleLevel!==t.roleLevel?i.roleLevel-t.roleLevel:(i.wave??0)-(t.wave??0));
+ const i=[...AD.memberList??[]].sort((t,i)=>i.roleLevel!==t.roleLevel?i.roleLevel-t.roleLevel:(i.wave??0)-(t.wave??0));
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
AppsFlyerManager 2 hunks, 2 statements
- if("capacitor"==t.envPlatform&&!TL.getInstance().development&&!qA.isAppBundleVersionLessThan("1.1.0")&&!this.isInitialized)try{
+ if("capacitor"==t.envPlatform&&!zA.isAppBundleVersionLessThan("1.1.0")&&!this.isInitialized)try{
- t&&t.data&&this.handleConversionData(t.data)}
+ t&&t.data&&(this.handleConversionData(t.data),AL.getInstance().setConversionData(t),cS.getInstance().dispatchCustomEvent("AfConversionData"))}
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,y,_,M,E,A,S,T,C,k,O,I,x,N,P,R,D,L,G,B,U,F,H,W,j,$,V,K,z,q,X,Y,J,Q,Z,tt,it,st,et,nt,ht,rt,ot,at,ct,lt,ut,dt,ft,pt,gt,mt,wt,vt,bt,yt,_t,Mt,Et,At,St,Tt,Ct,kt,Ot,It,xt,Nt,Pt,Rt,Dt,Lt,Gt,Bt,Ut,Ft,Ht,Wt,jt,$t,Vt=Object.defineProperty,Kt=(t,i)=>Vt(t,"name",{
+ var t,i,s,e,n,h,r,o,a,c,l,u,d,f,p,g,m,w,v,b,_,y,M,E,A,S,T,C,I,k,O,x,R,N,P,D,L,G,B,U,F,H,W,$,j,V,K,z,q,Y,X,J,Q,Z,tt,it,st,et,nt,ht,rt,ot,at,ct,lt,ut,dt,ft,pt,gt,mt,wt,vt,bt,_t,yt,Mt,Et,At,St,Tt,Ct,It,kt,Ot,xt,Rt,Nt,Pt,Dt,Lt,Gt,Bt,Ut,Ft,Ht,Wt,$t,jt=Object.defineProperty,Vt=(t,i)=>jt(t,"name",{
ApplicationInitHook 1 hunks, 1 statements
- const i=[...Xr,...this.config.runners??[]];
+ const i=[...qr,...this.config.runners??[]];
Circle 1 hunks, 1 statements
- ,test:Kt(()=>Promise.resolve(!0),"test"),add:Kt(async t=>[...t,...Co],"add"),remove:Kt(async t=>t.filter(t=>!Co.includes(t)),"remove")}
+ ,test:Vt(()=>Promise.resolve(!0),"test"),add:Vt(async t=>[...t,...To],"add"),remove:Vt(async t=>t.filter(t=>!To.includes(t)),"remove")}
DefaultShader 1 hunks, 1 statements
- name:i,...cc({
+ name:i,...ac({
AssetsClass 1 hunks, 1 statements
- ...gn.defaultOptions,resolution:(null==(e=i.data)?void 0:e.resolution)||Nu(t),alphaMode:(null==(n=i.data)?void 0:n.alphaMode)||await fn(),...i.data}
+ ...pn.defaultOptions,resolution:(null==(e=i.data)?void 0:e.resolution)||xu(t),alphaMode:(null==(n=i.data)?void 0:n.alphaMode)||await dn(),...i.data}
WorkerInstance 1 hunks, 1 statements
- return vd=[...wd,...t],vd}
+ return wd=[...md,...t],wd}
DOMPipe 1 hunks, 1 statements
- return Nd=Rd(i),[...Nd,...t]}
+ return xd=Nd(i),[...xd,...t]}
FilterSystem 1 hunks, 1 statements
- return this._passthroughFilter??(this._passthroughFilter=new af),this._passthroughFilter}
+ return this._passthroughFilter??(this._passthroughFilter=new of),this._passthroughFilter}
AbstractText 1 hunks, 1 statements
- ...k.defaultOptions,...i}
+ ...I.defaultOptions,...i}
BitmapFontManagerClass 1 hunks, 1 statements
- ...N.defaultOptions,...t}
+ ...R.defaultOptions,...t}
HTMLTextStyle 1 hunks, 1 statements
- ...Sg.defaultDropShadow,...t}
+ ...Ag.defaultDropShadow,...t}
GlColorMaskSystem 1 hunks, 1 statements
- ...j.defaultOptions,...t}
+ ...$.defaultOptions,...t}
GlUboSystem 1 hunks, 1 statements
- ...Nb,"mat2x2<f32>":"\n        data[offset] = v[0];
+ ...xb,"mat2x2<f32>":"\n        data[offset] = v[0];
FrameLoopManager 1 hunks, 1 statements
- __proto__:null,AbstractBitmapFont:$g,AbstractRenderer:Zr,AbstractText:Ep,AbstractTextSystem:Gg,AccessibilitySystem:dh,AlphaMask:qe,AlphaMaskPipe:zm,AnimatedSprite:jf,Application:go,ApplicationInitHook:ro,Assets:od,AssetsClass:rd,BLEND_TO_NPM:ba,BREAKING_SPACES:jp,BREAKING_SPACES_SET:$p,BREAK_AFTER_CHARS:zp,BREAK_AFTER_CHARS_SET:qp,BUFFER_TYPE:Kv,BackgroundLoader:Eo,BackgroundSystem:Vw,Batch:Ia,BatchGeometry:qa,BatchTextureArray:ka,BatchableGraphics:Kc,BatchableHTMLText:mm,BatchableMesh:Hf,BatchableSprite:Og,BatchableText:xg,Batcher:Ga,BatcherPipe:Fm,BigPool:Ks,BindGroup:Zh,BindGroupSystem:i_,BitmapFont:OM,BitmapFontManager:tm,BlendModePipe:Pw,Bounds:rs,BrowserAdapter:Ze,Buffer:Ua,BufferImageSource:Qi,BufferResource:jb,BufferUsage:Ba,CLEAR:Kr,COLLAPSIBLE_SPACES:Vp,COLLAPSIBLE_SPACES_SET:Kp,Cache:vn,CanvasBatchAdaptor:Pm,CanvasColorMaskPipe:Xm,CanvasContextSystem:cw,CanvasGraphicsAdaptor:kw,CanvasGraphicsContextSystem:kf,CanvasGraphicsPipe:If,CanvasLimitsSystem:uw,CanvasNineSliceSpritePipe:bM,CanvasObserver:jn,CanvasPool:Cp,CanvasPoolClass:Tp,CanvasRenderTargetAdaptor:Nv,CanvasRenderTargetSystem:Rv,CanvasRenderer:$v,CanvasRendererTextSystem:Ug,CanvasSource:nn,CanvasStencilMaskPipe:sw,CanvasTextGenerator:Eg,CanvasTextMetrics:gg,CanvasTextPipe:Pg,CanvasTextSystem:Hg,CanvasTextureSystem:Lv,CanvasTilingSpritePipe:tp,Circle:na,Color:Bs,ColorMask:Ye,ColorMaskPipe:Jm,ColorMatrixFilter:nf,CompressedSource:fd,Container:Be,CustomRenderPipe:fw,DEG_TO_RAD:pi,DOMAdapter:sn,DOMPipe:Ld,DefaultBatcher:Bc,DefaultShader:Dc,DynamicBitmapFont:Kg,Ellipse:ra,EventBoundary:qd,EventEmitter:li,EventSystem:Jd,EventsTicker:Bd,ExtensionType:Qt,ExtractSystem:qw,FederatedContainer:Qd,FederatedEvent:Vn,FederatedMouseEvent:Fd,FederatedPointerEvent:Wd,FederatedWheelEvent:$d,FillGradient:cl,FillPattern:gu,Filter:or,FilterEffect:Qs,FilterPipe:lf,FilterSystem:wf,FontStylePromiseCache:Em,GCManagedHash:Fc,GCSystem:hv,GL_FORMATS:ib,GL_TARGETS:sb,GL_TYPES:eb,GPUTextureGpuData:tM,GenerateTextureSystem:iv,Geometry:$a,GlBackBufferSystem:fb,GlBatchAdaptor:Dm,GlBuffer:qv,GlBufferSystem:Yv,GlColorMaskSystem:gb,GlContextSystem:Qv,GlEncoderSystem:wb,GlGeometryGpuData:ab,GlGeometrySystem:lb,GlGraphicsAdaptor:Wy,GlLimitsSystem:bb,GlMeshAdaptor:$y,GlProgram:xh,GlProgramData:Kb,GlRenderTarget:_b,GlRenderTargetAdaptor:Ub,GlRenderTargetSystem:Hb,GlShaderSystem:cy,GlStateSystem:wy,GlStencilSystem:Ab,GlTexture:by,GlTextureSystem:Fy,GlUboSystem:Gb,GlUniformGroupSystem:py,GlobalResourceRegistry:Ws,GlobalUniformSystem:ov,GpuBatchAdaptor:Bm,GpuBlendModesToPixi:F_,GpuBufferData:e_,GpuBufferSystem:h_,GpuColorMaskSystem:c_,GpuDeviceSystem:u_,GpuEncoderSystem:f_,GpuGraphicsAdaptor:nM,GpuGraphicsContext:Al,GpuLimitsSystem:g_,GpuMeshAdapter:rM,GpuMipmapGenerator:Q_,GpuProgram:Kh,GpuRenderTarget:P_,GpuRenderTargetAdaptor:D_,GpuRenderTargetSystem:G_,GpuShaderSystem:U_,GpuStateSystem:W_,GpuStencilModesToPixi:Mb,GpuStencilSystem:w_,GpuTextureSystem:sM,GpuUboSystem:E_,GpuUniformBatchPipe:T_,Graphics:Gf,GraphicsContext:xu,GraphicsContextRenderData:Tl,GraphicsContextSystem:kl,GraphicsGpuData:Pf,GraphicsPath:Jl,GraphicsPipe:Df,HTMLText:xm,HTMLTextPipe:vm,HTMLTextRenderData:fm,HTMLTextStyle:am,HTMLTextSystem:Om,HelloSystem:pv,ImageSource:rn,InstructionSet:Te,Loader:Lo,LoaderParserPriority:En,MaskEffectManager:ie,MaskEffectManagerClass:te,MaskFilter:Mf,Matrix:bi,MeshGeometry:Uf,NEWLINES:Hp,NEWLINES_SET:Wp,NEWLINE_MATCH_REGEX:Yp,NEWLINE_SPLIT_REGEX:Xp,NOOP:Hi,NineSliceGeometry:_M,NineSliceSprite:CM,NineSliceSpriteGpuData:EM,NineSliceSpritePipe:SM,ObservablePoint:hi,PI_2:di,PassthroughFilter:af,PipelineSystem:x_,PlaneGeometry:wM,Point:mi,Polygon:ca,Pool:js,PoolGroupClass:Vs,QuadGeometry:up,RAD_TO_DEG:fi,Rectangle:Pi,RenderGroup:Ne,RenderGroupPipe:mw,RenderGroupSystem:jw,RenderTarget:yv,RenderTargetSystem:Iv,RenderTexture:Yw,RenderableGCSystem:mv,RendererInitHook:ao,RendererType:tr,ResizePlugin:lo,Resolver:Rn,RoundedRectangle:da,STENCIL_MODES:ya,SVGParser:uu,SchedulerSystem:lv,Shader:sr,ShaderStage:Fh,ShapePath:Xl,SharedRenderPipes:Tv,SharedSystems:Sv,Sprite:We,SpritePipe:Iw,Spritesheet:Bn,State:hr,StencilMask:Qe,StencilMaskPipe:nw,SystemRunner:qr,Text:Wg,TextStyle:Sg,Texture:ss,TextureGCSystem:vv,TextureMatrix:is,TexturePool:Ie,TexturePoolClass:Oe,TextureSource:Yi,TextureStyle:qi,Ticker:dn,TickerListener:cn,TickerPlugin:fo,TilingSprite:_p,TilingSpriteGpuData:wp,TilingSpritePipe:bp,TilingSpriteShader:cp,Transform:Kf,UNIFORM_TO_ARRAY_SETTERS:uy,UNIFORM_TO_SINGLE_SETTERS:ly,UNIFORM_TYPES_MAP:qh,UNIFORM_TYPES_VALUES:zh,UPDATE_BLEND:2,UPDATE_COLOR:1,UPDATE_PRIORITY:on,UPDATE_VISIBLE:4,UboBatch:o_,UboSystem:Tb,UniformGroup:Jh,VERSION:no,VideoSource:gn,ViewContainer:Fe,ViewSystem:Av,ViewableBuffer:wa,WGSL_ALIGN_SIZE_DATA:v_,WGSL_TO_STD40_SIZE:Cb,WebGLRenderer:Qy,WebGPURenderer:pM,WorkerManager:$u,accessibilityTarget:fh,addBits:Xa,addMaskBounds:$e,addMaskLocalBounds:Ve,addProgramDefines:_h,appendSVGPath:lu,applyMatrix:fp,applyStyleParams:Ry,assignWithIgnore:Pe,autoDetectRenderer:eo,bgr2rgb:pe,bitmapFontCachePlugin:yo,bitmapFontTextParser:mo,bitmapFontXMLParser:wo,bitmapFontXMLStringParser:vo,blockDataMap:$_,boundsPool:he,browserExt:si,buildAdaptiveBezier:Il,buildAdaptiveQuadratic:Pl,buildArc:Ll,buildArcTo:Gl,buildArcToSvg:$l,buildCircle:zc,buildContextBatches:bl,buildEllipse:qc,buildLine:tl,buildPixelLine:il,buildPolygon:nl,buildRectangle:hl,buildRoundedRectangle:Xc,buildSimpleUvs:Wc,buildTriangle:rl,buildUvs:Hc,cacheAsTextureMixin:zs,cacheTextureArray:Ao,calculatePathArea:cu,calculateProjection:Cv,canUseNewCanvasBlendModes:qf,canvasUtils:Xf,checkChildrenDidChange:ve,checkDataUrl:Go,checkExtension:Bo,checkForNestedPattern:ou,checkMaxIfStatementsInShader:Aa,childrenHelperMixin:Xs,cleanArray:ev,cleanHash:sv,clearList:Rw,closePointEps:Yc,collapseNewlines:sg,collapseSpaces:ig,collectRenderablesMixin:Ys,color32BitToUniform:xf,colorBit:_c,colorBitGl:Mc,colorMatrixFilterFrag:tf,colorMatrixFilterWgsl:sf,compareModeToGlCompare:Py,compileHighShader:ac,compileHighShaderGl:cc,compileHighShaderGlProgram:yc,compileHighShaderGpuProgram:bc,compileHooks:Ja,compileInputs:Za,compileOutputs:ec,compileShader:zb,convertToList:mn,copySearchParams:Ln,createGlUploadCubeTextureResource:Ay,createGpuUploadCubeTextureResource:q_,createIdFromString:mh,createStringVariations:xn,createTexture:Pu,createUboElementsSTD40:kb,createUboElementsWGSL:b_,createUboSyncFunction:Ib,createUboSyncFunctionSTD40:Db,createUboSyncFunctionWGSL:__,crossOrigin:Qu,cullingMixin:Us,curveEps:1e-4,defaultFilterVert:Zd,defaultValue:Xb,definedProps:$i,deprecation:Fi,detectAvif:To,detectCompressed:Pd,detectDefaults:ko,detectMp4:xo,detectOgv:No,detectVideoAlphaMode:fn,detectWebm:Po,detectWebp:Ro,determineCrossOrigin:td,earcut:Vr,effectsMixin:se,ensureAttributes:Zv,ensureIsBuffer:Fa,ensurePrecision:Mh,ensureTextOptions:Ap,executeInstructions:pw,extensions:ii,extractAttributesFromGlProgram:iy,extractAttributesFromGpuProgram:Bh,extractFontFamilies:ym,extractStructAndGroups:Uh,extractSubpaths:au,extractSvgUrlId:eu,fastCopy:va,findMixin:ee,fontStringFromTextStyle:wg,fragmentGPUTemplate:pc,fragmentGlTemplate:mc,generateArraySyncSTD40:Rb,generateArraySyncWGSL:y_,generateGpuLayoutGroups:Hh,generateLayoutHash:Wh,generateProgram:ry,generateShaderSyncCode:$b,generateTextureBatchBit:Tc,generateTextureBatchBitGl:Oc,generateTextureMatrix:gl,generateUniformsSync:dy,getAdjustedBlendModeBlend:_a,getAttributeInfoFromFormat:Ph,getBatchSamplersUniformGroup:Pc,getBitmapTextLayout:zg,getCanvasBoundingBox:Pp,getCanvasFillStyle:bg,getCanvasTexture:Mv,getCharacterGroups:hg,getDefaultUniformValue:Xh,getFastGlobalBoundsMixin:oe,getFontCss:Am,getFontFamilyName:Vo,getGeometryBounds:Ha,getGlTypeFromFormat:hb,getGlobalBounds:ae,getGlobalMixin:ge,getGlobalRenderableBounds:df,getLocalBounds:me,getMaxFragmentPrecision:yh,getMaxMiterRatio:Cu,getMaxTexturesPerBatch:Ta,getOrientationOfPoints:Jc,getPo2TextureFromSource:Dg,getResolutionOfUrl:Nu,getSVGUrl:Sm,getSupportedCompressedTextureFormats:md,getSupportedGPUCompressedTextureFormats:gd,getSupportedGlCompressedTextureFormats:pd,getSupportedTextureFormats:bd,getTemporaryCanvasFromImage:Tm,getTestContext:bh,getTextureBatchBindGroup:pa,getUboData:sy,getUniformData:ey,getUrlExtension:Dn,glUploadBufferImageResource:yy,glUploadCompressedTextureResource:My,glUploadImageResource:Sy,glUploadVideoResource:Oy,globalUniformsBit:wc,globalUniformsBitGl:vc,gpuUploadBufferImageResource:j_,gpuUploadCompressedTextureResource:K_,gpuUploadImageResource:X_,gpuUploadVideoResource:Y_,groupD8:Ii,hasTagMarkup:Bp,hasTagStyles:Gp,injectBits:nc,insertVersion:Eh,isBreakAfterChar:tg,isBreakingSpace:Qp,isCollapsibleSpace:Zp,isMobile:lh,isNewline:Jp,isPow2:ji,isRenderingToScreen:kv,isSafari:bm,isSingleItem:Nn,isWebGLSupported:to,isWebGPUSupported:io,ktxTranscoderUrls:Ed,loadBitmapFont:_o,loadEnvironmentExtensions:cr,loadFontAsBase64:_m,loadFontCSS:Mm,loadImageBitmap:zu,loadJson:Uo,loadKTX2:Od,loadKTX2onWorker:kd,loadSVGImage:Cm,loadSvg:Ru,loadTextures:qu,loadTxt:Fo,loadVideoTextures:sd,loadWebFont:qo,localUniformBit:ip,localUniformBitGl:ep,localUniformBitGroup2:sp,logProgramError:hy,mapCanvasBlendModesToPixi:rw,mapFormatToGlFormat:Dy,mapFormatToGlInternalFormat:Ly,mapFormatToGlType:Gy,mapGlToVertexFormat:ty,mapType:Zb,mapViewDimensionToGlTarget:By,mapWebGLBlendModesToPixi:gy,maskFrag:vf,maskVert:bf,maskWgsl:yf,matrixPool:ne,measureHtmlText:pm,measureMixin:ye,measureTaggedText:og,mipmapScaleModeToGlFilter:xy,multiplyColors:fe,multiplyHexColors:ue,nextPow2:Wi,nonCompressedFormats:wd,normalizeExtensionPriority:ti,onRenderMixin:_e,parseSVGDefinitions:tu,parseSVGFloatAttribute:Zl,parseSVGPath:sa,parseSVGStyle:hu,parseTaggedText:Fp,passthroughFrag:hf,passthroughWgsl:rf,path:On,preloadVideo:Zu,removeItems:qs,removeStructAndGroupDuplicates:jh,resolveCharacters:Jg,resolveCompressedTextureUrl:xd,resolveJsonUrl:nd,resolveTextureUrl:ed,resourceToTexture:_n,roundPixelsBit:Ic,roundPixelsBitGl:xc,roundedShapeArc:Vl,roundedShapeQuadraticCurve:Kl,sayHello:dv,scaleModeToGlFilter:Iy,setPositions:dp,setProgramName:Th,setUvs:pp,shapeBuilders:ml,sortMixin:Me,spritesheetAsset:Hn,squaredDistanceToLineSegment:oa,stripVersion:Ch,styleAttributes:nu,testImageFormat:So,testVideoFormat:Io,textStyleToCSS:im,textureBit:Hm,textureBitGl:Wm,textureFrom:Mn,tilingBit:np,tilingBitGl:hp,toFillStyle:Su,toLocalGlobalMixin:Ae,toStrokeStyle:Tu,tokenize:ng,tokenizeTaggedRuns:cg,transformVertices:jc,triangulateWithHoles:sl,trimRight:eg,uboSyncFunctionsSTD40:Nb,uboSyncFunctionsWGSL:Pb,uid:Di,uniformParsers:Ob,unsafeEvalSupported:ur,updateQuadBounds:es,updateRenderGroupTransform:Gw,updateRenderGroupTransforms:Lw,updateTextBounds:Cg,updateTransformAndChildren:Bw,updateTransformBackwards:le,v8_0_0:Gi,v8_3_4:Bi,validFormats:Id,validateRenderables:Fw,vertexGPUTemplate:fc,vertexGlTemplate:gc,warn:Hs,webworkerExt:ei,wordWrap:dg,wordWrapTaggedLines:ag,wrapModeToGlAddress:Ny}
+ __proto__:null,AbstractBitmapFont:$g,AbstractRenderer:Qr,AbstractText:Mp,AbstractTextSystem:Lg,AccessibilitySystem:uh,AlphaMask:ze,AlphaMaskPipe:Km,AnimatedSprite:Wf,Application:po,ApplicationInitHook:ho,Assets:rd,AssetsClass:hd,BLEND_TO_NPM:va,BREAKING_SPACES:Wp,BREAKING_SPACES_SET:$p,BREAK_AFTER_CHARS:Kp,BREAK_AFTER_CHARS_SET:zp,BUFFER_TYPE:Vv,BackgroundLoader:Mo,BackgroundSystem:jw,Batch:ka,BatchGeometry:za,BatchTextureArray:Ca,BatchableGraphics:Vc,BatchableHTMLText:gm,BatchableMesh:Ff,BatchableSprite:Ig,BatchableText:Og,Batcher:La,BatcherPipe:Um,BigPool:Vs,BindGroup:Qh,BindGroupSystem:ty,BitmapFont:IM,BitmapFontManager:Zg,BlendModePipe:Rw,Bounds:hs,BrowserAdapter:Qe,Buffer:Ba,BufferImageSource:Ji,BufferResource:Wb,BufferUsage:Ga,CLEAR:Vr,COLLAPSIBLE_SPACES:jp,COLLAPSIBLE_SPACES_SET:Vp,Cache:wn,CanvasBatchAdaptor:Rm,CanvasColorMaskPipe:qm,CanvasContextSystem:aw,CanvasGraphicsAdaptor:Cw,CanvasGraphicsContextSystem:Cf,CanvasGraphicsPipe:kf,CanvasLimitsSystem:lw,CanvasNineSliceSpritePipe:vM,CanvasObserver:Wn,CanvasPool:Tp,CanvasPoolClass:Sp,CanvasRenderTargetAdaptor:xv,CanvasRenderTargetSystem:Nv,CanvasRenderer:$v,CanvasRendererTextSystem:Bg,CanvasSource:en,CanvasStencilMaskPipe:iw,CanvasTextGenerator:Mg,CanvasTextMetrics:pg,CanvasTextPipe:Rg,CanvasTextSystem:Fg,CanvasTextureSystem:Dv,CanvasTilingSpritePipe:Zf,Circle:ea,Color:Gs,ColorMask:Ye,ColorMaskPipe:Xm,ColorMatrixFilter:ef,CompressedSource:dd,Container:Ge,CustomRenderPipe:dw,DEG_TO_RAD:fi,DOMAdapter:tn,DOMPipe:Dd,DefaultBatcher:Gc,DefaultShader:Pc,DynamicBitmapFont:Vg,Ellipse:ha,EventBoundary:zd,EventEmitter:ci,EventSystem:Xd,EventsTicker:Gd,ExtensionType:Jt,ExtractSystem:zw,FederatedContainer:Jd,FederatedEvent:jn,FederatedMouseEvent:Ud,FederatedPointerEvent:Hd,FederatedWheelEvent:$d,FillGradient:al,FillPattern:pu,Filter:rr,FilterEffect:Js,FilterPipe:cf,FilterSystem:mf,FontStylePromiseCache:Mm,GCManagedHash:Uc,GCSystem:nv,GL_FORMATS:tb,GL_TARGETS:ib,GL_TYPES:sb,GPUTextureGpuData:Zy,GenerateTextureSystem:tv,Geometry:$a,GlBackBufferSystem:db,GlBatchAdaptor:Pm,GlBuffer:zv,GlBufferSystem:Yv,GlColorMaskSystem:pb,GlContextSystem:Jv,GlEncoderSystem:mb,GlGeometryGpuData:ob,GlGeometrySystem:cb,GlGraphicsAdaptor:H_,GlLimitsSystem:vb,GlMeshAdaptor:$_,GlProgram:Oh,GlProgramData:Vb,GlRenderTarget:_b,GlRenderTargetAdaptor:Bb,GlRenderTargetSystem:Fb,GlShaderSystem:a_,GlStateSystem:m_,GlStencilSystem:Eb,GlTexture:v_,GlTextureSystem:U_,GlUboSystem:Lb,GlUniformGroupSystem:f_,GlobalResourceRegistry:Hs,GlobalUniformSystem:rv,GpuBatchAdaptor:Gm,GpuBlendModesToPixi:Uy,GpuBufferData:sy,GpuBufferSystem:ny,GpuColorMaskSystem:ay,GpuDeviceSystem:ly,GpuEncoderSystem:dy,GpuGraphicsAdaptor:eM,GpuGraphicsContext:El,GpuLimitsSystem:py,GpuMeshAdapter:hM,GpuMipmapGenerator:Jy,GpuProgram:Vh,GpuRenderTarget:Ry,GpuRenderTargetAdaptor:Py,GpuRenderTargetSystem:Ly,GpuShaderSystem:By,GpuStateSystem:Hy,GpuStencilModesToPixi:yb,GpuStencilSystem:my,GpuTextureSystem:iM,GpuUboSystem:My,GpuUniformBatchPipe:Sy,Graphics:Lf,GraphicsContext:Ou,GraphicsContextRenderData:Sl,GraphicsContextSystem:Cl,GraphicsGpuData:Rf,GraphicsPath:Xl,GraphicsPipe:Pf,HTMLText:Om,HTMLTextPipe:wm,HTMLTextRenderData:dm,HTMLTextStyle:om,HTMLTextSystem:Im,HelloSystem:fv,ImageSource:hn,InstructionSet:Se,Loader:Do,LoaderParserPriority:Mn,MaskEffectManager:te,MaskEffectManagerClass:Zs,MaskFilter:yf,Matrix:vi,MeshGeometry:Bf,NEWLINES:Fp,NEWLINES_SET:Hp,NEWLINE_MATCH_REGEX:Yp,NEWLINE_SPLIT_REGEX:qp,NOOP:Fi,NineSliceGeometry:_M,NineSliceSprite:TM,NineSliceSpriteGpuData:MM,NineSliceSpritePipe:AM,ObservablePoint:ni,PI_2:ui,PassthroughFilter:of,PipelineSystem:Oy,PlaneGeometry:mM,Point:gi,Polygon:aa,Pool:Ws,PoolGroupClass:js,QuadGeometry:lp,RAD_TO_DEG:di,Rectangle:Ri,RenderGroup:xe,RenderGroupPipe:gw,RenderGroupSystem:Ww,RenderTarget:bv,RenderTargetSystem:kv,RenderTexture:Yw,RenderableGCSystem:gv,RendererInitHook:oo,RendererType:Zh,ResizePlugin:co,Resolver:Nn,RoundedRectangle:ua,STENCIL_MODES:ba,SVGParser:lu,SchedulerSystem:cv,Shader:ir,ShaderStage:Uh,ShapePath:ql,SharedRenderPipes:Sv,SharedSystems:Av,Sprite:He,SpritePipe:kw,Spritesheet:Gn,State:nr,StencilMask:Je,StencilMaskPipe:ew,SystemRunner:zr,Text:Hg,TextStyle:Ag,Texture:is,TextureGCSystem:wv,TextureMatrix:ts,TexturePool:ke,TexturePoolClass:Ie,TextureSource:Yi,TextureStyle:zi,Ticker:un,TickerListener:an,TickerPlugin:uo,TilingSprite:_p,TilingSpriteGpuData:mp,TilingSpritePipe:vp,TilingSpriteShader:ap,Transform:Vf,UNIFORM_TO_ARRAY_SETTERS:l_,UNIFORM_TO_SINGLE_SETTERS:c_,UNIFORM_TYPES_MAP:zh,UNIFORM_TYPES_VALUES:Kh,UPDATE_BLEND:2,UPDATE_COLOR:1,UPDATE_PRIORITY:rn,UPDATE_VISIBLE:4,UboBatch:ry,UboSystem:Sb,UniformGroup:Xh,VERSION:eo,VideoSource:pn,ViewContainer:Ue,ViewSystem:Ev,ViewableBuffer:ma,WGSL_ALIGN_SIZE_DATA:wy,WGSL_TO_STD40_SIZE:Tb,WebGLRenderer:J_,WebGPURenderer:fM,WorkerManager:$u,accessibilityTarget:dh,addBits:qa,addMaskBounds:$e,addMaskLocalBounds:je,addProgramDefines:_h,appendSVGPath:cu,applyMatrix:dp,applyStyleParams:N_,assignWithIgnore:Re,autoDetectRenderer:so,bgr2rgb:fe,bitmapFontCachePlugin:bo,bitmapFontTextParser:go,bitmapFontXMLParser:mo,bitmapFontXMLStringParser:wo,blockDataMap:$y,boundsPool:ne,browserExt:ii,buildAdaptiveBezier:kl,buildAdaptiveQuadratic:Rl,buildArc:Dl,buildArcTo:Ll,buildArcToSvg:$l,buildCircle:Kc,buildContextBatches:vl,buildEllipse:zc,buildLine:Zc,buildPixelLine:tl,buildPolygon:el,buildRectangle:nl,buildRoundedRectangle:qc,buildSimpleUvs:Hc,buildTriangle:hl,buildUvs:Fc,cacheAsTextureMixin:Ks,cacheTextureArray:Eo,calculatePathArea:au,calculateProjection:Tv,canUseNewCanvasBlendModes:zf,canvasUtils:qf,checkChildrenDidChange:we,checkDataUrl:Lo,checkExtension:Go,checkForNestedPattern:ru,checkMaxIfStatementsInShader:Ea,childrenHelperMixin:qs,cleanArray:sv,cleanHash:iv,clearList:Nw,closePointEps:Yc,collapseNewlines:ig,collapseSpaces:tg,collectRenderablesMixin:Ys,color32BitToUniform:Of,colorBit:_c,colorBitGl:yc,colorMatrixFilterFrag:Zd,colorMatrixFilterWgsl:tf,compareModeToGlCompare:R_,compileHighShader:oc,compileHighShaderGl:ac,compileHighShaderGlProgram:bc,compileHighShaderGpuProgram:vc,compileHooks:Xa,compileInputs:Qa,compileOutputs:sc,compileShader:Kb,convertToList:gn,copySearchParams:Dn,createGlUploadCubeTextureResource:E_,createGpuUploadCubeTextureResource:zy,createIdFromString:gh,createStringVariations:On,createTexture:Ru,createUboElementsSTD40:Cb,createUboElementsWGSL:vy,createUboSyncFunction:kb,createUboSyncFunctionSTD40:Pb,createUboSyncFunctionWGSL:_y,crossOrigin:Ju,cullingMixin:Bs,curveEps:1e-4,defaultFilterVert:Qd,defaultValue:qb,definedProps:$i,deprecation:Ui,detectAvif:So,detectCompressed:Rd,detectDefaults:Co,detectMp4:Oo,detectOgv:xo,detectVideoAlphaMode:dn,detectWebm:Ro,detectWebp:No,determineCrossOrigin:Zu,earcut:jr,effectsMixin:ie,ensureAttributes:Qv,ensureIsBuffer:Ua,ensurePrecision:yh,ensureTextOptions:Ep,executeInstructions:fw,extensions:ti,extractAttributesFromGlProgram:t_,extractAttributesFromGpuProgram:Gh,extractFontFamilies:bm,extractStructAndGroups:Bh,extractSubpaths:ou,extractSvgUrlId:su,fastCopy:wa,findMixin:se,fontStringFromTextStyle:mg,fragmentGPUTemplate:fc,fragmentGlTemplate:gc,generateArraySyncSTD40:Nb,generateArraySyncWGSL:by,generateGpuLayoutGroups:Fh,generateLayoutHash:Hh,generateProgram:h_,generateShaderSyncCode:$b,generateTextureBatchBit:Sc,generateTextureBatchBitGl:Ic,generateTextureMatrix:pl,generateUniformsSync:u_,getAdjustedBlendModeBlend:_a,getAttributeInfoFromFormat:Rh,getBatchSamplersUniformGroup:Rc,getBitmapTextLayout:Kg,getCanvasBoundingBox:Rp,getCanvasFillStyle:vg,getCanvasTexture:yv,getCharacterGroups:ng,getDefaultUniformValue:qh,getFastGlobalBoundsMixin:re,getFontCss:Em,getFontFamilyName:jo,getGeometryBounds:Fa,getGlTypeFromFormat:nb,getGlobalBounds:oe,getGlobalMixin:pe,getGlobalRenderableBounds:uf,getLocalBounds:ge,getMaxFragmentPrecision:bh,getMaxMiterRatio:Tu,getMaxTexturesPerBatch:Sa,getOrientationOfPoints:Xc,getPo2TextureFromSource:Pg,getResolutionOfUrl:xu,getSVGUrl:Am,getSupportedCompressedTextureFormats:gd,getSupportedGPUCompressedTextureFormats:pd,getSupportedGlCompressedTextureFormats:fd,getSupportedTextureFormats:vd,getTemporaryCanvasFromImage:Sm,getTestContext:vh,getTextureBatchBindGroup:fa,getUboData:i_,getUniformData:s_,getUrlExtension:Pn,glUploadBufferImageResource:b_,glUploadCompressedTextureResource:y_,glUploadImageResource:A_,glUploadVideoResource:I_,globalUniformsBit:mc,globalUniformsBitGl:wc,gpuUploadBufferImageResource:Wy,gpuUploadCompressedTextureResource:Vy,gpuUploadImageResource:qy,gpuUploadVideoResource:Yy,groupD8:ki,hasTagMarkup:Gp,hasTagStyles:Lp,injectBits:ec,insertVersion:Mh,isBreakAfterChar:Zp,isBreakingSpace:Jp,isCollapsibleSpace:Qp,isMobile:ch,isNewline:Xp,isPow2:Wi,isRenderingToScreen:Cv,isSafari:vm,isSingleItem:xn,isWebGLSupported:Zr,isWebGPUSupported:to,ktxTranscoderUrls:Md,loadBitmapFont:_o,loadEnvironmentExtensions:ar,loadFontAsBase64:_m,loadFontCSS:ym,loadImageBitmap:Ku,loadJson:Bo,loadKTX2:Id,loadKTX2onWorker:Cd,loadSVGImage:Tm,loadSvg:Nu,loadTextures:zu,loadTxt:Uo,loadVideoTextures:id,loadWebFont:zo,localUniformBit:tp,localUniformBitGl:sp,localUniformBitGroup2:ip,logProgramError:n_,mapCanvasBlendModesToPixi:hw,mapFormatToGlFormat:P_,mapFormatToGlInternalFormat:D_,mapFormatToGlType:L_,mapGlToVertexFormat:Zb,mapType:Qb,mapViewDimensionToGlTarget:G_,mapWebGLBlendModesToPixi:p_,maskFrag:wf,maskVert:vf,maskWgsl:bf,matrixPool:ee,measureHtmlText:fm,measureMixin:be,measureTaggedText:rg,mipmapScaleModeToGlFilter:O_,multiplyColors:de,multiplyHexColors:le,nextPow2:Hi,nonCompressedFormats:md,normalizeExtensionPriority:Zt,onRenderMixin:_e,parseSVGDefinitions:Zl,parseSVGFloatAttribute:Ql,parseSVGPath:ia,parseSVGStyle:nu,parseTaggedText:Up,passthroughFrag:nf,passthroughWgsl:hf,path:In,preloadVideo:Qu,removeItems:zs,removeStructAndGroupDuplicates:Wh,resolveCharacters:Xg,resolveCompressedTextureUrl:Od,resolveJsonUrl:ed,resolveTextureUrl:sd,resourceToTexture:_n,roundPixelsBit:kc,roundPixelsBitGl:Oc,roundedShapeArc:jl,roundedShapeQuadraticCurve:Vl,sayHello:uv,scaleModeToGlFilter:k_,setPositions:up,setProgramName:Sh,setUvs:fp,shapeBuilders:gl,sortMixin:ye,spritesheetAsset:Fn,squaredDistanceToLineSegment:ra,stripVersion:Th,styleAttributes:eu,testImageFormat:Ao,testVideoFormat:ko,textStyleToCSS:tm,textureBit:Fm,textureBitGl:Hm,textureFrom:yn,tilingBit:ep,tilingBitGl:np,toFillStyle:Au,toLocalGlobalMixin:Ee,toStrokeStyle:Su,tokenize:eg,tokenizeTaggedRuns:ag,transformVertices:Wc,triangulateWithHoles:il,trimRight:sg,uboSyncFunctionsSTD40:xb,uboSyncFunctionsWGSL:Rb,uid:Pi,uniformParsers:Ib,unsafeEvalSupported:lr,updateQuadBounds:ss,updateRenderGroupTransform:Lw,updateRenderGroupTransforms:Dw,updateTextBounds:Tg,updateTransformAndChildren:Gw,updateTransformBackwards:ce,v8_0_0:Li,v8_3_4:Gi,validFormats:kd,validateRenderables:Uw,vertexGPUTemplate:dc,vertexGlTemplate:pc,warn:Fs,webworkerExt:si,wordWrap:ug,wordWrapTaggedLines:og,wrapModeToGlAddress:x_}
VersionManager 1 hunks, 1 statements
- Kt(zA,"VersionManager"),zt(zA,"gameId","ef2"),zt(zA,"appVersion","1.11.83");
+ Vt(KA,"VersionManager"),Kt(KA,"gameId","ef2"),Kt(KA,"appVersion","1.12.74");
UnitDataManager 1 hunks, 1 statements
- e.className=n,e.name=s.name,e.tribe=Number(s.tribe),e.grade=Number(s.grade),e.evolKindNum=Number(s.evolKindNum),e.dmgType="P"==s.dmgType?nx.PHYSICAL:nx.MAGICAL,e.isAir="Y"==s.isAir,e.unitType="melee"==s.unitType?sx.MELEE:sx.RANGE,e.numBlock=Number(s.numBlock),e.atkDmg=Number(s.atkDmg),e.def=Number(s.def),e.phyDef=Number(s.phyDef)||0,e.magDef=Number(s.magDef)||0,e.hp=Number(s.hp),e.atkSpd=Number(s.atkSpd),e.moveSpd=Number(s.moveSpd),e.atkRange=Number(s.atkRange),e.magicShield=Number(s.magicShield),e.physicalShield=Number(s.physicalShield),e.numRevive=Number(s.numRevive),e.reviveTime=Number(s.reviveTime),e.recovery=Number(s.recovery),e.sex=s.sex,e.detect="Y"==s.detect,e.cloaking="Y"==s.cloaking,e.canPurchase="Y"==s.canPurchase,e.honor=Number(s.honor)||0,e.nAtk=s.nAtk??"",e.sAtk=s.sAtk??"",e.goldBuffIds=s.goldBuffs?s.goldBuffs.split("|").map(Number):[],e.goldBuffValues=s.goldBuffValues?s.goldBuffValues.split("|").map(Number):[],e.uniqueSkill=s.uniqueSkill??0,e.stunImmune="Y"==s.stunImmune,e.freezeImmune="Y"==s.freezeImmune,e.blowImmune="Y"==s.blowImmune,e.knockImmune="Y"==s.knockImmune,e.weight=s.weight??1,e.maxTrans=Number(s.trans)||0;
+ e.className=n,e.name=s.name,e.tribe=Number(s.tribe),e.grade=Number(s.grade),e.evolKindNum=Number(s.evolKindNum),e.dmgType="P"==s.dmgType?ex.PHYSICAL:ex.MAGICAL,e.isAir="Y"==s.isAir,e.unitType="melee"==s.unitType?ix.MELEE:ix.RANGE,e.numBlock=Number(s.numBlock),e.atkDmg=Number(s.atkDmg),e.def=Number(s.def),e.phyDef=Number(s.phyDef)||0,e.magDef=Number(s.magDef)||0,e.hp=Number(s.hp),e.atkSpd=Number(s.atkSpd),e.moveSpd=Number(s.moveSpd),e.atkRange=Number(s.atkRange),e.magicShield=Number(s.magicShield),e.physicalShield=Number(s.physicalShield),e.numRevive=Number(s.numRevive),e.reviveTime=Number(s.reviveTime),e.recovery=Number(s.recovery),e.sex=s.sex,e.detect="Y"==s.detect,e.cloaking="Y"==s.cloaking,e.canPurchase="Y"==s.canPurchase,e.honor=Number(s.honor)||0,e.nAtk=s.nAtk??"",e.sAtk=s.sAtk??"",e.goldBuffIds=s.goldBuffs?s.goldBuffs.split("|").map(Number):[],e.goldBuffValues=s.goldBuffValues?s.goldBuffValues.split("|").map(Number):[],e.uniqueSkill=s.uniqueSkill??0,e.stunImmune="Y"==s.stunImmune,e.freezeImmune="Y"==s.freezeImmune,e.blowImmune="Y"==s.blowImmune,e.knockImmune="Y"==s.knockImmune,e.weight=s.weight??1,e.raidCc="string"==typeof s.raidCc&&s.raidCc.length>0?s.raidCc.split("|").filter(Boolean):[],e.maxTrans=Number(s.trans)||0;
UnitBookVO 1 hunks, 1 statements
- zt(this,"kindNum",0),zt(this,"className",ox.ElfTown5),zt(this,"name",""),zt(this,"tribe",0),zt(this,"grade",0),zt(this,"evolKindNum",0),zt(this,"dmgType",nx.PHYSICAL),zt(this,"isAir",!1),zt(this,"unitType",sx.MELEE),zt(this,"numBlock",0),zt(this,"atkDmg",0),zt(this,"def",0),zt(this,"phyDef",0),zt(this,"magDef",0),zt(this,"hp",0),zt(this,"atkSpd",0),zt(this,"moveSpd",0),zt(this,"atkRange",0),zt(this,"magicShield",0),zt(this,"physicalShield",0),zt(this,"numRevive",0),zt(this,"reviveTime",0),zt(this,"recovery",0),zt(this,"level",0),zt(this,"enhance",0),zt(this,"id",99999),zt(this,"sex",rx.MALE),zt(this,"detect",!1),zt(this,"cloaking",!1),zt(this,"canPurchase",!1),zt(this,"honor",0),zt(this,"base",0),zt(this,"evolStage",0),zt(this,"nAtk",""),zt(this,"sAtk",""),zt(this,"goldBuffIds",[]),zt(this,"goldBuffValues",[]),zt(this,"uniqueSkill",0),zt(this,"stunImmune",!1),zt(this,"freezeImmune",!1),zt(this,"blowImmune",!1),zt(this,"knockImmune",!1),zt(this,"weight",1),zt(this,"maxTrans",0),zt(this,"transMaterials",[[],[],[]])}
+ Kt(this,"kindNum",0),Kt(this,"className",rx.ElfTown5),Kt(this,"name",""),Kt(this,"tribe",0),Kt(this,"grade",0),Kt(this,"evolKindNum",0),Kt(this,"dmgType",ex.PHYSICAL),Kt(this,"isAir",!1),Kt(this,"unitType",ix.MELEE),Kt(this,"numBlock",0),Kt(this,"atkDmg",0),Kt(this,"def",0),Kt(this,"phyDef",0),Kt(this,"magDef",0),Kt(this,"hp",0),Kt(this,"atkSpd",0),Kt(this,"moveSpd",0),Kt(this,"atkRange",0),Kt(this,"magicShield",0),Kt(this,"physicalShield",0),Kt(this,"numRevive",0),Kt(this,"reviveTime",0),Kt(this,"recovery",0),Kt(this,"level",0),Kt(this,"enhance",0),Kt(this,"id",99999),Kt(this,"sex",hx.MALE),Kt(this,"detect",!1),Kt(this,"cloaking",!1),Kt(this,"canPurchase",!1),Kt(this,"honor",0),Kt(this,"base",0),Kt(this,"evolStage",0),Kt(this,"nAtk",""),Kt(this,"sAtk",""),Kt(this,"goldBuffIds",[]),Kt(this,"goldBuffValues",[]),Kt(this,"uniqueSkill",0),Kt(this,"stunImmune",!1),Kt(this,"freezeImmune",!1),Kt(this,"blowImmune",!1),Kt(this,"knockImmune",!1),Kt(this,"weight",1),Kt(this,"raidCc",[]),Kt(this,"maxTrans",0),Kt(this,"transMaterials",[[],[],[]])}
TreasureBuffAccessor 1 hunks, 1 statements
- ),NN=(t=>(t.Normal="normal",t.Sprite="sprite",t.Dungeon="dungeon",t.GuildPvp="guildpvp",t.Pvp="pvp",t.Tower="tower",t))(NN||{
+ ),xR=(t=>(t.Normal="normal",t.Sprite="sprite",t.Dungeon="dungeon",t.GuildPvp="guildpvp",t.Pvp="pvp",t.Tower="tower",t.Raid="raid",t))(xR||{
DataManager 1 hunks, 1 statements
- zt(this,"system"),zt(this,"account"),zt(this,"user"),zt(this,"mail"),zt(this,"book"),zt(this,"castle"),zt(this,"hero"),zt(this,"quest"),zt(this,"waveCall"),zt(this,"referral"),zt(this,"dailyRanking"),zt(this,"payback"),zt(this,"pvp"),zt(this,"dungeon"),zt(this,"treasure"),zt(this,"achievement"),zt(this,"shop"),zt(this,"ads"),zt(this,"notice"),zt(this,"notice2"),zt(this,"attendance"),zt(this,"pass"),zt(this,"tower"),zt(this,"missionGuide"),zt(this,"promotion"),zt(this,"guild"),zt(this,"guildWar"),zt(this,"guildRaid"),zt(this,"guildDefense"),zt(this,"guildBarracks"),zt(this,"battle"),zt(this,"pet"),zt(this,"petShop"),zt(this,"spirit"),zt(this,"heroPresent"),zt(this,"vip"),zt(this,"miniGame"),zt(this,"assistant"),zt(this,"subscription"),zt(this,"soulRest"),zt(this,"translate"),zt(this,"dailyQuest"),zt(this,"lineNext"),zt(this,"mine"),this.system=new PR,this.account=new _P,this.user=new UR,this.mail=new uR,this.book=new HP,this.castle=new jP,this.hero=new cR,this.quest=new CR,this.waveCall=new ZR,this.dailyRanking=new VP,this.referral=new OR,this.payback=new _R,this.pvp=new SR,this.dungeon=new zP,this.treasure=new GR,this.achievement=new EP,this.shop=new xR,this.ads=new SP,this.notice=new gR,this.notice2=new wR,this.attendance=new GP,this.pass=new bR,this.tower=new DR,this.missionGuide=new fR,this.promotion=new ER,this.guild=new XP,this.guildWar=new iR,this.guildRaid=new eR,this.guildDefense=new hR,this.guildBarracks=new oR,this.battle=new UP,this.pet=new jR,this.petShop=new VR,this.spirit=new XR,this.heroPresent=new HR,this.vip=new JR,this.miniGame=new zR,this.assistant=new CP,this.subscription=new DP,this.soulRest=new OP,this.translate=new xP,this.dailyQuest=new PP,this.lineNext=new iD,this.mine=new eD}
+ Kt(this,"system"),Kt(this,"account"),Kt(this,"user"),Kt(this,"mail"),Kt(this,"book"),Kt(this,"castle"),Kt(this,"hero"),Kt(this,"quest"),Kt(this,"waveCall"),Kt(this,"referral"),Kt(this,"dailyRanking"),Kt(this,"payback"),Kt(this,"pvp"),Kt(this,"dungeon"),Kt(this,"treasure"),Kt(this,"achievement"),Kt(this,"shop"),Kt(this,"ads"),Kt(this,"notice"),Kt(this,"notice2"),Kt(this,"attendance"),Kt(this,"pass"),Kt(this,"tower"),Kt(this,"missionGuide"),Kt(this,"promotion"),Kt(this,"guild"),Kt(this,"guildWar"),Kt(this,"guildRaid"),Kt(this,"rune"),Kt(this,"guildDefense"),Kt(this,"guildBarracks"),Kt(this,"battle"),Kt(this,"pet"),Kt(this,"petShop"),Kt(this,"spirit"),Kt(this,"heroPresent"),Kt(this,"vip"),Kt(this,"miniGame"),Kt(this,"assistant"),Kt(this,"subscription"),Kt(this,"soulRest"),Kt(this,"translate"),Kt(this,"dailyQuest"),Kt(this,"lineNext"),Kt(this,"mine"),this.system=new PP,this.account=new _N,this.user=new FP,this.mail=new dP,this.book=new FN,this.castle=new WN,this.hero=new lP,this.quest=new IP,this.waveCall=new tD,this.dailyRanking=new jN,this.referral=new OP,this.payback=new MP,this.pvp=new TP,this.dungeon=new KN,this.treasure=new BP,this.achievement=new MN,this.shop=new RP,this.ads=new AN,this.notice=new mP,this.notice2=new vP,this.attendance=new LN,this.pass=new _P,this.tower=new LP,this.missionGuide=new pP,this.promotion=new AP,this.guild=new qN,this.guildWar=new tP,this.guildRaid=new sP,this.rune=new nP,this.guildDefense=new rP,this.guildBarracks=new aP,this.battle=new BN,this.pet=new jP,this.petShop=new KP,this.spirit=new XP,this.heroPresent=new WP,this.vip=new QP,this.miniGame=new qP,this.assistant=new TN,this.subscription=new PN,this.soulRest=new IN,this.translate=new ON,this.dailyQuest=new RN,this.lineNext=new sD,this.mine=new nD}
BerialLightningArea 1 hunks, 1 statements
- Kt(XZ,"BerialLightningArea"),zt(XZ,"DURATION_FRAMES",1200),zt(XZ,"RADIUS_X",126),zt(XZ,"RADIUS_Y",77),zt(XZ,"BOLT_INTERVAL",30),zt(XZ,"BOLT_DAMAGE_MIN",.8),zt(XZ,"BOLT_DAMAGE_MAX",1.5),zt(XZ,"VISUAL_SCALE",1.12);
+ Vt(lQ,"BerialLightningArea"),Kt(lQ,"DURATION_FRAMES",1200),Kt(lQ,"RADIUS_X",126),Kt(lQ,"RADIUS_Y",77),Kt(lQ,"BOLT_INTERVAL",30),Kt(lQ,"BOLT_DAMAGE_MIN",.4),Kt(lQ,"BOLT_DAMAGE_MAX",.7),Kt(lQ,"VISUAL_SCALE",1.12);
WeaponFactory 1 hunks, 1 statements
- [wJ.NormalArrow]:DJ,[wJ.EnergyBall]:CJ,[wJ.SpeedArrow]:UJ,[wJ.Bullet1]:VJ,[wJ.OrcSpearmanSpear1]:JJ,[wJ.OrcIceMageFire1]:XJ,[wJ.PoisonArcherArrow1]:GJ,[wJ.GreenEagleBall1]:xJ,[wJ.BlackMageBall1]:iQ,[wJ.DarkMageBall1]:hQ,[wJ.DarkMageSkillBall1]:oQ,[wJ.GreenEnergyBall]:PJ,[wJ.YellowEnergyBall]:jJ,[wJ.FairyMusicNote]:OJ,[wJ.GhostBall1]:cQ,[wJ.DarkArcherArrow1]:eQ,[wJ.OrcWingBall1]:ZJ,[wJ.OrcAxeBall1]:zJ,[wJ.FlowerBullet]:_J,[wJ.Rock]:SJ,[wJ.DarkHermitMissile]:EJ,[wJ.Pearl]:uQ,[wJ.Twist]:HJ,[wJ.UniArrow]:fQ,[wJ.PowerArrow]:gQ,[wJ.OrcBlizzardMageRain1]:wQ,[wJ.FireMagicBall1]:bQ,[wJ.FireMageBird1]:_Q,[wJ.BomberSmallBomb1]:EQ,[wJ.BomberBigBomb1]:SQ,[wJ.IceFlake]:CQ,[wJ.FireBirdBall1]:OQ,[wJ.BlackMageDarkBall1]:xQ,[wJ.PoisonArcherArrowSkill1]:DQ,[wJ.OrcIceMageFireSkill1]:PQ,[wJ.PilotMissile1]:GQ,[wJ.FireBullet]:UQ,[wJ.AntRock1]:HQ,[wJ.SpeedArrow2]:jQ,[wJ.MoleFire]:VQ,[wJ.OrcRapterRiderSpear1]:iZ,[wJ.WyvernRiderThrowingKnife1]:JQ,[wJ.WyvernRiderThrowingKnifeS1]:ZQ,[wJ.DarkChain1]:zQ,[wJ.SuccubusBlade1]:XQ,[wJ.DruidTangle1]:eZ,[wJ.DruidDrill1]:hZ,[wJ.TigerRiderArrow1]:oZ,[wJ.GriffinSpear1]:cZ,[wJ.GriffinSuperSpear1]:uZ,[wJ.SteamFire1]:fZ,[wJ.SteamMissile1]:gZ,[wJ.SylphidShuriken1]:wZ,[wJ.SylphidTornado1]:bZ,[wJ.AladinCoin1]:_Z,[wJ.BladeWave1]:EZ,[wJ.SpinBlade]:SZ,[wJ.CrowKnightBullet1]:CZ,[wJ.CrowCompanion1]:OZ,[wJ.CrowGuidedBall1]:xZ,[wJ.CrowFeatherShot1]:PZ,[wJ.ScorpionPoisonBullet]:LZ,[wJ.ScorpionPoisonArea]:FZ,[wJ.HarpyFeather]:WZ,[wJ.HarpyTornado]:$Z,[wJ.GolemStone]:KZ,[wJ.BerialLightning]:qZ,[wJ.BerialLightningArea]:YZ,[wJ.BerialFire]:QZ,[wJ.SummonDragon]:t0}
+ [nj.NormalArrow]:Mj,[nj.EnergyBall]:pj,[nj.SpeedArrow]:Tj,[nj.Bullet1]:Rj,[nj.OrcSpearmanSpear1]:Bj,[nj.OrcIceMageFire1]:Lj,[nj.PoisonArcherArrow1]:Aj,[nj.GreenEagleBall1]:vj,[nj.BlackMageBall1]:Wj,[nj.DarkMageBall1]:Kj,[nj.DarkMageSkillBall1]:qj,[nj.GreenEnergyBall]:_j,[nj.YellowEnergyBall]:Oj,[nj.FairyMusicNote]:mj,[nj.GhostBall1]:Xj,[nj.DarkArcherArrow1]:jj,[nj.OrcWingBall1]:Fj,[nj.OrcAxeBall1]:Pj,[nj.FlowerBullet]:aj,[nj.Rock]:dj,[nj.DarkHermitMissile]:lj,[nj.Pearl]:Qj,[nj.Twist]:Ij,[nj.UniArrow]:tV,[nj.PowerArrow]:sV,[nj.OrcBlizzardMageRain1]:nV,[nj.FireMagicBall1]:rV,[nj.FireMageBird1]:aV,[nj.BomberSmallBomb1]:lV,[nj.BomberBigBomb1]:dV,[nj.IceFlake]:pV,[nj.FireBirdBall1]:mV,[nj.BlackMageDarkBall1]:vV,[nj.PoisonArcherArrowSkill1]:MV,[nj.OrcIceMageFireSkill1]:_V,[nj.PilotMissile1]:AV,[nj.FireBullet]:TV,[nj.AntRock1]:IV,[nj.SpeedArrow2]:OV,[nj.MoleFire]:RV,[nj.OrcRapterRiderSpear1]:WV,[nj.WyvernRiderThrowingKnife1]:BV,[nj.WyvernRiderThrowingKnifeS1]:FV,[nj.DarkChain1]:PV,[nj.SuccubusBlade1]:LV,[nj.DruidTangle1]:jV,[nj.DruidDrill1]:KV,[nj.TigerRiderArrow1]:qV,[nj.GriffinSpear1]:XV,[nj.GriffinSuperSpear1]:QV,[nj.SteamFire1]:tK,[nj.SteamMissile1]:sK,[nj.SylphidShuriken1]:nK,[nj.SylphidTornado1]:rK,[nj.AladinCoin1]:aK,[nj.BladeWave1]:lK,[nj.SpinBlade]:dK,[nj.CrowKnightBullet1]:pK,[nj.CrowCompanion1]:mK,[nj.CrowGuidedBall1]:vK,[nj.CrowFeatherShot1]:_K,[nj.ScorpionPoisonBullet]:EK,[nj.ScorpionPoisonArea]:JJ,[nj.HarpyFeather]:ZJ,[nj.HarpyTornado]:iQ,[nj.GolemStone]:oQ,[nj.BerialLightning]:cQ,[nj.BerialLightningArea]:uQ,[nj.BerialFire]:fQ,[nj.SummonDragon]:gQ,[nj.DKSpear]:wQ}
TimeOfDayManager 1 hunks, 1 statements
- const h0="MissEffect",r0=class t{
+ const MQ="CriticalEffect",EQ="MissEffect",AQ=class t{
FireBird1 1 hunks, 1 statements
- this.generateWeapon(this.target,wJ.FireBirdBall1,t?3.5:2.5),this.target.isAlive&&this.random.chance(t?.5:.3)&&this.target.stun(50)}
+ this.generateWeapon(this.target,nj.FireBirdBall1,t?3.5:2.5),this.target.isAlive&&this.random.chance(t?.5:.3)&&this.target.stun(50,this)}
FootMan1 1 hunks, 1 statements
- this.doMeleeAttack(this.target,i?2.5:1.5),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(i?.5:.3)&&this.target.stun(i?60:50)}
+ this.doMeleeAttack(this.target,i?2.5:1.5),(null==(t=this.target)?void 0:t.isAlive)&&this.random.chance(i?.5:.3)&&this.target.stun(i?60:50,this)}
Gunner1 1 hunks, 1 statements
- this.target.isAlive&&this.target.stun(i),KL.getInstance().playSFX(this.attackSound)}
+ this.target.isAlive&&this.target.stun(i,this),zL.getInstance().playSFX(this.attackSound)}
OrcHunter1 1 hunks, 1 statements
- this.doDamage(i,t?3:2),i.isAlive&&i.freeze(t?50:30),this.addRangeEvadeChanceBuff(RZ.OrcHunter1_RANGEEVADE_BUFF,.6,180),this.showEffect(yq.OrcHunterEvadeBuff,180,new mi(0,0))}
+ this.doDamage(i,t?3:2),i.isAlive&&i.freeze(t?50:30,this),this.addRangeEvadeChanceBuff(yK.OrcHunter1_RANGEEVADE_BUFF,.6,180),this.showEffect(PF.OrcHunterEvadeBuff,180,new gi(0,0))}
SkeletonMan1 1 hunks, 1 statements
- this.doMeleeAttack(t,i?3:2),t.isAlive&&this.random.chance(i?.15:.05)&&t.stun(120)}
+ this.doMeleeAttack(t,i?3:2),t.isAlive&&this.random.chance(i?.15:.05)&&t.stun(120,this)}
DarkMage1 1 hunks, 1 statements
- for(const t of e)null!=t&&0!=t.isAlive&&t.curse(180)}
+ for(const t of e)null!=t&&0!=t.isAlive&&t.curse(180,this)}
Emitter 1 hunks, 1 statements
- ,"decode$7"),uot="function"==typeof ArrayBuffer,dot=Kt((t,i)=>{
+ ,"decode$8"),F3="function"==typeof ArrayBuffer,H3=Vt((t,i)=>{
TransportError 1 hunks, 1 statements
- Kt(Iot,"installTimerFunctions"),Kt(xot,"byteLength"),Kt(Not,"utf8Length"),Kt(Pot,"randomString"),Kt(Rot,"encode$5"),Kt(Dot,"decode$6");
+ Vt(h6,"installTimerFunctions"),Vt(r6,"byteLength"),Vt(o6,"utf8Length"),Vt(a6,"randomString"),Vt(c6,"encode$6"),Vt(l6,"decode$7");
Err 1 hunks, 1 statements
- ...y,domain:_}
+ ..._,domain:y}
Sr 1 hunks, 1 statements
- ...t,...nft(i)}
+ ...t,...Ntt(i)}
Oo 1 hunks, 1 statements
- ),"Ro"),Cgt=Kt(t=>Xat(void 0,void 0,void 0,function*(){
+ ),"Ro"),set=Vt(t=>A4(void 0,void 0,void 0,function*(){
Ko 1 hunks, 1 statements
- Zpt.SocketService("Document has focus --- reconnecting socket"),Cgt(t).catch(t=>{
+ Ist.SocketService("Document has focus --- reconnecting socket"),set(t).catch(t=>{
Ma 1 hunks, 1 statements
- ...gwt,coercer:Kt((t,i)=>Cmt(t,mwt)?gwt.coercer(wwt(t,i),i):gwt.coercer(t,i),"coercer")}
+ ...Knt,coercer:Vt((t,i)=>nnt(t,znt)?Knt.coercer(qnt(t,i),i):Knt.coercer(t,i),"coercer")}
El 1 hunks, 1 statements
- ...dt._defaultState}
+ ...ct._defaultState}
Yp 1 hunks, 1 statements
- const e=126,n=[71,73,70,56,55,97,...i,246,0,0,255,255,255,...JAt(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,...Idt(381,0),44,0,0,0,0,...i,0,7],h=Math.floor(s.length/e);
SuiStandardProvider 1 hunks, 1 statements
- namespace:aPt.NameSpaceKeyEip155,addresses:i,methods:[...uPt.Eip55Methods],extra:s}
+ namespace:U_t.NameSpaceKeyEip155,addresses:i,methods:[...W_t.Eip55Methods],extra:s}
AppReadyEvent 1 hunks, 1 statements
- return PRt||(PRt=[...CRt]),PRt}
+ return lMt||(lMt=[...nMt]),lMt}
SolProvider 1 hunks, 1 statements
- namespace:BLt.NameSpaceKeySOL,addresses:i,methods:[...WLt.SOLANAMethods],extra:s}
+ namespace:gAt.NameSpaceKeySOL,addresses:i,methods:[...bAt.SOLANAMethods],extra:s}
OkxwalletInjectConnector 1 hunks, 1 statements
- namespace:mGt.NameSpaceKeyBtc,addresses:i,methods:[...vGt.BtcMethods],extra:s}
+ namespace:zAt.NameSpaceKeyBtc,addresses:i,methods:[...YAt.BtcMethods],extra:s}
TcRootElement 1 hunks, 1 statements
- return dqt()||(t.push(new kSt.OKXAppConnector),t.push(new kSt.OKXWalletAppConnector)),lqt()&&t.push(new kSt.OkxwalletInjectConnector),t.push(...pqt()),t}
+ return $Dt()||(t.push(new hft.OKXAppConnector),t.push(new hft.OKXWalletAppConnector)),HDt()&&t.push(new hft.OkxwalletInjectConnector),t.push(...VDt()),t}
AnimationTimelineNoop 1 hunks, 1 statements
- ,"IconButton"),CXt={
+ ,"IconButton$1"),nGt={
OKXConnectError2 1 hunks, 1 statements
- Kt(FYt,"copyToClipboard"),Kt(HYt,"fallbackCopyTextToClipboard");
+ Vt(wBt,"copyToClipboard$1"),Vt(vBt,"fallbackCopyTextToClipboard");
WalletSelectPopup 1 hunks, 1 statements
- ...aD.ERROR_POPUP_LABEL_OPTION,fontSize:18}
+ ...cD.ERROR_POPUP_LABEL_OPTION,fontSize:18}
MailRewardItem 1 hunks, 1 statements
- t!=this._received&&(this._received=t,this._received?this._type==bK.hero?this.dimmedCoverHero.visible=!0:this.dimmedCover.visible=!0:(this.dimmedCover.visible=!1,this.dimmedCoverHero.visible=!1))}
+ this._received=t,this.dimmedCover.visible=!1,this.dimmedCoverHero.visible=!1,this._received&&(this._type==n5.hero?this.dimmedCoverHero.visible=!0:this.dimmedCover.visible=!0)}
PassMainPopup 1 hunks, 1 statements
- this.setTitle(AG.getText("GAME_309","패스보상")),this.updateGem(),this.updateHonorCoin(),await hK.getInstance().getProducts(2),this.updateNavigator(),this.setPassStatus(!0),await this.updateList(),this.updateLayout(),await this.banner.update("Popup_Banner_04")}
+ this.setTitle(SG.getText("GAME_309","패스보상")),this.updateGem(),this.updateHonorCoin(),await t5.getInstance().getAvailProducts(2),this.updateNavigator(),this.setPassStatus(!0),await this.updateList(),this.updateLayout(),await this.banner.update("Popup_Banner_04")}
GuildBarracksRaceView 1 hunks, 1 statements
- ...aD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...cD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GuildMainSubView 1 hunks, 1 statements
- const i=[...ED.guildList].sort((t,i)=>{
+ const i=[...AD.guildList].sort((t,i)=>{
GuildRaidBossSubMenu 1 hunks, 1 statements
- ),this.lblInfo=new YD("",11184810,aD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblInfo.x=10,this.lblInfo.y=32,this.lblInfo.setWrapWidth(420),this.addChild(this.lblInfo),this.btnGiveUp=new QL("포기"),this.btnGiveUp.color=QL.BROWN,this.btnGiveUp.width=90,this.btnGiveUp.height=42,this.btnGiveUp.x=this.closeBtn.x-this.btnGiveUp.width-6,this.btnGiveUp.y=.5*(this.bg.height-this.btnGiveUp.height),this.btnGiveUp.visible=!1,this.btnGiveUp.onClick=()=>{
+ ),this.lblInfo=new JD("",11184810,cD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblInfo.x=10,this.lblInfo.y=32,this.lblInfo.setWrapWidth(420),this.addChild(this.lblInfo),this.btnGiveUp=new ZL(SG.getText("GAME_1271","포기")),this.btnGiveUp.color=ZL.BROWN,this.btnGiveUp.width=90,this.btnGiveUp.height=42,this.btnGiveUp.x=this.closeBtn.x-this.btnGiveUp.width-6,this.btnGiveUp.y=.5*(this.bg.height-this.btnGiveUp.height),this.btnGiveUp.visible=!1,this.btnGiveUp.onClick=()=>{
GuildRaidSubView 1 hunks, 1 statements
- if(!(null==e?void 0:e.success))return void mG.getInstance().show(String((null==e?void 0:e.error)??"ERROR"));
+ if(!(null==e?void 0:e.success))return void wG.getInstance().show(SG.getErrorMessage(String((null==e?void 0:e.error)??"ERROR"))||String((null==e?void 0:e.error)??"ERROR"));
GuildWarCombatLogItemRenderer 1 hunks, 1 statements
- ...aD.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...cD.DEFAULT_FONT_OPTION_15,fontSize:14}
GuildWarMemberStatusItemRenderer 1 hunks, 1 statements
- ...aD.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...cD.DEFAULT_FONT_OPTION_15,fontSize:14}
GuildWarTargetMarkerItemRenderer 1 hunks, 1 statements
- ...aD.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...cD.DEFAULT_FONT_OPTION_15,fontSize:14}
Delay 1 hunks, 1 statements
- ...vdi(),[i]:s}
+ ...gmi(),[i]:s}
NetworkTimeout 1 hunks, 1 statements
- ...Wdi,...i}
+ ...Umi,...i}
RecaptchaVerifier 1 hunks, 1 statements
- ...Ewi}
+ ..._yi}
BrowserPopupRedirectResolver 1 hunks, 1 statements
- ...Cvi,width:e.toString(),height:n.toString(),top:h,left:r}
+ ...AMi,width:e.toString(),height:n.toString(),top:h,left:r}