πmad-thoughts
Turn π¬ notifications into π narratives.
Link
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 video to see mad-thoughts in action, or view the screenshots below.
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 Server Script (Recommended)
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
Ensure you have the required dependency
Place the folder in your server's resources directory
Add
start mad-thoughtsto your server.cfgConfigure scenarios & locations in the
config.luafile to match your server's needs
Configuration
The resource comes with a comprehensive config.lua file that includes:
Ready-to-use templates for scenarios and locations
Example circular and polygon locations for popular map areas
Example scenarios for common situations (underwater, low health, weather conditions)
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

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

Support
Join our Discord community 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














