TH1/Tools/CheckSakuyaGuardDamageBearer.ps1

47 lines
1.9 KiB
PowerShell

$ErrorActionPreference = "Stop"
$repoRoot = git rev-parse --show-toplevel 2>$null
if (-not $repoRoot) {
throw "Not inside a git repository."
}
$repoRoot = [System.IO.Path]::GetFullPath($repoRoot.Trim())
$sakuyaPath = Join-Path $repoRoot "Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/SakuyaGuardSkill.cs"
$synergyPath = Join-Path $repoRoot "Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KaguyaFrenchSynergySkill.cs"
$sakuyaText = Get-Content -Raw $sakuyaPath
$synergyText = Get-Content -Raw $synergyPath
if ($sakuyaText -notmatch 'DamageSettlement\s*\(\s*mapData\s*,\s*info\.DamageOrigin\s*,\s*unit\s*,[\s\S]*?DamageType\.Splash') {
throw "SakuyaGuard guardrail failed: guard damage should keep the legacy nested DamageSettlement(..., DamageType.Splash) settlement model."
}
foreach ($required in @(
'TryGetTransferredDamageOriginalTarget',
'_guardTransferContexts.Push',
'_guardTransferContexts.Pop',
'info.DamageValue = 0'
)) {
if (-not $sakuyaText.Contains($required)) {
throw "SakuyaGuard guardrail failed: missing required snippet '$required'."
}
}
if ($sakuyaText.Contains('info.DamageBearer = unit')) {
throw "SakuyaGuard guardrail failed: Sakuya guard must not use DamageBearer because it changes legacy settlement side effects."
}
if (-not $synergyText.Contains('SakuyaGuardSkill.TryGetTransferredDamageOriginalTarget')) {
throw "KaguyaFrenchSynergy guardrail failed: synergy debuff must redirect Sakuya-guard transferred damage to the original target."
}
if ($synergyText.Contains('DamageType.CounterAttack')) {
throw "KaguyaFrenchSynergy guardrail failed: do not globally add counterattack synergy debuffs as part of the Sakuya guard fix."
}
if (-not $synergyText.Contains('debuffTarget.AddSkill_Legacy')) {
throw "KaguyaFrenchSynergy guardrail failed: synergy debuff must be applied through the selected debuffTarget."
}
Write-Host "SakuyaGuard transferred-debuff guardrail passed."