Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Almanac

Welcome to Rusty's Almanac, your gateway to the enchanting world of Valheim!

Rusty's comprehensive plugin catalogs all the items, pieces, and creatures that is loaded into the game.

Explore the depths of Valheim with ease, armed with a wealth of information at your fingertips.

Moreover, Rusty's Almanac goes beyond mere documentation. With an integrated customizable achievement system and a leaderboard, users can shape their own unique experiences.

Achievements

Almanac lets you define custom achievements using .yml files in the Achievements folder. These achievements sync between server and client, and are dynamically reloaded when edited.

Below are the available Achievement Types you can use:

ArrowsArrowsShotAxesBows
ConsumablesCreatureGroupCreatureTamedDeaths
DistanceInAirDistanceRanDistanceSailedDistanceWalked
EnemyKillsFishFoodEatenItemsPicked
KillKnivesMacesMaterials
MineHitsPickablePlayerKillsPoleArms
PotionsRecipesShieldsSpears
StavesSwordsTimeInBaseTimeOutOfBase
TotalJumpsTotalMinedTrophiesValuables
Weapons

Achievement File Structure

Each achievement is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., Weapons.001).
  • Name: Display name for the achievement.
  • Lore: A short description or flavor text.
  • Icon: The icon name from the game's assets.
  • TokenReward: Reward tokens for completing the achievement.
  • Requirement: The type, threshold, and optional group or prefab name.

Examples

  • Defeating creatures from a biome: AchievementType.CreatureGroup with Group = Meadows.
  • Reaching a milestone (kills, distance, etc.): set Requirement.Type to the relevant stat.
  • Collecting all of an item type (fish, weapons, trophies, etc.): use collection-based types.

Tips

  • Files can be added, changed, or deleted while the server is running.
  • Server automatically syncs achievements to clients.
  • Thresholds can be left at 0 for auto-detection (e.g., total number of fish).
  • PrefabName is required for Kill and Pickable types.

Almanac Bounties

The Almanac Bounty system lets players purchase bounty contracts to hunt special creatures.

Bounties are defined in .yml files inside the Bounties folder. Admins can add, remove, or edit bounty entries at runtime — changes will sync to all clients.

Each bounty entry can define:

  • UniqueID: Unique identifier for the bounty (e.g., Troll.001).
  • Creature: The prefab name of the target creature (e.g., Troll, Serpent).
  • Name: (Optional) Custom name override; if empty, a generated name will be used.
  • Icon: Trophy sprite or icon for the bounty.
  • Biome: The biome where the bounty will spawn (Meadows, Swamp, AshLands, etc.).
  • Health: Override maximum health value of the bounty.
  • Level: Creature level (scales difficulty).
  • DamageMultiplier: Multiplier applied to the bounty’s attacks (e.g., 1.5).
  • AlmanacTokenReward: Tokens given upon completing the bounty.
  • Lore: A short description displayed in the Almanac panel.
  • Cost: Item or token requirements to purchase the bounty.

Notes

  • Costs can be AlmanacToken or regular items (e.g., Coins).
  • Bounties require players to kill the target directly — indirect deaths won’t count.
  • If the bounty despawns, escapes, or is killed by another player, the cost is returned.
  • Bounties are subject to a configurable cooldown (default in minutes).

Tips

  • You can reload or edit .yml bounty files while the server is running; changes sync automatically.
  • Each bounty spawns a pin on the map when accepted.
  • Default bounties include Boar, Neck, Troll, Serpent, Abomination, Wraith, Lox, Seeker Brute, Fallen Valkyrie.
  • Use Lore to tell a short story or flavor text for each hunt.

Example Entry

UniqueID: Troll.001Creature: TrollName: Forest StalkerIcon: TrophyFrostTrollBiome: BlackForestHealth: 1200Level: 3DamageMultiplier: 1.5AlmanacTokenReward: 5Lore: "Lumbering through the Black Forest, the troll’s steps shake the earth as it smashes all in its path."Cost:
Coins: 10

Almanac Store

The Almanac Store allows players to purchase temporary buffs, resources, and items.

Store items are defined in .yml files inside the Store folder. Admins can add, remove, or modify store entries while the game is running.

