11 Commits

6 changed files with 484 additions and 86 deletions

117
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,117 @@
name: Build Mod Package
on:
push:
tags:
- "v*"
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: windows-latest
defaults:
run:
shell: pwsh
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Prepare workspace
run: |
$ErrorActionPreference = "Stop"
if (-not (Test-Path -LiteralPath "Mods\\DnD 5.5e AIO Russian\\Localization\\Russian\\russian.xml")) {
throw "Repository sources are not available in the runner workspace."
}
New-Item -ItemType Directory -Path ".tools\\lslib" -Force | Out-Null
New-Item -ItemType Directory -Path "build" -Force | Out-Null
- name: Resolve version tag
id: vars
run: |
$ErrorActionPreference = "Stop"
$versionTag = ""
if ($env:GITHUB_REF -like "refs/tags/v*") {
$versionTag = $env:GITHUB_REF_NAME
}
"version_tag=$versionTag" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
- name: Download latest LSLib release
run: |
$ErrorActionPreference = "Stop"
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/Norbyte/lslib/releases/latest"
$asset = $release.assets | Where-Object { $_.name -match '\.zip$' } | Select-Object -First 1
if (-not $asset) {
throw "Could not find a downloadable LSLib zip asset in the latest release."
}
Invoke-WebRequest -UseBasicParsing -Uri $asset.browser_download_url -OutFile ".tools/lslib/lslib.zip"
Expand-Archive -LiteralPath ".tools/lslib/lslib.zip" -DestinationPath ".tools/lslib" -Force
- name: Build .pak
run: |
$ErrorActionPreference = "Stop"
$divine = Get-ChildItem -Path ".tools\\lslib" -Recurse -File |
Where-Object { $_.Name -ieq "Divine.exe" } |
Select-Object -First 1
if (-not $divine) {
throw "Divine.exe was not found in the downloaded LSLib release."
}
& ".\\scripts\\build.ps1" -DivinePath $divine.FullName -Workspace "${{ github.workspace }}" -VersionTag "${{ steps.vars.outputs.version_tag }}"
- name: Show build result
run: |
$ErrorActionPreference = "Stop"
$archiveBaseName = "DnD 5.5e AIO Russian"
if ($env:GITHUB_REF -like "refs/tags/v*") {
$archiveBaseName = "DnD 5.5e AIO Russian $env:GITHUB_REF_NAME"
}
$zipPath = [System.IO.Path]::GetFullPath((Join-Path "${{ github.workspace }}" "build/$archiveBaseName.zip"))
Get-ChildItem "build/DnD 5.5e AIO Russian.pak", "build/info.json", $zipPath |
Select-Object FullName, Length, LastWriteTime
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: bg3-dnd55e-russian-localization-${{ github.run_number }}
path: build/*
if-no-files-found: error
- name: Create or update GitHub release
if: startsWith(github.ref, 'refs/tags/v')
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
$ErrorActionPreference = "Stop"
$tagName = "${{ github.ref_name }}"
$zipPath = Join-Path $env:GITHUB_WORKSPACE "build\\DnD 5.5e AIO Russian $tagName.zip"
if (-not (Test-Path -LiteralPath $zipPath)) {
throw "Release archive was not found at '$zipPath'."
}
gh release view $tagName --repo "${{ github.repository }}" *> $null
if ($LASTEXITCODE -ne 0) {
gh release create $tagName $zipPath `
--repo "${{ github.repository }}" `
--title $tagName `
--notes ""
}
else {
gh release upload $tagName $zipPath `
--repo "${{ github.repository }}" `
--clobber
}

285
AGENTS.md
View File

@@ -1,91 +1,228 @@
# AGENTS.md # AGENTS.md
## General Rules (MUST) ## Execution Model (MUST)
- Read this file first; treat as system-level constraints.
- Priority:
1. User instructions
2. AGENTS.md
3. Existing code/style
4. Best practices
- Prefer minimal, non-breaking changes.
- Do not introduce unnecessary abstractions.
### Git Collaboration Policy (General) ---
- Commit/push only after explicit user approval.
- After approval: commit and push immediately.
- Branch switch prompt (`fix/*` or `feat/*`): ask at dialogue start; reuse the explicit user decision for all subsequent fix/feature tasks in the same dialogue.
- Pending clarification/approval question: ask once, in a single short message; do not repeat the same pending question in a separate final message.
- After finishing work in `fix/*` or `feat/*`: propose either
1. creating an MR into `main`, or
2. merging to `main` immediately and deleting the `fix/*`/`feat/*` branch.
- If push fails: retry up to 2 more times with 3s pause.
- Approval prompts for pending actions: short direct phrasing, no soft/opening phrases; response format is mandatory:
- binary action: yes/no question.
- multiple actions/combinations: numbered options only.
### Cleanup (General) ## Communication (MUST)
- Do not leave temporary/debug artifacts in repo. - Answer first, then request approval if needed.
- Remove additional debug/temp dirs unless user asked to keep them. - Concise, meaningful, no filler.
- Do not end response with only procedural choice.
### Rules Maintenance (General) Approval/clarification:
- For changes to rules files (`AGENTS.md`, `ACTIONS.md`): prefer optimized, compressed edits for AI-agent execution (machine-readable, unambiguous). - ask once, no repetition
- Keep rule updates minimal and non-duplicative: merge overlapping points, remove redundancy, preserve intent. - binary → yes/no
- multiple → numbered options + brief context
### Communication (General) - File links in repo docs/checklists: relative paths, `/`, spaces as `%20`.
- Project file links in user-facing Markdown: relative paths, `/` separators, spaces encoded as `%20`. - In assistant UI responses, use the link format required by the execution environment; include relative path text when possible.
## Project-Specific Rules (MUST) ---
### Scope ## Git Workflow (MUST)
- Repository purpose: standalone Russian localization mod only. - Never commit/push without explicit user approval.
- Allowed domain: localization content + packaging/release metadata. - After approval → commit + push immediately.
- Forbidden: gameplay logic, Script Extender content, unrelated assets. - Commit messages: Russian, factual (what was done).
- Keep repository source-only. - Branch (`fix/*` or `feat/*`): ask once before the first file-changing task that may lead to commit; reuse decision for all subsequent tasks in same dialogue.
- Never commit `.pak` or temporary build artifacts.
### Canonical Paths After work in `fix/*` or `feat/*`:
- Mod sources: `Mods/DnD 5.5e AIO Russian` 1. MR → main
- Russian localization: `Mods/DnD 5.5e AIO Russian/Localization/Russian/russian.xml` 2. merge → main + delete branch
- Mod metadata: `Mods/DnD 5.5e AIO Russian/meta.lsx`
- Build script (single source of build truth): `scripts/build.ps1`
- CI workflow: `.gitea/workflows/build.yml`
- Glossary (primary terminology reference): `glossary/glossary.normalized.json`
- Action catalog and command playbooks: `ACTIONS.md`
- Upstream English reference: `https://github.com/Yoonmoonsik/dnd55e/blob/main/Mods/DnD2024_897914ef-5c96-053c-44af-0be823f895fe/Localization/English/english.xml`
### Packaging Invariants Push failure:
- `.pak` must contain only BG3 mod structure under `Mods/...`. - retry ≤2 times, 3s delay
- Required content in `.pak`:
- `Mods/DnD 5.5e AIO Russian/meta.lsx`
- `Mods/DnD 5.5e AIO Russian/Localization/Russian/russian.xml`
- Must not leak into `.pak`: `.git`, `.gitea`, `scripts`, `tools`, `.tools`, `build`, staging dirs.
- Staging for packaging must be in `%TEMP%`, not in dot-prefixed repo dirs.
### Build/CI Contract Release link:
- CI workflow stays thin: - provide `[version](url)` immediately after tag push, without waiting for CI
1. prepare workspace
---
## Scope (MUST)
- Repo = Russian localization mod only.
Allowed:
- localization content
- packaging/release metadata
Forbidden:
- gameplay logic
- Script Extender
- unrelated assets
- Repo must remain source-only.
- Never commit `.pak` or build artifacts.
---
## Paths (MUST)
- Mod: `Mods/DnD 5.5e AIO Russian`
- Localization: `Mods/DnD 5.5e AIO Russian/Localization/Russian/russian.xml`
- Metadata: `Mods/DnD 5.5e AIO Russian/meta.lsx`
- Build: `scripts/build.ps1` _(single source of build truth)_
- CI: `.gitea/workflows/build.yml`
- Glossary: `glossary/glossary.normalized.json` _(primary terminology reference)_
- Actions: `ACTIONS.md`
- Upstream EN reference: `https://github.com/Yoonmoonsik/dnd55e/blob/main/Mods/DnD2024_897914ef-5c96-053c-44af-0be823f895fe/Localization/English/english.xml`
---
## Packaging (MUST)
- `.pak` contains ONLY `Mods/...`
Required:
- `meta.lsx`
- `russian.xml`
Forbidden in `.pak`:
- `.git`, `.gitea`
- `scripts`, `tools`, `.tools`
- `build`, staging dirs
Staging:
- use `%TEMP%`
- not inside repo
---
## Build & CI (MUST)
Flow:
1. prepare
2. download Divine 2. download Divine
3. call `scripts/build.ps1` 3. run `scripts/build.ps1`
4. publish tag archive 4. publish
- Expected build outputs:
- `build/DnD 5.5e AIO Russian.pak` Outputs:
- `build/*.pak`
- `build/info.json` - `build/info.json`
- `build/DnD 5.5e AIO Russian <tag>.zip` (for tag builds) - `build/*.zip` (tag only)
- Release ZIP must include only `.pak` + `info.json`.
- CI triggers: tag `v*` and manual dispatch; not every push to `main`.
### Version/Release Rules Release ZIP:
- Read release version only from `save/region[@id="Config"]/node[@id="root"]/children/node[@id="ModuleInfo"]/attribute[@id="Version64"]` via explicit XML parsing. - only `.pak` + `info.json`
- `PublishVersion` must not be changed during release preparation.
- Release tag must match the source-of-truth version.
- Decision logic before tagging:
1. If `ModuleInfo/Version64` was manually changed (e.g. BG3 Toolkit), use matching tag and release.
2. If `ModuleInfo/Version64` equals latest released version, bump version first (e.g. `scripts/set-version.ps1 -VersionTag <tag>`), commit, then create/push tag.
- `scripts/build.ps1` derives release `Version64` from tag and writes it to generated `info.json` and staged `meta.lsx`.
### info.json Contract Triggers:
- Top-level keys: `Mods`, `MD5`. - automatic: push tag `v*`
- Per-mod keys: `Author`, `Name`, `Folder`, `Version`, `Description`, `UUID`, `Created`, `Dependencies`, `Group`. - manual: workflow_dispatch
- `Dependencies` is an array of UUIDs. - branch pushes without tag MUST NOT publish release artifacts
- Current dependency UUID: `897914ef-5c96-053c-44af-0be823f895fe`.
### Git Collaboration Policy (Project-Specific) ---
- Commit messages and comments: Russian.
- Commit message content: what was done (not what should be done).
- If changes affect `.pak` contents or build/release flow: propose releasing next version.
- For released versions in user-facing messages: provide direct archive link in Markdown format `[version](url)` when derivable (acceptable immediately after tag push, even before CI finishes).
### Cleanup (Project-Specific) ## Versioning (CRITICAL)
- Ignored/temp patterns include: `build/`, `build-stage*`, `.tools/`, `*.pak`. Source of truth:
`ModuleInfo/Version64` — read via explicit XML parsing:
`save/region[@id="Config"]/node[@id="root"]/children/node[@id="ModuleInfo"]/attribute[@id="Version64"]`
Rules:
- do not change `PublishVersion`
- tag MUST match version
Before tag:
1. if version already changed → use it
2. if same as last → bump:
`scripts/set-version.ps1 -VersionTag <tag>`
`build.ps1`:
- derives version from tag
- writes to `info.json` + staged `meta.lsx`
Conflict resolution (MUST):
- before release, `Version64` in `meta.lsx` MUST equal target tag version
- if mismatch, run `scripts/set-version.ps1 -VersionTag <tag>` and re-check
- if still mismatch, release is blocked
---
## info.json (MUST)
Root:
- `Mods`, `MD5`
Per mod:
- Author, Name, Folder, Version
- Description, UUID, Created
- Dependencies (array), Group
Dependency UUID:
`897914ef-5c96-053c-44af-0be823f895fe`
---
## Guardrails (MUST)
Before commit:
- scope valid (localization/metadata only)
- no forbidden content
- no build artifacts (`.pak`, `build/`, staging)
- no temp/debug artifacts; ignored patterns MUST be present in `.gitignore`: `build/`, `build-stage*`, `.tools/`, `*.pak`
- packaging invariants intact
- version consistent (if applicable)
Before push:
- explicit user approval
- commit message valid (RU, factual)
Before release:
- version == tag
- version bumped if needed
- CI/build contract valid
- outputs correct (no extra files)
---
## Release & Changelog (MUST)
- Every release MUST include changelog.
Changelog:
- language: Russian
- concise, user-facing
- describe WHAT changed
- group logically
Sources:
- prefer diff over commits
Diff rules:
- inspect real file changes
Localization (`russian.xml`):
- added / changed / removed strings
- summarize user-visible impact (UI, spells, descriptions)
Metadata / CI:
- describe effect, not raw edits
Large diff:
- group + summarize
If no visible changes:
- state "техническое обновление"
Before release:
- generate changelog draft
- ask for approval
Approval gates:
- Gate A: explicit approval for commit/push (code/content changes)
- Gate B: explicit approval for release publish (after changelog draft)
Release message:
- version
- changelog
- `[version](url)` if derivable
Do not:
- invent changes
- include internal noise
---
## Rules Maintenance (MUST)
- Changes to `AGENTS.md` / `ACTIONS.md`: prefer compressed, machine-readable edits.
- Keep updates minimal and non-duplicative: merge overlapping points, remove redundancy, preserve intent.

View File

@@ -2635,4 +2635,148 @@
<content contentuid="hc1e53854g0170gb211geca0geb2971202e92" version="1">Когда видимый вами союзник в пределах 60 футов получает попадание атакой, вы можете Реакцией потратить одну Кость риска, чтобы совершить атаку дальнобойным оружием по атакующему. При использовании союзник получает Временные очки здоровья, равные выпавшему значению Кости риска.</content> <content contentuid="hc1e53854g0170gb211geca0geb2971202e92" version="1">Когда видимый вами союзник в пределах 60 футов получает попадание атакой, вы можете Реакцией потратить одну Кость риска, чтобы совершить атаку дальнобойным оружием по атакующему. При использовании союзник получает Временные очки здоровья, равные выпавшему значению Кости риска.</content>
<content contentuid="hcf85f5ddg214egc39bga0e8g7ee910e3ffec" version="1">Уровень 3: Призвать к порядку</content> <content contentuid="hcf85f5ddg214egc39bga0e8g7ee910e3ffec" version="1">Уровень 3: Призвать к порядку</content>
<content contentuid="hd43fb4c9g35d7g9ab6g9cc2g37fbd18e9590" version="1">Когда вы совершаете критическое попадание по существу, вы можете потребовать, чтобы цель сдалась. Цель должна преуспеть в спасброске Мудрости против СЛ спасброска ваших манёвров, иначе получит состояние «Испуган» на 1 минуту. Существо может повторять этот спасбросок Мудрости в конце каждого своего хода, оканчивая это состояние при успехе.</content> <content contentuid="hd43fb4c9g35d7g9ab6g9cc2g37fbd18e9590" version="1">Когда вы совершаете критическое попадание по существу, вы можете потребовать, чтобы цель сдалась. Цель должна преуспеть в спасброске Мудрости против СЛ спасброска ваших манёвров, иначе получит состояние «Испуган» на 1 минуту. Существо может повторять этот спасбросок Мудрости в конце каждого своего хода, оканчивая это состояние при успехе.</content>
<content contentuid="h00467a34g3b88g453cg081eg6e394afa8e61" version="1">Кровавые рыцари Ада, сангвинарные рыцари, служат Сутеху, Владыке Крови. Их чародейство вытягивает жизненную силу из врагов, вливая украденную витальность в инфернальные ритуалы, чтобы переломить ход битвы.
Сутех правит Наракой, Городом Крови. Признанный величайшим чародеем ада, он носит титул Верховного Сангвинария и властвует из Храма Жизненности. Он мастер магии крови, а его внутренний круг жрецов и волшебников составляют Кроволичи, неживые заклинатели, чьи телесные оболочки обратились в прах столетия назад и чьи тела сотворены из цельной крови.
Все иллриггеры Сутеха принадлежат к культу, известному как Чаша Жизненности. Рыцари Чаши жадно пьют самую сущность своих врагов, высасывая её ради подпитки своей магии. Другие члены Ордена Осквернения опасаются, что сангвинарные рыцари стремятся не только к восшествию Сутеха на Престол Ада; некоторые шепчутся, что Чаша втайне замышляет сделать Сутеха богом. Разумеется, это было бы изменой.</content>
<content contentuid="h018dfa63g9034g560eg6daegcc0414738e0e" version="1">Цена крови: к12</content>
<content contentuid="h0294b05egc63bg881age868g1c91eaec6dab" version="1">Печать</content>
<content contentuid="h08b904f9gd5aeg7159g0bb5g4f1a264718cc" version="1">Уровень 3: Воодушевить союзников</content>
<content contentuid="h09168b32g9fe8gac39gedf6g93f7c55f5e17" version="1">Наложите на цель одну печать иллриггера.</content>
<content contentuid="h0f8708dbgeff3g4172g8db1g4d944084b8c1" version="1">Когда видимое вами существо наносит урон вам или союзнику в пределах 30 футов от вас, вы можете реакцией потратить печать, чтобы уменьшить получаемый целью урон на 1к10 + половина уровня вашего иллриггера, округлённая вниз.</content>
<content contentuid="h12ae9a64g3bfcg9c68gbc56g02b570979b53" version="1">Это существо заклеймено силой Ада.</content>
<content contentuid="h158d6a37ga6c0ga147gbd62g2f7886d1d51b" version="1">Получаете +2 к КБ на 1 минуту.</content>
<content contentuid="h16ca83e4gd87cge240g4682g2480a4a6ba19" version="1">Когда Сутех принимает вас как своего иллриггера, он дарует вам доступ к своему кощунственному владычеству над кровью и жизнью. Вы получаете владение навыком «Религия».</content>
<content contentuid="h16cf04ffg2962g897ag364fgea809b7c8c16" version="2">Уровень 2: Апатия Стикса</content>
<content contentuid="h173e97b1g24c4gd71cg2b14gc7e43d9e037a" version="2">Уровень 2: Проворство</content>
<content contentuid="h1ad18073g65adg793ege0dbg830abdc2841d" version="1">Под интердиктом</content>
<content contentuid="h1e93a04fgfcb3ge71cg8edcg9d735d49cff7" version="1">Бонусным действием вы восстанавливаете общее количество очков здоровья, равное пятикратному уровню вашего иллриггера, распределяя их по своему выбору между собой и другими существами в пределах 30 футов.</content>
<content contentuid="h1f95a7f0g7d0fgabfagfa1cg5cbc0b67b2bb" version="1">Покров теней</content>
<content contentuid="h2702a54eg25d6geee6g89b1g70955d610f89" version="1">Вы можете бонусным действием потратить печать, чтобы окутать себя или существо, которого касаетесь, плащом из полутвёрдых теней. Цель получает +2 к КБ на 1 минуту.</content>
<content contentuid="h283a80a7gdc57ge48fg2323g0a19321fd070" version="2">Требование: 7-й уровень иллриггера или выше.&lt;br&gt;&lt;br&gt;Вы можете бонусным действием потратить печать, чтобы телепортироваться на расстояние до 30 футов в свободное пространство, которое видите.</content>
<content contentuid="h29248f55g9799g09d8ge529g06704f76d155" version="1">Уровень 10: Цена крови</content>
<content contentuid="h2ab85095gd8e1gd4f8g159bg5479bf29202f" version="1">Интердикт</content>
<content contentuid="h3193c1b1g81cegd32cg4ceag8e352d5d18eb" version="1">Воодушевить союзников</content>
<content contentuid="h331a5a4cg366cg82a3g63e0g6899f199c8bb" version="1">Бонусным действием вы восстанавливаете общее количество очков здоровья, равное пятикратному уровню вашего иллриггера, распределяя их по своему выбору между собой и другими существами в пределах 30 футов.</content>
<content contentuid="h3518e2eeg9593gae20g3e88gff65f6d3e6bb" version="1">Ослабляющая печать</content>
<content contentuid="h357af6fegcc60g52adgea2agd98b8ed57793" version="1">Цена крови: к6</content>
<content contentuid="h36291e60ge6ddg0237g008dgbfdf54c658c5" version="1">Кровь за кровь</content>
<content contentuid="h368ac3efg0988g4f4ag0fa9g6819e55d1577" version="1">Высвобождение ада: огонь</content>
<content contentuid="h4087e43dg1626g7141gb492g08612b1d6f08" version="4">Уровень 7: Пламенный канал</content>
<content contentuid="h4455cd21gb4e4ga171g4a01gfd22b925fb9b" version="2">Требование: 7-й уровень иллриггера или выше.&lt;br&gt;&lt;br&gt;Когда существо совершает дальнобойную атаку по вам или по союзнику в пределах 30 футов от вас, которого вы видите, вы можете реакцией потратить печать, чтобы совершить дальнобойную атаку оружием по атакующему. Если ваша атака попадает, она наносит дополнительный урон, равный половине уровня вашего иллриггера, округлённой вниз.</content>
<content contentuid="h450bf76dg7e82gc1f2g03a3g2f6003609ae8" version="1">Каждый раз, когда союзник получает урон от существа под интердиктом, это существо получает урон некротической энергией, равный вашему бонусу мастерства.</content>
<content contentuid="h4645bf49gb7f4g564bgeb3fgfb357d560904" version="1">Боевое мастерство: Ложь</content>
<content contentuid="h467e4d93g2c88g87degd375gc54b5a65a88d" version="1">Пожирание</content>
<content contentuid="h4b36c8d5g7a7fgf9degbde8ga2790584725d" version="1">Наложить печать</content>
<content contentuid="h4c1994b8gf35cg365bg459eg53670e2a390f" version="2">Уровень 2: Без оков</content>
<content contentuid="h4c1c236cg2298g059bgbffbg251a8f869bb7" version="1">Ваши атаки исполнены сокрушительной мощи. Когда вы попадаете атакой оружием, вы наносите дополнительный урон 1к8 выбранного типа.</content>
<content contentuid="h51e32293ge4aagbb61g14d2g23c2e8863236" version="1">Уровень 7: Кровь за кровь</content>
<content contentuid="h565e4f77gf679gd18fgcb9bg38afc492e620" version="2">Уровень 2: Дьявольская мощь</content>
<content contentuid="h58aa4956gcc27g9d75g019cgd0340e796f47" version="2">Уровень 2: Бравада</content>
<content contentuid="h5b9a73a3g7b6fg13b5gc7c3gdf58090d1c36" version="1">Мстительный выстрел</content>
<content contentuid="h5ead3298gb213gac53g0d3egaf553c018315" version="4">Уровень 7: Покров теней</content>
<content contentuid="h5f2491abg74f5g071bgce31ge29ac76995fd" version="1">Ваш архидьявол дарует вам сверхъестественное мастерство в определённом стиле боя. Выберите одно из следующих боевых мастерств иллриггера:</content>
<content contentuid="h608611fbg8b32g738cg8750g599765b12de7" version="1">Уровень 11: Кровавый удар</content>
<content contentuid="h6266397ag443dg94a5g8c87g09accc415506" version="1">Уровень 3: Обескровливание</content>
<content contentuid="h6648aa69gf7b4gfd26gf073gf24f1802047b" version="1">Кровавый удар</content>
<content contentuid="h67853750g16c0g9b13gc3efgbaba43af6259" version="2">Уровень 2: Ослабляющая печать</content>
<content contentuid="h67c6cf13g3c76g42a4gfac4g3b887eeb9730" version="1">Когда вы попадаете по существу атакой оружием ближнего боя, вы можете переместиться, не провоцируя атак по возможности.</content>
<content contentuid="h6975a894g14d4g0b4dga8ecg80a20b85ad85" version="1">Вы можете укреплять защиту ценой собственной жизненной силы. Каждый раз, когда вы проваливаете спасбросок, вы можете потратить одну из своих костей здоровья, бросить её и добавить выпавшее значение к результату спасброска.</content>
<content contentuid="h69a470cbg07f2g82ddg9603g8091c23a6a5a" version="1">Когда вы используете свой «Зловещий интердикт», чтобы наложить или сжечь печать, его дальность составляет 60 футов вместо 30. Когда на 6-м уровне вы получаете особенность «Инфернальный канал», её дальность составляет 30 футов вместо касания.
Кроме того, совершение дальнобойной атаки, пока вы находитесь в пределах 5 футов от враждебного существа, не накладывает помеху на бросок атаки.</content>
<content contentuid="h6b7c5b42gc865g9a66g25bcgcf6498b47b95" version="1">Укрепление</content>
<content contentuid="h6bdae4c0g3fcdg259fgefa5g636614568bc0" version="1">Вы можете укреплять защиту ценой собственной жизненной силы. Каждый раз, когда вы проваливаете спасбросок, вы можете потратить одну из своих костей здоровья, бросить её и добавить выпавшее значение к результату спасброска.</content>
<content contentuid="h6c2e1510g127eg4a2eg3cbfg9e940ea8f6e8" version="2">Требование: 7-й уровень иллриггера или выше.&lt;br&gt;&lt;br&gt;Когда вы сжигаете одну или несколько печатей на существе под интердиктом, вы можете реакцией высвободить вокруг него взрыв адской энергии. Каждое выбранное вами существо в пределах 10 футов от цели должно совершить спасбросок Ловкости. При провале существо получает урон того же типа и в том же объёме, что печати нанесли существу под интердиктом. При успехе существо получает половину этого урона.</content>
<content contentuid="h6db51716g1e60ga51dg64d5g8dce1924d495" version="2">Уровень 2: Неумолимость</content>
<content contentuid="h70a4510cgf224gfccfg83dbge051b2c47f34" version="2">Уровень 2: Пожиратель душ</content>
<content contentuid="h7403d9e2gd4ffg8c95g6874gba9be784c5c0" version="1">Сангвинарный рыцарь</content>
<content contentuid="h76541450ge22fg5ec9g80fag5c97af69f959" version="1">Кровавый удар</content>
<content contentuid="h79d9540bg9852g5efdg3c46g65c5ac3dee8d" version="1">Уровень 6: Инфернальный канал</content>
<content contentuid="h7aa1b008g6ca0g4a20g5979g21ad1d5571fd" version="1">Кровь за кровь</content>
<content contentuid="h7e6eebc1g195fg638eg046cg1602e8341a8b" version="1">Цепь Ахерона</content>
<content contentuid="h8024deb6g1171ge522g2119g5c416be99cb1" version="2">Вы можете истощать врагов, чтобы воодушевлять союзников. Каждый раз, когда вы сжигаете одну или несколько печатей на существе, вы можете выбрать союзника в пределах 30 футов от вас, которого видите. Этот союзник получает временные очки здоровья, равные результату броска одной кости урона печати.</content>
<content contentuid="h83e42a83g88c6gd1e9g8c16gbff3333ac045" version="1">Апатия Стикса</content>
<content contentuid="h844db55cg4f62gabe3gbb9cg8faa13c91a88" version="1">Вы можете бонусным действием потратить печать, чтобы телепортироваться в свободное пространство, которое видите.</content>
<content contentuid="h84a9d67fge555g185dg5c83g4c97364a1cef" version="1">Пожиратель душ</content>
<content contentuid="h8942f538g5702g7f64g961agb06622c01a69" version="1">Уровень 11: Ужасающая сила (Огонь)</content>
<content contentuid="h8993f01fgfd8fg8b11g17cdg458c682aad00" version="3">Требование: 7-й уровень иллриггера или выше.&lt;br&gt;&lt;br&gt;Когда вы бонусным действием накладываете или перемещаете печать на существо размера «Большой» или меньше, вы можете активировать этот дар (без действия). Вы призываете инфернальные цепи, хватающие цель и заставляющие её совершить спасбросок Силы. При провале вы можете либо притянуть существо на 10 футов к себе, либо наложить на него захват до конца вашего следующего хода.</content>
<content contentuid="h89f9d62cgd6f0g46b6g9bdbgeb45a121b113" version="1">Цена крови: к10</content>
<content contentuid="h8a78754bge4a1gbe50g8f26g0bd670acd7cc" version="1">Цена крови: к8</content>
<content contentuid="h8b1d72d3gf86ag8352gbc15ga4b6db6acf02" version="1">Пламенный канал</content>
<content contentuid="h8b8b45b5g6648g381bg1bccg8ba31a12abd5" version="1">Вы можете истощать врагов, чтобы воодушевлять союзников. Каждый раз, когда вы сжигаете одну или несколько печатей на существе, вы можете выбрать союзника в пределах 30 футов от вас, которого видите. Этот союзник получает временные очки здоровья, равные результату броска одной кости урона печати.</content>
<content contentuid="h8cd365c4g7106g7c48g3af0gaa9b0e85108b" version="1">Получаете временные очки здоровья, равные вашему уровню иллриггера.</content>
<content contentuid="h8fd47ec3gac34g4144g6243g234bbbbbb9ae" version="1">Цель должна совершить спасбросок Телосложения. При провале она получает 3к10 урона некротической энергией, а вы восстанавливаете количество очков здоровья, равное нанесённому урону. При успехе она получает половину этого урона, а вы восстанавливаете количество очков здоровья, равное нанесённому урону.</content>
<content contentuid="h95248f4cg57e8g073dgc8a1gfbf3d472edee" version="1">Восстановить печати</content>
<content contentuid="h99d927b5gafddg8654g1453g82bbe0c6e89f" version="3">Иллриггер</content>
<content contentuid="h9b53ce98gbf9cg2509g1a23g24549bd6fad7" version="1">Уровень 1: Зловещий интердикт</content>
<content contentuid="ha334fba5ge039gfb31g1b15g55b8f07d80f4" version="1">Пожертвуйте половиной своих оставшихся &lt;LSTag Tooltip="HitPoints"&gt;очков здоровья&lt;/LSTag&gt;, чтобы исцелить цель на такое же количество.</content>
<content contentuid="ha3823257g1d27g9d0egeff1gb7b607bf03f2" version="1">Воодушевить союзников</content>
<content contentuid="ha474cedcg9588gc4b6g1526gc012f1de7f42" version="1">Магия, защищающая ваших союзников, теперь также истощает силы их врагов. Когда союзник, имеющий временные очки здоровья от вашей особенности «Обескровливание», получает попадание атакой ближнего боя, атакующий получает 11 урона некротической энергией.</content>
<content contentuid="ha681b28ag70a2g67d8g9448g35565a4a34e5" version="1">Сжигание печатей: огонь</content>
<content contentuid="ha7401e8dg37d9g7b31g97c4gc53803a8288b" version="1">Уровень 11: Ужасающая сила (Яд)</content>
<content contentuid="ha7e9ac57gfaedg252egecb1g6f787805f11a" version="2">Магия, защищающая ваших союзников, теперь также истощает силы их врагов. Когда союзник, имеющий временные очки здоровья от вашей особенности «Обескровливание», получает попадание атакой ближнего боя, атакующий получает 11 урона некротической энергией.</content>
<content contentuid="ha828937bg7769gb132g7f34g228ed13a6541" version="1">Сжигание печатей: некротическая энергия</content>
<content contentuid="ha8eaee0fg754dg1d66g293cgf44cc84312b0" version="1">Вы обретаете способность клеймить существ силой Ада. Один раз в свой ход вы можете наложить магическую печать на существо в пределах 30 футов от вас. Вы можете либо наложить эту печать, когда попадаете по цели атакой оружием (без действия), либо использовать бонусное действие, чтобы наложить её на видимую цель в пределах дальности. Эта печать сохраняется, пока не будет сожжена. Существо, на котором лежит одна или несколько ваших печатей, считается существом под интердиктом.
До отдыха вы можете наложить лишь ограниченное число печатей, а все потраченные печати восстанавливаются после короткого или длительного отдыха. На 1-м уровне у вас может быть максимум три печати, на 3-м уровне четыре печати, а на 7-м уровне пять печатей.
Если существо под интердиктом умирает, вы можете бонусным действием в свой ход перенести все наложенные на него печати на новое существо в пределах 30 футов от него, которое видите.</content>
<content contentuid="ha9df2c62g25e2g2614g66dagfe3cb0e26aa5" version="2">Требование: 7-й уровень иллриггера или выше.&lt;br&gt;&lt;br&gt;Вы можете бонусным действием потратить печать, чтобы окутать себя или существо, которого касаетесь, плащом из полутвёрдых теней. Цель получает +2 к КБ на 1 минуту.</content>
<content contentuid="haa0a6c9agc413g822cg52f2g69c530bc79d2" version="2">Когда вы сжигаете печать на существе под интердиктом, вы можете наполнить цель потусторонним холодом. До конца своего следующего хода она не может совершать бонусные действия или реакции.</content>
<content contentuid="hacf9fc8fg665eg2cf7g70aaga3d8cc697843" version="2">Вы можете истощать врагов, чтобы воодушевлять союзников. Каждый раз, когда вы сжигаете одну или несколько печатей на существе, вы можете выбрать союзника в пределах 30 футов от вас, которого видите. Этот союзник получает временные очки здоровья, равные результату броска одной кости урона печати.</content>
<content contentuid="had6ccb0dg99e0ge0b3gfe64g2cc75c0d28a0" version="1">Высвобождение ада: огонь</content>
<content contentuid="hb58aa744g9557g7770g99f4g200999b88429" version="2">Уровень 2: Жестокость</content>
<content contentuid="hb5dc95fdga8fdga177gedf9g3d1def6b18b4" version="1">Обескровливание</content>
<content contentuid="hb80a53b8gbab4ge493ge6fcg80ca85f5cccd" version="1">Пока на вас нет доспехов, ваш КБ равен 10 + модификатор Ловкости + модификатор Обаяния. Вы можете использовать щит и сохранять это преимущество.</content>
<content contentuid="hb8cf1d46g6834g9baagbf6dg50299be625eb" version="1">Боевое мастерство</content>
<content contentuid="hbc394c87g819ag60dcgd3e4g840e740aede3" version="1">Вы можете укреплять союзников ценой собственных сил или вытягивать жизненную силу врага себе на пользу.</content>
<content contentuid="hc00e6ea9gfd5egcff2g4900g073fd4c5bd3f" version="2">Вы сжигаете все наложенные вами на существо печати, нанося ему 1к6 урона огнём или некротической энергией (на ваш выбор) за каждую сожжённую печать. После сожжения печать немедленно исчезает.
Достигнув 5-го уровня в этом классе, вы укрепляете связь со своим архидьяволом. Каждая сожжённая печать начинает наносить дополнительный урон 1к6, всего 2к6 за печать. На 10-м уровне урон за печать увеличивается ещё на 1к6, всего до 3к6 за печать.</content>
<content contentuid="hc31d5eb8g73cdgf87bg7969geb0fc56b1687" version="1">Сангвинарные рыцари при вступлении в Орден Опустошения приносят клятву Сутеху. Эти заповеди обязывают их владеть нечестивой магией крови, требовать преданности и внушать ужас.
Их сила - их слабость. Я выбираю сильнейших из своих врагов, ибо их жизненная сила подпитает мою победу.
Грех требует страдания. Противостоять мне - ересь. Прежде чем мои враги вкусят поражение, они заплатят за своё неверие мучением.
Преданность вознаграждается. Мои дары заставляют союзников зависеть от меня и от кровопролития, которое меня усиливает.
Милосердие - это сила. Даруя помощь союзникам, я доказываю, сколь велика моя мощь. Каждый раз, когда я возвращаю жизнь, это напоминает, как быстро я могу её отнять.</content>
<content contentuid="hc31eef37gcba0g3dd5g3558g3b4bd0528103" version="1">Вы обретаете способность клеймить существ силой Ада.</content>
<content contentuid="hc323cc9cg84e2g474bg5925g8922b79a3ba5" version="1">Цель должна вычесть число, равное бонусу мастерства иллриггера, из результата спасброска, который она совершит до конца своего следующего хода.</content>
<content contentuid="hc60731eeg14f1gbf2egea48g01b6d1ad45e8" version="1">Когда вы сжигаете печать на существе под интердиктом, вы можете активировать этот дар (без действия). Цель должна вычесть число, равное вашему бонусу мастерства, из результата спасброска, который она совершит до конца своего следующего хода.</content>
<content contentuid="hc90683f4gd5c1g16a2g970bg5f9a7ef90301" version="1">Получает временные очки здоровья.</content>
<content contentuid="hc952c432g8c2cgbbacg18f8gfc587dff1d4d" version="1">Когда существо совершает дальнобойную атаку по вам или по союзнику в пределах 30 футов от вас, которого вы видите, вы можете реакцией потратить печать, чтобы совершить дальнобойную атаку оружием по атакующему. Если ваша атака попадает, она наносит дополнительный урон, равный половине уровня вашего иллриггера, округлённой вниз.</content>
<content contentuid="hcdb79176g44f6gae88g5df2g09e6221e8525" version="1">Когда вы сжигаете печать на существе под интердиктом, вы можете активировать этот дар (без действия), чтобы получить временные очки здоровья, равные уровню вашего иллриггера.</content>
<content contentuid="hcef63acbg72bag27f7g9fadgf2d9d61c668d" version="1">Уровень 11: Ужасающая сила (Некротическая энергия)</content>
<content contentuid="hd7f9a6ddg5b45gf8acg0d89g98b6c796d969" version="1">Вы используете модификатор Обаяния вместо Силы или Ловкости для бросков атаки и урона при атаках оружием ближнего боя.</content>
<content contentuid="hd8fa84e9gb7b9g487bgeb2agb80c8a9a3f17" version="1">Кровавые заповеди</content>
<content contentuid="hd92480ccg3244g6d8ag80d0g572cbd5b4da3" version="1">Каждый раз, когда союзник получает урон от существа под интердиктом, это существо получает урон некротической энергией, равный вашему бонусу мастерства.</content>
<content contentuid="hd9f88f32g2a3eg5ee1gdb45g1b062c876f03" version="1">Архидьяволы, правящие Семью городами Ада, бесконечно плетут интриги. Каждый из них вечно замышляет поставить остальных на колени, взойти на Престол Ада, объединить Семь городов и всякое инфернальное существо, живущее там, а затем повести неиссякаемую армию дьяволов через ткань времён, пока не сгорят все миры.
Элитные оперативники этих архидьяволов - иллриггеры. Рыцари, убийцы, маги и командос террора Ада, иллриггеры управляют полем боя, раскалывают вражеские фракции и исполняют инфернальную волю своего архидьявола.</content>
<content contentuid="hdad51f43g5e81g7f25g4fa0gb0809a43973d" version="1">Высвобождение ада: некротическая энергия</content>
<content contentuid="hdc3b3befg7002g12f7g8757g9c5c9409d33c" version="1">Вы используете модификатор Обаяния вместо Силы или Ловкости для бросков атаки и урона при атаках оружием ближнего боя.</content>
<content contentuid="hdcff639cge97ag87c0gca5dgb607adff562c" version="1">Мстительный выстрел</content>
<content contentuid="hddb45062ge037g28d1g354fgec018a665978" version="1">Когда видимое вами существо наносит урон вам или союзнику в пределах 30 футов от вас, вы можете реакцией потратить печать, чтобы уменьшить получаемый целью урон на 1к10 + половина уровня вашего иллриггера, округлённая вниз.</content>
<content contentuid="hdeae353cg3e01gc0ceg92b4g4b51942b775d" version="2">Когда вы попадаете по существу размера «Большой» или меньше атакой оружием ближнего боя, удерживаемым двумя руками, вы можете толкнуть цель на 10 футов по горизонтали.</content>
<content contentuid="hdf198f7dg49f7g0b3cg9da5g4e2dae846d69" version="2">Уровень 2: Ложь</content>
<content contentuid="he0219d6eg9988g1637g2557g9b2d2d0fa8aa" version="1">Дьявольская мощь</content>
<content contentuid="he346a671g0b23g7417g4182g5a8d53b45077" version="1">Вы можете наполнять свои печати адской магической силой, усиливая их эффекты.&lt;br&gt;&lt;br&gt;Некоторые дары требуют минимального уровня иллриггера. Достигнув 7-го уровня, вы получаете ещё один дар.</content>
<content contentuid="he8bb0a53gb20cg63a2g3f35gf408f22a699e" version="4">Уровень 7: Мстительный выстрел</content>
<content contentuid="hea106602g9f5dg8754g958dg4324799b9073" version="1">Обескровливание</content>
<content contentuid="hea661ec8gedc0g2cfagc3ffg287756f25a33" version="1">Покров теней</content>
<content contentuid="hebd66c01g7f34g9436g6f68gde5a37620a3f" version="1">Высвобождение ада: некротическая энергия</content>
<content contentuid="heca0b0d3g54dbgf86cg916cg906977301869" version="1">Когда вы сжигаете одну или несколько печатей на существе под интердиктом, вы можете реакцией высвободить вокруг него взрыв адской энергии. Каждое выбранное вами существо в пределах 10 футов от цели должно совершить спасбросок Ловкости. При провале существо получает урон того же типа и в том же объёме, что печати нанесли существу под интердиктом. При успехе существо получает половину этого урона.</content>
<content contentuid="hecedcd5eg3f81g2638g3af5gefcca2c219fb" version="1">Сжигание печатей: огонь</content>
<content contentuid="hf1c1d608gab6fgea97g5ce7g12f4e4ddb16c" version="1">Уровень 3: Благословение Сутеха</content>
<content contentuid="hf1d142d7g41e9g9a72g6d5cgf6c2fa588579" version="2">Вы получаете +1 к спасброскам за каждое враждебное существо в пределах 10 футов от вас, максимум +5.</content>
<content contentuid="hf204ad45gef57gf823g5fbdg2aadc2b21ace" version="1">Уровень 11: Ужасающая сила (Холод)</content>
<content contentuid="hf6bff230g1643g366bg93ffg3c9d643ce07c" version="4">Уровень 7: Высвобождение ада</content>
<content contentuid="hf94f341dged44gb9bcged64g8666ae8b410e" version="1">Бонусным действием вы восстанавливаете общее количество очков здоровья, равное пятикратному уровню вашего иллриггера, распределяя их по своему выбору между собой и другими существами в пределах 30 футов.</content>
<content contentuid="hfa888bb3gb8a0ge2a8g81c2g00ae8844f692" version="4">Уровень 7: Цепь Ахерона</content>
<content contentuid="hfca57e47ged90g177fgfc94gdd2a6f69f1a8" version="1">Сжигание печатей: некротическая энергия</content>
<content contentuid="hfe1fd654g95d3g0e72g524ag183786863374" version="1">Не может совершать бонусные действия или реакции.</content>
</contentList> </contentList>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<save> <save>
<version major="4" minor="8" revision="0" build="500"/> <version major="4" minor="8" revision="0" build="500"/>
<region id="Config"> <region id="Config">
@@ -9,11 +9,11 @@
<children> <children>
<node id="ModuleShortDesc"> <node id="ModuleShortDesc">
<attribute id="Folder" type="LSString" value="DnD2024_897914ef-5c96-053c-44af-0be823f895fe"/> <attribute id="Folder" type="LSString" value="DnD2024_897914ef-5c96-053c-44af-0be823f895fe"/>
<attribute id="MD5" type="LSString" value="ac497558b070a635abecd7d23d4a3125"/> <attribute id="MD5" type="LSString" value="4bd42ca93f895d1ec521a286bea09ef2"/>
<attribute id="Name" type="LSString" value="DnD 5.5e All-in-One BEYOND"/> <attribute id="Name" type="LSString" value="DnD 5.5e All-in-One BEYOND"/>
<attribute id="PublishHandle" type="uint64" value="4419649"/> <attribute id="PublishHandle" type="uint64" value="4419649"/>
<attribute id="UUID" type="guid" value="897914ef-5c96-053c-44af-0be823f895fe"/> <attribute id="UUID" type="guid" value="897914ef-5c96-053c-44af-0be823f895fe"/>
<attribute id="Version64" type="int64" value="144396678084952064"/> <attribute id="Version64" type="int64" value="144396675937468416"/>
</node> </node>
</children> </children>
</node> </node>
@@ -32,7 +32,7 @@
<attribute id="PublishHandle" type="uint64" value="5965149"/> <attribute id="PublishHandle" type="uint64" value="5965149"/>
<attribute id="StartupLevelName" type="FixedString" value=""/> <attribute id="StartupLevelName" type="FixedString" value=""/>
<attribute id="UUID" type="FixedString" value="6401e84d-daf2-416d-adeb-99c03a2487a6"/> <attribute id="UUID" type="FixedString" value="6401e84d-daf2-416d-adeb-99c03a2487a6"/>
<attribute id="Version64" type="int64" value="281483566645248"/> <attribute id="Version64" type="int64" value="281487861612544"/>
<children> <children>
<node id="PublishVersion"> <node id="PublishVersion">
<attribute id="Version64" type="int64" value="281477124194304"/> <attribute id="Version64" type="int64" value="281477124194304"/>

View File

@@ -101,10 +101,10 @@ if (-not (Test-Path -LiteralPath $stagedMetaPath)) {
throw "Staged meta.lsx was not found: '$stagedMetaPath'." throw "Staged meta.lsx was not found: '$stagedMetaPath'."
} }
$stagedMetaContent = Get-Content -LiteralPath $stagedMetaPath -Raw $utf8Encoding = [System.Text.UTF8Encoding]::new($false)
$stagedMetaContent = [System.IO.File]::ReadAllText($stagedMetaPath, $utf8Encoding)
$stagedMetaContent = $stagedMetaContent -replace '(<attribute id="Version64" type="int64" value=")\d+("/>)', "`${1}$resolvedVersion64`${2}" $stagedMetaContent = $stagedMetaContent -replace '(<attribute id="Version64" type="int64" value=")\d+("/>)', "`${1}$resolvedVersion64`${2}"
$utf8Bom = New-Object System.Text.UTF8Encoding($true) [System.IO.File]::WriteAllText($stagedMetaPath, $stagedMetaContent, $utf8Encoding)
[System.IO.File]::WriteAllText($stagedMetaPath, $stagedMetaContent, $utf8Bom)
Write-Host "[build.ps1] Staged source tree:" Write-Host "[build.ps1] Staged source tree:"
Get-ChildItem -Recurse $stagingPath | Select-Object FullName, Length | Format-Table -AutoSize Get-ChildItem -Recurse $stagingPath | Select-Object FullName, Length | Format-Table -AutoSize

View File

@@ -35,7 +35,8 @@ if (-not (Test-Path -LiteralPath $resolvedMetaPath)) {
} }
$resolvedVersion64 = Convert-VersionTagToVersion64 -Tag $VersionTag $resolvedVersion64 = Convert-VersionTagToVersion64 -Tag $VersionTag
$metaContent = Get-Content -LiteralPath $resolvedMetaPath -Raw $utf8Encoding = [System.Text.UTF8Encoding]::new($false)
$metaContent = [System.IO.File]::ReadAllText($resolvedMetaPath, $utf8Encoding)
[xml]$metaXml = $metaContent [xml]$metaXml = $metaContent
# Explicitly target ModuleInfo/Version64 via XML path to avoid touching Dependencies/PublishVersion. # Explicitly target ModuleInfo/Version64 via XML path to avoid touching Dependencies/PublishVersion.
@@ -57,7 +58,6 @@ $updatedMeta = [regex]::Replace(
1 1
) )
$utf8Bom = New-Object System.Text.UTF8Encoding($true) [System.IO.File]::WriteAllText($resolvedMetaPath, $updatedMeta, $utf8Encoding)
[System.IO.File]::WriteAllText($resolvedMetaPath, $updatedMeta, $utf8Bom)
Write-Host "[set-version.ps1] Updated '$resolvedMetaPath' to Version64=$resolvedVersion64 (from tag '$VersionTag')." Write-Host "[set-version.ps1] Updated '$resolvedMetaPath' to Version64=$resolvedVersion64 (from tag '$VersionTag')."