Publication suivante : un zip par module (SplitModules per_module), modules de base seuls dans le build, diffusion Discord

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
edujiro5972 2026-10-03 10:43:53 +02:00
parent 8005a887f5
commit aa8aa7542e
20 changed files with 191 additions and 1 deletions

View file

@ -157,5 +157,8 @@ Get-FileHash Releases\<version>\Windows\LifePlay-Windows.utoc, <build>\Windows\L
# sources la contient (≈ 1,3 Go) ; exclure aussi les produits de cuisson des mods : -x!ModSources\*\Saved
# 6. Mods officiels recuits contre la nouvelle version : .\Tools\BuildMod.ps1 -Name lpr_hair_pocolov
# Modules livrés à part : Tools\modules\next.json (essentiels : vin_Base, vin_VanillaRealistic ; lp_Revival retiré en H3d)
# Un zip par module (15_Modules_Optionnels.md §5), dans un même dossier que les mods d'assets ; diffusion sur Discord :
# .\Tools\SplitModules.ps1 -Build <build neuf> -Config Tools\modules\next.json -Out D:\Game\LifePlay_Publication (version à renseigner)
# .\Tools\BuildMod.ps1 -Name lpr_hair_pocolov -Out D:\Game\LifePlay_Publication\Modules_<version>
# 7. README : section de la version avec le lien vers Docs/Modding/FullGuides/Creating_Asset_Mods.md
```

View file

@ -42,3 +42,18 @@ Il vérifie la présence des modules essentiels, déplace les autres vers `<buil
Extraire l'archive dans le dossier du jeu en fusionnant le dossier `LifePlay` ; les modules apparaissent dans le
gestionnaire de mods, où ils s'activent ou se désactivent. Pour en retirer un : supprimer son dossier.
## 5. À partir de la publication suivant la V1.4 : une archive par mod (décision du 2026-10-03)
- Le build Shipping ne garde que les modules de base, en texte : `vin_Base`, `vin_VanillaRealistic`
(`Tools/modules/next.json`, `"per_module": true`).
- Chaque autre module est livré dans **son propre zip** : `<module>-for-LifePlay-<version>.zip`
(`LifePlay/Content/Modules/<module>` + `README.txt` bilingue tiré du `.lpmod` : nom, description, prérequis,
installation, désinstallation). Chaque mod d'assets (`Tools/BuildMod.ps1`, ex. `lpr_hair_pocolov`) a déjà son zip,
déposé dans le même dossier (`-Out <Publication>\Modules_<version>`).
- `INDEX.txt` (nom, archive, taille, SHA-256) sert au message de diffusion.
- **Diffusion des modules : Discord** dans un premier temps (pas d'annonce sur GitHub, comme pour le jeu).
- Garde-fou : `SplitModules.ps1` refuse un build contenant un mod d'assets installé (`LifePlay/Mods/<mod>`), dont la
partie texte serait livrée sans ses paquets ; utiliser un build neuf. Essai sur une copie des modules du build H3d :
15 archives, 640 fichiers déplacés = 640 archivés, aucun reste ; refus vérifié avec un mod d'assets installé (copies
d'essai dans `LifePlay_Backup_5.5\PUB_next`).

View file

@ -953,3 +953,4 @@ Validation L7c/L7d (2026-10-02, parc, même cadrage) : la nuit reste claire (sol
| CHG-106 | 2026-10-03 | H3d | nouveaux `Source/LifePlay/LPModInfoSubsystem.h/.cpp` ; `Source/LifePlay/LifePlay.Build.cs` (`Slate`, `SlateCore`) ; `Tools/NewMod.ps1` (métadonnées), `Tools/BuildMod.ps1` (ordre des lignes 1 à 3, `MODULE_PACKAGED`, `MODULE_GAME_VERSION`, `.uplugin` livré, contrôle prix et licences, nom d'archive) ; `Docs/Modding/FullGuides/Creating_Asset_Mods.md` §4b, `explanation.lpmod` | demande utilisateur : métadonnées extensibles (dates, licence, lien de l'auteur, prix) et avertissement en jeu quand un mod a été construit pour une autre version. Le jeu ne lit que les 3 premières lignes d'un `.lpmod`, par position ; fenêtre Slate C++, sans Blueprint. **Validé en jeu le 2026-10-03** | `git revert` du commit, recompiler |
| CHG-107 | 2026-10-03 | H3d | nouveau mod `ModSources/lpr_hair_pocolov` (`.uplugin`, `Module/` : `.lpmod`, 12 `.lphair`, `CREDITS.txt` ; assets non versionnés), `Tools/mods/lpr_hair_pocolov.json` ; retirés : `Content/Modules/lp_Revival` (6 `.lphair`, `.lpmod`), assets `Content/Heavy/New5/Hairs/Pocolov*` (non versionnés), `ModSources/LPHairSample`, `Tools/mods/LPHairSample.json` (tous vers `LifePlay_Backup_5.5\H3d\retires`) ; `Licenses/Free_3D_Models_Credits.txt` (lignes Pocolov remplacées par un renvoi ; snapshot `H3d`) ; nouveau `Tools/modules/next.json` ; builds `LifePlay_Build_5.5_H3d` ; archive `D:\Game\LifePlay_Publication\Mods\lpr_hair_pocolov-1.0-for-LifePlay-2026.10.4.zip` (3 807 460 octets, SHA-256 `4E9420E5…2B8F`) | demande utilisateur : module `lpr_hair_pocolov` regroupant les assets Pocolov ; choix utilisateur : les 12 coiffures CC BY, les 6 du jeu de base déplacées dans le paquet, mod d'essai retiré ; 5 archives téléchargées (accord). **Validé en jeu le 2026-10-03** | remettre les dossiers de `LifePlay_Backup_5.5\H3d\retires` ; `.\Tools\Restore.ps1 -Lot H3d` ; `git revert` du commit |
| CHG-108 | 2026-10-03 | H3c | `Docs/Modding/FullGuides/Creating_Asset_Mods.md` §5 | essai utilisateur de `Tools/EditMod.ps1` : mod monté et chargé (« Mounting Mod plugin lpr_hair_pocolov »), 12 coiffures visibles une fois « Afficher le contenu des plugins » coché dans le navigateur de contenu (masqué par défaut ; la recherche porte sur les noms d'assets) : précision ajoutée au guide. **H3c validé le 2026-10-03** | `git revert` du commit |
| CHG-109 | 2026-10-03 | PUB | `Tools/SplitModules.ps1` (mode `per_module` : une archive par module, notice tirée du `.lpmod`, `INDEX.txt` ; refus d'un build contenant un mod d'assets installé) ; `Tools/modules/next.json` ; `Docs/Migration/15_Modules_Optionnels.md` §5, `09_Commandes_Utiles.md` §7 | décision utilisateur pour la prochaine publication : chaque mod livré dans un zip indépendant, sauf les modules de base (texte) gardés dans le build Shipping ; diffusion des modules sur Discord dans un premier temps. Essai sur une copie (15 archives, 640 fichiers, garde-fou vérifié) | `git revert` du commit |

View file

@ -0,0 +1,13 @@
Credits and licenses of the assets in Pocolov Hairstyles (one line per asset: title, author, license, source URL, changes).
- Pocolov Hair 03 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/2257098d-b77c-4eef-9132-85f1454f0ae3 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov03*).
- Pocolov Hair 05 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/4025749f-d597-4332-91aa-16e355b94974 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov05*).
- Pocolov Hair 06 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/14c3cd52-02f9-4bfe-bb40-b5c3acb1f428 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov06*).
- Pocolov Hair 11 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/c31c219e-bc62-4957-91c5-720440375f79 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov11*).
- Pocolov Hair 15 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/ed8e016a-0bf0-4a6c-94b0-2760083b879d . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov15*).
- Pocolov Hair 16 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/802dc956-6211-4b83-8ba1-37beb3cb338f . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov16*).
- Pocolov Hair 17 by Pocolov (Pocolov Studio 2019, artist Thang), CC BY 4.0, https://www.fab.com/listings/7f6f687d-bb13-40c6-8b69-64044ededc1d . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov17*).
- Pocolov Hair 07 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/4d1ba957-b420-4bdc-8984-b528a73b1d58 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov07*).
- Pocolov Hair 09 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/80383c46-f491-4db2-a63d-48d279f35782 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov09*).
- Pocolov Hair 10 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/40a91685-76dc-4384-91f1-0040f44e8958 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov10*).
- Pocolov Hair 13 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/a3933681-f5e3-4d93-99f0-c5fff444d405 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov13*).
- Pocolov Hair 14 by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, https://www.fab.com/listings/4911f6b9-d548-45d7-86be-a6971da97c54 . Changes: skinned to the Genesis 8 skeleton by weight transfer from the body (head, neck, chest), fitted to the Bridget head, DazHair materials (/lpr_hair_pocolov/Hairs/Pocolov14*).

