mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
feat: patches
This commit is contained in:
1 parent
c1f3517a79
commit
9f71ac68b9
7 files changed
+102
-2
No files matched your search
@@ -18,6 +18,8 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
- name: Use node
|
- name: Use node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
|
|||||||
+2
-1
@@ -17,4 +17,5 @@ tsconfig.tsbuildinfo
|
|||||||
temp/
|
temp/
|
||||||
/.yarn
|
/.yarn
|
||||||
/.VSCodeCounter
|
/.VSCodeCounter
|
||||||
/.yarn
|
/.yarn
|
||||||
|
depots
|
||||||
Vendored
+2
@@ -7,6 +7,7 @@
|
|||||||
"alphatest",
|
"alphatest",
|
||||||
"APAC",
|
"APAC",
|
||||||
"apcr",
|
"apcr",
|
||||||
|
"applypatches",
|
||||||
"artefacts",
|
"artefacts",
|
||||||
"atgm",
|
"atgm",
|
||||||
"AYUV",
|
"AYUV",
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
"CDON",
|
"CDON",
|
||||||
"classname",
|
"classname",
|
||||||
"cleandist",
|
"cleandist",
|
||||||
|
"closedkrieg",
|
||||||
"cockroackdb",
|
"cockroackdb",
|
||||||
"Coef",
|
"Coef",
|
||||||
"cooldown",
|
"cooldown",
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"start:website": "next start",
|
"start:website": "next start",
|
||||||
"host:docs": "vitepress preview docs",
|
"host:docs": "vitepress preview docs",
|
||||||
"publish:ratingsleaderboard": "vite-node --script scripts/buildRatingsLeaderboard --publish",
|
"publish:ratingsleaderboard": "vite-node --script scripts/buildRatingsLeaderboard --publish",
|
||||||
|
"applypatches": "vite-node --script scripts/applyPatches",
|
||||||
"lint": "npx tsc",
|
"lint": "npx tsc",
|
||||||
"lint:website": "next lint",
|
"lint:website": "next lint",
|
||||||
"format": "prettier --write \"**/*.@(json|js|jsx|css|md|ts|tsx|html|xml|yml|gltf)\"",
|
"format": "prettier --write \"**/*.@(json|js|jsx|css|md|ts|tsx|html|xml|yml|gltf)\"",
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
import { mkdir, writeFile } from 'fs/promises';
|
||||||
|
import { parse as parsePath } from 'path';
|
||||||
|
import { parse as parseYaml } from 'yaml';
|
||||||
|
import { readStringDVPL } from '../src/core/blitz/readStringDVPL';
|
||||||
|
import { writeDVPL } from '../src/core/blitz/writeDVPL';
|
||||||
|
import { secrets } from '../src/core/blitzkrieg/secrets';
|
||||||
|
import { dvp } from '../submodules/closedkrieg/src/dvp';
|
||||||
|
import { DATA } from './buildAssets/constants';
|
||||||
|
|
||||||
|
const versionTextFile = await readStringDVPL(`${DATA}/version.txt.dvpl`);
|
||||||
|
const currentVersion = versionTextFile
|
||||||
|
.split(' ')[0]
|
||||||
|
.split('.')
|
||||||
|
.slice(0, 3)
|
||||||
|
.join('.');
|
||||||
|
|
||||||
|
let patchIndex = 1;
|
||||||
|
while (true) {
|
||||||
|
const response = await fetch(
|
||||||
|
`${secrets.WOTB_DLC_CDN}/dlc/s${currentVersion}_${patchIndex}.yaml`,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (response.status === 200) {
|
||||||
|
const data = parseYaml(await response.text());
|
||||||
|
const dvpm = await fetch(`${secrets.WOTB_DLC_CDN}/dlc/${data.dx11}`).then(
|
||||||
|
(response) => response.arrayBuffer(),
|
||||||
|
);
|
||||||
|
const dvpd = await fetch(
|
||||||
|
`${secrets.WOTB_DLC_CDN}/dlc/${data.dx11.replace('.dvpm', '.dvpd')}`,
|
||||||
|
).then((response) => response.arrayBuffer());
|
||||||
|
const files = await dvp(dvpm, dvpd);
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
files.map(async ({ path, data }) => {
|
||||||
|
const { dir } = parsePath(path);
|
||||||
|
|
||||||
|
await mkdir(`${DATA}/${dir}`, { recursive: true });
|
||||||
|
await writeFile(`${DATA}/${path}.dvpl`, writeDVPL(Buffer.from(data)));
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
patchIndex++;
|
||||||
|
} else break;
|
||||||
|
}
|
||||||
@@ -24,7 +24,7 @@ export const POI = {
|
|||||||
collisionMeshes: '3d/Tanks/CollisionMeshes',
|
collisionMeshes: '3d/Tanks/CollisionMeshes',
|
||||||
optionalDevices: 'XML/item_defs/vehicles/common/optional_devices.xml',
|
optionalDevices: 'XML/item_defs/vehicles/common/optional_devices.xml',
|
||||||
optionalDeviceSlots:
|
optionalDeviceSlots:
|
||||||
'XML/item_defs/vehicles/common/optional_device_slots.xml',
|
'XML/item_defs/vehicles/common/optional_device_slots.xml',
|
||||||
optionalDeviceImageMappings:
|
optionalDeviceImageMappings:
|
||||||
'UI/Screens3/Lobby/Inventory/OptionalDevices/OptionalDevicesItemImage.style.yaml',
|
'UI/Screens3/Lobby/Inventory/OptionalDevices/OptionalDevicesItemImage.style.yaml',
|
||||||
optionalDevicesImage:
|
optionalDevicesImage:
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import { crc32 } from 'crc';
|
||||||
|
import { encodeBlockHC } from 'lz4';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thanks Maddoxkkm! Modernized heavily.
|
||||||
|
*
|
||||||
|
* https://github.com/Maddoxkkm/dvpl_converter/
|
||||||
|
*/
|
||||||
|
export function writeDVPL(buffer: Buffer) {
|
||||||
|
let output = Buffer.alloc(buffer.length);
|
||||||
|
const compressedBlockSize = encodeBlockHC(buffer, output);
|
||||||
|
|
||||||
|
if (compressedBlockSize === 0 || compressedBlockSize >= buffer.length) {
|
||||||
|
const footerBuffer = toDVPLFooter(
|
||||||
|
buffer.length,
|
||||||
|
buffer.length,
|
||||||
|
crc32(buffer),
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
|
||||||
|
return Buffer.concat([buffer, footerBuffer], buffer.length + 20);
|
||||||
|
} else {
|
||||||
|
output = output.subarray(0, compressedBlockSize);
|
||||||
|
const footerBuffer = toDVPLFooter(
|
||||||
|
buffer.length,
|
||||||
|
compressedBlockSize,
|
||||||
|
crc32(output),
|
||||||
|
2,
|
||||||
|
);
|
||||||
|
|
||||||
|
return Buffer.concat([output, footerBuffer], compressedBlockSize + 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toDVPLFooter(
|
||||||
|
inputSize: number,
|
||||||
|
compressedSize: number,
|
||||||
|
crc32: number,
|
||||||
|
type: number,
|
||||||
|
) {
|
||||||
|
const result = Buffer.alloc(20);
|
||||||
|
|
||||||
|
result.writeUInt32LE(inputSize, 0);
|
||||||
|
result.writeUInt32LE(compressedSize, 4);
|
||||||
|
result.writeUInt32LE(crc32, 8);
|
||||||
|
result.writeUInt32LE(type, 12);
|
||||||
|
result.write('DVPL', 16, 4, 'utf8');
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user