Each store entry can define:

  • Name: The store item name.
  • Lore: A short description shown in the tooltip.
  • Icon: The sprite name to display.
  • Cost: Either AlmanacToken or other items as payment.
  • StatusEffect: Optional effect applied when purchased.
  • Items: Optional rewards given to the player (like resources or gear).
  • RequiredKey Optional key required to purchase item

Example

Name: LoliteCost:
Items:
- PrefabName: AlmanacTokenAmount: 100Icon: GemstoneBlueItems:
- PrefabName: GemstoneBlueAmount: 1Quality: 1Variant: 0Lore: Light is reflected sharply off this gemRequiredKey: Charred_Melee_Dyrnwyn

Notes

  • AlmanacToken is the default store currency.
  • Costs can also be regular items (e.g. Wood, Coins).
  • Status effects must match valid IDs in the ObjectDB.
  • Item entries require a valid prefab name and amount.
  • RequiredKey should be PrefabID of creature, to check if player has killed at least one

Tips

  • Use Lore to explain what the store item does.
  • You can reload or edit .yml files during runtime; the store updates automatically.
  • The Almanac panel will refresh when the store tab is selected.

Custom Status Effects

You can create new status effects using Almanac Custom Status Effects Manager.

Below are the available modifier types:

ArmorAttackStaminaModifierBlockStaminaModifierBluntDamage
BluntResistanceCarryWeightChopDamageChopResistance
DamageModifierDamageReductionDodgeStaminaModifierEitr
EitrRegenModifierFallDamageModifierFireDamageFireResistance
FrostDamageFrostResistanceHealthHealthRegenModifier
HomeItemStaminaModifierJumpStaminaModifierLifeStealLightningDamage
LightningResistanceMaxFallSpeedNoiseModifierPickaxeDamage
PickaxeResistancePierceDamagePierceResistancePoisonDamage
PoisonResistanceRaiseSkillsRunStaminaModifierSlashDamage
SlashResistanceSneakStaminaModifierSpeedSpiritDamage
SpiritResistanceStaminaStaminaRegenModifierSwimStaminaModifier
WindMovementModifierWindRunStaminaModifier

Each modifier uses a float value to define the effect strength.

  • Some like CarryWeight are additive.
  • Most others are multipliers.

Tips

  • You can create, delete, or edit files while in-game to preview tooltips live.
  • Almanac also includes a built-in creation tool for admins.
  • Only the host can add status effects, everyone else gets the data from the host
  • If you are admin, you can use the creation tool to define your status effect file, then upload the file to your server.

Treasure Hunts

Almanac lets you define custom treasure hunts using .yml files in the TreasureHunt folder. These treasures sync between server and client, and are dynamically reloaded when edited.

Treasure hunts create interactive map pins that spawn loot containers when you reach their location. Players can purchase treasure hunts using tokens from the Almanac store system.

Core Properties

  • Name: Display name for the treasure hunt (e.g., "Meadow Stash").
  • Lore: Descriptive flavor text shown to players.
  • Icon: The icon name from game assets (defaults to "map" if not specified).
  • Biome: Target biome where the treasure will spawn (see list above).

Cost System

  • Cost: Dictionary of required tokens/items to purchase this treasure hunt.
    • Use AlmanacToken as the key for Almanac tokens.
    • Example: Cost: { "AlmanacToken": 10 } for 10 tokens.

Loot Configuration

  • Loot: List of items that can be found in the treasure container.
    • Item: Prefab name of the item (e.g., "Coins", "SilverOre").
    • Min: Minimum stack size.
    • Max: Maximum stack size.
    • Weight: Drop chance weight (higher = more likely).

Example Treasure File

Name: "Mountain Stash"Lore: "Only those who brave the jagged cliffs will uncover what the mountains hide."Icon: "map"Biome: "Mountain"Cost:
almanac_token: 1Loot:
- Item: "SilverOre"Min: 10Max: 20Weight: 1.0
- Item: "WolfClaw"Min: 1Max: 20Weight: 1.0
- Item: "TrophyCultist"Min: 1Max: 1Weight: 1.0

Dialogue System

Almanac provides a comprehensive NPC dialogue system using .yml files in the Dialogues folder. These dialogues sync between server and client, and are dynamically reloaded when files are edited.

