Page cover

πŸ’­mad-thoughts

Turn πŸ’¬ notifications into πŸ“– narratives.

Tebex Package

Introduction

A thought bubble notification system designed for immersive roleplay.

In traditional FiveM servers, notifications often break immersion with meta-gaming information: "Not enough police online" or "You don't have the required skill level." These messages force players to acknowledge game mechanics rather than staying in character.

mad-thoughts transforms this experience by displaying notifications as the character's inner thoughts. When a player encounters a locked door they can't pick, instead of seeing "Lockpicking skill too low," they'll think: "This lock looks too complex for me..."


Preview

Watch the preview videoarrow-up-right to see mad-thoughts in action, or view the screenshots below.

mad-thoughts Preview Video
chevron-rightScreenshotshashtag


Features & Benefits

  • πŸ’­ Immersive Thought Bubbles: Displays character thoughts above the player's head

  • 🎨 Rich Customisation: Icons, colors, and timing options

  • πŸ‘‰ Scenario System: Automatic thoughts based on gameplay situations

  • πŸ’¬ Message Variety: Random selection prevents repetition

  • πŸ“ Location Awareness: Thoughts trigger in specific areas

  • πŸ” Sequential Thoughts: Create story-driven thought chains

  • 🌐 Server-Wide Thoughts: Send thoughts to all connected players

  • πŸ’» Developer-Friendly: Simple exports for easy implementation

⭐ Perfect For:

  • Skill check feedback that doesn't break immersion

  • Subtle environmental storytelling

  • Replacing meta-gaming notifications with in-character thoughts

  • Adding personality and depth to player characters

  • Creating a more cinematic and immersive experience

Transform your server's notification system from immersion-breaking text to character-driven thoughts. Your players will feel more connected to their characters, and your world will feel more authentic and alive.


Scenarios & Locations

The real power of mad-thoughts comes from automatic triggers that create thoughts based on specific conditions. These features transform passive notifications into immersive character experiences. While the resource includes several pre-built examples, you're encouraged to create ones tailored to your server.


Scenario-Based Thoughts

Scenarios are condition-driven thoughts that monitor your player's state and environment. When specific conditions are met, they automatically trigger appropriate thoughts. Common scenario types include:

  • Health & Status: Low health, stress levels, character needs

  • Environmental: Weather conditions, time of day, underwater

  • Action-Based: Swimming, running, combat situations

  • Character Needs: Hunger, thirst, fatigue

Scenarios use custom check functions to determine when to trigger, making them highly flexible for any roleplay situation.


Location-Based Thoughts

Location triggers create area-specific thoughts that enhance environmental storytelling. Players automatically think contextually appropriate thoughts when entering designated areas.

Location triggers support both pre-configured areas (set in config.lua) and dynamic registration and destruction, giving you complete control over when and where thoughts appear.

Circular Areas

Perfect for simple zones around points of interest:

  • Hospitals and police stations

  • Beaches, mountains, and landmarks

  • Buildings and neighborhoods

  • General area triggers

Polygon Zones

Ideal for complex, custom-shaped areas:

  • Detailed building interiors

  • Irregularly shaped districts

  • Precise zone boundaries

  • Custom map areas and routes


How to Use

Basic Thoughts

Client-side usage:

Server-side usage:

Parameters

  • target (server-side only): Player server ID (number), -1 for all players, or omit for all players

  • message: The text content of the thought (string)

  • duration: How long the thought displays in seconds (number, default: 5)

  • icon: Font Awesome icon class (string, default: "fas fa-comment-dots")

  • color: Hex color code for the icon and border (string, default: "#F2F2F2")


Using predefined types

Client-side usage:

Server-side usage:

Parameters

  • target (server-side only): Player server ID (number), -1 for all players, or omit for all players

  • message: The text content of the thought (string)

  • duration: How long the thought displays in seconds (number, default: 5)

