[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>
138 lines
3.5 KiB
TypeScript
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];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|