@d2runewizard/d2s 2.0.125 → 2.0.127
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.
- package/lib/binary/bitreader.d.ts +23 -23
- package/lib/binary/bitreader.js +107 -107
- package/lib/binary/bitwriter.d.ts +21 -21
- package/lib/binary/bitwriter.js +117 -117
- package/lib/binary/constants.d.ts +4 -4
- package/lib/binary/constants.js +8 -8
- package/lib/binary/seekToSequence.d.ts +2 -2
- package/lib/binary/seekToSequence.js +12 -12
- package/lib/d2/attribute_enhancer.d.ts +5 -5
- package/lib/d2/attribute_enhancer.js +595 -595
- package/lib/d2/attributes.d.ts +4 -4
- package/lib/d2/attributes.js +98 -98
- package/lib/d2/constants.d.ts +4 -4
- package/lib/d2/constants.js +15 -15
- package/lib/d2/d2s.d.ts +10 -10
- package/lib/d2/d2s.js +115 -115
- package/lib/d2/header.d.ts +8 -8
- package/lib/d2/header.js +94 -94
- package/lib/d2/items.d.ts +19 -19
- package/lib/d2/items.js +870 -831
- package/lib/d2/items.js.map +1 -1
- package/lib/d2/skills.d.ts +4 -4
- package/lib/d2/skills.js +45 -45
- package/lib/d2/stash.d.ts +3 -3
- package/lib/d2/stash.js +243 -243
- package/lib/d2/types.d.ts +438 -420
- package/lib/d2/types.js +14 -14
- package/lib/d2/versions/default_header.d.ts +5 -5
- package/lib/d2/versions/default_header.js +750 -750
- package/lib/data/parser.d.ts +3 -3
- package/lib/data/parser.js +626 -626
- package/lib/data/versions/105_constant_data.d.ts +16150 -16150
- package/lib/data/versions/105_constant_data.js +24316 -24316
- package/lib/data/versions/96_constant_data.d.ts +14427 -14427
- package/lib/data/versions/96_constant_data.js +4 -4
- package/lib/data/versions/99_constant_data.d.ts +15572 -15572
- package/lib/data/versions/99_constant_data.js +4 -4
- package/lib/index.d.ts +8 -8
- package/lib/index.js +46 -46
- package/package.json +46 -46
package/lib/d2/stash.js
CHANGED
|
@@ -1,244 +1,244 @@
|
|
|
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.write = exports.read = void 0;
|
|
23
|
-
const types = __importStar(require("./types"));
|
|
24
|
-
const bitwriter_1 = require("../binary/bitwriter");
|
|
25
|
-
const items = __importStar(require("./items"));
|
|
26
|
-
const attribute_enhancer_1 = require("./attribute_enhancer");
|
|
27
|
-
const bitreader_1 = require("../binary/bitreader");
|
|
28
|
-
const constants_1 = require("./constants");
|
|
29
|
-
const defaultConfig = {
|
|
30
|
-
extendedStash: false,
|
|
31
|
-
};
|
|
32
|
-
async function read(buffer, constants, version, userConfig) {
|
|
33
|
-
const stash = {};
|
|
34
|
-
const reader = new bitreader_1.BitReader(buffer);
|
|
35
|
-
const config = Object.assign(defaultConfig, userConfig);
|
|
36
|
-
const firstHeader = reader.ReadUInt32();
|
|
37
|
-
reader.SeekByte(0);
|
|
38
|
-
if (firstHeader == 0xaa55aa55) {
|
|
39
|
-
stash.pages = [];
|
|
40
|
-
stash.sharedGold = 0;
|
|
41
|
-
let pageCount = 0;
|
|
42
|
-
while (reader.offset < reader.bits.length && pageCount < 6) {
|
|
43
|
-
const pageIndex = pageCount;
|
|
44
|
-
pageCount++;
|
|
45
|
-
await readStashHeader(stash, reader, pageIndex);
|
|
46
|
-
const saveVersion = version || parseInt(stash.version);
|
|
47
|
-
if (!constants) {
|
|
48
|
-
constants = constants_1.getConstantData(saveVersion);
|
|
49
|
-
}
|
|
50
|
-
await readStashPart(stash, reader, saveVersion, constants, pageIndex);
|
|
51
|
-
}
|
|
52
|
-
const saveVersion = version || parseInt(stash.version);
|
|
53
|
-
if (!constants) {
|
|
54
|
-
constants = constants_1.getConstantData(saveVersion);
|
|
55
|
-
}
|
|
56
|
-
await readChronicle(stash, reader, saveVersion, constants);
|
|
57
|
-
stash.pageCount = pageCount;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
await readStashHeader(stash, reader);
|
|
61
|
-
const saveVersion = version || parseInt(stash.version);
|
|
62
|
-
if (!constants) {
|
|
63
|
-
constants = constants_1.getConstantData(saveVersion);
|
|
64
|
-
}
|
|
65
|
-
await readStashPages(stash, reader, saveVersion, constants);
|
|
66
|
-
}
|
|
67
|
-
return stash;
|
|
68
|
-
}
|
|
69
|
-
exports.read = read;
|
|
70
|
-
async function readStashHeader(stash, reader, pageIndex) {
|
|
71
|
-
const header = reader.ReadUInt32();
|
|
72
|
-
switch (header) {
|
|
73
|
-
// Resurrected
|
|
74
|
-
case 0xaa55aa55:
|
|
75
|
-
stash.type = types.EStashType.shared;
|
|
76
|
-
stash.hardcore = reader.ReadUInt32() == 0;
|
|
77
|
-
stash.version = reader.ReadUInt32().toString();
|
|
78
|
-
const version = parseInt(stash.version);
|
|
79
|
-
stash.sharedGold += reader.ReadUInt32();
|
|
80
|
-
reader.ReadUInt32(); // size of the sector
|
|
81
|
-
if (version === 0x69 && pageIndex !== undefined) {
|
|
82
|
-
const isStackable = reader.ReadByte();
|
|
83
|
-
stash.pages[pageIndex] = {
|
|
84
|
-
items: [],
|
|
85
|
-
name: "",
|
|
86
|
-
type: 0,
|
|
87
|
-
isStackable,
|
|
88
|
-
};
|
|
89
|
-
reader.SkipBytes(43);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
reader.SkipBytes(44); // empty
|
|
93
|
-
}
|
|
94
|
-
break;
|
|
95
|
-
// LoD
|
|
96
|
-
case 0x535353: // SSS
|
|
97
|
-
case 0x4d545343: // CSTM
|
|
98
|
-
stash.version = reader.ReadString(2);
|
|
99
|
-
if (stash.version !== "01" && stash.version !== "02") {
|
|
100
|
-
throw new Error(`unkown stash version ${stash.version} at position ${reader.offset - 2 * 8}`);
|
|
101
|
-
}
|
|
102
|
-
stash.type = header === 0x535353 ? types.EStashType.shared : types.EStashType.private;
|
|
103
|
-
if (stash.type === types.EStashType.shared && stash.version == "02") {
|
|
104
|
-
stash.sharedGold = reader.ReadUInt32();
|
|
105
|
-
}
|
|
106
|
-
if (stash.type === types.EStashType.private) {
|
|
107
|
-
reader.ReadUInt32();
|
|
108
|
-
stash.sharedGold = 0;
|
|
109
|
-
}
|
|
110
|
-
stash.pageCount = reader.ReadUInt32();
|
|
111
|
-
break;
|
|
112
|
-
default:
|
|
113
|
-
debugger;
|
|
114
|
-
throw new Error(`shared stash header 'SSS' / 0xAA55AA55 / private stash header 'CSTM' not found at position ${reader.offset - 3 * 8}`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
async function readStashPages(stash, reader, version, constants) {
|
|
118
|
-
stash.pages = [];
|
|
119
|
-
for (let i = 0; i < stash.pageCount; i++) {
|
|
120
|
-
await readStashPage(stash, reader, version, constants);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
async function readChronicle(stash, reader, version, constants) {
|
|
124
|
-
stash.chronicle = {
|
|
125
|
-
data: Array.from(reader.ReadBytes((reader.bits.length - reader.offset) / 8)),
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
async function writeChronicle(stash) {
|
|
129
|
-
var _a;
|
|
130
|
-
const writer = new bitwriter_1.BitWriter();
|
|
131
|
-
if ((_a = stash.chronicle) === null || _a === void 0 ? void 0 : _a.data) {
|
|
132
|
-
writer.WriteBytes(new Uint8Array(stash.chronicle.data));
|
|
133
|
-
}
|
|
134
|
-
return writer.ToArray();
|
|
135
|
-
}
|
|
136
|
-
async function readStashPage(stash, reader, version, constants) {
|
|
137
|
-
const page = {
|
|
138
|
-
items: [],
|
|
139
|
-
name: "",
|
|
140
|
-
type: 0,
|
|
141
|
-
};
|
|
142
|
-
const header = reader.ReadString(2);
|
|
143
|
-
if (header !== "ST") {
|
|
144
|
-
throw new Error(`can not read stash page header ST at position ${reader.offset - 2 * 8}`);
|
|
145
|
-
}
|
|
146
|
-
page.type = reader.ReadUInt32();
|
|
147
|
-
page.name = reader.ReadNullTerminatedString();
|
|
148
|
-
page.items = await items.readItems(reader, version, constants, defaultConfig);
|
|
149
|
-
attribute_enhancer_1.enhanceItems(page.items, constants, 1);
|
|
150
|
-
stash.pages.push(page);
|
|
151
|
-
}
|
|
152
|
-
async function readStashPart(stash, reader, version, constants, pageIndex) {
|
|
153
|
-
const currentPage = pageIndex !== undefined ? stash.pages[pageIndex] : undefined;
|
|
154
|
-
const page = currentPage || {
|
|
155
|
-
items: [],
|
|
156
|
-
name: "",
|
|
157
|
-
type: 0,
|
|
158
|
-
};
|
|
159
|
-
page.items = await items.readItems(reader, version, constants, defaultConfig);
|
|
160
|
-
attribute_enhancer_1.enhanceItems(page.items, constants, 1);
|
|
161
|
-
if (!currentPage) {
|
|
162
|
-
stash.pages.push(page);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
async function write(data, constants, version, userConfig) {
|
|
166
|
-
const config = Object.assign(defaultConfig, userConfig);
|
|
167
|
-
const writer = new bitwriter_1.BitWriter();
|
|
168
|
-
if (!constants) {
|
|
169
|
-
constants = constants_1.getConstantData(version);
|
|
170
|
-
}
|
|
171
|
-
if (version > 0x61) {
|
|
172
|
-
for (const page of data.pages) {
|
|
173
|
-
writer.WriteArray(await writeStashSection(data, page, constants, config));
|
|
174
|
-
}
|
|
175
|
-
/*if (version === 0x69) {
|
|
176
|
-
writer.WriteArray(await writeChronicle(data));
|
|
177
|
-
}*/ // not required to load
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
writer.WriteArray(await writeStashHeader(data));
|
|
181
|
-
writer.WriteArray(await writeStashPages(data, version, constants, config));
|
|
182
|
-
}
|
|
183
|
-
return writer.ToArray();
|
|
184
|
-
}
|
|
185
|
-
exports.write = write;
|
|
186
|
-
async function writeStashHeader(data) {
|
|
187
|
-
const writer = new bitwriter_1.BitWriter();
|
|
188
|
-
if (data.type === types.EStashType.private) {
|
|
189
|
-
writer.WriteString("CSTM", 4);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
writer.WriteString("SSS", 4);
|
|
193
|
-
}
|
|
194
|
-
writer.WriteString(data.version, data.version.length);
|
|
195
|
-
if (data.type === types.EStashType.private) {
|
|
196
|
-
writer.WriteString("", 4);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
if (data.version == "02") {
|
|
200
|
-
writer.WriteUInt32(data.sharedGold);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
writer.WriteUInt32(data.pages.length);
|
|
204
|
-
return writer.ToArray();
|
|
205
|
-
}
|
|
206
|
-
async function writeStashSection(data, page, constants, userConfig) {
|
|
207
|
-
const writer = new bitwriter_1.BitWriter();
|
|
208
|
-
const version = parseInt(data.version);
|
|
209
|
-
writer.WriteUInt32(0xaa55aa55);
|
|
210
|
-
writer.WriteUInt32(data.hardcore ? 0 : version === 0x69 ? 2 : 1); // change to 0x02
|
|
211
|
-
writer.WriteUInt32(version);
|
|
212
|
-
const maxGold = Math.min(data.sharedGold, 2500000);
|
|
213
|
-
data.sharedGold = Math.max(0, data.sharedGold - maxGold);
|
|
214
|
-
writer.WriteUInt32(maxGold);
|
|
215
|
-
writer.WriteUInt32(0); // size of the sector, to be fixed later
|
|
216
|
-
if (version === 0x69) {
|
|
217
|
-
writer.WriteByte(page.isStackable || 0);
|
|
218
|
-
writer.WriteBytes(new Uint8Array(43).fill(0)); // empty
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
writer.WriteBytes(new Uint8Array(44).fill(0)); // empty
|
|
222
|
-
}
|
|
223
|
-
writer.WriteArray(await items.writeItems(page.items, parseInt(data.version), constants, userConfig));
|
|
224
|
-
const size = writer.offset;
|
|
225
|
-
writer.SeekByte(16);
|
|
226
|
-
writer.WriteUInt32(Math.ceil(size / 8));
|
|
227
|
-
return writer.ToArray();
|
|
228
|
-
}
|
|
229
|
-
async function writeStashPages(data, version, constants, config) {
|
|
230
|
-
const writer = new bitwriter_1.BitWriter();
|
|
231
|
-
for (let i = 0; i < data.pages.length; i++) {
|
|
232
|
-
writer.WriteArray(await writeStashPage(data.pages[i], version, constants, config));
|
|
233
|
-
}
|
|
234
|
-
return writer.ToArray();
|
|
235
|
-
}
|
|
236
|
-
async function writeStashPage(data, version, constants, config) {
|
|
237
|
-
const writer = new bitwriter_1.BitWriter();
|
|
238
|
-
writer.WriteString("ST", 2);
|
|
239
|
-
writer.WriteUInt32(data.type);
|
|
240
|
-
writer.WriteString(data.name, data.name.length + 1);
|
|
241
|
-
writer.WriteArray(await items.writeItems(data.items, version, constants, config));
|
|
242
|
-
return writer.ToArray();
|
|
243
|
-
}
|
|
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.write = exports.read = void 0;
|
|
23
|
+
const types = __importStar(require("./types"));
|
|
24
|
+
const bitwriter_1 = require("../binary/bitwriter");
|
|
25
|
+
const items = __importStar(require("./items"));
|
|
26
|
+
const attribute_enhancer_1 = require("./attribute_enhancer");
|
|
27
|
+
const bitreader_1 = require("../binary/bitreader");
|
|
28
|
+
const constants_1 = require("./constants");
|
|
29
|
+
const defaultConfig = {
|
|
30
|
+
extendedStash: false,
|
|
31
|
+
};
|
|
32
|
+
async function read(buffer, constants, version, userConfig) {
|
|
33
|
+
const stash = {};
|
|
34
|
+
const reader = new bitreader_1.BitReader(buffer);
|
|
35
|
+
const config = Object.assign(defaultConfig, userConfig);
|
|
36
|
+
const firstHeader = reader.ReadUInt32();
|
|
37
|
+
reader.SeekByte(0);
|
|
38
|
+
if (firstHeader == 0xaa55aa55) {
|
|
39
|
+
stash.pages = [];
|
|
40
|
+
stash.sharedGold = 0;
|
|
41
|
+
let pageCount = 0;
|
|
42
|
+
while (reader.offset < reader.bits.length && pageCount < 6) {
|
|
43
|
+
const pageIndex = pageCount;
|
|
44
|
+
pageCount++;
|
|
45
|
+
await readStashHeader(stash, reader, pageIndex);
|
|
46
|
+
const saveVersion = version || parseInt(stash.version);
|
|
47
|
+
if (!constants) {
|
|
48
|
+
constants = constants_1.getConstantData(saveVersion);
|
|
49
|
+
}
|
|
50
|
+
await readStashPart(stash, reader, saveVersion, constants, pageIndex);
|
|
51
|
+
}
|
|
52
|
+
const saveVersion = version || parseInt(stash.version);
|
|
53
|
+
if (!constants) {
|
|
54
|
+
constants = constants_1.getConstantData(saveVersion);
|
|
55
|
+
}
|
|
56
|
+
await readChronicle(stash, reader, saveVersion, constants);
|
|
57
|
+
stash.pageCount = pageCount;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
await readStashHeader(stash, reader);
|
|
61
|
+
const saveVersion = version || parseInt(stash.version);
|
|
62
|
+
if (!constants) {
|
|
63
|
+
constants = constants_1.getConstantData(saveVersion);
|
|
64
|
+
}
|
|
65
|
+
await readStashPages(stash, reader, saveVersion, constants);
|
|
66
|
+
}
|
|
67
|
+
return stash;
|
|
68
|
+
}
|
|
69
|
+
exports.read = read;
|
|
70
|
+
async function readStashHeader(stash, reader, pageIndex) {
|
|
71
|
+
const header = reader.ReadUInt32();
|
|
72
|
+
switch (header) {
|
|
73
|
+
// Resurrected
|
|
74
|
+
case 0xaa55aa55:
|
|
75
|
+
stash.type = types.EStashType.shared;
|
|
76
|
+
stash.hardcore = reader.ReadUInt32() == 0;
|
|
77
|
+
stash.version = reader.ReadUInt32().toString();
|
|
78
|
+
const version = parseInt(stash.version);
|
|
79
|
+
stash.sharedGold += reader.ReadUInt32();
|
|
80
|
+
reader.ReadUInt32(); // size of the sector
|
|
81
|
+
if (version === 0x69 && pageIndex !== undefined) {
|
|
82
|
+
const isStackable = reader.ReadByte();
|
|
83
|
+
stash.pages[pageIndex] = {
|
|
84
|
+
items: [],
|
|
85
|
+
name: "",
|
|
86
|
+
type: 0,
|
|
87
|
+
isStackable,
|
|
88
|
+
};
|
|
89
|
+
reader.SkipBytes(43);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
reader.SkipBytes(44); // empty
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
// LoD
|
|
96
|
+
case 0x535353: // SSS
|
|
97
|
+
case 0x4d545343: // CSTM
|
|
98
|
+
stash.version = reader.ReadString(2);
|
|
99
|
+
if (stash.version !== "01" && stash.version !== "02") {
|
|
100
|
+
throw new Error(`unkown stash version ${stash.version} at position ${reader.offset - 2 * 8}`);
|
|
101
|
+
}
|
|
102
|
+
stash.type = header === 0x535353 ? types.EStashType.shared : types.EStashType.private;
|
|
103
|
+
if (stash.type === types.EStashType.shared && stash.version == "02") {
|
|
104
|
+
stash.sharedGold = reader.ReadUInt32();
|
|
105
|
+
}
|
|
106
|
+
if (stash.type === types.EStashType.private) {
|
|
107
|
+
reader.ReadUInt32();
|
|
108
|
+
stash.sharedGold = 0;
|
|
109
|
+
}
|
|
110
|
+
stash.pageCount = reader.ReadUInt32();
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
debugger;
|
|
114
|
+
throw new Error(`shared stash header 'SSS' / 0xAA55AA55 / private stash header 'CSTM' not found at position ${reader.offset - 3 * 8}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function readStashPages(stash, reader, version, constants) {
|
|
118
|
+
stash.pages = [];
|
|
119
|
+
for (let i = 0; i < stash.pageCount; i++) {
|
|
120
|
+
await readStashPage(stash, reader, version, constants);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function readChronicle(stash, reader, version, constants) {
|
|
124
|
+
stash.chronicle = {
|
|
125
|
+
data: Array.from(reader.ReadBytes((reader.bits.length - reader.offset) / 8)),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
async function writeChronicle(stash) {
|
|
129
|
+
var _a;
|
|
130
|
+
const writer = new bitwriter_1.BitWriter();
|
|
131
|
+
if ((_a = stash.chronicle) === null || _a === void 0 ? void 0 : _a.data) {
|
|
132
|
+
writer.WriteBytes(new Uint8Array(stash.chronicle.data));
|
|
133
|
+
}
|
|
134
|
+
return writer.ToArray();
|
|
135
|
+
}
|
|
136
|
+
async function readStashPage(stash, reader, version, constants) {
|
|
137
|
+
const page = {
|
|
138
|
+
items: [],
|
|
139
|
+
name: "",
|
|
140
|
+
type: 0,
|
|
141
|
+
};
|
|
142
|
+
const header = reader.ReadString(2);
|
|
143
|
+
if (header !== "ST") {
|
|
144
|
+
throw new Error(`can not read stash page header ST at position ${reader.offset - 2 * 8}`);
|
|
145
|
+
}
|
|
146
|
+
page.type = reader.ReadUInt32();
|
|
147
|
+
page.name = reader.ReadNullTerminatedString();
|
|
148
|
+
page.items = await items.readItems(reader, version, constants, defaultConfig);
|
|
149
|
+
attribute_enhancer_1.enhanceItems(page.items, constants, 1);
|
|
150
|
+
stash.pages.push(page);
|
|
151
|
+
}
|
|
152
|
+
async function readStashPart(stash, reader, version, constants, pageIndex) {
|
|
153
|
+
const currentPage = pageIndex !== undefined ? stash.pages[pageIndex] : undefined;
|
|
154
|
+
const page = currentPage || {
|
|
155
|
+
items: [],
|
|
156
|
+
name: "",
|
|
157
|
+
type: 0,
|
|
158
|
+
};
|
|
159
|
+
page.items = await items.readItems(reader, version, constants, defaultConfig);
|
|
160
|
+
attribute_enhancer_1.enhanceItems(page.items, constants, 1);
|
|
161
|
+
if (!currentPage) {
|
|
162
|
+
stash.pages.push(page);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async function write(data, constants, version, userConfig) {
|
|
166
|
+
const config = Object.assign(defaultConfig, userConfig);
|
|
167
|
+
const writer = new bitwriter_1.BitWriter();
|
|
168
|
+
if (!constants) {
|
|
169
|
+
constants = constants_1.getConstantData(version);
|
|
170
|
+
}
|
|
171
|
+
if (version > 0x61) {
|
|
172
|
+
for (const page of data.pages) {
|
|
173
|
+
writer.WriteArray(await writeStashSection(data, page, constants, config));
|
|
174
|
+
}
|
|
175
|
+
/*if (version === 0x69) {
|
|
176
|
+
writer.WriteArray(await writeChronicle(data));
|
|
177
|
+
}*/ // not required to load
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
writer.WriteArray(await writeStashHeader(data));
|
|
181
|
+
writer.WriteArray(await writeStashPages(data, version, constants, config));
|
|
182
|
+
}
|
|
183
|
+
return writer.ToArray();
|
|
184
|
+
}
|
|
185
|
+
exports.write = write;
|
|
186
|
+
async function writeStashHeader(data) {
|
|
187
|
+
const writer = new bitwriter_1.BitWriter();
|
|
188
|
+
if (data.type === types.EStashType.private) {
|
|
189
|
+
writer.WriteString("CSTM", 4);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
writer.WriteString("SSS", 4);
|
|
193
|
+
}
|
|
194
|
+
writer.WriteString(data.version, data.version.length);
|
|
195
|
+
if (data.type === types.EStashType.private) {
|
|
196
|
+
writer.WriteString("", 4);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
if (data.version == "02") {
|
|
200
|
+
writer.WriteUInt32(data.sharedGold);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
writer.WriteUInt32(data.pages.length);
|
|
204
|
+
return writer.ToArray();
|
|
205
|
+
}
|
|
206
|
+
async function writeStashSection(data, page, constants, userConfig) {
|
|
207
|
+
const writer = new bitwriter_1.BitWriter();
|
|
208
|
+
const version = parseInt(data.version);
|
|
209
|
+
writer.WriteUInt32(0xaa55aa55);
|
|
210
|
+
writer.WriteUInt32(data.hardcore ? 0 : version === 0x69 ? 2 : 1); // change to 0x02
|
|
211
|
+
writer.WriteUInt32(version);
|
|
212
|
+
const maxGold = Math.min(data.sharedGold, 2500000);
|
|
213
|
+
data.sharedGold = Math.max(0, data.sharedGold - maxGold);
|
|
214
|
+
writer.WriteUInt32(maxGold);
|
|
215
|
+
writer.WriteUInt32(0); // size of the sector, to be fixed later
|
|
216
|
+
if (version === 0x69) {
|
|
217
|
+
writer.WriteByte(page.isStackable || 0);
|
|
218
|
+
writer.WriteBytes(new Uint8Array(43).fill(0)); // empty
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
writer.WriteBytes(new Uint8Array(44).fill(0)); // empty
|
|
222
|
+
}
|
|
223
|
+
writer.WriteArray(await items.writeItems(page.items, parseInt(data.version), constants, userConfig));
|
|
224
|
+
const size = writer.offset;
|
|
225
|
+
writer.SeekByte(16);
|
|
226
|
+
writer.WriteUInt32(Math.ceil(size / 8));
|
|
227
|
+
return writer.ToArray();
|
|
228
|
+
}
|
|
229
|
+
async function writeStashPages(data, version, constants, config) {
|
|
230
|
+
const writer = new bitwriter_1.BitWriter();
|
|
231
|
+
for (let i = 0; i < data.pages.length; i++) {
|
|
232
|
+
writer.WriteArray(await writeStashPage(data.pages[i], version, constants, config));
|
|
233
|
+
}
|
|
234
|
+
return writer.ToArray();
|
|
235
|
+
}
|
|
236
|
+
async function writeStashPage(data, version, constants, config) {
|
|
237
|
+
const writer = new bitwriter_1.BitWriter();
|
|
238
|
+
writer.WriteString("ST", 2);
|
|
239
|
+
writer.WriteUInt32(data.type);
|
|
240
|
+
writer.WriteString(data.name, data.name.length + 1);
|
|
241
|
+
writer.WriteArray(await items.writeItems(data.items, version, constants, config));
|
|
242
|
+
return writer.ToArray();
|
|
243
|
+
}
|
|
244
244
|
//# sourceMappingURL=stash.js.map
|