GymMed-Chat_Configs icon

Chat Configs

Bind chat messages to game events. When an event fires, the bound message will be sent to chat.

Last updated 3 weeks ago
Total downloads 45
Total rating 0 
Categories Utility Misc
Dependency string GymMed-Chat_Configs-0.0.1
Dependants 0 other packages depend on this package

This mod requires the following mods to function

GymMed-Chat_Commands_Manager-0.1.0 icon
GymMed-Chat_Commands_Manager

CLI library for Outward chat. Eliminates the need to build a separate UI to execute mod functions by providing an in-chat console.

Preferred version: 0.1.0
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 Chat Commands Configs


Logo
Bind chat messages to game events. When an event fires, the bound message will be sent to chat.

Dependencies

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

Chat Config allows you to bind chat messages to game events. When an event fires, all bound messages will be automatically sent to chat.

Commands

/bind

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 fires

Usage:

/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!"
/unbind

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
/listbinds

Shows all bound messages, optionally filtered by mod namespace.

Parameters:

  • --mod (optional) - Filter by mod namespace

Usage:

/listbinds
/listbinds --mod="SL"

Practical Examples

This section shows how Chat Configs can automate other mods using /bind + /publish.

Important: When to Use Which Event

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.OnSceneLoaded for Loot Manager or Enemies Balancer rules - they persist and will duplicate on every scene load!

Prerequisites

These examples require:

Loot Manager Examples

All examples use gymmed.OnFirstGameReady to apply rules once when game starts.

Add Loot to Bandit Faction

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.

Add Loot to Specific Area

Adds loot to all enemies in the Abrassar region.

/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --area=Abrassar"
Make All Bosses Lootable

Makes all bosses drop a specific item.

/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLootForUniques --itemId=4300040 --isForBosses=true"

Enemies Balancer Examples

All examples use gymmed.OnFirstGameReady to apply rules once when game starts.

Buff Hyena Health

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).

Buff All Bosses

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"
Make Bandits Friendly

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

Make All Bosses Friendly

Makes all bosses non-hostile.

/bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.enemies_balancer_* AddFactionRule --isForBosses=true --newFaction=Player"
Increase Enemy Damage

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"

Combined Examples

Full Setup: Loot + Buffs on Game Start

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.

Using Complex Parameters (ICollection/Arrays)

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.

Tips

  • Always use gymmed.OnFirstGameReady for Loot Manager and Enemies Balancer rules
  • Use SL.OnSceneLoaded only for testing (rules reapplied each scene = duplicates)
  • Rules persist until game restarts - use /unbind to remove them
  • Check /events to see all available events from installed mods
  • Use /listbinds to view current bindings
  • Use /unbind --mod=X --event=Y --index=Z to remove bindings

Events

Events are triggers that cause bound messages to be executed. There are built-in events and dynamic events from other mods.

Built-in Events

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.OnSceneLoaded is the most commonly used event - it fires every time you travel, fast travel, or load into a new area.

Dynamic Events

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

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\

Commands

/chatProfileCreate

Creates a new profile with your current scheduled messages.

Parameters:

  • --name (required) - Profile name

Usage:

/chatProfileCreate --name=myProfile

Note: If a profile with the same name exists, use /chatProfileStore to overwrite it instead.

/chatProfileStore

Stores your current scheduled messages to an existing profile.

Parameters:

  • --name (required) - Profile name

Usage:

/chatProfileStore --name=myProfile

Note: The profile must already exist. Use /chatProfileCreate to create a new one.

/chatProfilesList

Lists all available profiles.

Usage:

/chatProfilesList
/chatProfilesRemove

Removes a profile.

Parameters:

  • --name (required) - Profile name to remove

Usage:

/chatProfilesRemove --name=myProfile
/chatProfilesUse

Loads a profile, replacing your current scheduled messages. Your current configuration will be discarded.

Parameters:

  • --name (required) - Profile name to load

Usage:

/chatProfilesUse --name=myProfile

Sharing Profiles

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.

For Mod Pack Creators

To include a chat config profile in your Thunderstore modpack:

  1. Create the profile in-game using your desired bindings:

    /bind --mod="gymmed" --event="OnFirstGameReady" --message="/publish gymmed.loot_manager_* AddLoot --itemId=4000360 --faction=Bandits"
    
  2. Export the profile to a file:

    /chatProfileCreate --name=myAwesomeConfig
    
  3. Find the profile XML at:

    Outward\BepInEx\config\gymmed.Mods_Communicator\Chat_Configs\Profiles\myAwesomeConfig.xml
    
  4. 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.

For End Users

To use a shared profile from a modpack:

  1. Install the modpack that includes the chat config profile

  2. Load the profile in-game:

    /chatProfilesUse --name=myAwesomeConfig
    
  3. Verify bindings loaded correctly:

    /listbinds
    
  4. Restart the game to trigger the bindings on next load

The profile will persist across game sessions until removed or replaced.

Profile Location

All profiles are stored in:

Outward\BepInEx\config\gymmed.Mods_Communicator\Chat_Configs\Profiles\

Publish/Subscribe

This mod uses Mods Communicator for event-driven communication between mods.

Publish

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.

Code Example - Register Event
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);

Subscribe

When your custom event needs to fire, publish to gymmed.chat_configs_* with the event ScheduledEvents@TriggerEvent to trigger all bound chat messages.

Code Example - Trigger Event
// When your event fires (e.g., player logs in)
EventBus.Publish("gymmed.chat_configs_*", "ScheduledEvents@TriggerEvent", new EventPayload
{
    ["namespace"] = "MyMod",
    ["eventName"] = "OnPlayerLogin"
});

How to Set Up

To manually set up:

  1. Create the directory: Outward\BepInEx\plugins\OutwardChatConfigs\
  2. Extract the archive into any directory (recommend empty)
  3. Move the contents of the plugins\ directory into the BepInEx\plugins\OutwardChatConfigs\ directory
  4. Launch the game

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