View file

@ -0,0 +1,6 @@
// Pocolov Hair 03 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/2257098d-b77c-4eef-9132-85f1454f0ae3
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov03.Pocolov03
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 05 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/4025749f-d597-4332-91aa-16e355b94974
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov05.Pocolov05
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 06 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/14c3cd52-02f9-4bfe-bb40-b5c3acb1f428
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov06.Pocolov06
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 07 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/4d1ba957-b420-4bdc-8984-b528a73b1d58
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov07.Pocolov07
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 09 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/80383c46-f491-4db2-a63d-48d279f35782
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov09.Pocolov09
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 10 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/40a91685-76dc-4384-91f1-0040f44e8958
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov10.Pocolov10
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 11 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/c31c219e-bc62-4957-91c5-720440375f79
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov11.Pocolov11
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 13 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/a3933681-f5e3-4d93-99f0-c5fff444d405
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov13.Pocolov13
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 14 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/4911f6b9-d548-45d7-86be-a6971da97c54
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov14.Pocolov14
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 15 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/ed8e016a-0bf0-4a6c-94b0-2760083b879d
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov15.Pocolov15
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 16 - Pocolov (Pocolov Studio, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/802dc956-6211-4b83-8ba1-37beb3cb338f
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov16.Pocolov16
SEX: F
DAZ: true

View file

@ -0,0 +1,6 @@
// Pocolov Hair 17 - Pocolov (Pocolov Studio 2019, artist Thang) - licence CC BY 4.0
// Source : https://www.fab.com/listings/7f6f687d-bb13-40c6-8b69-64044ededc1d
// Modifications (Tools/HairPipeline.ps1) : liee au squelette Genesis 8 par transfert de poids depuis le corps (tete, cou, poitrine), ajustee a la tete de Bridget, materiaux DazHair.
HAIRSTYLE: /lpr_hair_pocolov/Hairs/Pocolov17.Pocolov17
SEX: F
DAZ: true

View file

@ -0,0 +1,12 @@
MODULE_UNIQUEID: lpr_hair_pocolov
MODULE_NAME: Pocolov Hairstyles
MODULE_AUTHOR: LifePlay Revival (hairstyles by Pocolov)
MODULE_LINK: https://github.com/edujiro5972/LifePlay-Revival
MODULE_DESCRIPTION: 12 free hairstyles by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, converted for LifePlay
MODULE_REQUIREMENTS: vin_Base
MODULE_VERSION: 1.0
MODULE_CREATED: 2026-10-03
MODULE_LICENSE: CC BY 4.0
MODULE_AUTHOR_LINK: https://www.fab.com/sellers/Pocolov
MODULE_PRICE: Free
MODULE_DEFAULT_ENABLED: true

View file

@ -0,0 +1,13 @@
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"FriendlyName": "Pocolov Hairstyles",
"Description": "12 free hairstyles by Pocolov (Pocolov Studio, artist Thang), CC BY 4.0, converted for LifePlay",
"Category": "LifePlay Mods",
"CreatedBy": "LifePlay Revival (hairstyles by Pocolov)",
"CanContainContent": true,
"IsBetaVersion": false,
"Installed": false,
"CreatedByURL": "https://www.fab.com/sellers/Pocolov"
}

