diff --git a/Docs/Migration/09_Commandes_Utiles.md b/Docs/Migration/09_Commandes_Utiles.md index dc54df2..878bf02 100644 --- a/Docs/Migration/09_Commandes_Utiles.md +++ b/Docs/Migration/09_Commandes_Utiles.md @@ -157,5 +157,8 @@ Get-FileHash Releases\\Windows\LifePlay-Windows.utoc, \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 -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_ # 7. README : section de la version avec le lien vers Docs/Modding/FullGuides/Creating_Asset_Mods.md ``` diff --git a/Docs/Migration/15_Modules_Optionnels.md b/Docs/Migration/15_Modules_Optionnels.md index 6027e1b..8401127 100644 --- a/Docs/Migration/15_Modules_Optionnels.md +++ b/Docs/Migration/15_Modules_Optionnels.md @@ -42,3 +42,18 @@ Il vérifie la présence des modules essentiels, déplace les autres vers `-for-LifePlay-.zip` + (`LifePlay/Content/Modules/` + `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 \Modules_`). +- `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/`), 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`). diff --git a/Docs/Migration/Journal_Modifications.md b/Docs/Migration/Journal_Modifications.md index 887dea5..835a92f 100644 --- a/Docs/Migration/Journal_Modifications.md +++ b/Docs/Migration/Journal_Modifications.md @@ -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 | diff --git a/ModSources/lpr_hair_pocolov/Module/CREDITS.txt b/ModSources/lpr_hair_pocolov/Module/CREDITS.txt new file mode 100644 index 0000000..70ac928 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/CREDITS.txt @@ -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*). diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov03.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov03.lphair new file mode 100644 index 0000000..e88195a --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov03.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov05.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov05.lphair new file mode 100644 index 0000000..b09af4a --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov05.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov06.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov06.lphair new file mode 100644 index 0000000..0cd4faa --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov06.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov07.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov07.lphair new file mode 100644 index 0000000..ae55be6 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov07.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov09.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov09.lphair new file mode 100644 index 0000000..d19a8f2 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov09.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov10.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov10.lphair new file mode 100644 index 0000000..838d8c8 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov10.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov11.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov11.lphair new file mode 100644 index 0000000..b44e24d --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov11.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov13.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov13.lphair new file mode 100644 index 0000000..b7cc1b5 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov13.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov14.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov14.lphair new file mode 100644 index 0000000..33de7b5 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov14.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov15.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov15.lphair new file mode 100644 index 0000000..16b1e20 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov15.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov16.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov16.lphair new file mode 100644 index 0000000..6faf91a --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov16.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov17.lphair b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov17.lphair new file mode 100644 index 0000000..eba9f0a --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/Hairstyles/pocolov17.lphair @@ -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 diff --git a/ModSources/lpr_hair_pocolov/Module/lpr_hair_pocolov.lpmod b/ModSources/lpr_hair_pocolov/Module/lpr_hair_pocolov.lpmod new file mode 100644 index 0000000..970b81f --- /dev/null +++ b/ModSources/lpr_hair_pocolov/Module/lpr_hair_pocolov.lpmod @@ -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 diff --git a/ModSources/lpr_hair_pocolov/lpr_hair_pocolov.uplugin b/ModSources/lpr_hair_pocolov/lpr_hair_pocolov.uplugin new file mode 100644 index 0000000..742e565 --- /dev/null +++ b/ModSources/lpr_hair_pocolov/lpr_hair_pocolov.uplugin @@ -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" +} diff --git a/Tools/SplitModules.ps1 b/Tools/SplitModules.ps1 index 49c7167..54c85bd 100644 --- a/Tools/SplitModules.ps1 +++ b/Tools/SplitModules.ps1 @@ -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 \..\_modules_optionnels (rien n'est supprime). +.PARAMETER (configuration "per_module": true, depuis la publication qui suit la V1.4) + Une archive par module optionnel, -for-LifePlay-.zip (LifePlay\Content\Modules\ + notice + bilingue tiree du .lpmod), dans \ ; 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 diff --git a/Tools/modules/next.json b/Tools/modules/next.json index 80114f9..5e51ca9 100644 --- a/Tools/modules/next.json +++ b/Tools/modules/next.json @@ -1,5 +1,5 @@ { "version": "next", "essential": ["vin_Base", "vin_VanillaRealistic"], - "zip": "LifePlay_Revival_Optional_Modules.zip" + "per_module": true }