feat: crew skill icons

This commit is contained in:
TrèsAbhi committed 2024-03-31 18:17:48 -05:00
1 parent c2e314b193
commit b363c76639
5 files changed
+66 -1

No files matched your search

+1
View File
@@ -125,6 +125,7 @@
"Synx",
"tankaverages",
"Tankerch",
"tankmen",
"tankopedia",
"tankopedias",
"tankstats",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "blitzkrieg",
"version": "1.18.2",
"version": "1.18.3",
"description": "🎉 Tools for everything World of Tanks Blitz",
"main": "src/server.ts",
"type": "module",
+51
View File
@@ -0,0 +1,51 @@
import sharp from 'sharp';
import { TankClass } from '../../src/components/Tanks';
import { readDVPLFile } from '../../src/core/blitz/readDVPLFile';
import { readXMLDVPL } from '../../src/core/blitz/readXMLDVPL';
import { commitAssets } from '../../src/core/blitzkrieg/commitAssets';
import { FileChange } from '../../src/core/blitzkrieg/commitMultipleFiles';
import { DATA } from './constants';
interface SkillIcon {
name: string;
state: number;
}
interface Avatar {
roles: unknown;
skillsByClasses: Record<TankClass, string>;
skills: {
[name: string]: {
userString: '#crew_skills:surrounded_by_enemy/name';
effectDescription: '#crew_skills:surrounded_by_enemy/effect';
tipDescription: '#crew_skills:surrounded_by_enemy/tip';
icon: SkillIcon | SkillIcon[];
type: 'continuous' | 'trigger';
};
};
}
export async function crewSkillIcons(production: boolean) {
console.log('Building crew skill icons...');
const avatar = await readXMLDVPL<{ root: Avatar }>(
`${DATA}/XML/item_defs/tankmen/avatar.xml.dvpl`,
);
const changes = await Promise.all(
Object.values(avatar.root.skills).map(async (skill) => {
const icon = Array.isArray(skill.icon) ? skill.icon[0] : skill.icon;
const name = icon.name.split('/').at(-1)!.replace(/_\d$/, '');
const path = `${DATA}${icon.name.replace('~res:', '')}.packed.webp.dvpl`;
const image = sharp(await readDVPLFile(path)).trim();
const content = (await image.toBuffer()).toString('base64');
return {
content,
encoding: 'base64',
path: `icons/skills/${name}.webp`,
} satisfies FileChange;
}),
);
commitAssets('crew skill icons', changes, production);
}
+2
View File
@@ -14,6 +14,7 @@ import { boosterIcons } from './boosterIcons';
import { camouflageIcons } from './camouflageIcons';
import { circleFlags } from './circleFlags';
import { consumableProvisionIcons } from './consumableProvisionIcons';
import { crewSkillIcons } from './crewSkillIcons';
import { currencies } from './currencies';
import { definitions } from './definitions';
import { equipmentIcons } from './equipmentIcons';
@@ -40,6 +41,7 @@ const methods = [
tankArmors,
tankModels,
currencies,
crewSkillIcons,
];
for (const method of methods) {
@@ -0,0 +1,11 @@
import { TankClass } from '../../components/Tanks';
import { asset } from './asset';
import { fetchCdonLz4 } from './fetchCdonLz4';
export interface CrewSkillDefinitions {
classes: Record<TankClass, [string, string, string, string]>;
}
export const crewSkillDefinitions = fetchCdonLz4<CrewSkillDefinitions>(
asset('definitions/equipment.cdon.lz4'),
);