Filter out more quests that don't drop items.

This commit is contained in:
Daan Vanden Bosch 2019-06-22 14:58:57 +02:00
parent 15e652a5f4
commit 5f7a4d5c1d
4 changed files with 85 additions and 23 deletions

View File

@ -2561,6 +2561,37 @@
"Girtablulu": 12
}
},
{
"id": 31,
"name": "Black Paper's Dangerous Deal",
"episode": 4,
"enemyCounts": {
"SandRappy": 47,
"DelRappy": 1,
"Dorphon": 11,
"DorphonEclair": 1,
"Zu": 14,
"Pazuzu": 1
}
},
{
"id": 34,
"name": "Black Paper's Dangerous Deal 2",
"episode": 4,
"enemyCounts": {
"GoranDetonator": 5,
"MerissaAA": 3,
"PyroGoran": 14,
"MerissaA": 9,
"DelRappy": 6,
"SatelliteLizard": 9,
"Goran": 8,
"Girtablulu": 1,
"Zu": 3,
"Pazuzu": 1,
"SandRappy": 7
}
},
{
"id": 902,
"name": "Christmas Fiasco",
@ -2616,6 +2647,26 @@
"GoranDetonator": 22
}
},
{
"id": 314,
"name": "MAXIMUM ATTACK 3 Ver2",
"episode": 4,
"enemyCounts": {
"BaBoota": 47,
"Zu": 46,
"SatelliteLizard": 237,
"SandRappy": 83,
"Astark": 54,
"Boota": 45,
"ZeBoota": 39,
"Dorphon": 10,
"MerissaA": 99,
"Goran": 101,
"PyroGoran": 103,
"GoranDetonator": 32,
"Girtablulu": 4
}
},
{
"id": 303,
"name": "Maximum Attack 4th Stage -A-",

View File

@ -19,8 +19,9 @@ class HuntMethodStore {
`${process.env.PUBLIC_URL}/quests.${Server[server].toLowerCase()}.json`
);
const quests = await response.json() as QuestDto[];
const methods = new Array<HuntMethod>();
const methods = quests.map(quest => {
for (const quest of quests) {
let totalCount = 0;
const enemyCounts = new Map<NpcType, number>();
@ -35,18 +36,36 @@ class HuntMethodStore {
}
}
return new HuntMethod(
`q${quest.id}`,
quest.name,
new SimpleQuest(
quest.id,
// Filter out some quests.
switch (quest.id) {
// The following quests are left out because their enemies don't drop anything.
case 31: // Black Paper's Dangerous Deal
case 34: // Black Paper's Dangerous Deal 2
case 1305: // Maximum Attack S (Ep. 1)
case 1306: // Maximum Attack S (Ep. 2)
case 1307: // Maximum Attack S (Ep. 4)
case 313: // Beyond the Horizon
// MAXIMUM ATTACK 3 Ver2 is filtered out because its actual enemy count depends on the path taken.
// TODO: generate a method per path.
case 314:
continue;
}
methods.push(
new HuntMethod(
`q${quest.id}`,
quest.name,
quest.episode,
enemyCounts
),
/^\d-\d.*/.test(quest.name) ? 0.75 : (totalCount > 400 ? 0.75 : 0.5)
new SimpleQuest(
quest.id,
quest.name,
quest.episode,
enemyCounts
),
/^\d-\d.*/.test(quest.name) ? 0.75 : (totalCount > 400 ? 0.75 : 0.5)
)
);
});
}
this.loadFromLocalStorage(methods, server);
return methods;

View File

@ -42,6 +42,8 @@ export class OptimalMethod {
}
}
// TODO: take into account mothmants spawned from mothverts.
// TODO: take into account split slimes.
// TODO: Prefer methods that don't split pan arms over methods that do.
// For some reason this doesn't actually seem to be a problem, should probably investigate.
// TODO: Show expected value or probability per item per method.

View File

@ -53,9 +53,6 @@ async function update() {
/**
* Shop quests are not processed.
* MAXIMUM ATTACK 3 Ver2 is left out because its actual enemy count depends on the path taken.
* Black Paper's Dangerous Deal and Black Paper's Dangerous Deal 2 are left out because their
* enemies don't drop anything.
*
* TODO: Missing quests:
* - Maximum Attack 4th Stage -1R-
@ -64,7 +61,8 @@ async function update() {
* - Knight of Coral
* - Knight of Coral Advent
* - CAL's Clock Challenge
* - The Value of Money (can't be parsed)
* - The Value of Money (quest3_e.dat, can't be parsed, luckily doesn't have enemies)
* Note: The MA4R quests use a random area variation per area from the ABC MA quests. E.g. MA4-1R will use a random caves 2 variation from MA4-1A, MA4-1B or MA4-1C. Same for mines 2 and ruins 2.
*/
function updateQuests() {
logger.info('Updating quest data.');
@ -113,14 +111,6 @@ function processQuest(path: string, quests: QuestDto[]) {
if (q.questNo == null) {
throw new Error('No questNo.');
} else {
// Filter out some quests.
switch (q.questNo) {
case 31: // Black Paper's Dangerous Deal
case 34: // Black Paper's Dangerous Deal 2
case 314: // MAXIMUM ATTACK 3 Ver2
return;
}
}
const enemyCounts: { [npcTypeCode: string]: number } = {};