Below are the available Command Types you can use:

  • Exit: closes dialogue
  • Give: adds item into player inventory
  • Take: removes item from player inventory
  • Teleport: teleports player to position
  • FlyTo: Valkyrie flies player to position
  • MapPin: adds temporary pin on the map
  • StartBounty: starts a bounty
  • CancelBounty: cancels active bounty
  • CompleteBounty: rewards bounty
  • StartTreasure: starts a treasure hunt
  • CancelTreasure: cancels active treasure hunt
  • OpenAlmanac: opens almanac panel
  • OpenItems: opens almanac item tab
  • OpenPieces: opens almanac pieces tab
  • OpenCreatures: etc.
  • OpenAchievements
  • OpenStore
  • OpenLeaderboard
  • OpenBounties
  • OpenTreasures
  • OpenMetrics
  • OpenLottery

Dialogue File Structure

Each dialogue is defined as a YAML file with properties like:

  • UniqueID: A unique identifier string (e.g., npc.intro.001).
  • Label: Button text that appears for this dialogue option.
  • Text: Main dialogue text displayed when requirements are met.
  • AltText: Alternative text shown when requirements are not met.
  • Dialogues: List of dialogue IDs that become available as options.
  • Action: Command to execute with label and parameters.
  • Requirements: Conditions that must be met to interact with this dialogue.

Action Commands

Panel Commands: OpenAlmanac, OpenItems, OpenCreatures, etc. open specific UI panels.

Item Commands:

  • Give: Gives items to player. Parameters: ItemName, Amount, Quality?, Variant?? = optional
  • Take: Takes items from player. Same parameter format.

Location Commands:

  • Teleport: Instantly transports player. Parameters: X, Y, Z
  • MapPin: Adds temporary map marker. Parameters: X, Y, Z, Label, Duration (seconds)

Activity Commands:

  • StartBounty: Begins bounty hunt. Parameters: BountyID
  • StartTreasure: Begins treasure hunt. Parameters: TreasureID
  • CancelBounty/CancelTreasure: Cancels active hunts. (Will not be displayed if no active hunts)

API Commands

  • GiveAlmanacXP: Gives almanac xp. Parameters amount - Recorded dialogue
  • GiveWackyXP: Gives EpicMMO xp. Parameters amount - Recorded dialogue

Requirements System

Control when dialogues are available using:

  • Keys: Player must have specific game keys (boss defeats, etc.)
  • NotKeys: Player must NOT have specific keys
  • Killed: Required creature kills. Format: CreatureName, Count; AnotherCreature, Count
  • NotKilled: Creatures player must NOT have killed
  • Achievements: Required achievement IDs (comma-separated)
  • NotAchievements: Achievements player must NOT have
  • Dialogues: Required Dialogue IDs (recorded by Give or Take Actions)
  • NotDialogues: Required NOT Dialogue IDs
  • Quests: Required accepted Quests. Format: Quest1,Quest2
  • NotQuests: Required Quest never taken
  • CompletedQuests: Required Quest fully completed
  • NotCompletedQuests: Required Quest NOT fully completed

Text Features

Alternative Text: Use AltText to show different messages when requirements aren't met.

Conditional Display: Dialogues automatically show different text based on:

  • Whether player has required items (for Take commands)
  • Whether player already received rewards (for Give commands)
  • Whether requirements are satisfied

Examples

Basic Conversation:

UniqueID: npc.greetingLabel: Hello thereText: Welcome to our village, traveler!Dialogues:
- npc.ask_directions
- npc.ask_tradeAction:
Type: ExitLabel: Farewell

Item Trading:

UniqueID: npc.trade_swordLabel: I need a weaponText: Here, take this iron sword for your journey.AltText: I already gave you a sword, remember?Action:
Type: GiveLabel: Take SwordParameters: SwordIron, 1, 2, 0Requirements:
Killed: Eikthyr, 1

Location Marking:

UniqueID: npc.mark_caveLabel: Where's the nearest cave?Text: There's a cave system to the north. Let me mark it for you.Action:
Type: MapPinLabel: Mark CaveParameters: 100, 25, -150, Mysterious Cave, 180 // (3min)

Requirement-Based Dialogue:

UniqueID: npc.veteran_talkLabel: Tell me about the bossesText: You've proven yourself against the ancient evils!Requirements:
Killed: Eikthyr, 1; gd_king, 1Keys: defeated_bonemass

