From game-d2i-skills
Build a complete D2R character equipment loadout. This skill should be used when the user asks to "build a loadout", "配裝", "full equipment", "build a Pitzerker", "equip a character", "gear up my Sorceress", "complete build", "full gear set", or mentions wanting to create a full set of Diablo II: Resurrected items for a character build. For individual items or searches, use the d2r-items skill instead.
How this skill is triggered — by the user, by Claude, or both
Slash command
/game-d2i-skills:d2r-loadoutThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build complete character equipment sets for Diablo II: Resurrected. Uses the `d2r-items` skill's CLI for item generation.
Build complete character equipment sets for Diablo II: Resurrected. Uses the d2r-items skill's CLI for item generation.
| Slot | Field | Notes |
|---|---|---|
| Helm | Head | |
| Armor | Body | |
| Weapon | Primary Hand (right) | See weapon slot rules below |
| Off-hand | Secondary Hand (left) | Shield, second weapon, or blocked by two-handed weapon |
| Gloves | Hands | |
| Boots | Feet | |
| Belt | Waist | |
| Ring 1 | Left Ring | |
| Ring 2 | Right Ring | |
| Amulet | Neck | |
| Charms | Inventory (optional) |
"Build me a Necromancer loadout, level 50-60"
Ask the user (via AskUserQuestion or conversation):
Prefer dispatching subagents in parallel for speed; fall back to sequential search if subagents are unavailable:
--search --quality set --class <class> --max-level <lvl> — find available sets for the class--search --quality unique --type <slot-type> --max-level <lvl> for each slot category (helm, armor, boots, gloves, belt, ring, amulet, weapon, shield)Subagents return raw candidate lists. Main agent does NOT search itself — it focuses on analyzing results.
Present findings and ask the user to choose (via AskUserQuestion):
Restate build direction at the start (from Phase 1) to prevent drift.
Main agent evaluates all candidates and presents a single batch recommendation table covering all slots:
| Slot | Recommended | Req Lvl | Req Str | Req Dex | Key Stats | Why |
|---|---|---|---|---|---|---|
| Helm | Harlequin Crest | 62 | 50 | — | +2 Skills, DR 10% | BiS for caster |
| Boots | Sandstorm Trek | 64 | 91 | — | +Str/Vit | ⚠️ Str may be tight |
| ... | ... | ... | ... | ... | ... | ... |
Selection criteria per slot:
Phase 4 Gate — all must pass before presenting the table:
User reviews the batch table, then:
Verification summaries (include below the table):
**Stat Budget**: <Class> Lv<L> | Base str=<X>, dex=<Y> | Budget=(<L>-1)×5 + <N>×5 = <budget> pts | Trust: <100%/75%/0%>
Str invested: <A> | Dex invested: <B> (includes max block: <C>) | Total: <A+B>/<budget> (<pct>%)
Remaining for <vit/energy/split>: <budget-A-B>
Verdict: ✅ OK / ⚠️ TIGHT / ❌ NOT FEASIBLE
**Resistance** (<difficulty>, <penalty>, quest +<N×10>): Fire +<X> | Cold +<Y> | Ltng +<Z> | Poison +<W>
Verdict: ✅ Adequate / ⚠️ Gaps / ❌ Dangerous
**Breakpoints**: FCR <current>/<next> | FHR <current>/<next> | IAS <current>/<next>
Name the loadout — derive a short, descriptive English name in kebab-case from the build (e.g., bone-necro-50, natalya-assassin, cold-sorc-endgame). This name becomes the output folder.
Present final loadout table: Slot | Item | Quality | Req Lvl | Req Str | Req Dex | Key Stats
Confirm with user — including the loadout name
Generate all items — use batch mode (JSON array in spec file). Set each item's outputPath to $TMPDIR/d2r-items/<loadout-name>/<slot>-<item-name>.d2i (e.g., $TMPDIR/d2r-items/bone-necro-50/helm-harlequin-crest.d2i). Report the folder path and all output paths.
Verify required levels — run --read on the generated .d2i files to confirm requiredLevel fits the target range (this includes socketed items). Do not rely on D2RuneWizard Hero Editor's "Required Level" display for magic items (it has a known bug). Use proper affix IDs (magicPrefix/magicSuffix) with levelreq within the target range rather than defaulting to 0, 0.
Verify stat requirements — run --read to confirm requiredStr/requiredDex from generated files. Re-run the stat budget algorithm on the final loadout. Report the stat budget summary and verdict. If the verdict changed (e.g., due to socketFill adding items with level requirements), run auto-fix.
Output stat allocation recommendation — present the recommended stat point distribution:
Summary table:
## Stat Allocation
| Attribute | Base | Invested | Equipment | Quest | Total | Purpose |
|-----------|------|----------|-----------|-------|-------|---------|
| Strength | 15 | 141 | +40 (×75%=30) | — | 186 | Spirit Monarch (156 req) |
| Dexterity | 25 | 0 | +20 (×75%=15) | — | 40 | No max block |
| Vitality | 25 | 259 | — | — | 284 | Remaining points |
| Energy | 25 | 0 | — | — | 25 | — |
Budget: (79-1)×5 + 2×5 = 400 pts | Used: 141+0=141 | Remaining for Vit: 259
Verdict: 141/400 = 35% ≤ 60% → ✅ OK
Quest bonuses: +10 stat pts, +20 all res, +40 life
Trust factor: 75% (conservative)
ES build variant — remaining points go to Energy (or split per user choice):
| Vitality | 15 | 50 | — | — | 65 | Safety net |
| Energy | 25 | 209 | — | — | 234 | ES mana pool |
Detailed breakdown (include below the summary):
### Calculation Details
1. Base stats: <Class> Str=<X>, Dex=<Y>
2. Quest bonus: <N>× completions = +<N×5> stat points → budget = <total>
3. Greedy equipping order (trust factor: <pct>%):
- <item>: req <str>/<dex>, grants +<str>/+<dex> → invested <str>/<dex>
- ...
4. Equipment bonuses (actual full): +str <X>, +dex <Y>
5. Equipment bonuses (at <pct>% for simulation): +str <X'>, +dex <Y'>
6. Ethereal items: <list or "none">
7. Max block: <dex cost or "N/A">
8. Final: Str <A> + Dex <B> = <total> / <budget>
9. Verdict: <pct>% <operator> 60% → <verdict>
10. Remaining <R> → <destination> (<reason>)
Unlimited mode (Editor mode from Phase 1 Q5): if the user selected Editor mode, skip steps 1-6 (stat budget validation, auto-fix) and instead:
Phase 5 Gate — all must pass before declaring the loadout complete:
--read confirms requiredLevel within target range for every item--read confirms requiredStr/requiredDex match expectationsCharacters have two hand slots: Primary (right) and Off-Hand (left).
Do not assume weapon behavior per class from memory. When building a loadout, determine the weapon setup first — it dictates whether a shield/off-hand slot is available. If unsure about a class's weapon mechanics (dual-wield eligibility, one-hand vs two-hand, class-specific weapon types), either ask the user or research online before proceeding.
When building a loadout, ask the user about their preferred socket strategy. The socketFill field supports:
| Strategy | Best for | Description |
|---|---|---|
"mf" | Magic Find builds | Ist in weapons/shields, Ptopaz in armor/helm |
"resist" | Survivability | Um runes across the board |
"damage" | Physical DPS | Ohm in weapons, Ber in armor |
"caster" | Caster builds | Ist runes (use socketedItems for facets) |
"ias" | Attack speed | Shael runes |
"cbf" | Cannot Be Frozen | Cham runes |
For builds that mix strategies (e.g., MF on helm + resist on shield), use manual socketedItems per item.
Sunder Charms break monster immunity. Variants: original, Latent (internal name: PreCrafted), and Crafted.
| Element | Sunder Charm |
|---|---|
| Cold | Cold Rupture |
| Fire | Flame Rift |
| Lightning | Crack of the Heavens |
| Poison | Rotting Fissure |
| Magic | Black Cleft |
| Physical | Bone Break |
Permanent quest rewards available once per difficulty (Normal / Nightmare / Hell). N = number of difficulties completed (from Phase 1 Q6).
| Quest | Reward | ×1 | ×2 | ×3 |
|---|---|---|---|---|
| Lam Esen's Tome (A3) | +5 Stat Points | +5 | +10 | +15 |
| Quest | Reward | ×1 | ×2 | ×3 |
|---|---|---|---|---|
| Prison of Ice / Anya (A5) | +10 All Res | +10 | +20 | +30 |
| Quest | Reward | ×1 | ×2 | ×3 |
|---|---|---|---|---|
| The Golden Bird (A3) | +20 Life | +20 | +40 | +60 |
| Quest | Reward | ×1 | ×2 | ×3 |
|---|---|---|---|---|
| Den of Evil (A1) | +1 Skill Point | +1 | +2 | +3 |
| Radament's Lair (A2) | +1 Skill Point | +1 | +2 | +3 |
| Izual (A4) | +2 Skill Points | +2 | +4 | +6 |
| Total | +4 per difficulty | +4 | +8 | +12 |
When recommending items, verify that the character can meet all str/dex requirements at the target level.
| Class | Base Str | Base Dex |
|---|---|---|
| Amazon | 20 | 25 |
| Assassin | 20 | 20 |
| Barbarian | 30 | 20 |
| Druid | 15 | 20 |
| Necromancer | 15 | 25 |
| Paladin | 25 | 20 |
| Sorceress | 10 | 25 |
| Warlock | 15 | 20 |
(level - 1) × 5 + N × 5 stat points total, where N = quest completions (0–3) from Phase 1 Q6. N corresponds to Lam Esen's Tome completions (the only quest granting stat points). See Quest Reward Reference for full details.--read output already accounts for this; for --search results (which show base item values), apply the -10 manually when the loadout includes ethereal items. Calculation order: apply ethereal -10 on the item's own requirement FIRST, then apply the trust factor discount (Q7) on the item's +str/+dex bonuses — these are independent operations on different values.If the user chose max block (Phase 1 question 3), the shield's dexReq is only the equip threshold — reaching 75% block requires significantly more dex.
Formula: maxBlockDex = (75 × characterLevel × 2) ÷ blockRating + 15
Where blockRating = shield's base block% + modifiers (e.g., Paladin's Holy Shield adds a large flat bonus). Without Holy Shield, most builds need 200+ dex at high levels.
Integration with stat budget: if max block is chosen, after the greedy algorithm computes the equip dex, compare it with the max block dex. Use max(equipDex, maxBlockDex) as the final dex investment. This often pushes the verdict from ✅ OK to ⚠️ TIGHT or ❌ NOT FEASIBLE.
Practical notes:
strReq/dexReq (from --search results) and +str/+dex bonuses (stat ID 0 = strength, stat ID 2 = dexterity — from --resolve-stats or props). Runewords: --search --quality runeword does not return strReq/dexReq (they apply to many bases). Use --search --quality base -q <base-item-name> or --read the generated file to get actual requirements.max(strReq, dexReq)itemBonus × trustFactor to current totals (where trustFactor = 1.0 / 0.75 / 0.0 from Phase 1 Q7). Track dexFromItemBonuses = sum of all +dex × trustFactor from equipped items (stat ID 2). The trust factor discount applies only during this simulation — the final output table shows actual full bonus values with discounted values in parentheses for transparency.strInvested = max(strReq of all items) - baseStr, dexInvested = max(dexReq of all items) - baseDex. If max block is chosen: dexInvested = max(max(dexReq of all items), maxBlockDex) - baseDex.dexInvested = max(dexInvested, maxBlockDex - baseDex - dexFromItemBonuses) where maxBlockDex is from the Max Block Dex Cost formulatotalInvested = strInvested + dexInvested; compare against budget (level - 1) × 5 + N × 5totalInvested <= budget * 0.6 → ✅ OKtotalInvested <= budget → ⚠️ TIGHT (>60% into str/dex, little left for vit)totalInvested > budget → ❌ NOT FEASIBLEWhen the stat budget verdict is ❌ NOT FEASIBLE or ⚠️ TIGHT, the agent must handle as follows:
strInvested or dexInvested jump in the simulation)strReq/dexReq:
--search --quality unique --type <slot-type> --max-level <lvl> (reuse cached results from Phase 2)strReq ≤ current reachable str (before the offending item)After selecting items, verify that the loadout provides adequate resistance for the target difficulty.
| Difficulty | Resistance Penalty |
|---|---|
| Normal | 0 |
| Nightmare | -40 |
| Hell | -100 |
+res from the loadout:
res-fire, res-cold, res-ltng, res-pois, res-all in --search results or --resolve-stats outputquestRes = N × 10 where N = quest completions from Phase 1 Q6 (corresponds to Anya's Prison of Ice scroll, +10 all res per difficulty)netRes = sumRes + questRes + difficultyPenaltysocketFill: "resist"Include a resistance summary below the stat budget summary:
**Resistance** (Hell, -100): Fire +42 | Cold +75 | Ltng +55 | Poison +30 ⚠️
FCR, FHR, and IAS use breakpoint tables — accumulating points only matters when you cross a threshold. Being 1 point short of a breakpoint wastes all other FCR/FHR/IAS investment.
fcr in props)fhr in props)ias in props)⚠️ FCR 60/63 — 3 short of next breakpoint (63)If a breakpoint gap is ≤ 5 and an alternative item in any slot provides the missing points without losing critical stats, recommend the swap. Breakpoint gains (especially FCR for casters, IAS for melee) often outweigh raw stat differences.
Breakpoint tables vary by class, form, and patch version. Do not hardcode values from memory — always verify by searching online (e.g., "D2R FCR breakpoints") or checking community resources. Key notes:
ES (Energy Shield) builds invert the normal stat allocation — Energy becomes the primary dump stat instead of Vitality. This applies to Sorceress and Warlock builds using Energy Shield as a core defense.
In Phase 1, if the build direction (Q2) includes keywords like "Energy Shield", "ES", "能量護盾", or the user mentions an ES-focused build (e.g., "ES Nova Sorc", "能量盾電法"):
Alongside the item recommendation (Phase 4), provide a brief skill point direction — not a detailed skill tree, but general guidance based on online research.
Search online for current meta builds using site-scoped queries for reliable sources:
"D2R <class> <build-keyword> build guide site:maxroll.gg"
"D2R <class> <build-keyword> build guide site:icy-veins.com"
Avoid appending the current year to searches — D2R guides are evergreen and most high-quality content was published 2022-2024. Year-scoping returns fewer results.
When presenting skill direction, mention where to find detailed guides:
### Skill Direction (<Build Name>)
Core: 20 <Skill A>, 20 <Skill B>, 20 <Synergy C>, 20 <Synergy D>
Utility: 1 <Skill E>, 1 <Skill F>, 1 <Skill G>
Source: Based on [<Guide Title>](<url>)
Skill points needed: ~<N> (available at Lv<X> with <Q>× quest completions = +<Q×4> quest skills)
Total skill points available = (level - 1) + N × 4, where N = quest completions from Phase 1 Q6. The ×4 comes from Den of Evil (+1) + Radament's Lair (+1) + Izual (+2) per difficulty. See Quest Reward Reference for details.
If no clear meta exists for the build direction, note that and provide only general guidance (e.g., "max your main damage skill and its synergies first").
statOverrides when auto-resolved stats need correction (e.g., Hellfire Torch class)d2r-items skill "Terminology & Translation" section and references/zh-tw-terms.mdd2r-items skill "Data Source & Limitations" section(level-1)×5 + N×5; resistance adds N×10. Smart defaults based on target difficulty + level--read includes socketed items in requiredLevel; use for verificationsite:maxroll.gg) for reliable results. See Skill Direction Guidance sectionAll commands use: npx --prefix "${CLAUDE_PLUGIN_ROOT}/cli" tsx "${CLAUDE_PLUGIN_ROOT}/cli/src/index.ts" <command>
Key commands for loadout building:
| Command | Purpose |
|---|---|
--search --class <c> --quality set | Find class set items |
--search --quality unique --type <t> | Find unique items by slot type; results include strReq/dexReq |
--search --quality unique --type <t> --max-level <n> | Find unique items by slot type within level range |
--search --quality magic-prefix -c <c> | Find class-specific magic prefixes |
--lookup "<name>" | Get item code and ID |
--resolve-stats --quality <q> --id <n> | Preview auto-resolved stats (supports unique, set, runeword) |
--resolve-stats --quality runeword --id <n> --type <t> | Runeword stats with rune-in-socket bonuses (weapon/helm/shield/armor) |
--lookup-skill "<name>" | Search skill names and get numeric IDs |
--search --quality unique --type body-armor | Search body armor only (excludes helms/shields/boots) |
--file /tmp/d2r-spec.json | Generate items (single or batch array) |
--read <file.d2i> | Read a generated .d2i file and verify requiredLevel, requiredStr, requiredDex |
npx claudepluginhub vdustr/skill-d2iAudits treasure and magic item placement across campaign modules and character inventories to flag wealth imbalances, rarity mismatches, and loot gaps.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.