GymMed-Loot_Manager icon

Loot Manager

Adds loot library for mod creators. This tool allows user to assign loots to enemies using Mods Communicator.

Last updated 2 days ago
Total downloads 23
Total rating 0 
Categories Libraries Utility
Dependency string GymMed-Loot_Manager-0.0.3
Dependants 0 other packages depend on this package

This mod requires the following mods to function

GymMed-Mods_Communicator-1.2.0 icon
GymMed-Mods_Communicator

Outward Mods Communicator enables seamless communication between mods through shared events and configuration syncing. It also lets users override any changes made by other mods, giving them full control over their settings.

Preferred version: 1.2.0
sinai-dev-SideLoader-3.8.4 icon
sinai-dev-SideLoader

API and Mod Development Toolkit for Outward.

Preferred version: 3.8.4
BepInEx-BepInExPack_Outward-5.4.19 icon
BepInEx-BepInExPack_Outward

BepInEx pack for Outward.

Preferred version: 5.4.19

README

Outward Loot Manager


Logo

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 = 70 and maxDiceRollValue = 80.

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,
    ["area"] = AreaManager.AreaEnum.Abrassar,
};
EventBus.Publish("gymmed.loot_manager_*", "AddLoot", payload);
Area Family Loot I recommend to make a helper method of finding your AreaFamily by enum/name.
You can find them in AreaManager.AreaFamilies.
using OutwardModsCommunicator;
...
int myItemId = 4000360; // Dreamers root
var payload = new EventPayload
{
    ["itemId"] = myItemId,
    ["areaFamily"] = AreaManager.AreaFamilies[2], //Levant Region includes abrassar and all dungeons
    // you can combine requirements
    ["faction"] = Character.Factions.Bandits,
    ["listExceptNames"] = new List<string>() { "Hyena" },
};
EventBus.Publish("gymmed.loot_manager_*", "AddLoot", payload);
Add Loot By Enemy Name Event Name: AddLootByEnemyName
Compares Character.Name to your provided string and if they match provides loot
Required one of the item/itemDropChance/ListItemDropChance information.
Required enemyName.

Only listExceptIds work.

Example
using OutwardModsCommunicator;
...
ItemDropChance myItem = new ItemDropChance();
myItem.ItemID = 4000360; // Dreamers root
myItem.DropChance = 30;
var payload = new EventPayload
{
    ["itemDropChance"] = myItem,
    ["enemyName"] = "Hyena", //Character.Name
    ["listExceptIds"] = new List<string>() { "yourEnemyId" },
};
EventBus.Publish("gymmed.loot_manager_*", "AddLootByEnemyName", payload);
Add Loot By Enemy Id Event Name: AddLootByEnemyId
Required one of the item/itemDropChance/ListItemDropChance information.
Required enemyId.
Example
using OutwardModsCommunicator;
...
List<ItemDropChance> drops = new();
ItemDropChance myFirstItem = new ItemDropChance();
myFirstItem.ItemID = 4000360; // Dreamers root
myFirstItem.DropChance = 30;
ItemDropChance mySecondItem = new ItemDropChance();
mySecondItem.ItemID = 6000170; // Purifying quartz
mySecondItem.DropChance = 30;
drops.Add(myFirstItem);
drops.Add(mySecondItem);
var payload = new EventPayload
{
    ["listOfItemDropChances"] = drops,
    ["enemyId"] = "JmeufMpL_E6eYnqCYP2r3w", // Elite Burning Man
};
EventBus.Publish("gymmed.loot_manager_*", "AddLootByEnemyId", payload);
Add Loot For Uniques Makes bosses lootable.
Event Name: AddLootForUniques
Required one of the item/itemDropChance/ListItemDropChance information.
Required one of the isForBosses/isForBossPawns/ isForStoryBosses/isForUniqueArenaBosses/ isForUniqueEnemies parameters.
Example
using OutwardModsCommunicator;
...
int myItemId = 4000360; // Dreamers root
var payload = new EventPayload
{
    ["itemId"] = myItemId,
    ["isForBosses"] = true, // is for all bosses
};
EventBus.Publish("gymmed.loot_manager_*", "AddLootForUniques", payload);
Load Loots XML Loads your custom loot-rules XML document into the mod.
Event Name: LootRulesSerializer@LoadCustomLoots
Requires the full path to the XML file, provided as the filePath parameter.
Example
using OutwardModsCommunicator;
...
var payload = new EventPayload
{
    ["filePath"] = "assemblyLocation/filePath.xml",
};
EventBus.Publish("gymmed.loot_manager", "LootRulesSerializer@SaveLootRulesToXml", payload);
Store Loots to XML Stores the current LootManager loot rules into an XML document.
Event Name: LootRulesSerializer@SaveLootRulesToXml
Optional: you may provide a full XML file path using the filePath parameter. If omitted, the file will be stored at: BepInEx/config/gymmed.Mods_Communicator/Loot_Manager/LootRules-date.xml
Example
using OutwardModsCommunicator;
...
var payload = new EventPayload
{
    //["filePath"] = "",
};
EventBus.Publish("gymmed.loot_manager", "LootRulesSerializer@SaveLootRulesToXml", payload);
Subscribe Mod Namespace: gymmed.loot_manager
You can listen then mod methods a triggered.
Append Loot Rule Event Name: LootRuleRegistryManager@AppendLootRule
On published and added loot rule gets triggered.
Example
using OutwardModsCommunicator;
...
public awake()
{
...
EventBus.Subscribe(
"gymmed.loot_manager",
"LootRuleRegistryManager@AppendLootRule", 
YourMethod
);
}
...
public static void YourMethod(EventPayload payload)
{
    if (payload == null) return;
    int lootRuleId = payload.Get<string>("lootRuleId", null);
    // You would compare it with your registered loot rule id that you can provide
    // Your code...
}
Remove Loot Rule Event Name: LootRuleRegistryManager@RemoveLootRule
On published and removed loot rule gets triggered.
Example
using OutwardModsCommunicator;
...
public awake()
{
...
EventBus.Subscribe(
"gymmed.loot_manager",
"LootRuleRegistryManager@RemoveLootRule", 
YourMethod
);
}
...
public static void YourMethod(EventPayload payload)
{
    if (payload == null) return;
    int lootRuleId = payload.Get<string>("lootRuleId", null);
    // You would compare it with your registered loot rule id that you can provide
    // Your code...
}
Unique Enemies If you going to provide only enemyName and that enemy is unique make sure to provide one of isForBosses, isForBossPawns, isForStoryBosses, isForUniqueArenaBosses, isForUniqueEnemies parameters.
Data collected using Outward Scene Tester
Bosses Below are all included in isForBosses parameter.
Story Bosses All enemies included in isForStoryBosses. They are all compared by UID. Djinn has dummy data and is not tested, but he never enters the state to be looted?
Picture Character.Name Character.m_name Character.m_nameLoc Character.UID Wiki location Game location
Crimson Avatar Burning Man CrimsonAvatar (1) Undead_BurningMan 4eeggsSn2Eyah4IjjqvpYQ Scarlet Sanctuary Scarlet Sanctuary
Djinn Gold Lich LichGold Undead_LichGold EwoPQ0iVwkK-XtNuaVPf3g Oil Refinery Oil Refinery
Forge Master Jade Lich LichRust Undead_LichJade shyc5M7b-UGVHBZsJMdP4Q Forgotten Research Laboratory Forgotten Research Laboratory
Light Mender Gold Lich LichGold Undead_LichGold EwoPQ0iVwkK-XtNuaVPf3g Spire of Light Spire of Light
Plague Doctor Jade Lich LichJade Undead_LichJade 8sjFFBPMvkuJcrcyIYs-KA Dark Ziggurat Dark Ziggurat Interior
Boss Pawns All enemies included in isForBossPawns. They are all compared by UID.
Picture Character.Name Character.m_name Character.m_nameLoc Character.UID Wiki location Game location Scene name
Elite Krypteia Warrior Balira KrypteiaGuard name_unpc_balira_01 AbvgKMnPLUiffB6LzjaguQ Tower of Regrets Arena Unknown Arena CalderaDungeonsBosses
Elite Krypteia Witch Balira KrypteiaMage name_unpc_balira_01 MfBjNPYsvkODdyLjYrlXXw Tower of Regrets Arena Unknown Arena CalderaDungeonsBosses
Elite Obsidian Elemental Obsidian Elemental ObsidianElemental Wildlife_ObsidianElemental RM13rq4JTEqbuANnncMCKA Burning Tree Arena Unknown Arena EmercarDungeonsBosses
Obsidian Elemental (1) Qrq3e4nUpkS8CH3yd8J-ow
Unique Arena Bosses All enemies included in isForUniqueArenaBosses. They are all compared by UID.
Picture Character.Name Character.m_name Character.m_nameLoc Character.UID Wiki location Game location Scene name
Ash Giant Highmonk Ash Giant Priest EliteAshGiantPriest Giant_Priest UnIXpnDMzUSfBu4S-ZDgsA Giant's Village Arena (south) Unknown Arena HallowedDungeonsBosses
Brand Squire Desert Bandit EliteBrandSquire Bandit_Desert_Basic sb0TOkOPS06jhp56AOYJCw Conflux Mountain Arena Unknown Arena ChersoneseDungeonsBosses
Breath of Darkness Breath of Darkness AncientDwellerDark Elite_Dweller JmeufMpL_E6eYnqCYP2r3w The Vault of Stone The Vault of Stone Caldera_Dungeon8
Calixa (boss) Cyrene EliteCalixa Cyrene eCz766tEIEOWfK81om19wg Levant Arena Unknown Arena AbrassarDungeonsBosses
Concealed Knight: ??? ??? NewBandit name_unpc_unknown_01 XVuyIaCAVkatv89kId9Uqw Shipwreck (Castaway) CierzoTutorial CierzoTutorial
Elite Alpha Tuanosaur Alpha Tuanosaur EliteTuanosaurAlpha Wildlife_TuanosaurAlpha El8bA54i4E6vZraXsVZMow Ziggurat Passage Arena Unknown Arena HallowedDungeonsBosses
Elite Ash Giant Ash Giant EliteAshGiantPaf Giant_Guard 3vXChaIK90qgq03PmsHFCg Unknown Arena Unknown Arena HallowedDungeonsBosses
EliteAshGiantPif 851czvFVDUaB42CgVzfKdg
EliteAshGiantPouf kNmmOHZzKU-82F3OoX9NXw
Elite Beast Golem Beast Golem EliteBeastGolem Golem_Beast n83g2QJhwUyUrN469WC4jA Parched Shipwrecks Arena Unknown Arena AbrassarDungeonsBosses
Elite Boozu Blade Dancer BoozuProudBeast Wildlife_BladeDancer 2Ef5z9OfYkev7M7Oi9GN-A Mana Lake Arena Unknown Arena AntiqueFieldDungeonsBosses
Elite Burning Man Burning Man EliteBurningMan Undead_BurningMan JmeufMpL_E6eYnqCYP2r3w Burning Tree Arena Unknown Arena EmercarDungeonsBosses
Elite Crescent Shark Crescent Shark EliteCrescentShark Wildlife_CrescentShark RM13rq4JTEqbuANnncMCKA Electric Lab Arena Unknown Arena AbrassarDungeonsBosses
EliteCrescentShark (1) ElDi5-rvqEqJKcXhEdgwBQ
EliteCrescentShark (2) z3sfjJtqQEmUZ_S6g2RPIg
Elite Crimson Avatar Burning Man CrimsonAvatarElite (1) Undead_BurningMan JmeufMpL_E6eYnqCYP2r3w Vault of Stone Arena Unknown Arena CalderaDungeonsBosses
Elite Gargoyle Alchemist Shell Horror GargoyleBossMelee (1) Horror_Shell k75QmVu5t0e_zIjHnUFbIQ New Sirocco Arena Unknown Arena CalderaDungeonsBosses
Elite Gargoyle Mage Shell Horror GargoyleBossMelee (1) Horror_Shell AKBYHSSMJUaH9ddLiz_SZA New Sirocco Arena Unknown Arena CalderaDungeonsBosses
Elite Gargoyle Warrior Shell Horror GargoyleBossMelee (1) Horror_Shell Z6yTTWK4u0GjDPfZ9X332A New Sirocco Arena Unknown Arena CalderaDungeonsBosses
Elite Mantis Shrimp Mantis Shrimp EliteMantisShrimp Wildlife_Shrimp RM13rq4JTEqbuANnncMCKA Voltaic Hatchery Arena Unknown Arena ChersoneseDungeonsBosses
Elite Sublime Shell Nicolas CageArmorBoss (1) Nicolas X-dfltOoGUm7YlCE_Li1zQ Isolated Windmill Arena Unknown Arena AntiqueFieldDungeonsBosses
Elite Torcrab Wildlife_Torcrab TorcrabGiant (1) Wildlife_Torcrab gQDvpLQh3kimgwMmvXJc4g River of Red Arena Unknown Arena CalderaDungeonsBosses
Grandmother Ghost Grandmother Undead_Ghost 7G5APgUksEGdQrBxKXr04g Tower of Regrets Arena Unknown Arena CalderaDungeonsBosses
Immaculate Dreamer Immaculate EliteImmaculate Horror_Immaculate 9jsiejBtHkOzeo4tOyyweg Cabal of Wind Temple Arena Unknown Arena EmercarDungeonsBosses
Immaculate's Bird Immaculate EliteSupremeShell (1) Horror_Immaculate JsyOv_Cwu0K0HlXyZInRQQ Immaculate's Camp Arena Unknown Arena AntiqueFieldDungeonsBosses
Light Mender Gold Lich LichGold (1) Undead_LichGold v9mN1u1uMkaxsncBXhIM9A Spire of Light Unknown Arena EmercarDungeonsBosses
Plague Doctor Jade Lich LichJade (1) Undead_LichJade GfWl16_MZ0uS7UYIKpS5Lg Dark Ziggurat Unknown Arena EmercarDungeonsBosses
Troglodyte Queen Mana Troglodyte TroglodyteMana (1) Troglodyte_Mana pcQlY_whLUCC-FZel18VMg Blister Burrow Arena Unknown Arena ChersoneseDungeonsBosses
Definitive Edition Unique Enemies All enemies included in isForUniqueEnemies. They are all compared by UID.
Picture Character.Name Character.m_name Character.m_nameLoc Character.UID Wiki location Game location
Accursed Wendigo Accursed Wendigo WendigoAccursed Unique_DefEd_Wendigo ElxncPIfuEuWkexSKkqFXg Corrupted Tombs Corrupted Tombs
Altered Gargoyle Altered Gargoyle GargoyleAltered Unique_DefEd_AlteredGargoyle dhQVMNRU5kCIWsWRFYpDdw Ziggurat Passage Ziggurat Passage
Ancestral General Ancestral General SkeletonBig (1) Unique_DefEd_AncestorBig XVuyIaCAVkatv89kId9Uqw Necropolis Necropolis
Ancestral Soldier Ancestral Soldier SkeletonSmall (1) Unique_DefEd_AncestorSmall IwZYxBIQZkaXXMWT9HC5nA Necropolis Necropolis
Bloody Alexis Bloody Alexis HumanArmoredThug Unique_DefEd_ArmoredThug VfYPPb4wcESdDVSiEq4UhA Undercity Passage Undercity Passage
Calygrey Hero Calygrey Hero LionmanElite (1) Elite_Calygrey pMfhK69Stky7MvE9Ro0XMQ Steam Bath Tunnels Steam Bath Tunnels
Chromatic Arcane Elemental Chromatic Arcane Elemental ElementalChromatic Unique_DefEd_ChromaElemental RM13rq4JTEqbuANnncMCKA Compromised Mana Transfer Station Compromised Mana Transfer Station
Cracked Gargoyle Cracked Gargoyle GargoyleCracked Unique_DefEd_CrackedGargoyle -McLNdZsNEa3itw-ny7YBw Ark of the Exiled Ark of the Exiled
Elemental Parasite Crescent Shark ElementalParasite Wildlife_CrescentShark YDPy9S-An0-qGuvrJAM8yA Crumbling Loading Docks Crumbling Loading Docks
Executioner Bug Executioner Bug ExecutionerBug Unique_DefEd_ExecutionerBug MWplmyrxokSXELL63oWcAg The Slide The Slide
Ghost of Vanasse Ghost of Vanasse GhostOfVanasse Undead_GhostVanasse R5UngwGS5EGWCH13toZO8Q Chersonese Chersonese
Giant Horror Giant_Horror GiantHorror Giant_Horror SntMM-EzuE-ptgmqp4qkYQ Crumbling Loading Docks Crumbling Loading Docks
Glacial Tuanosaur Glacial Tuanosaur TuanosaurIce Unique_DefEd_GlacialTuano 1IKBT9DYc0yIkESwKtU40g Conflux Chambers Conflux Chambers
Golden Matriarch Golden Matriarch SpecterMeleeMatriarch Unique_DefEd_GoldenMatriarch GI-aE4Ry7UOIyAYYk7emFg Voltaic Hatchery Voltaic Hatchery
Grandmother Medyse Grandmother Medyse JellyFishMother Unique_DefEd_GrandmotherMedyse kp9R4kaoG02YfLdS9ROM4w Sulphuric Caverns Sulphuric Caverns
Greater Grotesque Greater Grotesque ImmaculateHorrorGreater Unique_DefEd_GreaterGrotestue JmeufMpL_E6eYnqCYP2r3w Lost Golem Manufacturing Facility Lost Golem Manufacturing Facility
Guardian of the Compass Guardian of the Compass GolemBoss Golem_Basic2 BINT--E9xUaCgp4onBM54g The Walled Garden Abrassar
Kazite Admiral Kazite Admiral HumanKaziteCaptain Unique_DefEd_KaziteCaptain XVuyIaCAVkatv89kId9Uqw Abandoned Living Quarters Abandoned Living Quarters
Lightning Dancer Lightning Dancer BladeDancerLight Unique_DefEd_LightningDancer QRzc3AYY10CWyXOMgrIQTg Ancient Foundry Ancient Foundry
Liquid-Cooled Golem Liquid-Cooled Golem GolemShieldedIce Unique_DefEd_LiquidGolem 8ztut4_yiEmK0-NFLa-XNQ Destroyed Test Chambers Destroyed Test Chambers
Luke the Pearlescent Luke the Pearlescent NewBanditEquip_WhiteScavengerCaptainBoss_A (1) Bandit_Standard_Captain2 XVuyIaCAVkatv89kId9Uqw Ruins of Old Levant Abrassar
Mad Captain's Bones Mad Captain’s Bones SkeletFighter Undead_Skeleton2 JM_HjGXMlkq7a1Yb6gijgQ Pirates' Hideout Chersonese Misc. Dungeons
Matriarch Myrmitaur Matriarch Myrmitaur MyrmElite (1) Elite_Myrm 6sB4_5lOJU2bWuMHnOL4Ww Myrmitaur’s Haven Myrmitaur’s Haven
Quartz Elemental Quartz Elemental ObsidianElementalQuartz Unique_DefEd_QuartzElemental LhhpSt8BO0aRN5mbeSuDrw The Grotto of Chalcedony The Grotto of Chalcedony
Razorhorn Stekosaur Razorhorn Stekosaur SteakosaurBlack (1) Unique_DefEd_BlackSteko 03dSXwJMRUuzGu8s3faATQ Reptilian Lair Reptilian Lair
Royal Manticore The Royal Manticore RoyalManticore Wildlife_Manticore2 RM13rq4JTEqbuANnncMCKA Enmerkar Forest Enmerkar Forest
Rusted Enforcer Rusted Enforcer GolemRusted (1) Unique_DefEd_RustyGolem Ed2bzrgz5k-cRx3bUYTfmg Ghost Pass Ghost Pass
Sandrose Horror Sandrose Horror ShelledHorrorBurning Unique_DefEd_SandroseHorror H7HoCKhBl0mC1j9UOECDrQ Sand Rose Cave Sand Rose Cave
She Who Speaks She Who Speaks AncientDwellerSpeak Unique_DefEd_BossDweller MBooN38mU0GPjQJGRuJ95g The Vault of Stone The Vault of Stone
That Annoying Troglodyte That Annoying Troglodyte TroglodyteAnnoying Unique_DefEd_AnnoyingTrog no-Z4ibpcEWbNntm_wRwZA Jade Quarry Jade Quarry
The Crusher The Crusher HumanCrusher (1) Unique_DefEd_DesertCrusher AZL-EjXmhkOYB1obj0VkTw Ancestor’s Resting Place Ancestor’s Resting Place
The First Cannibal The First Cannibal WendigoCanibal Wildlife_Wendigo2 wrYHXXh8J0KMhwoV8AC59w Face of the Ancients Face of the Ancients
The Last Acolyte The Last Acolyte HumanAcolyte (1) Unique_DefEd_LastAcolyte YeYzQP-gYUmSivlk5JCJew Stone Titan Caves Stone Titan Caves
Thunderbolt Golem Troglodyte Archmage TroglodyteArcMageDefEd (1) Unique_DefEd_TrogMage syKWNGT3QUO3nXxPt1WEcQ Blister Burrow Blister Burrow
Titanic Guardian Mk-7 Jade Lich TitanGolemHalberd Undead_LichJade 65aI6XT89kmHa1bwJz5PGQ Ruined Warehouse Ruined Warehouse
TitanGolemHammer G_Q0oH1ttkWAZXCMuaAHjA
TitanGolemSword wj3frikyIkqwVv7myrc5gw
Tyrant of the Hive Tyrant of the Hive HiveLord1AID+ Undead_Hivelord2 yOo-iKN3-0mAtZ2pG16pyw Forest Hives Forest Hives
Vile Illuminator Vile Illuminator IlluminatorHorrorVile Unique_DefEd_VileIlluminator l5ignQfsE0Cv4imB9DZJ5w Cabal of Wind Temple Cabal of Wind Temple
Virulent Hiveman Virulent Hiveman HiveManVirulent Unique_DefEd_VirulentHiveman v1PnLFpcxEmm_IrZaP-eyg Ancient Hive Ancient Hive
All Parameters
Required atleast one of type Parameter Type Description
Item Builds ItemDropChance Internally itemId int Required if itemDropChance/listOfItemDropChances is not provided. Loot item ID.
dropChance int Optional. Default is 10. Determines chance of dropping item. You can provide ItemDropChance instead if you like.
minDropCount int Optional. Default is 1. Provides minimum amount of items could be dropped. You can provide ItemDropChance instead if you like.
maxDropCount int Optional. Default is 1. Provides maximum amount of items could be dropped. You can provide ItemDropChance instead if you like.
minDiceRollValue int Optional. Default is 0. Sets the lowest dice roll value at which item drop chances begin to count. Use together with 'maxDiceRollValue' and 'maxDiceValue'. You can provide ItemDropChance instead if you like.
maxDiceRollValue int Optional. Default is 0. Sets the highest dice roll value considered when calculating item drop chances. Use together with 'minDiceRollValue' and 'maxDiceValue'. You can provide ItemDropChance instead if you like.
Choice to provide instead listOfItemDropChances List<string> Optional. Default null. Provide your created list of your ItemDropChance instances to be dropped.
itemDropChance ItemDropChance Optional. Default null. Provide your created ItemDropChance instance to be dropped.
Enemy enemyId string Default null. Determines if drop should be appliead for enemy. You can get this from UnityExplorer mod or logs.
enemyName string Default null. Determines if drop should be appliead for enemy. You can get this from UnityExplorer mod or logs.
area AreaManager.AreaEnum? Optional. Default nullable. Determines if drop should be appliead for specific area. You can get this from AreaManager.AreaEnum enum.
areaFamily AreaFamily Optional. Default null. Determines if drop should be appliead for specific area family(region). You can get this from AreaManager.AreaFamilies variable.
faction Character.Factions? Optional. Default nullable. Determines if drop should be appliead for specific faction. You can get this from Character.Factions enum.
isForBosses bool Optional. Default false. Determines if drop should be appliead for all game bosses and pawns.
isForBossPawns bool Optional. Default false. Should drop be applied for bosses pawns?
isForStoryBosses bool Optional. Default false. Should drop be applied for story bosses?
isForUniqueArenaBosses bool Optional. Default false. Should drop be applied for unique arena bosses?
isForUniqueEnemies bool Optional. Default false. Should drop be applied for unique enemies?
Not Required lootId string Optional. You will need loot id if you planning to remove loot later.
listExceptIds List<string> Optional. Default null. List of enemy ids that will not receive loot. You can get this from Character.UID.Value .
listExceptNames List<string> Optional. Default null. List of enemy names that will not receive loot. You can get this from Character.Name .
minNumberOfDrops int Optional. Default is 1. Determines minimum amout of drops for same provided items(ItemDropChance).
maxNumberOfDrops int Optional. Default is 1. Determines maximum amout of drops for same provided items(ItemDropChance).
emptyDropChance int Optional. Default is 0. Defines the percentage chance for a drop to be empty. Used together with 'maxDiceValue'.
Parameters used for rules control
Parameter Type Description
filePath string Required. Used for loading custom loots from xml file.
filePath string Required. Used for loading custom loots from xml file.
lootRuleId string Provides loot rule id.
Known Bugs
Unique Enemies 1.The unique arena boss Grandmother and its pawn enemies, the Kryptia Warriors, do not drop loot because they never trigger the Lootable.OnDeath event. Not a priority for me right now to fix it.

Can I find full project example how to use this?

You can view outward enchantments balancer pack here.

How to set up

To manually set up, do the following

  1. Create the directory: Outward\BepInEx\plugins\OutwardLootManager\.
  2. Extract the archive into any directory(recommend empty).
  3. Move the contents of the plugins\ directory from the archive into the BepInEx\plugins\OutwardLootManager\ directory you created.
  4. It should look like Outward\BepInEx\plugins\OutwardSceneTester\OutwardLootManager.dll Launch the game.

If you liked the mod leave a star on GitHub it's free