- Tools/BuildMod.ps1 : controles, cuisson DLC contre la version de reference, controle du conteneur, archive installable testee, installation optionnelle dans un jeu de test. - Tools/ModSource.ps1 : sources dans ModSources/<Nom>, montees dans Mods/ le temps d'un travail ; le build du jeu de base ne contient rien des mods. - HairPipeline en mode mod ; HairMaterials : analyse du dossier (plantage dans un plugin), reutilisation des textures ; sous-systeme : repli DoesPackageExist. Valide en jeu le 2026-10-03 (CHG-104). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
2.1 KiB
PowerShell
51 lines
2.1 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Montage temporaire d'un mod d'assets (lot H3b, Docs/Migration/16_H3_Mods_Paquets.md).
|
|
|
|
.DESCRIPTION
|
|
Les sources d'un mod vivent dans ModSources\<Nom>\ :
|
|
<Nom>.uplugin plugin de contenu (CanContainContent)
|
|
Content\ assets du mod (non versionnes, comme Content/Heavy)
|
|
Module\ module LifePlay en texte (<Nom>.lpmod, Hairstyles\*.lphair, CREDITS.txt)
|
|
L'editeur ne monte /<Nom>/ que si le plugin est dans <projet>\Mods\ ; mais un plugin laisse dans Mods\ serait cuit
|
|
avec le jeu de base. Mount-ModSource deplace donc ModSources\<Nom> vers Mods\<Nom> le temps d'un travail (import,
|
|
cuisson DLC) et Dismount-ModSource le remet en place (deplacements seulement, rien n'est copie ni supprime).
|
|
|
|
A charger par dot-sourcing : . (Join-Path $PSScriptRoot 'ModSource.ps1')
|
|
#>
|
|
|
|
function Get-ModSourcePaths([string] $Root, [string] $Name) {
|
|
[pscustomobject]@{
|
|
Source = Join-Path $Root "ModSources\$Name"
|
|
Mounted = Join-Path $Root "Mods\$Name"
|
|
}
|
|
}
|
|
|
|
function Mount-ModSource([string] $Root, [string] $Name) {
|
|
$p = Get-ModSourcePaths $Root $Name
|
|
if (Test-Path $p.Mounted) {
|
|
throw "Mods\$Name existe deja (travail precedent interrompu ?) : le remettre dans ModSources\$Name a la main avant de relancer"
|
|
}
|
|
if (-not (Test-Path (Join-Path $p.Source "$Name.uplugin"))) {
|
|
throw "ModSources\$Name\$Name.uplugin introuvable"
|
|
}
|
|
New-Item -ItemType Directory -Force (Split-Path $p.Mounted -Parent) | Out-Null
|
|
Move-Item $p.Source $p.Mounted
|
|
Write-Host "Mod $Name monte dans Mods\$Name"
|
|
$p.Mounted
|
|
}
|
|
|
|
function Dismount-ModSource([string] $Root, [string] $Name) {
|
|
$p = Get-ModSourcePaths $Root $Name
|
|
if (Test-Path $p.Mounted) {
|
|
Move-Item $p.Mounted $p.Source
|
|
Write-Host "Mod $Name remis dans ModSources\$Name"
|
|
}
|
|
}
|
|
|
|
# Autres plugins presents dans Mods\ (ils seraient cuits avec le jeu de base).
|
|
function Get-StrayMods([string] $Root, [string] $Except = '') {
|
|
$mods = Join-Path $Root 'Mods'
|
|
if (-not (Test-Path $mods)) { return @() }
|
|
@(Get-ChildItem $mods -Directory | Where-Object { $_.Name -ne $Except } | ForEach-Object Name)
|
|
}
|