View file

@ -15,6 +15,14 @@
(7-Zip, test d'integrite) ; aucun fichier de module optionnel ne reste dans le build. Les fichiers deplaces sont
conserves dans <build>\..\<nom>_modules_optionnels (rien n'est supprime).
.PARAMETER (configuration "per_module": true, depuis la publication qui suit la V1.4)
Une archive par module optionnel, <module>-for-LifePlay-<version>.zip (LifePlay\Content\Modules\<module> + notice
bilingue tiree du .lpmod), dans <Out>\<out_dir> ; un index INDEX.txt (nom, archive, taille, SHA-256) sert au message
de diffusion (Discord). Les mods d'assets (Tools/BuildMod.ps1) se deposent dans le meme dossier.
.EXAMPLE
.\Tools\SplitModules.ps1 -Build D:\Game\LifePlay_Build_5.5_Shipping_V1.5 -Config Tools\modules
ext.json -Out D:\Game\LifePlay_Publication
.EXAMPLE
.\Tools\SplitModules.ps1 -Build D:\Game\LifePlay_Build_5.5_Shipping_V1.4 -Config Tools\modules\V1.4.json -Out D:\Game\LifePlay_Publication
#>
@ -29,6 +37,11 @@ $cfg = Get-Content $Config -Raw | ConvertFrom-Json
$modules = Join-Path $Build 'Windows\LifePlay\Content\Modules'
if (-not (Test-Path $modules)) { throw "Dossier des modules introuvable : $modules" }
# Un build de distribution ne contient aucun mod d'assets installe (sa partie texte serait livree sans ses paquets) :
# ces mods sont livres par Tools/BuildMod.ps1.
$assetMods = @(Get-ChildItem (Join-Path $Build 'Windows\LifePlay\Mods') -Directory -ErrorAction SilentlyContinue | ForEach-Object Name)
if ($assetMods) { throw "Mod(s) d'assets installe(s) dans le build ($($assetMods -join ', ')) : utiliser un build neuf, ces mods sont livres par BuildMod.ps1" }
foreach ($m in $cfg.essential) {
if (-not (Test-Path (Join-Path $modules "$m\$m.lpmod"))) { throw "Module essentiel absent du build : $m" }
}
@ -46,6 +59,54 @@ foreach ($m in $optional) {
Move-Item $m.FullName (Join-Path $target $m.Name)
}
$list = ($optional.Name | Sort-Object) -join ', '
if ($cfg.per_module) {
# Une archive par module (publication suivant la V1.4).
$dir = Join-Path $Out $(if ($cfg.out_dir) { $cfg.out_dir } else { "Modules_$($cfg.version)" })
New-Item -ItemType Directory -Force $dir | Out-Null
$index = @("LifePlay Revival $($cfg.version) - optional modules / modules optionnels", '',
'Install: extract the zip into the game folder (the one containing LifePlay.exe), merging the LifePlay folder, then enable',
'the module in "Mod Manager" (title screen). Installation : extraire le zip dans le dossier du jeu, puis activer le module.',
'Adult content, adults only / contenu adulte, reserve aux adultes.', '')
$zipped = 0
foreach ($m in ($optional | Sort-Object Name)) {
$src = Join-Path $target $m.Name
$lp = Get-Content (Join-Path $src "$($m.Name).lpmod") -Encoding utf8
$val = { param($k) $l = $lp | Where-Object { $_ -match "^$k\s*:" } | Select-Object -First 1; if ($l) { ($l -split ':', 2)[1].Trim() } else { '' } }
$title = & $val 'MODULE_NAME'; $desc = & $val 'MODULE_DESCRIPTION'; $req = & $val 'MODULE_REQUIREMENTS'
$one = Join-Path $stage "_zip\$($m.Name)"
New-Item -ItemType Directory -Force (Join-Path $one 'LifePlay\Content\Modules') | Out-Null
Copy-Item $src (Join-Path $one "LifePlay\Content\Modules\$($m.Name)") -Recurse
$note = @("$title ($($m.Name)) - LifePlay Revival $($cfg.version)", '', $desc, $(if ($req) { "Requires / necessite : $req" } else { '' }), '',
'EN: extract this archive into the game folder (the one containing LifePlay.exe), merging the LifePlay folder, then',
"enable the module in `"Mod Manager`" (title screen). To remove it, delete LifePlay\Content\Modules\$($m.Name).",
'FR : extraire cette archive dans le dossier du jeu (celui de LifePlay.exe) en fusionnant le dossier LifePlay, puis',
"activer le module dans `"Mod Manager`" (ecran titre). Pour le retirer : supprimer LifePlay\Content\Modules\$($m.Name).",
'Adult content, adults only / contenu adulte, reserve aux adultes.')
[IO.File]::WriteAllText((Join-Path $one 'README.txt'), ($note -join "`r`n") + "`r`n", (New-Object Text.UTF8Encoding $false))
$zip = Join-Path $dir "$($m.Name)-for-LifePlay-$($cfg.version).zip"
if (Test-Path $zip) { throw "L'archive existe deja : $zip" }
Push-Location $one
& $SevenZip a -tzip -mx=7 $zip 'LifePlay' 'README.txt' | Out-Null
Pop-Location
& $SevenZip t $zip | Out-Null
if ($LASTEXITCODE -ne 0) { throw "Test 7-Zip en echec : $zip" }
$n = (& $SevenZip l -slt $zip | Select-String '^Folder = -').Count - 1
$expected = @(Get-ChildItem $src -Recurse -File).Count
if ($n -ne $expected) { throw "$($m.Name) : $n fichier(s) dans l'archive pour $expected" }
$zipped += $n
$h = (Get-FileHash $zip -Algorithm SHA256).Hash.ToLower()
$index += ('{0} ({1}) : {2}, {3:N0} bytes, SHA-256 {4}' -f $title, $m.Name, (Split-Path $zip -Leaf), (Get-Item $zip).Length, $h)
Write-Host " $($m.Name) : $(Split-Path $zip -Leaf) ($n fichiers)"
}
[IO.File]::WriteAllText((Join-Path $dir 'INDEX.txt'), ($index -join "`r`n") + "`r`n", (New-Object Text.UTF8Encoding $false))
$left = Get-ChildItem $modules -Directory | Where-Object { $_.Name -in $optional.Name }
Write-Host "Modules gardes dans le build : $($cfg.essential -join ', ')"
Write-Host "Modules optionnels : $($optional.Count) archive(s) dans $dir ; fichiers deplaces $files, archives $zipped ; restes dans le build $(@($left).Count)"
if ($zipped -ne $files -or @($left).Count -ne 0) { throw 'Controle en echec : contenu des archives different des fichiers deplaces' }
return
}
$readme = @"
LifePlay Revival $($cfg.version) - modules optionnels / optional modules

View file

@ -1,5 +1,5 @@
{
"version": "next",
"essential": ["vin_Base", "vin_VanillaRealistic"],
"zip": "LifePlay_Revival_Optional_Modules.zip"
"per_module": true
}