MCPcopy Create free account
hub / github.com/Shazbot/WH3-Mod-Manager / createBattlePermissionsData

Function createBattlePermissionsData

src/packFileSerializer.ts:590–657  ·  view source on GitHub ↗
(packsData: Pack[], pack_files: PackedFile[], enabledMods: Mod[])

Source from the content-addressed store, hash-verified

588 return [genRanHex(8), genRanHex(4), genRanHex(4), genRanHex(4), genRanHex(12)].join("-");
589};
590const createBattlePermissionsData = (packsData: Pack[], pack_files: PackedFile[], enabledMods: Mod[]) => {
591 // console.log(packsData);
592 // console.log(packsData.filter((packData) => packData == null));
593 const dataDBPack = packsData.find((packData) => packData.name === "db.pack");
594 if (!dataDBPack) return;
595 const vanillaBattlePersmission = dataDBPack.packedFiles.find((pf) =>
596 pf.name.startsWith("db\\units_custom_battle_permissions_tables\\"),
597 );
598 if (!vanillaBattlePersmission) return;
599 const vanillaBattlePersmissionVersion = vanillaBattlePersmission.version;
600 const battlePermissions = clone(
601 packsData
602 .filter((packData) => enabledMods.find((enabledMod) => enabledMod.path === packData.path))
603 .map((packData) => packData.packedFiles)
604 .map((packedFiles) =>
605 packedFiles.filter(
606 (packedFile) =>
607 packedFile.name.startsWith("db\\units_custom_battle_permissions_tables\\") &&
608 packedFile.version == vanillaBattlePersmissionVersion,
609 ),
610 )
611 .reduce((previous, packedFile) => previous.concat(packedFile), []),
612 );
613 for (const packFile of battlePermissions) {
614 const newFields: SchemaField[] = [];
615 if (!packFile.schemaFields) continue;
616 if (getDBName(packFile) === "units_custom_battle_permissions_tables") {
617 const dbVersion = getDBVersion(packFile);
618 if (dbVersion == null) continue;
619 const general_unit_index = dbVersion.fields.findIndex((field) => field.name == "general_unit");
620 const dbVersionNumFields = dbVersion.fields.length;
621 for (let i = 0; i < packFile.schemaFields.length; i++) {
622 const field = packFile.schemaFields[i];
623 if (
624 general_unit_index != null &&
625 dbVersionNumFields != null &&
626 i % dbVersionNumFields == general_unit_index
627 ) {
628 // console.log("FOUND GENERAL UNIT INDEX");
629 // console.log(field.name);
630 if (field.fields[0].val == 1) {
631 for (let j = 0; j < dbVersion.fields.length; j++) {
632 const fieldToAdd = clone(packFile.schemaFields[i - general_unit_index + j]);
633 if (j == general_unit_index) fieldToAdd.fields[0].val = 0;
634 newFields.push(fieldToAdd);
635 }
636 } else {
637 field.fields[0].val = 1;
638 }
639 }
640 }
641 packFile.schemaFields.push(...newFields);
642 }
643 }
644 const battlePermissionsSchemaFields = battlePermissions.reduce((previous, packedFile) => {
645 if (packedFile.version != vanillaBattlePersmissionVersion) return previous;
646 return (packedFile.schemaFields && previous.concat(packedFile.schemaFields)) || previous;
647 }, [] as SchemaField[]);

Callers 1

writeStartGamePackFunction · 0.85

Calls 3

getDBNameFunction · 0.90
getDataSizeFunction · 0.85
getDBVersionFunction · 0.70

Tested by

no test coverage detected