tracer4b b526677126 Questbook Update + Buildscript Improvements (#681)
[EXPAND]
[[messages]]
messageTitle = "QB Update for GT 2.8 (#681)"
messageBody = """
[QB]
[DETAILS]
details = ["Fixes many Quest Book issues", "Updates QB with changes in GT 2.8"]
[DETAILS]
"""

[[messages]]
messageTitle = "Buildscript Refactor (#681)"
messageBody = """
[INTERNAL]
[DETAILS]
details = ["**Important: Buildscript has changed from `npx gulp...` or `gulp...` to `npm run gulp...`**!", "Moves to Node 16 Package Management + Typescript Strict Mode", "New Port QB, Check QB and Fix QB Tasks"]
[DETAILS]
"""
[EXPAND]


Co-authored-by: Integer Limit <103940576+IntegerLimit@users.noreply.github.com>
Co-authored-by: Ghzdude <44148655+ghzdude@users.noreply.github.com>
Co-authored-by: SparkedTheorem <162088357+SparkedTheorem@users.noreply.github.com>
2024-05-14 21:57:00 +10:00

138 lines
3.5 KiB
TypeScript

import PortQBData from "./portQBData.ts";
import {
booleanSelect,
dependencies,
emptyQuest,
findQuest,
id,
name,
stripRewards,
} from "../actionQBUtils.ts";
import { Quest } from "#types/bqQuestBook.ts";
import { performModification } from "./portQBModifications.ts";
import logInfo, { logNotImportant } from "../../../utils/log.ts";
let data: PortQBData;
export function setupLogic(dataIn: PortQBData): void {
data = dataIn;
}
export async function additions(): Promise<void> {
if (!(await booleanSelect("Port Additions?"))) {
logNotImportant("Skipping...");
return;
}
let newID =
[...data.toChangeIDsToQuests.keys()].sort((a, b) => a - b).pop() ?? 0;
const addingQuests: Quest[] = [];
logNotImportant("Porting Additions...");
for (const addition of data.changed.added) {
if (
!(await booleanSelect(
`Would you like to add Quest with ID ${id(addition)} and Name ${name(addition)}?`,
"Continue",
"Cancel",
))
) {
logInfo("Skipping...");
continue;
}
const addingID = ++newID;
logInfo(`Adding New Quest with ID ${addingID}...`);
const newQuest = { ...addition } as Quest; // Copy Quest
newQuest["questID:3"] = addingID;
addingQuests.push(newQuest);
// Add to Auto Quest Detection Map
data.foundQuests.set(id(addition), newQuest);
}
// Sort out Dependencies (Do Afterwards, so if new quests dep on each other, that works)
if (addingQuests.length === 0) return;
for (const quest of addingQuests) {
logInfo(
`Modifying Deps for Quest with ID ${id(quest)} and Name ${name(quest)}...`,
);
const deps = dependencies(quest);
const depTypes = quest["preRequisiteTypes:7"];
const useDepTypes = depTypes && depTypes.length === deps.length;
for (let i = 0; i < deps.length; i++) {
const depQuest = await findQuest(deps[i]);
if (!depQuest) {
deps.splice(i, 1);
if (useDepTypes) {
depTypes.splice(i, 1);
}
} else deps[i] = id(depQuest);
}
// if we are porting TO expert, strip rewards
if (data.type === "NORMAL") {
logInfo("Stripping Rewards...");
stripRewards(quest);
}
// Push to Output
data.toChangeIDsToQuests.set(id(quest), quest);
}
}
export async function modifications(): Promise<void> {
if (!(await booleanSelect("Port Modifications?"))) {
logNotImportant("Skipping...");
return;
}
logNotImportant("Porting Modifications...");
for (const modified of data.changed.modified) {
await performModification(modified);
}
}
export async function removals(): Promise<void> {
if (!(await booleanSelect("Port Removals?"))) {
logNotImportant("Skipping...");
return;
}
logNotImportant("Porting Removals...");
for (const removal of data.changed.removed) {
if (
!(await booleanSelect(
`Would you like to remove Quest with ID ${id(removal)} and Name ${name(removal)}?`,
"Continue",
"Cancel",
))
) {
logInfo("Skipping...");
continue;
}
const quest = await findQuest(
id(removal),
data.oldIDsToQuests?.get(id(removal)),
);
if (!quest) {
logInfo("Skipping, Could not find Corresponding Quest...");
continue;
}
logInfo("Removing Quest...");
const newId = id(quest);
const newEmptyQuest = { ...emptyQuest } as Quest; // Copy Quest
newEmptyQuest["questID:3"] = newId;
data.toChangeIDsToQuests.set(newId, newEmptyQuest);
// Remove quest from Quest Lines
if (data.questLines) {
for (const line of data.questLines) {
for (const key of Object.keys(line["quests:9"])) {
const questInfo = line["quests:9"][key];
if (newId === questInfo["id:3"]) delete line["quests:9"][key];
}
}
}
}
}