@d2runewizard/d2s 2.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +59 -0
  2. package/lib/binary/bitreader.d.ts +22 -0
  3. package/lib/binary/bitreader.js +100 -0
  4. package/lib/binary/bitreader.js.map +1 -0
  5. package/lib/binary/bitwriter.d.ts +21 -0
  6. package/lib/binary/bitwriter.js +118 -0
  7. package/lib/binary/bitwriter.js.map +1 -0
  8. package/lib/binary/constants.d.ts +4 -0
  9. package/lib/binary/constants.js +9 -0
  10. package/lib/binary/constants.js.map +1 -0
  11. package/lib/d2/attribute_enhancer.d.ts +5 -0
  12. package/lib/d2/attribute_enhancer.js +593 -0
  13. package/lib/d2/attribute_enhancer.js.map +1 -0
  14. package/lib/d2/attributes.d.ts +4 -0
  15. package/lib/d2/attributes.js +99 -0
  16. package/lib/d2/attributes.js.map +1 -0
  17. package/lib/d2/constants.d.ts +4 -0
  18. package/lib/d2/constants.js +16 -0
  19. package/lib/d2/constants.js.map +1 -0
  20. package/lib/d2/d2s.d.ts +10 -0
  21. package/lib/d2/d2s.js +106 -0
  22. package/lib/d2/d2s.js.map +1 -0
  23. package/lib/d2/header.d.ts +8 -0
  24. package/lib/d2/header.js +95 -0
  25. package/lib/d2/header.js.map +1 -0
  26. package/lib/d2/items.d.ts +17 -0
  27. package/lib/d2/items.js +728 -0
  28. package/lib/d2/items.js.map +1 -0
  29. package/lib/d2/skills.d.ts +4 -0
  30. package/lib/d2/skills.js +45 -0
  31. package/lib/d2/skills.js.map +1 -0
  32. package/lib/d2/stash.d.ts +3 -0
  33. package/lib/d2/stash.js +196 -0
  34. package/lib/d2/stash.js.map +1 -0
  35. package/lib/d2/types.d.ts +402 -0
  36. package/lib/d2/types.js +15 -0
  37. package/lib/d2/types.js.map +1 -0
  38. package/lib/d2/versions/default_header.d.ts +5 -0
  39. package/lib/d2/versions/default_header.js +721 -0
  40. package/lib/d2/versions/default_header.js.map +1 -0
  41. package/lib/data/parser.d.ts +3 -0
  42. package/lib/data/parser.js +627 -0
  43. package/lib/data/parser.js.map +1 -0
  44. package/lib/data/versions/96_constant_data.d.ts +14427 -0
  45. package/lib/data/versions/96_constant_data.js +5 -0
  46. package/lib/data/versions/96_constant_data.js.map +1 -0
  47. package/lib/data/versions/99_constant_data.d.ts +15572 -0
  48. package/lib/data/versions/99_constant_data.js +5 -0
  49. package/lib/data/versions/99_constant_data.js.map +1 -0
  50. package/lib/index.d.ts +8 -0
  51. package/lib/index.js +47 -0
  52. package/lib/index.js.map +1 -0
  53. package/package.json +46 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeAttributes = exports.readAttributes = void 0;
