Loot Manager
Adds loot library for mod creators. This tool allows user to assign loots to enemies using Mods Communicator.
About this mod Author’s original text
Outward Loot Manager
Outward mod that allows you to assign loots to enemies using Mods Communicator to send events.
Deeper Explanation
This mod hooks into the Lootable.OnDeath method and evaluates the
provided LootRules. These rules determine whether your custom loot
should be applied to a dying enemy.
The mod acts as a central Loot Manager that stores simple,
abstracted logic and handles more complex game mechanics internally. Its state
can be saved or loaded using XML.
Other mods can inspect, modify, or react to the LootManager’s
dynamic state and see how different mods interact with it.
How to use it
Firstly, install [Mods
Communicator](
After that, you can publish and subscribe to LootManager events.
All events are registered and visible in Mods Communicator’s logging system.
However, it is still recommended to read the event descriptions below and
review the examples. Many event fields are optional and give you extra control,
but they are not required.
Percentages vs Weights
If the total drop chance of your items exceeds 100, the system automatically
switches to weight-based loot instead of percentages. Providing
maxDiceValue also forces weight mode.
In weight mode, Outward uses its original loot system, where each item is
assigned a dice-roll range based on its dropChance and its position
in the list. The system builds contiguous ranges as follows:
- minDiceRollValue is the sum of all previous items’ dropChance.
- maxDiceRollValue is minDiceRollValue + dropChance.
When the game rolls a number, the item whose range contains that number is the
one that drops.
Example: If each item has a dropChance of 10, the ranges will be
0–10, 10–20, 20–30, etc.
The seventh item will therefore have
minDiceRollValue = 60 and maxDiceRollValue = 70.
You can adjust the behavior further using emptyDropChance and
maxDiceValue.
Events
Check the parameter tables to understand which values are required. Event
descriptions below are intentionally abstract — always refer to the tables for
the exact field requirements.
Publish
Mod Namespace: gymmed.loot_manager_*
Make sure to publish only after LootManager has initialized. I
recommend adding it as a dependency in your mod, or publishing it before/after
ResourcesPrefabManager.Load has finished.
Add Loot
Event Name: AddLoot
Requires at least one of the following:
item
itemDropChance
ListItemDropChance
Also requires one or more of the filtering fields: enemy / faction / area / uniqueness.
This event is the most flexible one — you can do everything with it.
Other events exist only for convenience.
Examples
Guaranteed Loot
using OutwardModsCommunicator;...
int myItemId = 4000360; // Dreamers root
var payload = new EventPayload
{
["itemId"] = myItemId,
["enemyName"] = "Hyena", //Character.Name
};
EventBus.Publish("gymmed.loot_manager_*", "AddLoot", payload);
Chance Loot
Providing enemy id ignores other enemy requirements.
This only works for enemy id, other requirements can be combined for
flexibility. By providing dropChance to item it will internally
make emptyDropChance
using OutwardModsCommunicator;...
int myItemId = 4000360; // Dreamers root
string myEnemyId = "eCz766tEIEOWfK81om19wg"; // Calixa Boss
var payload = new EventPayload
{
["itemId"] = myItemId,
["dropChance"] = 50,
["enemyId"] = myEnemyId,
};
EventBus.Publish("gymmed.loot_manager_*", "AddLoot", payload);
Faction Loot
Additionally added how many items should be dropped(LootManager
tries to build ItemDropChance internally).
using OutwardModsCommunicator;...
int myItemId = 4000360; // Dreamers root
var payload = new EventPayload
{
["itemId"] = myItemId,
["minDropCount"] = 1,
["maxDropCount"] = 3,
["faction"] = Character.Factions.Bandits,
};
EventBus.Publish("gymmed.loot_manager_*", "AddLoot", payload);
Area Loot
using OutwardModsCommunicator;...
int myItemId = 4000360; // Dreamers root
var payload = new EventPayload
{
["itemId"] = myItemId,
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.
Install these first, or the mod will not work: