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:
parent
8005a887f5
commit
aa8aa7542e
20 changed files with 191 additions and 1 deletions
|
|
@ -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
|
||||
```
|
||||
|
|
|
|||
|
|
@ -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`).
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
13
ModSources/lpr_hair_pocolov/Module/CREDITS.txt
Normal file
13
ModSources/lpr_hair_pocolov/Module/CREDITS.txt
Normal 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*).
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
12
ModSources/lpr_hair_pocolov/Module/lpr_hair_pocolov.lpmod
Normal file
12
ModSources/lpr_hair_pocolov/Module/lpr_hair_pocolov.lpmod
Normal 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
|
||||
13
ModSources/lpr_hair_pocolov/lpr_hair_pocolov.uplugin
Normal file
13
ModSources/lpr_hair_pocolov/lpr_hair_pocolov.uplugin
Normal 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"
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"version": "next",
|
||||
"essential": ["vin_Base", "vin_VanillaRealistic"],
|
||||
"zip": "LifePlay_Revival_Optional_Modules.zip"
|
||||
"per_module": true
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue