forked from Bitcoindefi/OpenAO
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexportClientObjs.ts
More file actions
102 lines (85 loc) · 3.15 KB
/
Copy pathexportClientObjs.ts
File metadata and controls
102 lines (85 loc) · 3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import fs from "node:fs";
import path from "node:path";
import { loadDefaultObjectsData, loadObjectsDataFromJsonFile } from "../objectData";
type SourceObject = {
name: string;
objType?: number;
grhIndex: number | string;
minHit?: number;
maxHit?: number;
minDef?: number;
maxDef?: number;
minDefMag?: number;
maxDefMag?: number;
resistenciaMagica?: number;
apu?: number;
proyectil?: number;
staffDamageBonus?: number;
magicDamageBonus?: number;
};
type ClientObject = {
name: string;
grhIndex: string;
objType?: number;
minHit?: number;
maxHit?: number;
minDef?: number;
maxDef?: number;
minDefMag?: number;
maxDefMag?: number;
resistenciaMagica?: number;
apu?: number;
proyectil?: number;
staffDamageBonus?: number;
magicDamageBonus?: number;
};
type ObjectsMap = Record<string, SourceObject>;
const DEFAULT_OUTPUT_PATH = path.resolve(__dirname, "../../../frontend/public/init/objs.json");
function resolveCliPath(value: string | undefined, fallback: string) {
if (!value?.trim()) {
return fallback;
}
return path.resolve(process.cwd(), value);
}
function addOptionalNumber(
target: Partial<ClientObject>,
key: Exclude<keyof ClientObject, "name" | "grhIndex">,
value: number | undefined,
) {
if (typeof value !== "number" || value === 0) {
return;
}
target[key] = value;
}
function toClientObject(source: SourceObject): ClientObject {
const clientObject: Partial<ClientObject> = {
name: source.name,
grhIndex: String(source.grhIndex),
};
addOptionalNumber(clientObject, "objType", source.objType);
addOptionalNumber(clientObject, "minHit", source.minHit);
addOptionalNumber(clientObject, "maxHit", source.maxHit);
addOptionalNumber(clientObject, "minDef", source.minDef);
addOptionalNumber(clientObject, "maxDef", source.maxDef);
addOptionalNumber(clientObject, "minDefMag", source.minDefMag);
addOptionalNumber(clientObject, "maxDefMag", source.maxDefMag);
addOptionalNumber(clientObject, "resistenciaMagica", source.resistenciaMagica);
addOptionalNumber(clientObject, "apu", source.apu);
addOptionalNumber(clientObject, "proyectil", source.proyectil);
addOptionalNumber(clientObject, "staffDamageBonus", source.staffDamageBonus);
addOptionalNumber(clientObject, "magicDamageBonus", source.magicDamageBonus);
return clientObject as ClientObject;
}
function main() {
const inputArg = process.argv[2]?.trim();
const inputPath = inputArg ? resolveCliPath(inputArg, inputArg) : null;
const outputPath = resolveCliPath(process.argv[3], DEFAULT_OUTPUT_PATH);
const source = (inputPath ? loadObjectsDataFromJsonFile(inputPath) : loadDefaultObjectsData()) as ObjectsMap;
const exportedObjects = Object.fromEntries(
Object.entries(source).map(([id, objectData]) => [id, toClientObject(objectData)]),
);
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
fs.writeFileSync(outputPath, JSON.stringify(exportedObjects));
console.log(`Exported ${Object.keys(exportedObjects).length} objects to ${outputPath}`);
}
main();