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
| Key | Text | |
|---|---|---|
| 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 | ~ |
|
| GAME_819 | ~ |
|
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
- added:
EMBLEM - added:
EMBLEM_SKILL - added:
RUNE - added:
RUNE_GRADE - added:
RUNE_SUB
Assets 63
Code 769 changes in 205 classes
Minified client code with short names blanked for diffing. Class names are real.
- BannerImage 19222
- TreasureIcon 16021
- PetSelectGuidePopup 8779
- ReviveLayer 5250
- DetailPopupLayer 3073
- GuildRaidEmblemSubMenu 774
- RaidBossGuidePopup 581
- MissionGuideController 527
- ClickHand 344
- BaseRaidUnit 315
- ShopDataManager 308
- GuildRaidBattleReadyPopup 283
- AttendanceSection 277
- DragonKnight 204
- EventDataManager 201
- GuildRaidEmblemDetailSubMenu 193
- MailReceiveAllResultPopup 187
- Druid1 180
- HarpyKing 177
- BattleManager 158
- DungeonTopMenu 153
- GuildRaidPopup 131
- AladinCoinStorm 122
- HeroIcon 114
- CrowKnight1 97
- BaseUnit 93
- DeviceWeb 86
- BerialKing 82
- GolemKing 81
- HScrollRow 74
- GuildWarSquadsPopup 72
- SummonDragon 66
- HeroUpgradeManager 66
- ScorpionKing 65
- RightMenu 59
- ConfigManager 48
- HeroDrawGuidePopup 44
- SettingContent 40
- URLManager 39
- HeartInfo 38
- RuneService 37
- MailDeleteAllButton 37
- GuildRaidOpenDatePopup 36
- BattleController 34
- DraggableContainer 33
- AttendanceAutoTrigger 33
- PetIcon 32
- GuildRaidGuidePopup 32
- MailDetailPopup 30
- HarpyTornado 29
- RaidWarningLine 28
- MailPopup 28
- IconButton 27
- WingKnight1 25
- GolemStone 24
- GuildRaidDifficultySubView 23
- PetDataManager 22
- Aladin1 21
- RaidShockwaveRing 21
- GuildRaidDifficultySubMenu 19
- GameOverPopup 18
- UserService 17
- GuildRaidBossSubView 16
- QuestDataManager 15
- ActiveBuffVO 15
- InventoryPetSelectView 15
- LocalDataManager 13
- ScorpionPoisonArea 13
- PetSelectGuideItemRenderer 13
- SettingPopup 13
- LanguageManager 12
- CastleUpgradeItemRenderer 12
- BookManager 11
- GuildRaidDifficultyItemRenderer 11
- CitadelItemRenderer 11
- GuildBarrackRowItemRenderer 11
- GuildWarBattleReadyPopup 11
- AccountService 10
- GuildBuildingSubView 10
- GuildQuestItemRenderer 10
- CastleSubMenu 10
- GuildRaidService 8
- MineDataManager 8
- Abyss1 8
- GuildRaidBossItemRenderer 8
- ProfilePopup 8
- GuildWarBattlePopupV3 8
- BaseService 7
- BladeMaster1 7
- CommonRedButton 7
- HeroSelectGuidePopup 7
- SpiritLandDataManager 6
- GuildGiftSubView 6
- TutorialController 6
- PermissionError 6
- CapacitorBridge 6
- TransConfirmPopup 6
- FavoritePetSelectItemRenderer 6
- BatchableSprite 5
- BasePopup 5
- HeavyWarrior1 5
- Fairy1 5
- Digest 5
- HeroSelectGuideItemRenderer 5
- GuildWarActiveItemRenderer 5
- GuildWarHistoryItemRenderer 5
- GpuGraphicsContext 4
- GuildWarService 4
- MailService 4
- ShopService 4
- TreasureService 4
- BerialLightning 4
- Golem1 4
- SettingEtcInfo 4
- Archery2GameScene 4
- PassthroughFilter 3
- PassDataManager 3
- OrcBigFoot1 3
- Fo 3
- SHA256 3
- SuiProvider 3
- WalletPopup 3
- OfflineCountdown 3
- TilingSpriteShader 2
- CanvasRenderer 2
- WebGLRenderer 2
- WebGPURenderer 2
- ServerTimeManager 2
- RequestManager 2
- GameSpeedMode 2
- HammerKnight1 2
- GreatHammer1 2
- ElfArcher1 2
- Priest1 2
- Ghost1 2
- DarkArcher1 2
- DeathKnight1 2
- Client 2
- Bo 2
- OKXConnectUiError 2
- TicketDataManager 2
- GuildQuestSubView 2
- BattleUIManager 2
- NpcDialogueToast 2
- GuildBarrackRowVO 2
- GuildWarTierAssignPopup 2
- AppsFlyerManager 2
- ObservablePoint 1
- ApplicationInitHook 1
- Circle 1
- DefaultShader 1
- AssetsClass 1
- WorkerInstance 1
- DOMPipe 1
- FilterSystem 1
- AbstractText 1
- BitmapFontManagerClass 1
- HTMLTextStyle 1
- GlColorMaskSystem 1
- GlUboSystem 1
- FrameLoopManager 1
- VersionManager 1
- UnitDataManager 1
- UnitBookVO 1
- TreasureBuffAccessor 1
- DataManager 1
- BerialLightningArea 1
- WeaponFactory 1
- TimeOfDayManager 1
- FireBird1 1
- FootMan1 1
- Gunner1 1
- OrcHunter1 1
- SkeletonMan1 1
- DarkMage1 1
- Emitter 1
- TransportError 1
- Err 1
- Sr 1
- Oo 1
- Ko 1
- Ma 1
- El 1
- Yp 1
- SuiStandardProvider 1
- AppReadyEvent 1
- SolProvider 1
- OkxwalletInjectConnector 1
- TcRootElement 1
- AnimationTimelineNoop 1
- OKXConnectError2 1
- WalletSelectPopup 1
- MailRewardItem 1
- PassMainPopup 1
- GuildBarracksRaceView 1
- GuildMainSubView 1
- GuildRaidBossSubMenu 1
- GuildRaidSubView 1
- GuildWarCombatLogItemRenderer 1
- GuildWarMemberStatusItemRenderer 1
- GuildWarTargetMarkerItemRenderer 1
- Delay 1
- NetworkTimeout 1
- RecaptchaVerifier 1
- BrowserPopupRedirectResolver 1
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}