Predefined types use the following icons and colors:

  • info: "fas fa-info-circle" with blue color (#2B78FC)

  • success: "fas fa-check-circle" with green color (#06CE6B)

  • warning: "fas fa-exclamation-triangle" with orange color (#FB8607)

  • error: "fas fa-times-circle" with red color (#fe2436)


Sequential Thoughts

Display multiple thoughts in sequence:

Client-side usage:

Server-side usage:

Parameters

  • target (server-side only): Player server ID (number), -1 for all players, or omit for all players

  • thoughts: Array of thought objects, each with message, duration, icon, and color

  • delay: Time between thoughts in milliseconds (default: 3s)

  • initialDelay: Optional delay before starting the sequence (default: 0s)


Dynamic Scenario and Location Triggers

The system allows you to dynamically create and remove thought triggers. This is especially useful for:

  • Scenario and location triggers that appear only during certain jobs, heists, or events

  • Temporary areas that should trigger thoughts for a limited time

  • Dynamic story elements that change based on server state

Note: Scenario and location trigger exports are available on both client-side and server-side:

  • Client-side: Registers triggers for the local player only

  • Server-side: Registers triggers for all connected players and automatically applies them to players who join later

Creating Custom Scenarios

Scenarios automatically trigger thoughts based on conditions you define. Each scenario includes a check function that determines when to trigger the thought.

Scenario Registration

Client-side usage:

Server-side usage:

Parameters

  • scenarioId: Unique identifier for this scenario (string) - choose a descriptive name

  • check: Function that returns true when the scenario should trigger. Use client-side functions for client registration, server-side functions for server registration.

  • message: The thought text (string or array for random selection)

  • duration: How long the thought displays (seconds)

  • icon: Font Awesome icon class

  • color: Hex color code for styling

  • cooldown: Minimum seconds between triggers

Creating Custom Locations

Location triggers create thoughts when players enter specific areas. The system supports both circular areas and complex polygon zones.

Circular Zones Registration

Define a radius around a point to create your zone where the thought will trigger:

Client-side usage:

Server-side usage:

Parameters

  • locationId: Unique identifier for this location (string) - choose a descriptive name like 'hospital_entrance' or 'police_station'

  • coords: Center point coordinates (vector3)

  • distance: Trigger radius in game units

  • message: The thought text (string or array)

  • duration: Display duration in seconds

  • icon: Font Awesome icon class

  • color: Hex color code

  • cooldown: Seconds between triggers

Polygon Zone Registration

For complex, custom-shaped areas, use polygon zones:

Client-side usage:

Server-side usage:

Parameters

  • zoneId: Unique identifier for this polygon zone (string) - choose a descriptive name like 'gang_territory' or 'event_area'

  • points: Array of vector3 coordinates defining the polygon shape

  • thickness: Vertical height of the zone (optional, default: 4.0)

  • message: The thought text (string or array)

  • duration: Display duration in seconds

  • icon: Font Awesome icon class

  • color: Hex color code

  • cooldown: Seconds between triggers

Note: Polygon zones require all Z coordinates to be on the same plane. The system automatically handles this requirement:

  • When mixed Z coordinates are detected (e.g., some points at 25.0, others at 30.0), the system automatically calculates the average Z value

Removing Custom Triggers

Clean up your custom scenarios and locations when they're no longer needed:

Client-side usage:

Server-side usage:

Parameters

  • id: The unique identifier of the trigger to remove (string, required)

    • For scenarios: The scenario ID you used when registering

    • For locations: The location ID you used when registering

    • For polygon zones: The zone ID you used when registering


Server-Wide Thoughts

You can send thoughts to all connected players:

From a Client Script

Parameters

  • message: The text content of the thought (string, required)

  • duration: How long the thought displays in seconds (number, optional, default: 5)

  • icon: Font Awesome icon class (string, optional, default: "fas fa-comment-dots")

  • color: Hex color code for the icon and border (string, optional, default: "#F2F2F2")

From a Server Script

Via Command

Parameters

  • message: The text content of the thought (string, required)

  • duration: How long the thought displays in seconds (string, optional, default: "5")

  • icon: Font Awesome icon class (string, optional, default: "fas fa-comment-dots")

  • color: Hex color code for the icon and border (string, optional, default: "#F2F2F2")

This command requires the group.admin permission.


Player-Specific Thoughts

You can send thoughts to specific players in several ways:

From a Client Script

Parameters

  • playerId: The target player's server ID (number, required)

  • message: The text content of the thought (string, required)

  • duration: How long the thought displays in seconds (number, optional, default: 5)

  • icon: Font Awesome icon class (string, optional, default: "fas fa-comment-dots")

  • color: Hex color code for the icon and border (string, optional, default: "#F2F2F2")

Via Command

Parameters

  • playerId: The target player's server ID (number, required)

  • message: The text content of the thought (string, required)

  • duration: How long the thought displays in seconds (string, optional, default: "5")

  • icon: Font Awesome icon class (string, optional, default: "fas fa-comment-dots")

  • color: Hex color code for the icon and border (string, optional, default: "#F2F2F2")

This command requires the group.admin permission.


Examples

Making NPCs More Immersive

Skill Check Feedback

Environmental Storytelling

Proximity

Group Coordination


Dependencies


Installation

  1. Ensure you have the required dependency

  2. Place the folder in your server's resources directory

  3. Add start mad-thoughts to your server.cfg

  4. Configure scenarios & locations in the config.lua file to match your server's needs


Configuration

The resource comes with a comprehensive config.lua file that includes:

  1. Ready-to-use templates for scenarios and locations

  2. Example circular and polygon locations for popular map areas

  3. Example scenarios for common situations (underwater, low health, weather conditions)

  4. Detailed comments explaining every configuration option

Thought Positioning

mad-thoughts supports two positioning modes for displaying thoughts:

  • Immersive (Default): Attaches thoughts to the player's head bone - more realistic for roleplay

  • Static: Places thoughts at a fixed position above the player - more predictable and easier to read

mad-thoughts config file

Debug

The resource includes debug visualizations to help you set up and test your location triggers:

Enable debug mode in your config.lua:

When debug mode is enabled, you'll see:

  • Visual indicators showing location trigger zones as red spheres

  • Location IDs displayed above each zone

This is particularly useful when:

  • Setting up new location triggers to ensure they're in the right place

  • Testing the detection radius of your locations

Debug prints are handled via ox_lib printsarrow-up-right.

Debug mode displaying locations

Support

Join our Discord communityarrow-up-right for support, regular updates and to request new features.

Escrow Protection

This resource is protected by FiveM's escrow system to safeguard against unauthorised distribution. The core functionality is secured while maintaining full customisability through the extensive configuration system.

Despite the security measures:

  • All configuration options remain fully editable.

  • The UI remains fully editable (html, css, js)

  • Server owners retain complete control over all settings.

  • No functionality is limited by the protection system.

This approach ensures you receive a premium, leak-protected resource while maintaining the freedom to customise it for your server's unique needs.

Last updated