4
+ const bitwriter_1 = require("../binary/bitwriter");
5
+ //todo use constants.magical_properties and csvBits
6
+ async function readAttributes(char, reader, constants) {
7
+ char.attributes = {};
8
+ const header = reader.ReadString(2); //0x0000 [attributes header = 0x67, 0x66 "gf"]
9
+ if (header != "gf") {
10
+ // header is not present in first save after char is created
11
+ if (char.header.level === 1) {
12
+ const classData = constants.classes.find((c) => c.n === char.header.class).a;
13
+ char.attributes = {
14
+ strength: +classData.str,
15
+ energy: +classData.int,
16
+ dexterity: +classData.dex,
17
+ vitality: +classData.vit,
18
+ unused_stats: 0,
19
+ unused_skill_points: 0,
20
+ current_hp: +classData.vit + +classData.hpadd,
21
+ max_hp: +classData.vit + +classData.hpadd,
22
+ current_mana: +classData.int,
23
+ max_mana: +classData.int,
24
+ current_stamina: +classData.stam,
25
+ max_stamina: +classData.stam,
26
+ level: 1,
27
+ experience: 0,
28
+ gold: 0,
29
+ stashed_gold: 0,
30
+ };
31
+ return;
32
+ }
33
+ throw new Error(`Attribute header 'gf' not found at position ${reader.offset - 2 * 8}`);
34
+ }
35
+ let bitoffset = 0;
36
+ let id = reader.ReadUInt16(9);
37
+ //read till 0x1ff end of attributes is found
38
+ while (id != 0x1ff) {
39
+ bitoffset += 9;
40
+ const field = constants.magical_properties[id];
41
+ if (field === undefined) {
42
+ throw new Error(`Invalid attribute id: ${id}`);
43
+ }
44
+ const size = field.cB;
45
+ char.attributes[Attributes[field.s]] = reader.ReadUInt32(size);
46
+ //current_hp - max_stamina need to be bit shifted
47
+ if (id >= 6 && id <= 11) {
48
+ char.attributes[Attributes[field.s]] >>>= 8;
49
+ }
50
+ bitoffset += size;
51
+ id = reader.ReadUInt16(9);
52
+ }
53
+ reader.Align();
54
+ }
55
+ exports.readAttributes = readAttributes;
56
+ async function writeAttributes(char, constants) {
57
+ const writer = new bitwriter_1.BitWriter();
58
+ writer.WriteString("gf", 2); //0x0000 [attributes header = 0x67, 0x66 "gf"]
59
+ for (let i = 0; i < 16; i++) {
60
+ const property = constants.magical_properties[i];
61
+ if (property === undefined) {
62
+ throw new Error(`Invalid attribute: ${property}`);
63
+ }
64
+ let value = char.attributes[Attributes[property.s]];
65
+ if (!value) {
66
+ continue;
67
+ }
68
+ const size = property.cB;
69
+ if (i >= 6 && i <= 11) {
70
+ value <<= 8;
71
+ }
72
+ writer.WriteUInt16(i, 9);
73
+ writer.WriteUInt32(value, size);
74
+ }
75
+ writer.WriteUInt16(0x1ff, 9);
76
+ writer.Align();
77
+ return writer.ToArray();
78
+ }
79
+ exports.writeAttributes = writeAttributes;
80
+ //nokkas names
81
+ const Attributes = {
82
+ strength: "strength",
83
+ energy: "energy",
84
+ dexterity: "dexterity",
85
+ vitality: "vitality",
86
+ statpts: "unused_stats",
87
+ newskills: "unused_skill_points",
88
+ hitpoints: "current_hp",
89
+ maxhp: "max_hp",
90
+ mana: "current_mana",
91
+ maxmana: "max_mana",
92
+ stamina: "current_stamina",
93
+ maxstamina: "max_stamina",
94
+ level: "level",
95
+ experience: "experience",
96
+ gold: "gold",
97
+ goldbank: "stashed_gold",
98
+ };
99
+ //# sourceMappingURL=attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/d2/attributes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import * as types from "./types";
2
+ declare function getConstantData(version: number): types.IConstantData;
3
+ declare function setConstantData(version: number, data: types.IConstantData): void;
4
+ export { getConstantData, setConstantData };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setConstantData = exports.getConstantData = void 0;
4
+ const versionedConstants = new Map();
5
+ function getConstantData(version) {
6
+ if (!(version in versionedConstants)) {
7
+ throw new Error(`No constant data found for this version ${version}`);
8
+ }
9
+ return versionedConstants[version];
10
+ }
11
+ exports.getConstantData = getConstantData;
12
+ function setConstantData(version, data) {
13
+ versionedConstants[version] = data;
14
+ }
15
+ exports.setConstantData = setConstantData;
16
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/d2/constants.ts"],"names":[],"mappings":";;;AAEA,MAAM,kBAAkB,GAAqC,IAAI,GAAG,EAA+B,CAAC;AAEpG,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,CAAC,CAAC,OAAO,IAAI,kBAAkB,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,EAAE,CAAC,CAAC;KACvE;IACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAMQ,0CAAe;AAJxB,SAAS,eAAe,CAAC,OAAe,EAAE,IAAyB;IACjE,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AACrC,CAAC;AAEyB,0CAAe"}
@@ -0,0 +1,10 @@
1
+ import * as types from "./types";
2
+ import { BitReader } from "../binary/bitreader";
3
+ import { BitWriter } from "../binary/bitwriter";
4
+ declare function reader(buffer: Uint8Array): BitReader;
5
+ declare function read(buffer: Uint8Array, constants?: types.IConstantData, userConfig?: types.IConfig): Promise<types.ID2S>;
6
+ declare function readItem(buffer: Uint8Array, version: number, constants?: types.IConstantData, userConfig?: types.IConfig): Promise<types.IItem>;
7
+ declare function writer(buffer: Uint8Array): BitWriter;
8
+ declare function write(data: types.ID2S, constants?: types.IConstantData, userConfig?: types.IConfig): Promise<Uint8Array>;
9
+ declare function writeItem(item: types.IItem, version: number, constants?: types.IConstantData, userConfig?: types.IConfig): Promise<Uint8Array>;
10
+ export { reader, writer, read, write, readItem, writeItem };
package/lib/d2/d2s.js ADDED
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.writeItem = exports.readItem = exports.write = exports.read = exports.writer = exports.reader = void 0;
23
+ const header_1 = require("./header");
24
+ const attributes_1 = require("./attributes");
25
+ const bitreader_1 = require("../binary/bitreader");
26
+ const bitwriter_1 = require("../binary/bitwriter");
27
+ const skills_1 = require("./skills");
28
+ const items = __importStar(require("./items"));
29
+ const constants_1 = require("./constants");
30
+ const attribute_enhancer_1 = require("./attribute_enhancer");
31
+ const defaultConfig = {
32
+ extendedStash: false,
33
+ sortProperties: true,
34
+ };
35
+ function reader(buffer) {
36
+ return new bitreader_1.BitReader(buffer);
37
+ }
38
+ exports.reader = reader;
39
+ async function read(buffer, constants, userConfig) {
40
+ const char = {};
41
+ const reader = new bitreader_1.BitReader(buffer);
42
+ const config = Object.assign(defaultConfig, userConfig);
43
+ await header_1.readHeader(char, reader);
44
+ //could load constants based on version here
45
+ if (!constants) {
46
+ constants = constants_1.getConstantData(char.header.version);
47
+ }
48
+ await header_1.readHeaderData(char, reader, constants);
49
+ await attributes_1.readAttributes(char, reader, constants);
50
+ await skills_1.readSkills(char, reader, constants);
51
+ await items.readCharItems(char, reader, constants, config);
52
+ await items.readCorpseItems(char, reader, constants, config);
53
+ if (char.header.status.expansion) {
54
+ await items.readMercItems(char, reader, constants, config);
55
+ await items.readGolemItems(char, reader, constants, config);
56
+ }
57
+ await attribute_enhancer_1.enhanceAttributes(char, constants, config);
58
+ return char;
59
+ }
60
+ exports.read = read;
61
+ async function readItem(buffer, version, constants, userConfig) {
62
+ const reader = new bitreader_1.BitReader(buffer);
63
+ const config = Object.assign(defaultConfig, userConfig);
64
+ if (!constants) {
65
+ constants = constants_1.getConstantData(version);
66
+ }
67
+ const item = await items.readItem(reader, version, constants, config);
68
+ await attribute_enhancer_1.enhanceItems([item], constants);
69
+ return item;
70
+ }
71
+ exports.readItem = readItem;
72
+ function writer(buffer) {
73
+ return new bitwriter_1.BitWriter();
74
+ }
75
+ exports.writer = writer;
76
+ async function write(data, constants, userConfig) {
77
+ const config = Object.assign(defaultConfig, userConfig);
78
+ const writer = new bitwriter_1.BitWriter();
79
+ writer.WriteArray(await header_1.writeHeader(data));
80
+ if (!constants) {
81
+ constants = constants_1.getConstantData(data.header.version);
82
+ }
83
+ writer.WriteArray(await header_1.writeHeaderData(data, constants));
84
+ writer.WriteArray(await attributes_1.writeAttributes(data, constants));
85
+ writer.WriteArray(await skills_1.writeSkills(data, constants));
86
+ writer.WriteArray(await items.writeCharItems(data, constants, config));
87
+ writer.WriteArray(await items.writeCorpseItem(data, constants, config));
88
+ if (data.header.status.expansion) {
89
+ writer.WriteArray(await items.writeMercItems(data, constants, config));
90
+ writer.WriteArray(await items.writeGolemItems(data, constants, config));
91
+ }
92
+ await header_1.fixHeader(writer);
93
+ return writer.ToArray();
94
+ }
95
+ exports.write = write;
96
+ async function writeItem(item, version, constants, userConfig) {
97
+ const config = Object.assign(defaultConfig, userConfig);
98
+ const writer = new bitwriter_1.BitWriter();
99
+ if (!constants) {
100
+ constants = constants_1.getConstantData(version);
101
+ }
102
+ writer.WriteArray(await items.writeItem(item, version, constants, config));
103
+ return writer.ToArray();
104
+ }
105
+ exports.writeItem = writeItem;
106
+ //# sourceMappingURL=d2s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d2s.js","sourceRoot":"","sources":["../../src/d2/d2s.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,qCAA+F;AAC/F,6CAA+D;AAC/D,mDAAgD;AAChD,mDAAgD;AAChD,qCAAmD;AACnD,+CAAiC;AACjC,2CAA8C;AAC9C,6DAAuE;AAEvE,MAAM,aAAa,GAAG;IACpB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,IAAI;CACJ,CAAC;AAEnB,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,IAAI,qBAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AA+EQ,wBAAM;AA7Ef,KAAK,UAAU,IAAI,CAAC,MAAkB,EAAE,SAA+B,EAAE,UAA0B;IACjG,MAAM,IAAI,GAAG,EAAgB,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,qBAAS,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,mBAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,2BAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAClD;IACD,MAAM,uBAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,2BAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,mBAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;QAChC,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;KAC7D;IACD,MAAM,sCAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAyDwB,oBAAI;AAvD7B,KAAK,UAAU,QAAQ,CACrB,MAAkB,EAClB,OAAe,EACf,SAA+B,EAC/B,UAA0B;IAE1B,MAAM,MAAM,GAAG,IAAI,qBAAS,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,2BAAe,CAAC,OAAO,CAAC,CAAC;KACtC;IACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,iCAAY,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAyCqC,4BAAQ;AAvC9C,SAAS,MAAM,CAAC,MAAkB;IAChC,OAAO,IAAI,qBAAS,EAAE,CAAC;AACzB,CAAC;AAqCgB,wBAAM;AAnCvB,KAAK,UAAU,KAAK,CAAC,IAAgB,EAAE,SAA+B,EAAE,UAA0B;IAChG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,qBAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,UAAU,CAAC,MAAM,oBAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,2BAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAClD;IACD,MAAM,CAAC,UAAU,CAAC,MAAM,wBAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,UAAU,CAAC,MAAM,4BAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,UAAU,CAAC,MAAM,oBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;QAChC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;KACzE;IACD,MAAM,kBAAS,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAiB8B,sBAAK;AAfpC,KAAK,UAAU,SAAS,CACtB,IAAiB,EACjB,OAAe,EACf,SAA+B,EAC/B,UAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,qBAAS,EAAE,CAAC;IAC/B,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,2BAAe,CAAC,OAAO,CAAC,CAAC;KACtC;IACD,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAE+C,8BAAS"}
@@ -0,0 +1,8 @@
1
+ import * as types from "./types";
2
+ import { BitReader } from "../binary/bitreader";
3
+ import { BitWriter } from "../binary/bitwriter";
4
+ export declare function readHeader(char: types.ID2S, reader: BitReader): Promise<void>;
5
+ export declare function readHeaderData(char: types.ID2S, reader: BitReader, constants: types.IConstantData): Promise<void>;
6
+ export declare function writeHeader(char: types.ID2S): Promise<Uint8Array>;
7
+ export declare function writeHeaderData(char: types.ID2S, constants: types.IConstantData): Promise<Uint8Array>;
8
+ export declare function fixHeader(writer: BitWriter): Promise<void>;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.fixHeader = exports.writeHeaderData = exports.writeHeader = exports.readHeaderData = exports.readHeader = void 0;
23
+ const bitwriter_1 = require("../binary/bitwriter");
24
+ async function readHeader(char, reader) {
25
+ char.header = {};
26
+ //0x0000
27
+ char.header.identifier = reader.ReadUInt32().toString(16).padStart(8, "0");
28
+ if (char.header.identifier != "aa55aa55") {
29
+ throw new Error(`D2S identifier 'aa55aa55' not found at position ${reader.offset - 4 * 8}`);
30
+ }
31
+ //0x0004
32
+ char.header.version = reader.ReadUInt32();
33
+ }
34
+ exports.readHeader = readHeader;
35
+ async function readHeaderData(char, reader, constants) {
36
+ const v = await _versionSpecificHeader(char.header.version);
37
+ if (v == null) {
38
+ throw new Error(`Cannot parse version: ${char.header.version}`);
39
+ }
40
+ v.readHeader(char, reader, constants);
41
+ }
42
+ exports.readHeaderData = readHeaderData;
43
+ async function writeHeader(char) {
44
+ const writer = new bitwriter_1.BitWriter();
45
+ writer.WriteUInt32(parseInt(char.header.identifier, 16)).WriteUInt32(char.header.version);
46
+ return writer.ToArray();
47
+ }
48
+ exports.writeHeader = writeHeader;
49
+ async function writeHeaderData(char, constants) {
50
+ const writer = new bitwriter_1.BitWriter();
51
+ const v = await _versionSpecificHeader(char.header.version);
52
+ if (v == null) {
53
+ throw new Error(`Cannot parse version: ${char.header.version}`);
54
+ }
55
+ v.writeHeader(char, writer, constants);
56
+ return writer.ToArray();
57
+ }
58
+ exports.writeHeaderData = writeHeaderData;
59
+ async function fixHeader(writer) {
60
+ let checksum = 0;
61
+ const eof = writer.length / 8;
62
+ writer.SeekByte(0x0008).WriteUInt32(eof);
63
+ writer.SeekByte(0x000c).WriteUInt32(0);
64
+ for (let i = 0; i < eof; i++) {
65
+ let byte = writer.SeekByte(i).PeekBytes(1)[0];
66
+ if (checksum & 0x80000000) {
67
+ byte += 1;
68
+ }
69
+ checksum = byte + checksum * 2;
70
+ //hack make it a uint32
71
+ checksum >>>= 0;
72
+ }
73
+ //checksum pos
74
+ writer.SeekByte(0x000c).WriteUInt32(checksum);
75
+ }
76
+ exports.fixHeader = fixHeader;
77
+ /**
78
+ * Save Version
79
+ * 0x47, 0x0, 0x0, 0x0 = <1.06
80
+ * 0x59, 0x0, 0x0, 0x0 = 1.08 = version
81
+ * 0x5c, 0x0, 0x0, 0x0 = 1.09 = version
82
+ * 0x60, 0x0, 0x0, 0x0 = 1.13c = version
83
+ * 0x62, 0x0, 0x0, 0x0 = 1.2 = version
84
+ * */
85
+ async function _versionSpecificHeader(version) {
86
+ switch (version) {
87
+ case 0x60: {
88
+ return await Promise.resolve().then(() => __importStar(require(`./versions/default_header`)));
89
+ }
90
+ default: {
91
+ return await Promise.resolve().then(() => __importStar(require(`./versions/default_header`)));
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/d2/header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as types from "./types";
2
+ import { BitReader } from "../binary/bitreader";
3
+ import { BitWriter } from "../binary/bitwriter";
4
+ export declare function readCharItems(char: types.ID2S, reader: BitReader, constants: types.IConstantData, config: types.IConfig): Promise<void>;
5
+ export declare function writeCharItems(char: types.ID2S, constants: types.IConstantData, config: types.IConfig): Promise<Uint8Array>;
6
+ export declare function readMercItems(char: types.ID2S, reader: BitReader, constants: types.IConstantData, config: types.IConfig): Promise<void>;
7
+ export declare function writeMercItems(char: types.ID2S, constants: types.IConstantData, config: types.IConfig): Promise<Uint8Array>;
8
+ export declare function readGolemItems(char: types.ID2S, reader: BitReader, constants: types.IConstantData, config: types.IConfig): Promise<void>;
9
+ export declare function writeGolemItems(char: types.ID2S, constants: types.IConstantData, config: types.IConfig): Promise<Uint8Array>;
10
+ export declare function readCorpseItems(char: types.ID2S, reader: BitReader, constants: types.IConstantData, config: types.IConfig): Promise<void>;
11
+ export declare function writeCorpseItem(char: types.ID2S, constants: types.IConstantData, config: types.IConfig): Promise<Uint8Array>;
12
+ export declare function readItems(reader: BitReader, version: number, constants: types.IConstantData, config: types.IConfig, char?: types.ID2S): Promise<types.IItem[]>;
13
+ export declare function writeItems(items: types.IItem[], version: number, constants: types.IConstantData, config: types.IConfig): Promise<Uint8Array>;
14
+ export declare function readItem(reader: BitReader, version: number, originalConstants: types.IConstantData, config: types.IConfig, parent?: types.IItem): Promise<types.IItem>;
15
+ export declare function writeItem(item: types.IItem, version: number, constants: types.IConstantData, config: types.IConfig): Promise<Uint8Array>;
16
+ export declare function _readMagicProperties(reader: BitReader, constants: types.IConstantData): types.IMagicProperty[];
17
+ export declare function _writeMagicProperties(writer: BitWriter, properties: types.IMagicProperty[], constants: types.IConstantData): void;