World Advancement Progression
Control skill levels, trader items, and manage world and individual player keys! Lock different actions behind an enforced boss progression to control the rate at which players advance.
Date uploaded | 7 months ago |
Version | 0.2.11 |
Download link | VentureValheim-World_Advancement_Progression-0.2.11.zip |
Downloads | 2586 |
Dependency string | VentureValheim-World_Advancement_Progression-0.2.11 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured and includes unstripped Unity DLLs.
Preferred version: 5.4.2202ValheimModding-Jotunn
Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
Preferred version: 2.21.3README
World Advancement and Progression
Created by [email protected].
Introduction
Control skill levels, trader items, and manage world and individual player keys! Lock different actions behind an enforced boss progression to control the rate at which players advance.
Features
The main feature of this mod is to have an easy way to control the rate at which the world and individual player advances. Below are some explanations of features and how to configure them. See more details in the config file. Generate the config file by launching the game once with this mod installed. The information included in the file will not always match the information provided in this readme.
Key Management
What is a key and what is controlled by them? In vanilla Valheim there exists a "global key" list that is a bunch of strings shared by all players. Worldly spawns, raids, dreams, and Haldor's items are all controlled by the presence of specific keys. Each boss, select creatures in the game, as well as Hildir's quests each have keys associated with their completion. The main feature of this mod is the addition of a private key system that makes this progress all individual.
Private Keys
When enabled, private keys will be added to any player within a 100 meter range of the hosting player when the action occurs. For example, when a boss dies any player close enough to the chunk-hosting player should also get the private key, but a player online on the other side of the map will not get it.
The player that is hosting a loaded "chunk" will control the worldly spawns. For example, a player A with no keys joins player B with all the boss keys and starts seeing Fuling night spawns, but if player A is alone they should not get higher level spawns. If player A loads and hosts an area and is later joined by player B, the area should not spawn the higher level monsters that become unlocked with keys.
Hildir keys for unlocking store content are applied when the chests are turned in. Make sure all participating players are present when the chest is turned in to get credit. (Hildir wants to thank you personally!)
Private Raids (Events)
When using private keys it will alter how raids work in your world. After the Hildir update a new game setting (world modifier) was added to vanilla for player-based raids. When using the private key system the player based raid setting will be applied automatically for you at startup. This is required for the private raids feature to work.
When using this feature with other mods it is important to note this mod checks the "global key" requirements on the raid to determine if a raid is valid. It is the same logic checks as if using vanilla global keys, just done for each player.
If you see conficts with other mods you can turn off this mod's private raids feature by setting UsePrivateRaids = false. When set to false the vanilla player based raids logic will be used.
Important Tips
- It is recommended to set up this mod on a new or unused world, otherwise ensure you have backups to restore if something goes wrong.
- By default this mod will prevent/block global keys from being added to the global list, and will enable private keys where all players keys will be tracked individually.
- When this mod is installed there will be a key "cleanup" performed for the server and any player who joins the game based off the mod configurations. When using the default settings all global keys are cleared on startup, resetting your server's key progress.
- Any keys added with commands will always persist until the server is restarted (for private keys when the player logs back in). If you see your keys resetting unexpectedly on restart it may be due to the mod configurations not allowing for them to exist.
- Private Key data is saved to the character file when enabled, making it compatible with Server Characters.
- Vanilla World Modifiers should not be affected by this mod.
Key Configuration Options
Configuration _______________ |
Description _____________ |
---|---|
BlockAllGlobalKeys | Prevent/block public all keys from being added to the global list, set to false to use vanilla behavior. |
AllowedGlobalKeys | Allow only these keys being added to the global list when BlockAllGlobalKeys is true. |
BlockedGlobalKeys | Stop only these keys being added to the global list when BlockAllGlobalKeys is false. |
EnforcedGlobalKeys | Always add these keys to the global list on startup (regardless of other settings) |
UsePrivateKeys | Use private player keys, rather than global keys for game key checking. |
BlockedPrivateKeys | Stop only these keys being added to the player's key list when UsePrivateKeys is true (use this or AllowedPrivateKeys). |
AllowedPrivateKeys | Allow only these keys being added to the player's key list when UsePrivateKeys is true (use this or BlockedPrivateKeys, if the BlockedPrivateKeys has any values it will use that setting). |
EnforcedPrivateKeys | Always add these keys to the player's private list on startup (regardless of other settings). |
Important Vanilla Public Keys
- defeated_eikthyr
- defeated_gdking
- defeated_bonemass
- defeated_dragon
- defeated_goblinking
- defeated_queen
- defeated_hive
- KilledTroll
- killed_surtling
- KilledBat
- Hildir1
- Hildir2
- Hildir3
Commands
Due to the changes this mod makes the vanilla commands will not work as expected. Below is an explanation of how commands function with this mod installed:
Command _____________________________________ |
Origin __________ |
Behavior ___________________ |
---|---|---|
listkeys | vanilla | Will list all global and private keys for the current character in one list. Also displays vanilla "player unique keys". |
listprivatekeys | this mod | Lists the private keys for the current character. |
listglobalkeys | this mod | Lists the global keys for the world. |
setkey Key | vanilla | Adds the key if allowed to the global list and to the private key list of all players in range of you when the command is sent. |
setkeyplayer Key | vanilla | Adds the key to your current character's vanilla "player unique keys" list. |
setprivatekey Key PlayerName | this mod | Adds a private key to the specified online player. If name left blank will apply to your current character. |
setglobalkey Key | this mod | Adds a global key for the world. |
removekey Key | vanilla | Removes a global key for the world and from all online players' private key list when using private keys. |
removeglobalkey Key | this mod | Removes a global key for the world. |
removekeyplayer Key | vanilla | Removes the key from your current character's vanilla "player unique keys" list. |
removeprivatekey key PlayerName | this mod | Removes a private key to the specified online player. If name left blank will apply to your current character. |
resetkeys | vanilla | Removes all global keys for the world and all vanilla "player unique keys" from your current character. |
resetprivatekeys PlayerName | this mod | Removes all private keys for the specified online player. If name left blank will apply to your current character. |
resetglobalkeys | this mod | Removes all global keys for the world. |
listserverkeys | this mod | If hosting a game session will print all recorded player keys to the console window (and bepinex\logoutput.log file). If on a dedicated server will send a command for the server to print it to the server log file for viewing. This data is cleared on every restart and only records players who have reconnected at least once during the session. |
Don't know how to use commands? Dedicated servers do not allow for use of commands, but there are mods that can enable them (like Server devcommands by JereKuusela). All of these commands are considered "cheats" except the "listprivatekeys" command. To use cheats you must enable them with the "devcommands" command, you may have to be an admin for them to work.
Locking
Many actions in the game can be locked by world or player progress. If enabled, performing these actions have a fun special effect on failure! If you prefer to opt out of these effects you may edit the UseBlockedActionMessage, BlockedActionMessage, and UseBlockedActionEffect configs. I do not recommend turning off all indicators of failure, otherwise players may get confused.
Admins can bypass locking settings by enabling the AdminBypass setting.
Locking Taming
Taming can be locked by keys when enabled. By default Wolf is locked by the defeated_bonemass key and Lox is locked by the defeated_dragon key. You can override this by using the prefab name of the creature, allowing you to add support for content from other mods. When overriding you must define all the creatures since it will no longer include the defaults. When using private keys make sure the player who can tame the animals is the first to load the area since taming is controlled by the player hosting the chunk. You will still see taming hearts (for now), but if you check the taming status on the animals you will see the percentage no longer increases when locked.
Locking Bosses
Guardian Powers and Boss Alter Summoning can be locked. By default summoning is locked by the key given by the previous boss in the natural progression order. You can override this by using the prefab name of the creature the alter summons, also allowing you to add support for content from other mods. When overriding you must define all the bosses you want included in the locking system.
Additionally, you can bypass the progression order and just enforce in-game days as the only restraint for unlocking boss alters when using UnlockBossSummonsOverTime with the following setting for OverrideLockBossSummonsDefaults: Eikthyr, ,gd_king, , Bonemass, , Dragon, , GoblinKing, , SeekerQueen,
Locking Portals
The ability to use portals can be locked behind one specified key with the LockPortalsKey setting.
Locking Everything Else
Using equipment, crafting, building, and cooking can all be locked with individual settings. The materials are categorized by the biome they are naturally found in. For example, if you lock all these features, if you have not defeated any bosses then you cannot use or craft the antler pickaxe, place a forge, make deer stew, or unlock swamp crypts. When paired with private keys, these features force new players joining your server to follow the progression of the game in order to advance. This will apply to all game items that use vanilla crafting materials.
Locking Configuration Options
Configuration _______________ |
Description _____________ |
---|---|
LockTaming | If true you can only tame certain creatures if you have the required key. |
OverrideLockTamingDefaults | Define your own required keys to tame specific creatures or leave blank to use the defaults. Example: Boar, defeated_eikthyr, Wolf, defeated_dragon, Lox, defeated_goblinking |
LockGuardianPower | If true locks the ability to get or use boss powers based on the required key. |
LockBossSummons | If true you can only summon bosses based on the required key. |
OverrideLockBossSummonsDefaults | Define your own required keys to summon bosses or leave blank to use the defaults. Example (also the mod defaults): Eikthyr, ,gd_king, defeated_eikthyr, Bonemass, defeated_gdking, Dragon, defeated_bonemass, GoblinKing, defeated_dragon, SeekerQueen, defeated_goblinking |
UnlockBossSummonsOverTime | If true will additionally check the appropriate time has passed for unlocking the boss alters. This will still enforce the boss progression order unless overridden above. |
UnlockBossSummonsTime | Time for previous setting, default is 100. Example: Eikthyr wil be available on day 0, the Elder on 100, Bonemass on 200 etc. |
LockEquipment | If true you can only equip or use boss items or items made from biome metals/materials if you have the required key. |
LockCrafting | If true you can only craft items made from boss items or biome metals/materials if you have the required key. |
LockBuilding | If true you can only build pieces made from boss items or biome metals/materials if you have the required key. |
LockCooking | If true you can only cook items made from biome materials if you have the required key. |
LockPortalsKey | Define your own required key to control player ability to use portals. Leave blank to allow vanilla portal behavior. |
Trader Configuration Options
There are more key options specifically for Haldor under it's own section called "Trader". Similarly there is a section for Hildir. All vanilla items have their own configuration option if you wish to override the required key to unlock them. If these configurations are left blank it will use the game defaults. If you wish to remove only some item key requirements you can achieve this by setting the item keys to your own custom key like "Trader" and then "enforce" this key in the appropriate configuration mentioned above so all players can access it. Similarly, you can lock items by specifying a custom key that is then never added to the game (or only given to certain players when using private keys).
Configuration _______________ |
Description _____________ |
---|---|
UnlockAllHaldorItems | If true bypasses the key check for Haldor's items and unlocks everything |
UnlockAllHildirItems | If true bypasses the key check for Hildir's items and unlocks everything |
Skill Manager
Have more control over Skill loss and gain. When using skill capping any skills that are already above the maximum skill cap will remain "frozen" and will not gain, but can still be lowered on death. Console cheats will still work as intended. Other mods that change how skill gain and loss functions may cause unexpected behaviors. Turn off this feature if using another mod for skill management if you see mod conflicts.
Want to just lose accumulation points when you die? This is possible if you set UseAbsoluteSkillDrain = true, and AbsoluteSkillDrain = 0.
Configuration Options
Configuration _______________ |
Description _____________ |
---|---|
EnableSkillManager | Must be set to True to enable these features. |
AllowSkillDrain | Set to False to turn off all skill loss on death. |
UseAbsoluteSkillDrain | Set to True to use an absolute number (AbsoluteSkillDrain) for skill loss. (Vanilla uses a percentage for skill loss, so you will lose more skill the higher the skill is) |
CompareAndSelectDrain | Set to true to use the minimum or maximum value between the vanilla skill loss and the absolute skill loss. Set CompareUseMinimumDrain to False to use the maximum of these two values as the skill loss. |
OverrideMaximumSkillLevel | True to set a server wide skill level ceiling for gaining skill to the value of MaximumSkillLevel. For example, if this value is 50 then you will not gain skill once you reach level 50+ in that skill. |
OverrideMinimumSkillLevel | True to set a server wide skill level floor for skill loss to the value of MinimumSkillLevel. For example, if this value is 10 then you will not lose skill on death until you reach level 10 in that skill, so your skills will not drop below 10. |
UseBossKeysForSkillLevel | Set this to true to use a more dynamic skill control dependant on boss completion. Skill minimum will start at 0 and increase by BossKeysSkillPerKey for each boss defeated. Skill maximum will be capped at [ 100 - (number of bosses: 6) * (BossKeysSkillPerKey: 10) = 40 ] with the current game state. For example, if you defeat one boss then your skill minimum for loss will be raised to 10, and your skill maximum will be raised to 50. |
BossKeysSkillPerKey | Amount used in calculation above. Note: This feature will only work if you DO NOT override the minimum and/or maximum skill levels as described above. Overridden values will take precedence. |
World Scaling
This was a previous feature of this mod that has been pulled out into it's own module. To use scaling please download and configure the new mod. Directions on how to port over existing yaml files included with new mod.
Installation
This mod needs to be on both the client and server for all features to work. Config Syncing is included with Jotunn. Install on the server to enforce the same mod configuration for all players. Live changes to the configurations will not always take effect until the player relogs into the world/server.
Server-Side Only?
This mod will partially work server-side only to control the global key list. If you just need to stop global spawns and raids this mod can just be installed on the server. However, you may have to spawn in any of Haldor's items that would otherwise be unavailable when blocking global keys. The private keys, Haldor, locking, and skills features have to be on a client to work.
Client-Side Only?
If you do not install this mod on the server then any player can change the configurations however they please.
Other Mod Support
This mod may behave unexpectedly when used with other mods that rely on global keys to function. If you see any mod incompatibilities please report the issue so it can be resolved.
Seasonality
This mod automatically recognizes season keys as global and does not require further user configuration.
Changelog
Moved to new file, it will appear as a new tab on the thunderstore page.
Contributing
All issues can be reported on the project Github. To report issues please be as specific as possible and provide the following:
- Version of this mod you are using.
- List of the other mods being used.
All feedback, ideas, and requests are welcome! You can message me at my discord Venture Gaming.
CHANGELOG
0.3.1
- Fixed a bug that allowed portaling items when not allowed.
0.3.0
- Update for game version 0.219.13.
- New configurations for unlocking portaling metals based on keys.
- New configurations for Bog Witch trader items, and new Haldor item.
- Added new Bog Witch items to cooking locking system.
0.2.14
- Compatibility support added for properly unlocking items that have only one required ingredient for crafting (Thank you nbusseneau for the report).
- Bug fix for locking cooking and crafting not being mutually exclusive (now checks if station is a cauldron). Fixes frost arrows could not be crafted when crafting was unlocked but cooking was locked.
- Added missing Bilebag, Ooze, and Sap to crafting locking system.
0.2.13
- Bug fixes to allow skill cache to update when keys change. Should fix issues with skill capping not working as expected.
- Bug fix for raids feature only being "rallies the creatures", was not using the correct ID so no keys were being detected for players.
0.2.12
- Update for game version 0.218.12+.
- Updated to include new items from Ashlands.
- Skill capping now accounts for the Ashlands boss, this will naturally lower the skill gain ceiling.
0.2.11
- Refactored configuration live updates to only happen when needed.
- Refactored server key tracking to use player IDs rather than names. This will allow players to have the same name on a server.
- Removed cleanup patch for incorrectly configured world modifiers (if you manually break your world modifiers you can fix them with Venture Debugger).
- Set commands to onlyServer false.
0.2.10
- Update for game patch 0.217.46
0.2.9
- Added compatibility for power locking with the Passive Powers mod. Should now work when multiple powers are selected given player and/or world must have unlocked all keys for selected powers.
0.2.8
- Restored private key implementation for raids from the pre-Hildir update.
- Fixed blocking not working for ammo items like arrows due to auto-equipping.
0.2.7
- Improved other mod compatibilities by additionally patching for ZoneSystem.RPC_RemoveGlobalKey method.
- Added new command removeglobalkey due to previous change altering the vanilla removekey command.
- Refactored patches so both global keys and private keys lists are handled appropriately when using private keys to respect global key configurations. Changes some vanilla commands' behavior.
- Added built in support for the Seasonality mod.
0.2.6
- Improved other mod compatibilities when using private keys by additionally patching for ZoneSystem.GetGlobalKeys method.
- Added new command listglobalkeys due to previous change altering the vanilla listkeys command.
- Added new command resetglobalkeys.
- All keys will now be converted to lowercase internally for handling to mimic vanilla behavior (let me know if this causes issues with other mods using keys)
0.2.5
- Fixed issues with skill levels being calculated incorrectly when UseBossKeysForSkillLevel was true.
- Added new configuration LockPortalsKey to control player ability to use portals. Defaults to off.
- Added check to make sure activeBosses key is treated like world modifiers.
0.2.4
- Fixed an issue where item upgrades were not checked for locking. Will now correctly identify item level and will lock items based on current summation of crafting ingredients for items.
0.2.3
- Removed the Qualifying keys feature added in 0.1.1, mod will now correctly identify world modifiers without further configuration
- Orphaned config QualifyingKeys will remain in your config files but is not used
- If using other mods that add keys between the updates (0.1.1 - 0.2.2) they may now be in your global key list (might not cause issues, but be aware)
0.2.2
- Fixed issue with PlayerEvents world modifier not being applied correctly (was disabling raids when using private keys)
0.2.1
- Update for game patch 0.217.22, bepinex version 5.4.22.0
0.2.0
- Added Jotunn library as new dependency for config syncing, you now must also install Jotunn for this mod to work
- Added new config for admins to bypass locking settings
- Added new config to toggle blocked action fire effect
- Added missing items to locking system: lox pelt, blue jute, sharpening stone, thistle, entrails
- Note: entrails set to defeating Eikthyr (not Elder) due to meadows draugr villages
- Fixed issue with cauldron not locking cooking
0.1.4
- Added new configurations for Hildir trade items
- Bug fix for instances where hiding all trader items throws an error
0.1.3
- Created save recovery patch to fix duplicate world modifiers entry
- GlobalKeyAdd use false for canSaveToServerOptionKeys parameter to avoid duplicate entry
0.1.2
- Added check to ensure player events key is not added multiple times after restart (part of corruption issue)
0.1.1
- Hard check added to ensure keys are not world modifiers, fixes world save corruption issue (super apologies for this)
- QualifyingKeys config added to allow support for other mods due to hard check
- Private key cleanup will now remove all keys that are non-qualifying, make sure to configure this new setting
0.1.0
- Update for game patch version 0.217.14 (Please read Hildir update notes at top)
- First official release, bug fixing to come for Hildir as reported
- UsePrivateKeys config now defaults to true
- Removed private key implementation for raids, now sets and uses the vanilla world modifier for player based raids
0.0.29
- Removed world scaling feature from this mod (get the new mod if previously using)
- Deprecated the key file port logic (Files deprecated in version 0.0.19, if you have used a newer version of this mod your characters are already upgraded)
- Added logic to support global key management server-side only
- Added config toggle to display the blocked action message and effect
- Added config settings for automatic boss summon unlocking over time
- Moved the locking configs to a new section (You will have to manually update your config file if using)
- Moved boss keys for skill level configs to Skills section (You will have to manually update your config file if using)
- P.S. This should be the last set of major changes before the official release
See all patch notes on Github.