

A comprehensive Valheim mod that transforms Haldor the Trader into a full-featured merchant with configurable buy AND sell functionality, balanced progression-based pricing, and complete controller support.
| Button | Action |
|---|---|
| LB / RB | Switch between Buy and Sell panels |
| D-Pad / Left Stick | Scroll through item lists and categories |
| X | Open or close category menu |
| A | Buy or Sell selected item |
| B | Close trader UI |
| Requirement | Version |
|---|---|
| Valheim | Current PC version |
| BepInEx | 5.4.2200 or newer |
| Mod | Reason |
|---|---|
| CurrencyPocket | Highly recommended! Late-game items can cost 50,000+ coins. CurrencyPocket removes the 999 stack limit on coins, letting you carry enough gold for expensive purchases. |
BepInEx/plugins/HaldorOverhaul/BepInEx/
├── plugins/
│ └── HaldorOverhaul/
│ ├── HaldorOverhaul.dll
│ ├── manifest.json
│ └── README.md
└── config/
├── HaldorOverhaul.haldor.buy.json
└── HaldorOverhaul.haldor.sell.json
BepInEx/config/HaldorOverhaul.haldor.buy.json - Items Haldor sells
BepInEx/config/HaldorOverhaul.haldor.sell.json - Items Haldor buys from you
{
"item_prefab": "SwordIron",
"item_quantity": 1,
"item_price": 4234,
"must_defeated_boss": "defeated_gdking"
}
| Field | Description |
|---|---|
item_prefab |
Internal item name (must match game exactly) |
item_quantity |
Stack size per transaction |
item_price |
Price in coins |
must_defeated_boss |
Boss key required (empty = always available) |
| Boss | Key |
|---|---|
| Eikthyr | defeated_eikthyr |
| The Elder | defeated_gdking |
| Bonemass | defeated_bonemass |
| Moder | defeated_dragon |
| Yagluth | defeated_goblinking |
| The Queen | defeated_queen |
| Fader | defeated_fader |
The included Python script (generate.py) automatically generates balanced buy/sell configurations by fetching live item and recipe data from Jotunn documentation.
# Basic usage - outputs to Steam Valheim config folder
python generate.py
# Custom output directory
python generate.py "C:\path\to\output"
# Using environment variable
set HALDOR_CONFIG_PATH=C:\custom\path
python generate.py
┌─────────────────────────────────────────────────────────────────┐
│ DATA SOURCES │
├─────────────────────────────────────────────────────────────────┤
│ Jotunn Item List ──────► Parse HTML ──────► Raw Items │
│ Jotunn Recipe List ────► Parse HTML ──────► Recipes │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ ITEM DATABASE │
├─────────────────────────────────────────────────────────────────┤
│ Each item defined with: │
│ • Biome tier (determines base multiplier & boss key) │
│ • Base price (raw value before multipliers) │
│ • Stack size (quantity sold per purchase) │
│ • Sell-only flag (treasure items like Amber, Coins) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ PRICE CALCULATION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ For RAW materials (ores, wood, drops): │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Price = base_price x biome_mult x category_mult │ │
│ │ x rarity_mult │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ For CRAFTABLE items (weapons, armor, food, ammo): │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ingredient_cost = Sum(ingredient_base_price x qty) │ │
│ │ recipe_price = ingredient_cost x CRAFTING_MARKUP │ │
│ │ x biome_mult x category_mult x rarity_mult│ │
│ │ │ │
│ │ Final Price = max(base_price, recipe_price) │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ OUTPUT FILES │
├─────────────────────────────────────────────────────────────────┤
│ HaldorOverhaul.haldor.buy.json (579 buyable items) │
│ HaldorOverhaul.haldor.sell.json (593 sellable items) │
└─────────────────────────────────────────────────────────────────┘
HALDOR_CONFIG_PATH environment variableC:\Program Files (x86)\Steam\steamapps\common\Valheim\BepInEx\config./output folderItems are assigned to biome tiers based on where they're obtained. Higher tiers = higher prices and later boss requirements.
| Biome | Multiplier | Boss Required | Example Items |
|---|---|---|---|
| Meadows | 1.5x | None | Wood, Flint, Leather |
| Black Forest | 2.75x | Eikthyr | Bronze, Core Wood, Troll Hide |
| Swamp | 4.5x | The Elder | Iron, Chain, Guck |
| Mountain | 7.5x | Bonemass | Silver, Wolf Pelt, Dragon Tears |
| Plains | 12.0x | Moder | Black Metal, Lox Pelt, Barley |
| Mistlands | 20.0x | Yagluth | Eitr, Black Core, Carapace |
| Ashlands | 32.0x | The Queen | Flametal, Charred Bone, Sulfur |
| Deep North | 50.0x | Fader | Future content |
Different item types have value modifiers reflecting their utility and rarity.
| Category | Mult | Examples |
|---|---|---|
| Weapons | ||
| weapon_2h | 1.3x | Battleaxes, Atgeirs, Sledges |
| weapon_1h | 1.0x | Swords, Maces, Knives |
| staff | 1.35x | All magic staves |
| crossbow | 1.25x | Crossbows |
| bow | 1.1x | Bows |
| Armor | ||
| armor_heavy | 1.35x | Padded, Iron, Bronze armor |
| armor_light | 1.2x | Leather, Troll, Root armor |
| cape | 0.85x | All capes (Hilda exclusive) |
| shield | 0.9x | All shields |
| Consumables | ||
| food_cooked | 1.0x | Cooked food, stews |
| food_raw | 0.7x | Raw meat, berries, mushrooms |
| food_mead | 1.2x | All meads |
| ammo | 1.0x | Arrows, Bolts |
| Materials | ||
| material_common | 0.8x | Basic crafting materials |
| material_rare | 1.5x | Chain, Surtling Core, Ectoplasm |
| material_boss | 2.5x | Boss drops (Dragon Tear, etc.) |
| Other | ||
| trophy_boss | 3.0x | Boss trophies |
| trophy_rare | 1.3x | Rare enemy trophies |
| trophy_common | 0.9x | Common enemy trophies |
| key | 2.0x | Dungeon/progression keys |
| tool | 0.8x | Pickaxes, Hammer, Hoe |
| cosmetic | 0.7x | Decorative items |
Special multipliers for particularly rare or valuable items:
| Item | Mult | Reason |
|---|---|---|
| Boss Drops | ||
| HardAntler | 2.0x | Eikthyr drop |
| CryptKey | 2.2x | The Elder drop (Swamp Key) |
| Wishbone | 2.0x | Bonemass drop |
| DragonTear | 2.0x | Moder drop |
| Rare Materials | ||
| Chain | 1.8x | Rare dungeon drop |
| SurtlingCore | 1.6x | Essential for smelting |
| Ectoplasm | 1.4x | Rare ghost drop |
| BlackCore | 1.7x | Rare Mistlands material |
| Eitr | 1.8x | Magic fuel |
| Special Items | ||
| DragonEgg | 2.5x | Boss summoning item |
| DvergrKey | 1.8x | Mistlands progression |
| Dyrnwyn Fragments | 2.5x | Legendary weapon pieces |
SELL_MULTIPLIER = 0.30 # Sell price = 30% of buy price
CRAFTING_MARKUP = 1.15 # 15% markup on crafted items
MIN_PRICE = 5 # Minimum item price
MAX_PRICE = 99999 # Maximum item price
Base price: 18
x Biome (Swamp 4.5x)
x Category (material_common 0.8x)
= 18 x 4.5 x 0.8 = 64 coins
Recipe: 2 Copper + 1 Tin
Ingredient costs: (2 x 14) + (1 x 14) = 42
x Markup (1.15x) = 48.3
x Biome (Black Forest 2.75x) = 132.8
x Category (material_common 0.8x) = 106 coins
Recipe: 2 Wood + 4 Iron + 3 Leather Scraps
Ingredient costs: (2x2) + (4x40) + (3x5) = 179
x Markup (1.15x) = 205.85
x Biome (Swamp 4.5x) = 926.3
x Category (weapon_1h 1.0x) = 926+ coins
Recipe: 8 Wood + 1 Iron + 2 Feathers -> 20 arrows
Ingredient costs: (8x2) + (1x40) + (2x3) = 62
x Markup (1.15x) = 71.3
x Biome (Swamp 4.5x) = 320.85
x Category (ammo 1.0x) = 320 coins for 20 arrows
| Material | Buy | Sell | Biome |
|---|---|---|---|
| Wood | 5 | 1 | Meadows |
| Bronze | 105 | 31 | Black Forest |
| Iron | 144 | 43 | Swamp |
| Silver | 180 | 54 | Mountain |
| Black Metal | 336 | 100 | Plains |
| Eitr | 3,510 | 1,053 | Mistlands |
| Flametal | 972 | 291 | Ashlands |
| Weapon | Buy Price | Tier |
|---|---|---|
| Flint Axe | 54 | Meadows |
| Bronze Sword | 676 | Black Forest |
| Iron Sword | 4,234 | Swamp |
| Silver Sword | 12,232 | Mountain |
| Blackmetal Sword | 10,920 | Plains |
| Mistwalker | 31,220 | Mistlands |
| THSwordSlayer | 67,891 | Ashlands |
| Item | Price | Unlocks After |
|---|---|---|
| Hard Antler | 600 | Always |
| Swamp Key | 1,331 | Eikthyr |
| Wishbone | 3,375 | The Elder |
| Dragon Tear | 4,500 | Bonemass |
generate.pyITEM_DATABASE section'ItemPrefab': (Biome.TIER, base_price, stack_size, sell_only),
Modify the multipliers in generate.py:
# Global adjustments
SELL_MULTIPLIER = 0.30 # Change sell ratio
CRAFTING_MARKUP = 1.15 # Change crafting fee
# Biome multipliers in Biome enum
MEADOWS = ("Meadows", 1.5, "", 1) # (name, mult, boss_key, order)
# Category multipliers in CATEGORY_MULTIPLIERS dict
'weapon_2h': 1.3, # Adjust weapon values
# Rarity overrides in RARITY_OVERRIDES dict
'Chain': 1.8, # Adjust specific item values
Add patterns to exclusion lists:
# Hilda-exclusive items (capes, dresses)
HILDA_EXCLUSIVES = {'CapeDeerHide', 'CapeTrollHide', ...}
# Pattern exclusions
EXCLUDED_PATTERNS = [r'^Bow_projectile', r'^fx_', ...]
Items not appearing in trader:
item_prefab matches the game's internal name exactlyPrices seem wrong:
generate.py to regenerate configsNAME_TO_PREFAB mappingITEM_DATABASEScript errors:
The generator script automatically warns about:
| Version | Changes |
|---|---|
| 1.0 | Initial release - Full buy/sell system, recipe-based pricing, biome progression, category/rarity multipliers |
This mod is provided as-is for personal use with Valheim.