diff --git a/lib/domain/app_constants.dart b/lib/domain/app_constants.dart index 398ee2ca5..4cade367e 100644 --- a/lib/domain/app_constants.dart +++ b/lib/domain/app_constants.dart @@ -139,7 +139,7 @@ const characterExp = [ ItemExperienceModel.forCharacters(90, -1, 8362650), ]; -const weaponExp = [ +const weaponExp5Stars = [ ItemExperienceModel.forWeapons(1, 600, 0), ItemExperienceModel.forWeapons(2, 950, 600), ItemExperienceModel.forWeapons(3, 1350, 1550), @@ -232,13 +232,370 @@ const weaponExp = [ ItemExperienceModel.forWeapons(90, -1, 9064450), ]; -double getItemTotalExp(int currentLevel, int desiredLevel, bool forCharacters) { +const weaponExp4Stars = [ + ItemExperienceModel.forWeapons(1, 400, 0), + ItemExperienceModel.forWeapons(2, 625, 400), + ItemExperienceModel.forWeapons(3, 900, 1025), + ItemExperienceModel.forWeapons(4, 1200, 1925), + ItemExperienceModel.forWeapons(5, 1550, 3125), + ItemExperienceModel.forWeapons(6, 1950, 4675), + ItemExperienceModel.forWeapons(7, 2350, 6625), + ItemExperienceModel.forWeapons(8, 2800, 8975), + ItemExperienceModel.forWeapons(9, 3300, 11775), + ItemExperienceModel.forWeapons(10, 3800, 15075), + ItemExperienceModel.forWeapons(11, 4350, 18875), + ItemExperienceModel.forWeapons(12, 4925, 23225), + ItemExperienceModel.forWeapons(13, 5525, 28150), + ItemExperienceModel.forWeapons(14, 6150, 33675), + ItemExperienceModel.forWeapons(15, 6800, 39825), + ItemExperienceModel.forWeapons(16, 7500, 46625), + ItemExperienceModel.forWeapons(17, 8200, 54125), + ItemExperienceModel.forWeapons(18, 8950, 62325), + ItemExperienceModel.forWeapons(19, 9725, 71275), + ItemExperienceModel.forWeapons(20, 10500, 81000), + ItemExperienceModel.forWeapons(21, 11900, 91500), + ItemExperienceModel.forWeapons(22, 12775, 103400), + ItemExperienceModel.forWeapons(23, 13700, 116175), + ItemExperienceModel.forWeapons(24, 14650, 129875), + ItemExperienceModel.forWeapons(25, 15625, 144525), + ItemExperienceModel.forWeapons(26, 16625, 160150), + ItemExperienceModel.forWeapons(27, 17650, 176775), + ItemExperienceModel.forWeapons(28, 18700, 194425), + ItemExperienceModel.forWeapons(29, 19775, 213125), + ItemExperienceModel.forWeapons(30, 20900, 232900), + ItemExperienceModel.forWeapons(31, 22025, 253800), + ItemExperienceModel.forWeapons(32, 23200, 275825), + ItemExperienceModel.forWeapons(33, 24375, 299025), + ItemExperienceModel.forWeapons(34, 25600, 323400), + ItemExperienceModel.forWeapons(35, 26825, 349000), + ItemExperienceModel.forWeapons(36, 28100, 375825), + ItemExperienceModel.forWeapons(37, 29400, 403925), + ItemExperienceModel.forWeapons(38, 30725, 433325), + ItemExperienceModel.forWeapons(39, 32075, 464050), + ItemExperienceModel.forWeapons(40, 33425, 496125), + ItemExperienceModel.forWeapons(41, 36575, 529550), + ItemExperienceModel.forWeapons(42, 38075, 566125), + ItemExperienceModel.forWeapons(43, 39600, 604200), + ItemExperienceModel.forWeapons(44, 41150, 643800), + ItemExperienceModel.forWeapons(45, 42725, 684950), + ItemExperienceModel.forWeapons(46, 44325, 727675), + ItemExperienceModel.forWeapons(47, 45950, 772000), + ItemExperienceModel.forWeapons(48, 47600, 817950), + ItemExperienceModel.forWeapons(49, 49300, 865550), + ItemExperienceModel.forWeapons(50, 51000, 914850), + ItemExperienceModel.forWeapons(51, 55375, 965850), + ItemExperienceModel.forWeapons(52, 57225, 1021225), + ItemExperienceModel.forWeapons(53, 59100, 1078450), + ItemExperienceModel.forWeapons(54, 61025, 1137550), + ItemExperienceModel.forWeapons(55, 62950, 1198575), + ItemExperienceModel.forWeapons(56, 64925, 1261525), + ItemExperienceModel.forWeapons(57, 66900, 1326450), + ItemExperienceModel.forWeapons(58, 68925, 1393350), + ItemExperienceModel.forWeapons(59, 70975, 1462275), + ItemExperienceModel.forWeapons(60, 73050, 1533250), + ItemExperienceModel.forWeapons(61, 78900, 1606300), + ItemExperienceModel.forWeapons(62, 81125, 1685200), + ItemExperienceModel.forWeapons(63, 83400, 1766325), + ItemExperienceModel.forWeapons(64, 85700, 1849725), + ItemExperienceModel.forWeapons(65, 88025, 1935425), + ItemExperienceModel.forWeapons(66, 90375, 2023450), + ItemExperienceModel.forWeapons(67, 92750, 2113825), + ItemExperienceModel.forWeapons(68, 95150, 2206575), + ItemExperienceModel.forWeapons(69, 97575, 2301725), + ItemExperienceModel.forWeapons(70, 100050, 2399300), + ItemExperienceModel.forWeapons(71, 107675, 2499350), + ItemExperienceModel.forWeapons(72, 110325, 2607025), + ItemExperienceModel.forWeapons(73, 113000, 2717350), + ItemExperienceModel.forWeapons(74, 115700, 2830350), + ItemExperienceModel.forWeapons(75, 118425, 2946050), + ItemExperienceModel.forWeapons(76, 121200, 3064475), + ItemExperienceModel.forWeapons(77, 124000, 3185675), + ItemExperienceModel.forWeapons(78, 126825, 3309675), + ItemExperienceModel.forWeapons(79, 129675, 3436500), + ItemExperienceModel.forWeapons(80, 132575, 3566175), + ItemExperienceModel.forWeapons(81, 156475, 3698750), + ItemExperienceModel.forWeapons(82, 175875, 3855225), + ItemExperienceModel.forWeapons(83, 197600, 4031100), + ItemExperienceModel.forWeapons(84, 221975, 4228700), + ItemExperienceModel.forWeapons(85, 249300, 4450675), + ItemExperienceModel.forWeapons(86, 279950, 4699975), + ItemExperienceModel.forWeapons(87, 314250, 4979925), + ItemExperienceModel.forWeapons(88, 352700, 5294175), + ItemExperienceModel.forWeapons(89, 395775, 5646875), + ItemExperienceModel.forWeapons(90, -1, 6042650) +]; + +const weaponExp3Stars = [ + ItemExperienceModel.forWeapons(1, 275, 0), + ItemExperienceModel.forWeapons(2, 425, 275), + ItemExperienceModel.forWeapons(3, 600, 700), + ItemExperienceModel.forWeapons(4, 800, 1300), + ItemExperienceModel.forWeapons(5, 1025, 2100), + ItemExperienceModel.forWeapons(6, 1275, 3125), + ItemExperienceModel.forWeapons(7, 1550, 4400), + ItemExperienceModel.forWeapons(8, 1850, 5950), + ItemExperienceModel.forWeapons(9, 2175, 7800), + ItemExperienceModel.forWeapons(10, 2500, 9975), + ItemExperienceModel.forWeapons(11, 2875, 12475), + ItemExperienceModel.forWeapons(12, 3250, 15350), + ItemExperienceModel.forWeapons(13, 3650, 18600), + ItemExperienceModel.forWeapons(14, 4050, 22250), + ItemExperienceModel.forWeapons(15, 4500, 26300), + ItemExperienceModel.forWeapons(16, 4950, 30800), + ItemExperienceModel.forWeapons(17, 5400, 35750), + ItemExperienceModel.forWeapons(18, 5900, 41150), + ItemExperienceModel.forWeapons(19, 6425, 47050), + ItemExperienceModel.forWeapons(20, 6925, 53475), + ItemExperienceModel.forWeapons(21, 7850, 60400), + ItemExperienceModel.forWeapons(22, 8425, 68250), + ItemExperienceModel.forWeapons(23, 9050, 76675), + ItemExperienceModel.forWeapons(24, 9675, 85725), + ItemExperienceModel.forWeapons(25, 10325, 95400), + ItemExperienceModel.forWeapons(26, 10975, 105725), + ItemExperienceModel.forWeapons(27, 11650, 116700), + ItemExperienceModel.forWeapons(28, 12350, 128350), + ItemExperienceModel.forWeapons(29, 13050, 140700), + ItemExperienceModel.forWeapons(30, 13800, 153750), + ItemExperienceModel.forWeapons(31, 14525, 167550), + ItemExperienceModel.forWeapons(32, 15300, 182075), + ItemExperienceModel.forWeapons(33, 16100, 197375), + ItemExperienceModel.forWeapons(34, 16900, 213475), + ItemExperienceModel.forWeapons(35, 17700, 230375), + ItemExperienceModel.forWeapons(36, 18550, 248075), + ItemExperienceModel.forWeapons(37, 19400, 266625), + ItemExperienceModel.forWeapons(38, 20275, 286025), + ItemExperienceModel.forWeapons(39, 21175, 306300), + ItemExperienceModel.forWeapons(40, 22050, 327475), + ItemExperienceModel.forWeapons(41, 24150, 349525), + ItemExperienceModel.forWeapons(42, 25125, 373675), + ItemExperienceModel.forWeapons(43, 26125, 398800), + ItemExperienceModel.forWeapons(44, 27150, 424925), + ItemExperienceModel.forWeapons(45, 28200, 452075), + ItemExperienceModel.forWeapons(46, 29250, 480275), + ItemExperienceModel.forWeapons(47, 30325, 509525), + ItemExperienceModel.forWeapons(48, 31425, 539850), + ItemExperienceModel.forWeapons(49, 32550, 571275), + ItemExperienceModel.forWeapons(50, 33650, 603825), + ItemExperienceModel.forWeapons(51, 36550, 637475), + ItemExperienceModel.forWeapons(52, 37775, 674025), + ItemExperienceModel.forWeapons(53, 39000, 711800), + ItemExperienceModel.forWeapons(54, 40275, 750800), + ItemExperienceModel.forWeapons(55, 41550, 791075), + ItemExperienceModel.forWeapons(56, 42850, 832625), + ItemExperienceModel.forWeapons(57, 44150, 875475), + ItemExperienceModel.forWeapons(58, 45500, 919625), + ItemExperienceModel.forWeapons(59, 46850, 965125), + ItemExperienceModel.forWeapons(60, 48225, 1011975), + ItemExperienceModel.forWeapons(61, 52075, 1060200), + ItemExperienceModel.forWeapons(62, 53550, 1112275), + ItemExperienceModel.forWeapons(63, 55050, 1165825), + ItemExperienceModel.forWeapons(64, 56550, 1220875), + ItemExperienceModel.forWeapons(65, 58100, 1277425), + ItemExperienceModel.forWeapons(66, 59650, 1335525), + ItemExperienceModel.forWeapons(67, 61225, 1395175), + ItemExperienceModel.forWeapons(68, 62800, 1456400), + ItemExperienceModel.forWeapons(69, 64400, 1519200), + ItemExperienceModel.forWeapons(70, 66025, 1583600), + ItemExperienceModel.forWeapons(71, 71075, 1649625), + ItemExperienceModel.forWeapons(72, 72825, 1720700), + ItemExperienceModel.forWeapons(73, 74575, 1793525), + ItemExperienceModel.forWeapons(74, 76350, 1868100), + ItemExperienceModel.forWeapons(75, 78150, 1944450), + ItemExperienceModel.forWeapons(76, 80000, 2022600), + ItemExperienceModel.forWeapons(77, 81850, 2102600), + ItemExperienceModel.forWeapons(78, 83700, 2184450), + ItemExperienceModel.forWeapons(79, 85575, 2268150), + ItemExperienceModel.forWeapons(80, 87500, 2353725), + ItemExperienceModel.forWeapons(81, 103275, 2441225), + ItemExperienceModel.forWeapons(82, 116075, 2544500), + ItemExperienceModel.forWeapons(83, 130425, 2660575), + ItemExperienceModel.forWeapons(84, 146500, 2791000), + ItemExperienceModel.forWeapons(85, 164550, 2937500), + ItemExperienceModel.forWeapons(86, 184775, 3102050), + ItemExperienceModel.forWeapons(87, 207400, 3286825), + ItemExperienceModel.forWeapons(88, 232775, 3494225), + ItemExperienceModel.forWeapons(89, 261200, 3727000), + ItemExperienceModel.forWeapons(90, -1, 3988200) +]; + +const weaponExp2Stars = [ + ItemExperienceModel.forWeapons(1, 175, 0), + ItemExperienceModel.forWeapons(2, 275, 175), + ItemExperienceModel.forWeapons(3, 400, 450), + ItemExperienceModel.forWeapons(4, 550, 850), + ItemExperienceModel.forWeapons(5, 700, 1400), + ItemExperienceModel.forWeapons(6, 875, 2100), + ItemExperienceModel.forWeapons(7, 1050, 2975), + ItemExperienceModel.forWeapons(8, 1250, 4025), + ItemExperienceModel.forWeapons(9, 1475, 5275), + ItemExperienceModel.forWeapons(10, 1700, 6750), + ItemExperienceModel.forWeapons(11, 1950, 8450), + ItemExperienceModel.forWeapons(12, 2225, 10400), + ItemExperienceModel.forWeapons(13, 2475, 12625), + ItemExperienceModel.forWeapons(14, 2775, 15100), + ItemExperienceModel.forWeapons(15, 3050, 17875), + ItemExperienceModel.forWeapons(16, 3375, 20925), + ItemExperienceModel.forWeapons(17, 3700, 24300), + ItemExperienceModel.forWeapons(18, 4025, 28000), + ItemExperienceModel.forWeapons(19, 4375, 32025), + ItemExperienceModel.forWeapons(20, 4725, 36400), + ItemExperienceModel.forWeapons(21, 5350, 41125), + ItemExperienceModel.forWeapons(22, 5750, 46475), + ItemExperienceModel.forWeapons(23, 6175, 52225), + ItemExperienceModel.forWeapons(24, 6600, 58400), + ItemExperienceModel.forWeapons(25, 7025, 65000), + ItemExperienceModel.forWeapons(26, 7475, 72025), + ItemExperienceModel.forWeapons(27, 7950, 79500), + ItemExperienceModel.forWeapons(28, 8425, 87450), + ItemExperienceModel.forWeapons(29, 8900, 95875), + ItemExperienceModel.forWeapons(30, 9400, 104775), + ItemExperienceModel.forWeapons(31, 9900, 114175), + ItemExperienceModel.forWeapons(32, 10450, 124075), + ItemExperienceModel.forWeapons(33, 10975, 134525), + ItemExperienceModel.forWeapons(34, 11525, 145500), + ItemExperienceModel.forWeapons(35, 12075, 157025), + ItemExperienceModel.forWeapons(36, 12650, 169100), + ItemExperienceModel.forWeapons(37, 13225, 181750), + ItemExperienceModel.forWeapons(38, 13825, 194975), + ItemExperienceModel.forWeapons(39, 14425, 208800), + ItemExperienceModel.forWeapons(40, 15050, 223225), + ItemExperienceModel.forWeapons(41, 16450, 238275), + ItemExperienceModel.forWeapons(42, 17125, 254725), + ItemExperienceModel.forWeapons(43, 17825, 271850), + ItemExperienceModel.forWeapons(44, 18525, 289675), + ItemExperienceModel.forWeapons(45, 19225, 308200), + ItemExperienceModel.forWeapons(46, 19950, 327425), + ItemExperienceModel.forWeapons(47, 20675, 347375), + ItemExperienceModel.forWeapons(48, 21425, 368050), + ItemExperienceModel.forWeapons(49, 22175, 389475), + ItemExperienceModel.forWeapons(50, 22950, 411650), + ItemExperienceModel.forWeapons(51, 24925, 434600), + ItemExperienceModel.forWeapons(52, 25750, 459525), + ItemExperienceModel.forWeapons(53, 26600, 485275), + ItemExperienceModel.forWeapons(54, 27450, 511875), + ItemExperienceModel.forWeapons(55, 28325, 539325), + ItemExperienceModel.forWeapons(56, 29225, 567650), + ItemExperienceModel.forWeapons(57, 30100, 596875), + ItemExperienceModel.forWeapons(58, 31025, 626975), + ItemExperienceModel.forWeapons(59, 31950, 658000), + ItemExperienceModel.forWeapons(60, 32875, 689950), + ItemExperienceModel.forWeapons(61, 35500, 722825), + ItemExperienceModel.forWeapons(62, 36500, 758325), + ItemExperienceModel.forWeapons(63, 37525, 794825), + ItemExperienceModel.forWeapons(64, 38575, 832350), + ItemExperienceModel.forWeapons(65, 39600, 870925), + ItemExperienceModel.forWeapons(66, 40675, 910525), + ItemExperienceModel.forWeapons(67, 41750, 951200), + ItemExperienceModel.forWeapons(68, 42825, 992950), + ItemExperienceModel.forWeapons(69, 43900, 1035775), + ItemExperienceModel.forWeapons(70, -1, 1079675) +]; + +const weaponExp1Star = [ + ItemExperienceModel.forWeapons(1, 125, 0), + ItemExperienceModel.forWeapons(2, 200, 125), + ItemExperienceModel.forWeapons(3, 275, 325), + ItemExperienceModel.forWeapons(4, 350, 600), + ItemExperienceModel.forWeapons(5, 475, 950), + ItemExperienceModel.forWeapons(6, 575, 1425), + ItemExperienceModel.forWeapons(7, 700, 2000), + ItemExperienceModel.forWeapons(8, 850, 2700), + ItemExperienceModel.forWeapons(9, 1000, 3550), + ItemExperienceModel.forWeapons(10, 1150, 4550), + ItemExperienceModel.forWeapons(11, 1300, 5700), + ItemExperienceModel.forWeapons(12, 1475, 7000), + ItemExperienceModel.forWeapons(13, 1650, 8475), + ItemExperienceModel.forWeapons(14, 1850, 10125), + ItemExperienceModel.forWeapons(15, 2050, 11975), + ItemExperienceModel.forWeapons(16, 2250, 14025), + ItemExperienceModel.forWeapons(17, 2450, 16275), + ItemExperienceModel.forWeapons(18, 2675, 18725), + ItemExperienceModel.forWeapons(19, 2925, 21400), + ItemExperienceModel.forWeapons(20, 3150, 24325), + ItemExperienceModel.forWeapons(21, 3575, 27475), + ItemExperienceModel.forWeapons(22, 3825, 31050), + ItemExperienceModel.forWeapons(23, 4100, 34875), + ItemExperienceModel.forWeapons(24, 4400, 38975), + ItemExperienceModel.forWeapons(25, 4700, 43375), + ItemExperienceModel.forWeapons(26, 5000, 48075), + ItemExperienceModel.forWeapons(27, 5300, 53075), + ItemExperienceModel.forWeapons(28, 5600, 58375), + ItemExperienceModel.forWeapons(29, 5925, 63975), + ItemExperienceModel.forWeapons(30, 6275, 69900), + ItemExperienceModel.forWeapons(31, 6600, 76175), + ItemExperienceModel.forWeapons(32, 6950, 82775), + ItemExperienceModel.forWeapons(33, 7325, 89725), + ItemExperienceModel.forWeapons(34, 7675, 97050), + ItemExperienceModel.forWeapons(35, 8050, 104725), + ItemExperienceModel.forWeapons(36, 8425, 112775), + ItemExperienceModel.forWeapons(37, 8825, 121200), + ItemExperienceModel.forWeapons(38, 9225, 130025), + ItemExperienceModel.forWeapons(39, 9625, 139250), + ItemExperienceModel.forWeapons(40, 10025, 148875), + ItemExperienceModel.forWeapons(41, 10975, 158900), + ItemExperienceModel.forWeapons(42, 11425, 169875), + ItemExperienceModel.forWeapons(43, 11875, 181300), + ItemExperienceModel.forWeapons(44, 12350, 193175), + ItemExperienceModel.forWeapons(45, 12825, 205525), + ItemExperienceModel.forWeapons(46, 13300, 218350), + ItemExperienceModel.forWeapons(47, 13775, 231650), + ItemExperienceModel.forWeapons(48, 14275, 245425), + ItemExperienceModel.forWeapons(49, 14800, 259700), + ItemExperienceModel.forWeapons(50, 15300, 274500), + ItemExperienceModel.forWeapons(51, 16625, 289800), + ItemExperienceModel.forWeapons(52, 17175, 306425), + ItemExperienceModel.forWeapons(53, 17725, 323600), + ItemExperienceModel.forWeapons(54, 18300, 341325), + ItemExperienceModel.forWeapons(55, 18875, 359625), + ItemExperienceModel.forWeapons(56, 19475, 378500), + ItemExperienceModel.forWeapons(57, 20075, 397975), + ItemExperienceModel.forWeapons(58, 20675, 418050), + ItemExperienceModel.forWeapons(59, 21300, 438725), + ItemExperienceModel.forWeapons(60, 21925, 460025), + ItemExperienceModel.forWeapons(61, 23675, 481950), + ItemExperienceModel.forWeapons(62, 24350, 505625), + ItemExperienceModel.forWeapons(63, 25025, 529975), + ItemExperienceModel.forWeapons(64, 25700, 555000), + ItemExperienceModel.forWeapons(65, 26400, 580700), + ItemExperienceModel.forWeapons(66, 27125, 607100), + ItemExperienceModel.forWeapons(67, 27825, 634225), + ItemExperienceModel.forWeapons(68, 28550, 662050), + ItemExperienceModel.forWeapons(69, 29275, 690600), + ItemExperienceModel.forWeapons(70, -1, 719875) +]; + +double getItemTotalExp(int currentLevel, int desiredLevel, int rarity, bool forCharacters) { if (currentLevel > desiredLevel) { throw Exception('CurrentLevel = $currentLevel cannot be greater than DesiredLevel = $desiredLevel'); } + final items = []; + if (forCharacters) { + items.addAll(characterExp); + } else { + switch (rarity) { + case 5: + items.addAll(weaponExp5Stars); + break; + case 4: + items.addAll(weaponExp4Stars); + break; + case 3: + items.addAll(weaponExp3Stars); + break; + case 2: + items.addAll(weaponExp2Stars); + break; + case 1: + items.addAll(weaponExp1Star); + break; + default: + throw Exception('The provided rarity = $rarity'); + } + } + //here remember that the upper bound must not be included, that's why we use item.level < desiredLevel - return (forCharacters ? characterExp : weaponExp) + return items .where((item) => item.level >= currentLevel && item.level < desiredLevel) .map((item) => item.nextLevelExp) .fold(0, (previous, current) => previous + current); diff --git a/lib/infrastructure/calculator_service.dart b/lib/infrastructure/calculator_service.dart index a9b37070f..4e617f622 100644 --- a/lib/infrastructure/calculator_service.dart +++ b/lib/infrastructure/calculator_service.dart @@ -95,7 +95,7 @@ class CalculatorServiceImpl implements CalculatorService { int desiredAscensionLevel, List skills, ) { - final expMaterials = _getItemExperienceMaterials(currentLevel, desiredLevel, true); + final expMaterials = _getItemExperienceMaterials(currentLevel, desiredLevel, char.rarity, true); final ascensionMaterials = char.ascensionMaterials .where((m) => m.rank > currentAscensionLevel && m.rank <= desiredAscensionLevel) @@ -144,7 +144,7 @@ class CalculatorServiceImpl implements CalculatorService { int currentAscensionLevel, int desiredAscensionLevel, ) { - final expMaterials = _getItemExperienceMaterials(currentLevel, desiredLevel, false); + final expMaterials = _getItemExperienceMaterials(currentLevel, desiredLevel, weapon.rarity, false); final materials = weapon.ascensionMaterials .where((m) => m.level > _mapToWeaponLevel(currentAscensionLevel) && m.level <= _mapToWeaponLevel(desiredAscensionLevel)) .expand((m) => m.materials) @@ -336,12 +336,12 @@ class CalculatorServiceImpl implements CalculatorService { } } - List _getItemExperienceMaterials(int currentLevel, int desiredLevel, bool forCharacters) { + List _getItemExperienceMaterials(int currentLevel, int desiredLevel, int rarity, bool forCharacters) { final materials = []; //Here we order the exp materials in a way that the one that gives more exp is first and so on final expMaterials = _genshinService.getMaterials(forCharacters ? MaterialType.expCharacter : MaterialType.expWeapon) ..sort((x, y) => (y.experienceAttributes.experience - x.experienceAttributes.experience).round()); - var requiredExp = getItemTotalExp(currentLevel, desiredLevel, forCharacters); + var requiredExp = getItemTotalExp(currentLevel, desiredLevel, rarity, forCharacters); final moraMaterial = _genshinService.getMaterials(MaterialType.currency).first; for (final material in expMaterials) {