(packsData: Pack[], pack_files: PackedFile[], enabledMods: Mod[])
| 588 | return [genRanHex(8), genRanHex(4), genRanHex(4), genRanHex(4), genRanHex(12)].join("-"); |
| 589 | }; |
| 590 | const 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[]); |
no test coverage detected