Loot Manager

v0.0.6·Updated 2026-01-11

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

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. 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.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. 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.

Dependencies

Install these first, or the mod will not work:

GymMed-Mods_Communicatorsinai-dev-SideLoaderBepInEx-BepInExPack_Outward

File & checksum

Filename
Loot_Manager-0.0.6.zip
File size
172.3 KiB