mirror of
https://github.com/DaanVandenBosch/phantasmal-world.git
synced 2025-04-04 22:58:29 +08:00
Added support for splitting pan arms in the hunt optimizer. Fixed a bug.
This commit is contained in:
parent
92ee40de65
commit
308352ed27
@ -1,129 +1,124 @@
|
|||||||
episode: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
|
episode: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
|
||||||
quest hours Hildebear Hildeblue Rag Rappy Al Rappy Monest Savage Wolf Barbarous Wolf Booma Gobooma Gigobooma Dragon Grass Assassin Poison Lily Nar Lily Nano Dragon Evil Shark Pal Shark Guil Shark Pofuilly Slime Pouilly Slime Pan Arms De Rol Le Dubchic Gilchic Garanz Sinow Beat Sinow Gold Canadine Canane Dubswitch Vol Opt Delsaber Chaos Sorcerer Dark Gunner Chaos Bringer Dark Belra Dimenian La Dimenian So Dimenian Bulclaw Claw Dark Falz Hildebear Hildeblue Rag Rappy Love Rappy Monest Poison Lily Nar Lily Grass Assassin Dimenian La Dimenian So Dimenian Dark Belra Barba Ray Savage Wolf Barbarous Wolf Pan Arms Dubchic Gilchic Garanz Dubswitch Delsaber Chaos Sorcerer Gol Dragon Sinow Berill Sinow Spigell Merillia Meriltas Mericarol Merikle Mericus Ul Gibbon Zol Gibbon Gibbles Gee Gi Gue Gal Gryphon Deldepth Delbiter Dolmolm Dolmdarl Morfos Recobox Epsilon Sinow Zoa Sinow Zele Ill Gill Del Lily Olga Flow Sand Rappy Del Rappy Astark Satellite Lizard Yowie Merissa A Merissa AA Girtablulu Zu Pazuzu Boota Ze Boota Ba Boota Dorphon Dorphon Eclair Goran Pyro Goran Goran Detonator Saint-Milion Shambertin Kondrieu Normal Box Gold Box
|
quest hours Hildebear Hildeblue Rag Rappy Al Rappy Monest Savage Wolf Barbarous Wolf Booma Gobooma Gigobooma Dragon Grass Assassin Poison Lily Nar Lily Nano Dragon Evil Shark Pal Shark Guil Shark Pofuilly Slime Pouilly Slime Pan Arms De Rol Le Dubchic Gilchic Garanz Sinow Beat Sinow Gold Canadine Canane Dubswitch Vol Opt Delsaber Chaos Sorcerer Dark Gunner Chaos Bringer Dark Belra Dimenian La Dimenian So Dimenian Bulclaw Claw Dark Falz Hildebear Hildeblue Rag Rappy Love Rappy Monest Poison Lily Nar Lily Grass Assassin Dimenian La Dimenian So Dimenian Dark Belra Barba Ray Savage Wolf Barbarous Wolf Pan Arms Dubchic Gilchic Garanz Dubswitch Delsaber Chaos Sorcerer Gol Dragon Sinow Berill Sinow Spigell Merillia Meriltas Mericarol Merikle Mericus Ul Gibbon Zol Gibbon Gibbles Gee Gi Gue Gal Gryphon Deldepth Delbiter Dolmolm Dolmdarl Morfos Recobox Epsilon Sinow Zoa Sinow Zele Ill Gill Del Lily Olga Flow Sand Rappy Del Rappy Astark Satellite Lizard Yowie Merissa A Merissa AA Girtablulu Zu Pazuzu Boota Ze Boota Ba Boota Dorphon Dorphon Eclair Goran Pyro Goran Goran Detonator Saint-Milion Shambertin Kondrieu Normal Box Gold Box
|
||||||
Valentine's Event 0,50 8 3 11 9 11 3 23 5
|
Maximum Attack 4th Stage -A- (Ep. I) 0.33 25 63 14 43 21 28 16 20 46 12 17 21 67 3 4 7 31 3 23 37 33 30 8 51
|
||||||
AOL CUP -Maximum Attack- 0,50 11 1 25 18 59 24 37 81 13 54 12 23 6 6 96 22 34 3 79 2
|
Maximum Attack 4th Stage -B- (Ep. I) 0.33 28 62 22 20 40 32 14 21 21 13 19 16 59 3 4 10 24 5 27 13 18 25 11 52
|
||||||
Maximum Attack 4th Stage -A- (Ep. I) 0,33 25 63 14 43 21 28 16 20 46 12 17 21 67 3 4 7 31 3 23 37 33 30 8 51
|
Maximum Attack 4th Stage -C- (Ep. I) 0.33 28 62 22 20 40 32 14 24 19 16 17 19 48 4 3 7 18 12 9 11 11 20 5 17 1
|
||||||
Maximum Attack 4th Stage -B- (Ep. I) 0,33 28 62 22 20 40 32 14 21 21 13 19 16 59 3 4 10 24 5 27 13 18 25 11 52
|
Principal's Gift 0.5 6 68 2 22 3 20 1
|
||||||
Maximum Attack 4th Stage -C- (Ep. I) 0,33 28 62 22 20 40 32 14 24 19 16 17 19 48 4 3 7 18 12 9 11 11 20 5 17 1
|
Endless Nightmare #1 0.5 8 19 4 29 4 60 32 23
|
||||||
Principal's Gift 0,50 6 68 2 22 3 20 1
|
Endless Nightmare #2 0.5 20 32 6 152 44 28 5
|
||||||
White Day 0,50 26 5 24 24 24 7 4
|
Endless Nightmare #3 0.5 37 108 10 48 14 84 2 8
|
||||||
Endless Nightmare #1 0,50 8 19 4 29 4 60 32 23
|
Endless Nightmare #4 0.5 44 3 21 13 28 49 59 49 6 90
|
||||||
Endless Nightmare #2 0,50 20 32 6 152 44 28 5
|
Mop-up Operation #1 0.5 2 10 5 14 23 36
|
||||||
Endless Nightmare #3 0,50 37 108 10 48 14 84 2 8
|
Mop-up Operation #2 0.5 10 9 18 72 21 24
|
||||||
Endless Nightmare #4 0,50 44 3 21 13 28 49 59 49 6 90
|
Mop-up Operation #3 0.5 9 59 6 17 7 55 2 2
|
||||||
Mop-up Operation #1 0,50 2 10 5 14 23 36
|
Mop-up Operation #4 0.5 13 5 6 12 35 27 33 50
|
||||||
Mop-up Operation #2 0,50 10 9 18 72 21 24
|
Today's Rate 0.5 52 7 1 1 53 5 6 9 47 6 27 7 25 3
|
||||||
Mop-up Operation #3 0,50 9 59 6 17 7 55 2 2
|
Fragment of Memory 0.5 81 68 77 16 38 226 86 237 1
|
||||||
Mop-up Operation #4 0,50 13 5 6 12 35 27 33 50
|
Gallon's Treachery 0.5 22 7 16 13 14 5 1 3 2 3 3 3 10 12
|
||||||
Today's Rate 0,50 52 7 1 1 53 5 6 9 47 6 27 7 25 3
|
Lost HAVOC VULCAN 0.5 68 28 81 49 54 156 94 89 36 152 1
|
||||||
Fragment of Memory 0,50 81 68 77 16 38 226 86 237 1
|
Lost HEAT SWORD 0.33 12 10 7 26 7 34 38 53 1
|
||||||
Gallon's Treachery 0,50 22 7 16 13 14 5 1 3 2 3 3 3 10 12
|
Lost ICE SPINNER 1 37 56 26 129 65 125 7 5 1
|
||||||
Lost HAVOC VULCAN 0,50 68 28 81 49 54 156 94 89 36 152 1
|
Lost SOUL BLADE 0.5 17 85 26 70 37 112 4 4 1
|
||||||
Lost HEAT SWORD 0,33 12 10 7 26 7 34 38 53 1
|
Rappy's Holiday 0.5 75 10 15 20 20 11 13
|
||||||
Lost ICE SPINNER 1,00 37 56 26 129 65 125 7 5 1
|
Labyrinthine Trial 0.5 14 15 2 10 38 16 12 6
|
||||||
Lost SOUL BLADE 0,50 17 85 26 70 37 112 4 4 1
|
Towards the Future 0.5 4 1 2 1 12 6 7 1 13 5 13 5 7 5 4 1 1 26 3 12 2 24 1 1 1 2 4 4 17 4 14 1
|
||||||
Rappy's Holiday 0,50 75 10 15 20 20 11 13
|
Dream Messenger 0.5 8 8 1 49
|
||||||
Labyrinthine Trial 0,50 14 15 2 10 38 16 12 6
|
Maximum Attack 2 0.5 18 35 6 20 21 27 14 56 5 10 52 17 36 19 2 76 97 7 1 1 106 78 8 122 9
|
||||||
Towards the Future 0,50 4 1 2 1 12 6 7 1 13 5 13 5 7 5 4 1 1 26 3 12 2 24 1 1 1 2 4 4 17 4 14 1
|
Maximum Attack 4th Stage -A- (Ep. II) 0.33 20 8 32 21 1 29 41 6 62 12 7 55 51 20 56 12 7
|
||||||
Dream Messenger 0,50 8 8 1 49
|
Maximum Attack 4th Stage -B- (Ep. II) 0.33 25 12 52 42 6 1 1 16 27 67 25 2 51 53 38 42 12 18
|
||||||
Festivity On The Beach 0,50 15
|
Maximum Attack 4th Stage -C- (Ep. II) 0.33 22 14 24 20 4 6 6 14 26 14 45 15 10 19 44 38 16 58 4 18 18 21 28
|
||||||
Pioneer Halloween 0,50 2 57 25 1 51 8 30 1
|
Phantasmal World #1 0.5 25 7 83 41 6 45 20 122 12
|
||||||
Maximum Attack 2 0,50 18 35 6 20 21 27 14 56 5 10 52 17 36 19 2 76 97 7 1 1 106 78 8 122 9
|
Phantasmal World #2 0.5 24 9 54 42 114 26 9 80
|
||||||
Maximum Attack 4th Stage -A- (Ep. II) 0,33 20 8 32 21 1 29 41 6 62 12 7 55 51 20 56 12 7
|
Phantasmal World #3 0.5 31 27 103 57 47 27 33 22
|
||||||
Maximum Attack 4th Stage -B- (Ep. II) 0,33 25 12 52 42 6 1 1 16 27 67 25 2 51 53 38 42 12 18
|
Phantasmal World #4 1 11 6 6 20 22 19 20 9 72 57
|
||||||
Maximum Attack 4th Stage -C- (Ep. II) 0,33 22 14 24 20 4 6 6 14 26 14 45 15 10 19 44 38 16 58 4 18 18 21 28
|
The East Tower 0.5 2 2 16 5 1 3 6 9 6 8 8 3 14 1 4 7
|
||||||
Phantasmal World #1 0,50 25 7 83 41 6 45 20 122 12
|
The West Tower 0.5 6 1 1 5 7 14 10 10 36 1 7 6 8 9
|
||||||
Phantasmal World #2 0,50 24 9 54 42 114 26 9 80
|
Reach for the Dream 0.5 4 2 6 19 3 1 7
|
||||||
Phantasmal World #3 0,50 31 27 103 57 47 27 33 22
|
Respective Tomorrow 0.5 5 10 2 19 3 18 9 1 1 1 1 28 1 1 6 1 1 3 19 2 6 1 1 6 3 4 88 5 1 1 2 4 4 62 1 9 1 3 3 1
|
||||||
Phantasmal World #4 1,00 11 6 6 20 22 19 20 9 72 57
|
LOGiN presents 勇場のマッチレース 1 88 19 46 70 84 14 20 59 51 22 4 94 52 22
|
||||||
The East Tower 0,50 2 2 16 5 1 3 6 9 6 8 8 3 14 1 4 7
|
Maximum Attack 4th Stage -A- (Ep. IV) 0.33 57 13 68 56 58 20 18 13 16 3 30 26 6
|
||||||
The West Tower 0,50 6 1 1 5 7 14 10 10 36 1 7 6 8 9
|
Maximum Attack 4th Stage -B- (Ep. IV) 0.33 60 11 58 50 20 3 48 24 15 17 3 40 32 19
|
||||||
Reach for the Dream 0,50 4 2 6 19 3 1 7
|
Maximum Attack 4th Stage -C- (Ep. IV) 0.33 73 16 69 74 37 6 33 20 22 16 13 37 26 18
|
||||||
Respective Tomorrow 0,50 5 10 2 19 3 18 9 1 1 1 1 28 1 1 6 1 1 3 19 2 6 1 1 6 3 4 88 5 1 1 2 4 4 62 1 9 1 3 3 1
|
New Mop-up Operation #1 0.5 37 22 32 20 8 20 5 5 2
|
||||||
LOGiN presents 勇場のマッチレース 0,50 88 19 46 70 84 14 20 59 51 22 4 94 52 22
|
New Mop-up Operation #2 0.5 20 11 41 23 5 31 36 14 5
|
||||||
Maximum Attack 4th Stage -A- (Ep. IV) 0,33 57 13 68 56 58 20 18 13 16 3 30 26 6
|
New Mop-up Operation #3 0.5 38 73 41 4 4 108 55 16
|
||||||
Maximum Attack 4th Stage -B- (Ep. IV) 0,33 60 11 58 50 20 3 48 24 15 17 3 40 32 19
|
New Mop-up Operation #4 0.5 29 25 38 24 1 46 40 3
|
||||||
Maximum Attack 4th Stage -C- (Ep. IV) 0,33 73 16 69 74 37 6 33 20 22 16 13 37 26 18
|
New Mop-up Operation #5 0.5 11 38 40 25 4 19 37 30 7
|
||||||
New Mop-up Operation #1 0,50 37 22 32 20 8 20 5 5 2
|
War of Limits 1 0.5 42 42 51 25 12 47 12 10 5
|
||||||
New Mop-up Operation #2 0,50 20 11 41 23 5 31 36 14 5
|
War of Limits 2 0.5 37 11 92 37 5 39 74 25 3
|
||||||
New Mop-up Operation #3 0,50 38 73 41 4 4 108 55 16
|
War of Limits 3 0.5 47 37 66 6 85 87 26 4
|
||||||
New Mop-up Operation #4 0,50 29 25 38 24 1 46 40 3
|
War of Limits 4 0.5 26 30 26 28 3 1 37 36 16
|
||||||
New Mop-up Operation #5 0,50 11 38 40 25 4 19 37 30 7
|
War of Limits 5 0.5 44 48 41 11 4 15 49 19 7
|
||||||
War of Limits 1 0,50 42 42 51 25 12 47 12 10 5
|
MAXIMUM ATTACK 3 Ver2 0.5 83 54 122 115 99 4 46 45 39 47 10 101 103 32
|
||||||
War of Limits 2 0,50 37 11 92 37 5 39 74 25 3
|
1-1:Planet Ragol 0.5 2 4 36 4 40 7 6
|
||||||
War of Limits 3 0,50 47 37 66 6 85 87 26 4
|
1-2:Torrential Woods 0.5 5 17 3 19 7 35 31 16
|
||||||
War of Limits 4 0,50 26 30 26 28 3 1 37 36 16
|
1-3:Subterranean Den 0.5 5 12 3 33 10 45 32 15 1
|
||||||
War of Limits 5 0,50 44 48 41 11 4 15 49 19 7
|
2-1:Infernal Cavern 0.75 18 37 17 114 18 3
|
||||||
MAXIMUM ATTACK 3 Ver2 0,50 83 54 122 115 99 4 46 45 39 47 10 101 103 32
|
2-2:Deep Within 0.75 20 59 15 165 31 7 16
|
||||||
1-1:Planet Ragol 0,50 2 4 36 4 40 7 6
|
2-3:The Mutation 0.75 7 41 12 89 42 24 10 2 13
|
||||||
1-2:Torrential Woods 0,50 5 17 3 19 7 35 31 16
|
2-4:Waterway Shadow 0.75 16 36 4 17 165 87 28 4 4 1
|
||||||
1-3:Subterranean Den 0,50 5 12 3 33 10 45 32 15 1
|
3-1:The Facility 0.75 3 115 12 2 47 2 1
|
||||||
2-1:Infernal Cavern 0,75 18 37 17 114 18 3
|
3-2:Machines Attack 0.75 22 60 9 14 2 59 2 7
|
||||||
2-2:Deep Within 0,75 20 59 15 165 31 7 16
|
3-3:Central Control 0.75 11 93 4 16 6 90 3 3 1
|
||||||
2-3:The Mutation 0,75 7 41 12 89 42 24 10 2 13
|
4-1:The Lost Ruins 0.75 14 42 3 8 4 41 1 4 10 13 18 61 7 3 5 89
|
||||||
2-4:Waterway Shadow 0,75 16 36 4 17 165 87 28 4 4 1
|
4-2:Buried Relics 0.75 31 20 2 28 55 6 5 50
|
||||||
3-1:The Facility 0,75 3 115 12 2 47 2 1
|
4-3:Hero & Daughter 0.75 26 4 30 7 5 75 50 22 8 122
|
||||||
3-2:Machines Attack 0,75 22 60 9 14 2 59 2 7
|
4-4:The Tomb Stirs 0.75 17 16 10 25 82 35 34 7 55
|
||||||
3-3:Central Control 0,75 11 93 4 16 6 90 3 3 1
|
4-5:Dark Inheritance 0.75 26 11 36 9 12 111 78 44 6 143 1
|
||||||
4-1:The Lost Ruins 0,75 14 42 3 8 4 41 1 4 10 13 18 61 7 3 5 89
|
5-1:Test/VR Temple 1 0.75 5 13 3 29 2 16 17 33
|
||||||
4-2:Buried Relics 0,75 31 20 2 28 55 6 5 50
|
5-2:Test/VR Temple 2 0.75 11 23 6 52 17 21 25 15 7
|
||||||
4-3:Hero & Daughter 0,75 26 4 30 7 5 75 50 22 8 122
|
5-3:Test/VR Temple 3 0.75 9 4 4 35 12 17 17 12 9
|
||||||
4-4:The Tomb Stirs 0,75 17 16 10 25 82 35 34 7 55
|
5-4:Test/VR Temple 4 0.75 5 29 5 56 5 24 14 47 23 8
|
||||||
4-5:Dark Inheritance 0,75 26 11 36 9 12 111 78 44 6 143 1
|
5-5:Test/VR Temple 5 0.75 11 26 6 63 16 21 34 27 9 1
|
||||||
5-1:Test/VR Temple 1 0,75 5 13 3 29 2 16 17 33
|
6-1:Test/Spaceship 1 0.75 32 24 5 54 7 12
|
||||||
5-2:Test/VR Temple 2 0,75 11 23 6 52 17 21 25 15 7
|
6-2:Test/Spaceship 2 0.75 50 24 9 8 84 5 3 17 5
|
||||||
5-3:Test/VR Temple 3 0,75 9 4 4 35 12 17 17 12 9
|
6-3:Test/Spaceship 3 0.75 36 27 15 16 50 1 5 26 5
|
||||||
5-4:Test/VR Temple 4 0,75 5 29 5 56 5 24 14 47 23 8
|
6-4:Test/Spaceship 4 0.75 39 36 8 10 87 6 3 25 11
|
||||||
5-5:Test/VR Temple 5 0,75 11 26 6 63 16 21 34 27 9 1
|
6-5:Test/Spaceship 5 0.75 41 32 10 10 92 5 3 27 11 1
|
||||||
6-1:Test/Spaceship 1 0,75 32 24 5 54 7 12
|
7-1:From the Past 0.75 3 55 17 4 20 3 20
|
||||||
6-2:Test/Spaceship 2 0,75 50 24 9 8 84 5 3 17 5
|
7-2:Seeking Clues 0.75 3 37 19 1 25 43 6 8
|
||||||
6-3:Test/Spaceship 3 0,75 36 27 15 16 50 1 5 26 5
|
7-3:Silent Beach 0.75 4 29 8 30 45 1 94 5
|
||||||
6-4:Test/Spaceship 4 0,75 39 36 8 10 87 6 3 25 11
|
7-4:Central Control 0.75 11 6 22 6 4 17 18 3 34 4
|
||||||
6-5:Test/Spaceship 5 0,75 41 32 10 10 92 5 3 27 11 1
|
7-5:Isle of Mutants 0.75 11 6 59 42 1 43 56 1 132 1 1
|
||||||
7-1:From the Past 0,75 3 55 17 4 20 3 20
|
8-1:Below the Waves 0.75 9 3 35 17 25 23 3
|
||||||
7-2:Seeking Clues 0,75 3 37 19 1 25 43 6 8
|
8-2:Desire's End 0.75 2 4 34 43 25 28 24 5
|
||||||
7-3:Silent Beach 0,75 4 29 8 30 45 1 94 5
|
8-3:Purple Lamplight 0.75 7 7 23 38 19 41 39 4 1
|
||||||
7-4:Central Control 0,75 11 6 22 6 4 17 18 3 34 4
|
9-1:Missing Research 0.75 26 10 40 12 67 48 27 1
|
||||||
7-5:Isle of Mutants 0,75 11 6 59 42 1 43 56 1 132 1 1
|
9-2:Data Retrieval 0.75 41 18 28 18 48 21 24 5
|
||||||
8-1:Below the Waves 0,75 9 3 35 17 25 23 3
|
9-3:Reality & Truth 0.75 24 9 31 4 13 21 22 50 1
|
||||||
8-2:Desire's End 0,75 2 4 34 43 25 28 24 5
|
9-4:Pursuit 0.75 30 17 34 5 17 45 55 29 5
|
||||||
8-3:Purple Lamplight 0,75 7 7 23 38 19 41 39 4 1
|
9-5:The Chosen (1/2) 0.75 36 5 46 9 25 10 12 5 3 2 62 20 9
|
||||||
9-1:Missing Research 0,75 26 10 40 12 67 48 27 1
|
9-6:The Chosen (2/2) 0.75 12 21 19 34 1 2 25 34 4
|
||||||
9-2:Data Retrieval 0,75 41 18 28 18 48 21 24 5
|
9-7:Sacred Ground 0.75 28 39 11 29 1 5 54 38 11
|
||||||
9-3:Reality & Truth 0,75 24 9 31 4 13 21 22 50 1
|
9-8:The Final Cycle 0.75 45 41 63 47 1 6 57 61 8 1
|
||||||
9-4:Pursuit 0,75 30 17 34 5 17 45 55 29 5
|
Point of Disaster 0.25 50 31 50 31 4 1 20 24 8 6 9 10 4 3 1
|
||||||
9-5:The Chosen (1/2) 0,75 36 5 46 9 25 10 12 5 3 2 62 20 9
|
Battle Training 0.5 2 2 12 2 14 3
|
||||||
9-6:The Chosen (2/2) 0,75 12 21 19 34 1 2 25 34 4
|
Claiming a Stake 0.5 5 1 1 19 2
|
||||||
9-7:Sacred Ground 0,75 28 39 11 29 1 5 54 38 11
|
Magnitude of Metal 0.5 4 1 16
|
||||||
9-8:The Final Cycle 0,75 45 41 63 47 1 6 57 61 8 1
|
Journalistic Pursuit 0.5 1 11 3 12 1 18 9 6
|
||||||
Point of Disaster 0,25 50 31 50 31 4 1 20 24 8 6 9 10 4 3 1
|
The Fake in Yellow 0.5 47
|
||||||
Battle Training 0,50 2 2 12 2 14 3
|
Native Research 0.5 2 13 4 10 4 29 13 8
|
||||||
Claiming a Stake 0,50 5 1 1 19 2
|
Forest of Sorrow 0.13 16 15 4 14 7 26 15 3
|
||||||
Magnitude of Metal 0,50 4 1 16
|
Gran Squall 0.5 4 15 7 18 4 24 13 7
|
||||||
Journalistic Pursuit 0,50 1 11 3 12 1 18 9 6
|
Addicting Food 0.5 19 62 2 19 195 38 15 13 7
|
||||||
The Fake in Yellow 0,50 47
|
The Lost Bride 0.5 2 20 2 33 6 5 7
|
||||||
Native Research 0,50 2 13 4 10 4 29 13 8
|
Waterfall Tears 0.5 6 18 12 37 6 1
|
||||||
Forest of Sorrow 0,13 16 15 4 14 7 26 15 3
|
Black Paper 0.5 12 20 2 14 94 31 10 8 3
|
||||||
Gran Squall 0,50 4 15 7 18 4 24 13 7
|
Secret Delivery 0.5 9 18 5 59 9 5 5
|
||||||
Addicting Food 0,50 19 62 2 19 195 38 15 13 7
|
Soul of a Blacksmith 0.5 5 11 5 28 11 31 29 27 1 14 17 6 12 125 44 25 9 2 6
|
||||||
The Lost Bride 0,50 2 20 2 33 6 5 7
|
Letter from Lionel 0.5 5 17 2 19 4 34 15 5 4 36 2 74 19 9 11 1
|
||||||
Waterfall Tears 0,50 6 18 12 37 6 1
|
The Grave's Butler 0.5 9 22 4 35 7 2 1
|
||||||
Black Paper 0,50 12 20 2 14 94 31 10 8 3
|
Knowing One's Heart 0.5 22 5 2 29 1
|
||||||
Secret Delivery 0,50 9 18 5 59 9 5 5
|
The Retired Hunter 0.5 1 8 2 7 6 6 4 3 3 3 4 17 7 18 1 42
|
||||||
Soul of a Blacksmith 0,50 5 11 5 28 11 31 29 27 1 14 17 6 12 125 44 25 9 2 6
|
Dr. Osto's Research 0.5 13 27 3 2 15 3
|
||||||
Letter from Lionel 0,50 5 17 2 19 4 34 15 5 4 36 2 74 19 9 11 1
|
Unsealed Door 0.5 1 13 97 6 2 62 3 3
|
||||||
The Grave's Butler 0,50 9 22 4 35 7 2 1
|
Soul of Steel 0.5 22 1 2 1 5 11 4 7 14 12 14 4 40
|
||||||
Knowing One's Heart 0,50 22 5 2 29 1
|
Doc's Secret Plan 0.5 9 11 7 47 7 1 6 29
|
||||||
The Retired Hunter 0,50 1 8 2 7 6 6 4 3 3 3 4 17 7 18 1 42
|
Seek my Master 0.5 21 3 20 2 9 43 24 4 2 86
|
||||||
Dr. Osto's Research 0,50 13 27 3 2 15 3
|
From the Depths 0.5 11 3 17 6 4 41 23 11 7 71
|
||||||
Unsealed Door 0,50 1 13 97 6 2 62 3 3
|
Central Dome Fire Swirl 0.5 4 19 19 14 9 19 34
|
||||||
Soul of Steel 0,50 22 1 2 1 5 11 4 7 14 12 14 4 40
|
Seat of the Heart 0.5 3 7 2 9 3 12 11 12 2 25 1 16 16 3 2 1 1 2 5 5 12 4 8 4 6 10 5 2 13 1 7 2
|
||||||
Doc's Secret Plan 0,50 9 11 7 47 7 1 6 29
|
Pioneer Spirit 0.5 40 1 14 25 29 31 3 21 8 2 4 4 40 29 5
|
||||||
Seek my Master 0,50 21 3 20 2 9 43 24 4 2 86
|
Warrior's Pride 0.5 61 46 51 53 29 35 10 23 13
|
||||||
From the Depths 0,50 11 3 17 6 4 41 23 11 7 71
|
The Restless Lion 0.5 8 16 13 14 3 13 10 1
|
||||||
Central Dome Fire Swirl 0,50 4 19 19 14 9 19 34
|
To the End of the Wilderness 0.5 56 14 14 41 13 77 55 47 2
|
||||||
Seat of the Heart 0,50 3 7 2 9 3 12 11 12 2 25 1 16 16 3 2 1 1 2 5 5 12 4 8 4 6 10 5 2 13 1 7 2
|
|
||||||
Pioneer Spirit 0,50 40 1 14 25 29 31 3 21 8 2 4 4 40 29 5
|
|
||||||
Warrior's Pride 0,50 61 46 51 53 29 35 10 23 13
|
|
||||||
The Restless Lion 0,50 8 16 13 14 3 13 10 1
|
|
||||||
To the End of the Wilderness 0,50 56 14 14 41 13 77 55 47 2
|
|
|
@ -328,9 +328,10 @@ export class EnemyDrop implements ItemDrop {
|
|||||||
export class HuntMethod {
|
export class HuntMethod {
|
||||||
constructor(
|
constructor(
|
||||||
/**
|
/**
|
||||||
* Time taken in hours.
|
* The time it takes to complete the quest in hours.
|
||||||
*/
|
*/
|
||||||
public time: number,
|
public time: number,
|
||||||
|
public name: string,
|
||||||
public quest: SimpleQuest
|
public quest: SimpleQuest
|
||||||
) { }
|
) { }
|
||||||
}
|
}
|
||||||
|
@ -20,46 +20,35 @@ class HuntMethodStore {
|
|||||||
return NpcType.byNameAndEpisode(enemy, parseInt(episode, 10))!;
|
return NpcType.byNameAndEpisode(enemy, parseInt(episode, 10))!;
|
||||||
});
|
});
|
||||||
|
|
||||||
return rows.slice(2)
|
return rows.slice(2).map(row => {
|
||||||
.filter(row => {
|
const questName = row[0];
|
||||||
const questName = row[0];
|
const time = parseFloat(row[1]);
|
||||||
// TODO: let's not hard code this...
|
|
||||||
switch (questName) {
|
|
||||||
case 'MAXIMUM ATTACK 3 Ver2':
|
|
||||||
case 'LOGiN presents 勇場のマッチレース':
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.map(row => {
|
|
||||||
const questName = row[0];
|
|
||||||
const time = parseFloat(row[1]);
|
|
||||||
|
|
||||||
const npcs = row.slice(2, -2).flatMap((cell, cellI) => {
|
const npcs = row.slice(2, -2).flatMap((cell, cellI) => {
|
||||||
const amount = parseInt(cell, 10);
|
const amount = parseInt(cell, 10);
|
||||||
const type = npcTypeByIndex[cellI];
|
const type = npcTypeByIndex[cellI];
|
||||||
const enemies = [];
|
const enemies = [];
|
||||||
|
|
||||||
if (type) {
|
if (type) {
|
||||||
for (let i = 0; i < amount; i++) {
|
for (let i = 0; i < amount; i++) {
|
||||||
enemies.push(new SimpleNpc(type));
|
enemies.push(new SimpleNpc(type));
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.error(`Couldn't get type for cellI ${cellI}.`);
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.error(`Couldn't get type for cellI ${cellI}.`);
|
||||||
|
}
|
||||||
|
|
||||||
return enemies;
|
return enemies;
|
||||||
});
|
|
||||||
|
|
||||||
return new HuntMethod(
|
|
||||||
time,
|
|
||||||
new SimpleQuest(
|
|
||||||
questName,
|
|
||||||
npcs
|
|
||||||
)
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return new HuntMethod(
|
||||||
|
time,
|
||||||
|
questName,
|
||||||
|
new SimpleQuest(
|
||||||
|
questName,
|
||||||
|
npcs
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import solver from 'javascript-lp-solver';
|
import solver from 'javascript-lp-solver';
|
||||||
import { IObservableArray, observable, runInAction } from "mobx";
|
import { IObservableArray, observable, runInAction } from "mobx";
|
||||||
import { Difficulties, Difficulty, Item, NpcType, SectionId, SectionIds, KONDRIEU_PROB, RARE_ENEMY_PROB } from "../domain";
|
import { Difficulties, Difficulty, Item, NpcType, SectionId, SectionIds, KONDRIEU_PROB, RARE_ENEMY_PROB, HuntMethod } from "../domain";
|
||||||
import { huntMethodStore } from "./HuntMethodStore";
|
import { huntMethodStore } from "./HuntMethodStore";
|
||||||
import { itemDropStore } from './ItemDropStore';
|
import { itemDropStore } from './ItemDropStore';
|
||||||
|
|
||||||
@ -29,8 +29,9 @@ export class OptimizationResult {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Deal with hidoom and migium.
|
// TODO: Prefer methods that don't split pan arms over methods that do.
|
||||||
// TODO: Row of totals.
|
// TODO: Row of totals.
|
||||||
|
// TODO: save state in url for easy sharing.
|
||||||
// TODO: group similar methods (e.g. same difficulty, same quest and similar ID).
|
// TODO: group similar methods (e.g. same difficulty, same quest and similar ID).
|
||||||
// This way people can choose their preferred section ID.
|
// This way people can choose their preferred section ID.
|
||||||
// TODO: order of items in results table should match order in wanted table.
|
// TODO: order of items in results table should match order in wanted table.
|
||||||
@ -56,14 +57,24 @@ class HuntOptimizerStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add a variable to the LP model per method per difficulty per section ID.
|
// Add a variable to the LP model per method per difficulty per section ID.
|
||||||
|
// When a method with pan arms is encountered, two variables are added. One for the method
|
||||||
|
// with migiums and hidooms and one with pan arms.
|
||||||
// Each variable has a time property to minimize and a property per item with the number
|
// Each variable has a time property to minimize and a property per item with the number
|
||||||
// of enemies that drop the item multiplied by the corresponding drop rate as its value.
|
// of enemies that drop the item multiplied by the corresponding drop rate as its value.
|
||||||
type Variable = {
|
type Variable = {
|
||||||
time: number,
|
time: number,
|
||||||
[itemName: string]: number
|
[itemName: string]: number,
|
||||||
}
|
}
|
||||||
const variables: { [methodName: string]: Variable } = {};
|
const variables: { [methodName: string]: Variable } = {};
|
||||||
|
|
||||||
|
type VariableDetails = {
|
||||||
|
method: HuntMethod,
|
||||||
|
difficulty: Difficulty,
|
||||||
|
sectionId: SectionId,
|
||||||
|
splitPanArms: boolean,
|
||||||
|
}
|
||||||
|
const variableDetails: Map<string, VariableDetails> = new Map();
|
||||||
|
|
||||||
const wantedItems = new Set(this.wantedItems.filter(w => w.amount > 0).map(w => w.item));
|
const wantedItems = new Set(this.wantedItems.filter(w => w.amount > 0).map(w => w.item));
|
||||||
|
|
||||||
for (const method of methods) {
|
for (const method of methods) {
|
||||||
@ -93,25 +104,66 @@ class HuntOptimizerStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const diff of Difficulties) {
|
// Create a secondary counts map if there are any pan arms that can be split into
|
||||||
for (const sectionId of SectionIds) {
|
// migiums and hidooms.
|
||||||
const variable: Variable = {
|
const countsList: Array<Map<NpcType, number>> = [counts];
|
||||||
time: method.time
|
const panArmsCount = counts.get(NpcType.PanArms);
|
||||||
};
|
const panArms2Count = counts.get(NpcType.PanArms2);
|
||||||
let addVariable = false;
|
|
||||||
|
|
||||||
for (const [npcType, count] of counts.entries()) {
|
if (panArmsCount || panArms2Count) {
|
||||||
const drop = dropTable.getDrop(diff, sectionId, npcType);
|
const splitCounts = new Map(counts);
|
||||||
|
|
||||||
if (drop && wantedItems.has(drop.item)) {
|
if (panArmsCount) {
|
||||||
const value = variable[drop.item.name] || 0;
|
splitCounts.delete(NpcType.PanArms);
|
||||||
variable[drop.item.name] = value + count * drop.rate;
|
splitCounts.set(NpcType.Migium, panArmsCount);
|
||||||
addVariable = true;
|
splitCounts.set(NpcType.Hidoom, panArmsCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (panArms2Count) {
|
||||||
|
splitCounts.delete(NpcType.PanArms2);
|
||||||
|
splitCounts.set(NpcType.Migium2, panArms2Count);
|
||||||
|
splitCounts.set(NpcType.Hidoom2, panArms2Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
countsList.push(splitCounts);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < countsList.length; i++) {
|
||||||
|
const counts = countsList[i];
|
||||||
|
const splitPanArms = i === 1;
|
||||||
|
|
||||||
|
for (const diff of Difficulties) {
|
||||||
|
for (const sectionId of SectionIds) {
|
||||||
|
const variable: Variable = {
|
||||||
|
time: method.time
|
||||||
|
};
|
||||||
|
let addVariable = false;
|
||||||
|
|
||||||
|
for (const [npcType, count] of counts.entries()) {
|
||||||
|
const drop = dropTable.getDrop(diff, sectionId, npcType);
|
||||||
|
|
||||||
|
if (drop && wantedItems.has(drop.item)) {
|
||||||
|
const value = variable[drop.item.name] || 0;
|
||||||
|
variable[drop.item.name] = value + count * drop.rate;
|
||||||
|
addVariable = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (addVariable) {
|
if (addVariable) {
|
||||||
variables[`${diff}\t${sectionId}\t${method.quest.name}`] = variable;
|
let name = `${diff}\t${sectionId}\t${method.name}`;
|
||||||
|
|
||||||
|
if (splitPanArms) {
|
||||||
|
name += ' (Split Pan Arms)';
|
||||||
|
}
|
||||||
|
|
||||||
|
variables[name] = variable;
|
||||||
|
variableDetails.set(name, {
|
||||||
|
method,
|
||||||
|
difficulty: diff,
|
||||||
|
sectionId,
|
||||||
|
splitPanArms
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,14 +188,13 @@ class HuntOptimizerStore {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [method, runsOrOther] of Object.entries(result)) {
|
for (const [variableName, runsOrOther] of Object.entries(result)) {
|
||||||
const [diffStr, sIdStr, methodName] = method.split('\t', 3);
|
const details = variableDetails.get(variableName);
|
||||||
|
|
||||||
if (sIdStr && methodName) {
|
if (details) {
|
||||||
|
const { method, difficulty, sectionId, splitPanArms } = details;
|
||||||
const runs = runsOrOther as number;
|
const runs = runsOrOther as number;
|
||||||
const variable = variables[method];
|
const variable = variables[variableName];
|
||||||
const diff = (Difficulty as any)[diffStr];
|
|
||||||
const sectionId = (SectionId as any)[sIdStr];
|
|
||||||
|
|
||||||
const items = new Map<Item, number>();
|
const items = new Map<Item, number>();
|
||||||
|
|
||||||
@ -157,10 +208,10 @@ class HuntOptimizerStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.result.push(new OptimizationResult(
|
this.result.push(new OptimizationResult(
|
||||||
diff,
|
difficulty,
|
||||||
sectionId,
|
sectionId,
|
||||||
methodName,
|
method.name + (splitPanArms ? ' (Split Pan Arms)' : ''),
|
||||||
0.5,
|
method.time,
|
||||||
runs,
|
runs,
|
||||||
items
|
items
|
||||||
));
|
));
|
||||||
|
Loading…
Reference in New Issue
Block a user