LifePlay-Revival/Tools/ModSource.ps1

52 lines
2.1 KiB
PowerShell
Raw Normal View History

<#
.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)
}