Organization Tips

  • Use descriptive UniqueIDs like merchant.weapons.intro
  • Organize files by NPC type or location
  • Create conversation trees using the Dialogues list
  • Use folders to separate different areas or storylines

Technical Notes

  • Files can be added, changed, or deleted while the server is running
  • Server automatically syncs dialogues to clients
  • Map pins disappear after set delay seconds
  • Give/Take commands automatically prevent duplicate transactions
  • Requirements are checked in real-time

NPC

NPC can be customized by being an admin in no cost mode

Random Talk

Additionally, you can set each NPC with random talk that triggers whenever a player gets close or leaves, or every minute.

The YML files are synced and can be reloaded during gameplay.

NPC Animations

AtgeirAtgeirSecondaryAttachAsksvinAttachLox
AttachMastAttachShipAttachSitShipAttachThrone
AxeAxeSecondaryBattleaxeBattleaxeSecondary
BlowKissBlockingBowBowAim
BowFireChallengeCheerComeHere
CowerCrouchingCrossbowCrossbowFire
CryDanceDespairDodge
DrinkDualAxesDualAxesSecondaryDualKnives
DualKnivesSecondaryEatEncumberedEquipHead
EquipHipEquippingFlexFishingRod
FishingRodThrowForgeGPowerGreatsword
GreatswordSecondaryHammerHeadbangHoe
InWaterInteractKickKnife
KnifeSecondaryKneelKnockDownLaugh
MaceSecondaryNononoPickaxePlaceFeast
PointRelaxRechargeLightningStaffRest
RoarScythingShrugSit
SitChairSledgeStaffChargeAttackStaffCharging
StaffFireballStaffLightningStaffRapidFireStaffShield
StaffSummonStaffTrollSummonStaggerStir
StopSwordSwordSecondaryThumbsUp
ThrowBombThrowSpearToastUnequipHip
UnarmedWave

Quest System

The Almanac Quest System allows players to take on custom quests that track progress across various activities in Valheim. Quests are defined in .yml files inside the Quests folder, and sync between server and client. Changes are dynamically reloaded when files are added, edited, or removed.

Quest system is designed to work along with dialogue system, use the command: StartQuest, CancelQuest, CompleteQuest to interact with the quests.

Notes

  • Quests can only be started if player has never started said quest
  • Quests can only be cancelled if quest is active
  • Quests remain active after completion (that is to keep record of completion), meaning when using dialogue requirements: Quests or NotQuests it is checking if quest has ever been taken.
  • Quests can only be completed if progress has met threshold
  • All these behaviors are reflected in the dialogue system. If those conditions are not met, the interactable button, will not be displayed as an option.

Core Properties

Each quest file can define:

  • UniqueID: A unique identifier string (e.g., 001.Dandelion).
  • Name: Display name for the quest.
  • Type: The quest type (see list below).
  • PrefabName: Target prefab for the quest (e.g., Boar, Pickable_Dandelion, SurtlingCore).
  • PrefabNames(optional): A list of prefabs for collection or learning quests.
  • Threshold: Amount required to complete the quest.

Quest Types

CollectFarmHarvestKill
LearnItemsMine

Example Quest

UniqueID: 001.BoarHuntName: Hunt BoarsType: KillPrefabName: BoarThreshold: 10

This quest requires players to hunt 10 Boars. Progress is tracked automatically when players kill the target prefab.

Notes

  • Quests can be started, canceled, or completed dynamically in-game.
  • Progress is saved to the player profile and restored on reconnect.
  • Quests are synchronized from server to client.
  • Multiple quests can be active at once.
  • UI will display quests-in-progress, can be hidden using configured hotkey
  • Quest history can be viewed in the metrics tab

Tips

  • Use Collect for item-based quests (e.g., SurtlingCore).
  • Use Harvest for pickable quests like dandelions or mushrooms (e.g., Pickable_Dandelion).
  • Use Farm for planted crops (e.g., sapling_seedcarrot).
  • Use LearnItems to create discovery quests where players must learn recipes from multiple items.
  • Thresholds define how much progress is needed (kills, items, harvests, etc.).

About

Valheim trophy panel extension to give users information about the creatures associated with the trophies.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages