

This mod requires the following mods to function:
Chat Configs is designed for players who want to automate chat commands without C# programming. Similar to console commands in older games, it lets you store command sequences and execute them automatically when game events occur. Perfect for modders who prefer chat-based configuration over C# development.
Chat Config allows you to bind chat messages to game events. When an event fires, all bound messages will be automatically sent to chat.
Binds a chat message to an event. When the event fires, the message will be sent to chat.
Parameters:
--mod (required) - Mod namespace (e.g., "MyMod", "SL", "gymmed")--event (required) - Event name (e.g., "OnSceneLoaded", "OnFirstGameReady")--message (required) - Chat message to send when event firesUsage:
/bind --mod="SL" --event="OnSceneLoaded" --message="/say Hello from scene loaded!"
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/command --param='value'"
/bind --mod="MyMod" --event="OnPlayerLogin" --message="/tell {player} Welcome!"
Removes a bound message from an event.
Parameters:
--mod (required) - Mod namespace--event (required) - Event name--index (required) - Message index to remove (use /listbinds to see indices)Usage:
/unbind --mod="SL" --event="OnSceneLoaded" --index=0
/unbind --mod="gymmed" --event="OnFirstGameReady" --index=1
Shows all bound messages, optionally filtered by mod namespace.
Parameters:
--mod (optional) - Filter by mod namespaceUsage:
/listbinds
/listbinds --mod="SL"
This section shows how Chat Configs can automate other mods using /bind + /publish.
| Event | Use Case |
|---|---|
SL.OnSceneLoaded |
Testing/debugging only (rules reapplied each scene) |
gymmed.OnFirstGameReady |
Production use - rules applied once per session |
Warning: Never use
SL.OnSceneLoadedfor Loot Manager or Enemies Balancer rules - they persist and will duplicate on every scene load!
These examples require:
All examples use gymmed.OnFirstGameReady to apply rules once when game starts.
Adds Dreamer's Root (4000360) to all Bandit enemies when game starts.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --faction=Bandits"
Parameters: minDropCount, maxDropCount control drop quantity.
Adds loot to all enemies in the Abrassar region.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --area=Abrassar"
Makes all bosses drop a specific item.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLootForUniques --itemId=4300040 --isForBosses=true"
All examples use gymmed.OnFirstGameReady to apply rules once when game starts.
Doubles Hyena health when game starts.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* AddBalanceRuleByEnemyName --enemyName=Hyena --statType=MaxHealth --value=2.0 --modifierType=Scale"
modifierType=Scale multiplies stat (2.0 = 200% = double).
Increases all boss health and health regen when game starts.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* ModifyVitalStats --maxHealth=1.5 --healthRegen=1.2 --isForBosses=true --modifierType=Scale"
Makes all Bandit enemies friendly (non-hostile) to players.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* AddFactionRule --faction=Bandits --newFaction=Player"
Available factions: NONE, Player, Bandits, Mercs, Tuanosaurs, Deer, Hounds, Merchants, Golden, CorruptionSpirit
Makes all bosses non-hostile.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* AddFactionRule --isForBosses=true --newFaction=Player"
Adds +20 impact and +10% movement speed to all enemies.
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* ModifyCombatStats --impact=20 --movementSpeed=1.1 --modifierType=Add"
Apply multiple rules by creating separate binds:
Bind 1 - Add Loot:
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --faction=Bandits"
Bind 2 - Buff Enemies:
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* AddBalanceRuleForArea --area=Abrassar --statType=MaxHealth --value=1.2 --modifierType=Scale"
This adds Dreamer's Root to Bandits AND increases enemy health by 20% in Abrassar region.
For parameters that accept multiple values like listExceptNames, use single quotes inside double quotes:
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --faction=Bandits --listExceptNames='Hyena Wendigo'"
This adds loot to all Bandits except Hyena and Wendigo.
gymmed.OnFirstGameReady for Loot Manager and Enemies Balancer rulesSL.OnSceneLoaded only for testing (rules reapplied each scene = duplicates)/unbind to remove them/events to see all available events from installed mods/listbinds to view current bindings/unbind --mod=X --event=Y --index=Z to remove bindingsEvents are triggers that cause bound messages to be executed. There are built-in events and dynamic events from other mods.
| Event | Fires When | Repeats |
|---|---|---|
| SL.OnSceneLoaded | Every scene change (travel, fast travel, loading) | Yes |
| SL.BeforePacksLoaded | Game startup, before content loads | Yes |
| SL.OnPacksLoaded | Game startup, after content loads | Yes |
| SL.OnGameplayResumedAfterLoading | Gameplay actually starts | Yes |
| gymmed.OnFirstGameReady | First scene load after game starts | Once per session |
Note:
SL.OnSceneLoadedis the most commonly used event - it fires every time you travel, fast travel, or load into a new area.
Other mods can register custom events using Mods Communicator. When a mod registers an event, it becomes available for binding. Check /configEvents to see all available events from your installed mods.
Profiles allow you to save and share your chat configurations. They are useful for transferring settings between characters or sharing your configuration with others.
All profiles and chat configs are stored in: Outward\BepInEx\config\gymmed.Mods_Communicator\Chat_Configs\
Creates a new profile with your current scheduled messages.
Parameters:
--name (required) - Profile nameUsage:
/chatProfileCreate --name=myProfile
Note: If a profile with the same name exists, use /chatProfileStore to overwrite it instead.
Stores your current scheduled messages to an existing profile.
Parameters:
--name (required) - Profile nameUsage:
/chatProfileStore --name=myProfile
Note: The profile must already exist. Use /chatProfileCreate to create a new one.
Lists all available profiles.
Usage:
/chatProfilesList
Removes a profile.
Parameters:
--name (required) - Profile name to removeUsage:
/chatProfilesRemove --name=myProfile
Loads a profile, replacing your current scheduled messages. Your current configuration will be discarded.
Parameters:
--name (required) - Profile name to loadUsage:
/chatProfilesUse --name=myProfile
You can share your chat config profiles through Thunderstore or other distribution methods. Other users can then load your pre-configured bindings without needing to set them up manually.
To include a chat config profile in your Thunderstore modpack:
Create the profile in-game using your desired bindings:
/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --faction=Bandits"
Export the profile to a file:
/chatProfileCreate --name=myAwesomeConfig
Find the profile XML at:
Outward\BepInEx\config\gymmed.Mods_Communicator\Chat_Configs\Profiles\myAwesomeConfig.xml
Include in your Thunderstore zip with this directory structure:
BepInEx/
└── config/
└── gymmed.Mods_Communicator/
└── Chat_Configs/
└── Profiles/
└── myAwesomeConfig.xml
Note: Users must have Chat Configs mod installed for the profile to work.
To use a shared profile from a modpack:
Install the modpack that includes the chat config profile
Load the profile in-game:
/chatProfilesUse --name=myAwesomeConfig
Verify bindings loaded correctly:
/listbinds
Restart the game to trigger the bindings on next load
The profile will persist across game sessions until removed or replaced.
All profiles are stored in:
Outward\BepInEx\config\gymmed.Mods_Communicator\Chat_Configs\Profiles\
This mod uses Mods Communicator for event-driven communication between mods.
Other mods can publish events to this mod to register custom event triggers. When an event fires, any bound chat messages will be automatically sent to chat.
using OutwardModsCommunicator.EventBus;
// Somewhere in your mod's initialization
var payload = new EventPayload
{
["namespace"] = "MyMod",
["eventName"] = "OnPlayerLogin",
["action"] = new Action(() => {
EventBus.Publish("gymmed.chat_configs_*", "ScheduledEvents@TriggerEvent", new EventPayload
{
["namespace"] = "MyMod",
["eventName"] = "OnPlayerLogin"
});
}),
["displayName"] = "Player Login Event"
};
EventBus.Publish("gymmed.chat_configs_*", "ScheduledEvents@RegisterEvent", payload);
When your custom event needs to fire, publish to gymmed.chat_configs_* with the event ScheduledEvents@TriggerEvent to trigger all bound chat messages.
// When your event fires (e.g., player logs in)
EventBus.Publish("gymmed.chat_configs_*", "ScheduledEvents@TriggerEvent", new EventPayload
{
["namespace"] = "MyMod",
["eventName"] = "OnPlayerLogin"
});
To manually set up:
Outward\BepInEx\plugins\OutwardChatConfigs\BepInEx\plugins\OutwardChatConfigs\ directory