The ultimate floating damage numbers plugin. Extremely customizable and performant. Full visibility control per combat scenario, damage colors, player customization, color themes, solo mode, database persistence, and much more.
FREE 72-HOUR TRIAL
VERSION 2.0.0 OUT NOW!
FULL CHANGELOG & PATCH NOTES: View
LEARN MORE: ark.kadev.io
DISCORD: discord.kadev.io
VIDEO DEMO:
[youtube]
COMMENTED CONFIG:
What It Does
Players see floating damage numbers when combat happens. You control the rules. They control their preferences.
The basics:
Visibility Control
You define who sees damage numbers for every combat scenario. The system uses a relationship-based matrix:
Relationships:
Player Customization
Players adjust their own experience without admin intervention:
All settings persist in the database if configured. Players don't lose preferences on restart.
Admins control which customizations are allowed and set defaults for new players.
Color Themes
Perspective-based coloring — what you see depends on your role in combat:
Hit Location Mode
Damage numbers appear at the exact impact point instead of entity center.
Solo Mode
For players who might prefer a simple experience. Filters damage to show only:
Master Switches
Disable entire damage categories without editing visibility rules:
Admin Commands
All commands work via chat, console, or RCON.
Database (Optional)
Store player preferences in MySQL/MariaDB:
The plugin works without a database — preferences just reset on restart.
Configuration
750+ lines of documented configuration in commented_config.jsonc. Every setting explained with examples, recommendations, and valid ranges.
No guesswork. No trial and error.
Technical
Support
FREE 72-HOUR TRIAL
VERSION 2.0.0 OUT NOW!
FULL CHANGELOG & PATCH NOTES: View
LEARN MORE: ark.kadev.io
DISCORD: discord.kadev.io
VIDEO DEMO:
[youtube]
COMMENTED CONFIG:
Code:
{
// ╔════════════════════════════════════════════════════════════════════════════╗
// ║ KDV_DamageNumbers v2.0 ║
// ║ Configuration Guide for Server Admins ║
// ╚════════════════════════════════════════════════════════════════════════════╝
//
//
// QUICK START:
// - This config and its settings can be reloaded in-game with the command: /dmg.config
// It'll allow you to test out changes very quickly without restarting the server.
//
// ════════════════════════════════════════════════════════════════════════════
"Authentication": {
"License": "",
// Only needed if you bought a HOST license (covers multiple servers)
// Each server needs a unique InstanceID like "server1", "server2", etc.
// Leave empty for single-server licenses
"InstanceID": ""
},
// ┌────────────────────────────────────────────────────────────────────────────┐
// │ DATABASE (OPTIONAL) │
// │ │
// │ Saves player preferences (on/off, theme, size, etc.) so they persist │
// │ after server restarts. If you skip this, players have to re-enable │
// │ damage numbers every time the server restarts. │
// │ │
// │ To disable: Delete this section OR leave DatabaseHost empty. │
// │ The plugin works fine without a database - player settings just │
// │ won't persist between server restarts. │
// └────────────────────────────────────────────────────────────────────────────┘
"Database": {
// Your MySQL/MariaDB server address (IP or hostname)
// Example: "localhost" or "192.168.1.100" or "db.myserver.com"
// Leave empty to disable database features
"DatabaseHost": "",
// MySQL port - 3306 is the default, only change if your DB uses a different port
"DatabasePort": 3306,
// Database username with read/write permissions
"DatabaseUser": "",
// Database password
"DatabasePass": "",
// Database name - the plugin will create its table automatically
// Example: "ark_plugins" or "my_server_db"
"DatabaseName": "",
// Optional: Prefix for the database table name
// Useful if you're sharing a database with other plugins/servers
// Example: "myserver_" would create table "myserver_KDV_DamageNumbers"
// Leave empty for default table name "KDV_DamageNumbers"
"TablePrefix": ""
},
// ┌────────────────────────────────────────────────────────────────────────────┐
// │ SERVER SETTINGS │
// │ │
// │ Basic settings that control how the plugin appears to players. │
// └────────────────────────────────────────────────────────────────────────────┘
"PluginSettings": {
// Your server's display name - shown in chat messages from the plugin
// Example: "[SERVER] Damage numbers enabled!"
"ServerName": "MY_SERVER",
// Server cluster grouping for database sharing
// If you run multiple servers (like a cluster) and want players to have
// the same settings across all of them, give them the same ServerGroup name.
// Example: All your Island, Ragnarok, and Abberation servers could use "MyCluster"
"ServerGroup": "DEFAULT",
// The chat command players type to turn damage numbers on/off
// MUST start with / and have NO SPACES
// Players will type this in chat to toggle their damage numbers
"DamageNumbersToggleCommand": "/dmg",
// The chat command for Solo Mode (only see your own damage, not tribe/allies)
// MUST start with / and have NO SPACES
"SoloModeCommand": "/dmg.solo",
// Should we tell players about damage numbers when they join?
// true = Send a chat message on login showing them how to use the plugin
// false = No message on join.
"SendStatusChatMessageOnPlayerJoin": true,
// Use a custom join message instead of the default?
// true = Use the message below (CustomStatusChatMessageContent)
// false = Use the plugin's default message
"UseCustomStatusChatMessage": false,
// Your custom join message (only used if UseCustomStatusChatMessage is true)
// Supports ARK's RichColor formatting for colored text
"CustomStatusChatMessageContent": "<RichColor Color=\"1,1,0,1\">Toggle command: '/dmg'.</>"
},
// ┌────────────────────────────────────────────────────────────────────────────┐
// │ DAMAGE NUMBER SETTINGS │
// │ │
// │ Controls how the floating damage numbers look and behave. │
// └────────────────────────────────────────────────────────────────────────────┘
"DamageNumberSettings": {
// ══════════════════════════════════════════════════════════════════════════
// GENERAL SETTINGS - The main controls most admins will want to adjust
// ══════════════════════════════════════════════════════════════════════════
"General": {
// DEFAULT STATE FOR NEW PLAYERS
// Should damage numbers be ON or OFF when a player first joins?
//
// true = Numbers are ON by default, players can turn them OFF
// false = Numbers are OFF by default, players must turn them ON
//
// RECOMMENDATION: Set to true.
"EnableDamageNumbersByDefault": true,
// HIT LOCATION ACCURACY
// Where should the damage number appear?
//
// true = At the exact spot where the hit landed (more realistic)
// false = At the center of the creature/player (less cluttered)
//
// EXAMPLE: If you shoot a Rex in the tail with this ON, the number
// appears near the tail. With it OFF, it appears at the Rex's center.
"EnableExactHitLocationDamageNumbers": true,
// VIEWING DISTANCE
// How far away (in foundations) can players see damage numbers?
//
// Lower = Less screen clutter, but you might miss distant hits
// Higher = See everything, but busy fights get messy
//
// RANGE: 0 to 1,000,000 (measured in foundation lengths, ~3 meters each)
// RECOMMENDATION: 10-50 for most servers
"MaxViewDistance": 25.0,
// JITTER / SPREAD
// How much should numbers spread out to avoid overlapping?
//
// 0 = All numbers stack on top of each other (hard to read)
// Higher = Numbers spread out more (easier to read rapid hits)
//
// NOTE: Jitter is calculated based on distance to the viewer already, so take this into account.
// RANGE: 0 to 500
// RECOMMENDATION: 50-250 for most servers
"JitterAmount": 100.0,
// DISPLAY TIME
// How long (in seconds) does each damage number stay on screen?
//
// Lower = Numbers disappear quickly, less clutter
// Higher = Numbers linger, easier to read but more cluttered
//
// RANGE: 0.1 to 25 seconds
// RECOMMENDATION: 0.8-1.5 for most servers
"DisplayDuration": 1.0,
// TEXT SIZE
// How big are the damage numbers?
//
// 1.0 = Normal size
// 0.5 = Half size (tiny)
// 2.0 = Double size (huge)
//
// RANGE: 0.1 to 5.0
// RECOMMENDATION: 1.0-1.5 for most servers
"TextSize": 1.0
},
// ══════════════════════════════════════════════════════════════════════════
// PLAYER CUSTOMIZATION - What can players change for themselves?
// ══════════════════════════════════════════════════════════════════════════
//
// Players can use chat commands to customize their own experience.
// These settings control WHAT they're allowed to change.
//
"PlayerCustomization": {
// Can players change their own text size with /dmg.size?
"AllowSizeOverride": true,
// Can players change how long numbers stay on screen with /dmg.lifetime?
"AllowLifetimeOverride": true,
// Can players change the jitter/spread with /dmg.jitter?
"AllowJitterOverride": true,
// SOLO MODE
// Can players enable "solo mode" with /dmg.solo?
//
// Solo mode means: "Only show ME damage that I personally deal or take"
// - No tribmate damage visible
// - No ally damage visible
// - Just YOUR hits and YOUR damage taken
//
// Useful for players who find tribal combat too cluttered
"AllowSoloMode": true,
// Should NEW players start in solo mode?
// true = New players only see their own damage until they turn this off
// false = New players see all damage according to visibility rules
"SoloModeByDefault": false,
// Can players toggle exact hit location mode with /dmg.hitloc?
"AllowExactHitLocationToggle": true,
// Should NEW players have exact hit location mode on or off?
"DefaultExactHitLocationEnabled": true,
// ────────────────────────────────────────────────────────────────────────
// DEFAULT OVERRIDES FOR NEW PLAYERS
// These set starting values for new players.
//
// Example: You want the server default to be size 1.0, but new players
// start at 1.5 so they notice the feature. Set DefaultSize to 1.5.
// ────────────────────────────────────────────────────────────────────────
// Starting text size for new players (null = use TextSize above)
// RANGE: 0.1 to 5.0
"DefaultSize": 1.0,
// Starting display time for new players (null = use DisplayDuration above)
// RANGE: 0.1 to 25
"DefaultLifetime": 1.0,
// Starting jitter for new players (null = use JitterAmount above)
// RANGE: 0 to 500
"DefaultJitter": 100.0
},
// ══════════════════════════════════════════════════════════════════════════
// DAMAGE SOURCE MASTER SWITCHES
// ══════════════════════════════════════════════════════════════════════════
//
// These are HARD ON/OFF switches. If you set one to false, that type of
// damage number is COMPLETELY disabled - visibility rules won't matter.
//
// Use these to completely disable certain damage number types.
//
"DamageSourceControl": {
// Show damage numbers when STRUCTURES deal or take damage?
// This includes turrets, walls, foundations, etc.
//
// true = Show structure-related damage numbers
// false = NEVER show structure damage
"EnableStructureDamageNumbers": true,
// Show damage numbers involving WILD CREATURES?
// This is damage to/from wild dinos, not tamed ones.
//
// true = Show wild creature damage
// false = NEVER show wild dino damage
"EnableWildDamageNumbers": true,
// Show damage when hitting HARVESTABLE OBJECTS?
// Rocks, trees, bushes, metal nodes, etc.
//
// true = Show damage when harvesting
// false = NEVER show harvesting damage
//
// RECOMMENDATION: Set to false - most players don't need to see
// "127" pop up every time they hit a rock, but hey, you've got the choice!
"EnableWildResourceStructureDamageNumbers": true
},
// ══════════════════════════════════════════════════════════════════════════
// VISIBILITY RULES - WHO SEES WHAT?
// ══════════════════════════════════════════════════════════════════════════
//
// This is the most complex part, the meat and potatoes of this plugin,
// but it's also the most powerful. It controls EXACTLY who sees
// damage numbers in every situation.
//
// ─────────────────────────────────────────────────────────────────────────
// KEY CONCEPTS:
// ─────────────────────────────────────────────────────────────────────────
//
// RELATIONSHIPS (who is fighting who):
// Enemy = Different tribes that are NOT allied
// Self = Same tribe as yourself (friendly fire)
// Ally = Different tribes that ARE allied
// PvE = Player/tame vs wild creature (or wild attacking you)
//
// CATEGORIES (what type of thing is dealing/taking damage):
// Survivor = A player character, OR a dino being ridden (rider counts as "Survivor")
// Creature = A tamed dino that is NOT being ridden
// Structure = Any player-built structure (walls, turrets, etc.)
// Wild = Wild creatures or harvestable objects (only used in PvE section)
//
// AUDIENCE FLAGS (who should see the damage number):
// ShowToAttacker = The person/rider dealing the damage
// ShowToAttackerTribe = Everyone in the attacker's tribe
// ShowToAttackerAllies = Everyone in tribes allied with the attacker
// ShowToDefender = The person/rider taking the damage
// ShowToDefenderTribe = Everyone in the defender's tribe
// ShowToDefenderAllies = Everyone in tribes allied with the defender
// ShowToNeutrals = Everyone else (not involved in the fight)
//
// ─────────────────────────────────────────────────────────────────────────
// HOW TO READ THE STRUCTURE:
// ─────────────────────────────────────────────────────────────────────────
//
// "Relationship": {
// "WhoGotHit": {
// "WhoDidTheHitting": {
// "ShowTo...": true/false
// }
// }
// }
//
// EXAMPLE: "When an ENEMY SURVIVOR is hit by a CREATURE, who sees it?"
//
// "Enemy": {
// "Survivor": { <-- The enemy survivor got hit
// "Creature": { <-- They were hit by a creature
// "ShowToAttacker": false, <-- Creature has no rider, so N/A
// "ShowToAttackerTribe": true, <-- Creature's tribe sees it
// ...
// }
// }
// }
//
// ─────────────────────────────────────────────────────────────────────────
// IMPORTANT NOTES:
// ─────────────────────────────────────────────────────────────────────────
//
// - If a flag is missing, it defaults to FALSE (hidden)
// NOTE: This means you can remove lines to clean up and simplify rules without breaking them.
//
// - "ShowToAttacker" only works when a PLAYER is doing the attacking
// (riding a dino counts - the rider is the "attacker")
//
// - "ShowToDefender" only works when a PLAYER is taking damage
// (riding a dino counts - the rider is the "defender")
// - For unridden tames, use `ShowToAttackerTribe` or `ShowToDefenderTribe`
//
// ═══════════════════════════════════════════════════════════════════════════
"VisibilityRules": {
// ────────────────────────────────────────────────────────────────────────
// PvE - PLAYER/TAME VS WILD CREATURES
// ────────────────────────────────────────────────────────────────────────
//
// Two situations:
// OutgoingToWild = You/your tames hitting wild creatures
// IncomingFromWild = Wild creatures hitting you/your tames/your base
//
"PvE": {
// When YOU attack WILD creatures (farming, hunting, etc.)
"OutgoingToWild": {
// When a PLAYER (or ridden dino) attacks a wild creature
// Common scenario: Shooting a wild Rex, farming with a pick
"Survivor": {
"ShowToAttacker": true, // You see your own damage
"ShowToAttackerTribe": true, // Your tribe sees your farming hits
"ShowToNeutrals": false // Randoms don't see your farming
},
// When your UNRIDDEN TAME attacks a wild creature
// Common scenario: Your wyvern on aggressive killing wild dinos
"Creature": {
"ShowToAttackerTribe": true, // Your tribe sees the tame's damage
"ShowToNeutrals": false // Others don't see it
},
// When your STRUCTURE attacks a wild creature
// Common scenario: Turret shooting a wild Rex
"Structure": {
"ShowToAttackerTribe": true, // Your tribe sees turret damage
"ShowToNeutrals": false // Others don't see it
}
},
// When WILD creatures attack YOU
"IncomingFromWild": {
// When a wild creature attacks YOU (player or ridden dino)
// Common scenario: Wild Raptor bites you
"Survivor": {
"ShowToDefender": true, // You see damage you're taking
"ShowToDefenderTribe": true, // Your tribe sees your incoming damage
"ShowToNeutrals": false // Others don't see it
},
// When a wild creature attacks your UNRIDDEN TAME
// Common scenario: Wild Carno attacks your parked Anky
"Creature": {
"ShowToDefenderTribe": true, // Your tribe sees the damage
"ShowToNeutrals": false // Others don't see it
},
// When a wild creature attacks your STRUCTURE
// Common scenario: Wild Giga smashing your walls
"Structure": {
"ShowToDefenderTribe": true, // Your tribe sees the damage
"ShowToNeutrals": false // Others don't see it
}
}
},
// ────────────────────────────────────────────────────────────────────────
// ENEMY - PVP COMBAT (DIFFERENT TRIBES, NOT ALLIED)
// ────────────────────────────────────────────────────────────────────────
//
// This is the main PvP section. Controls who sees damage during raids,
// fights, etc. between tribes that aren't allied.
//
"Enemy": {
// ── WHEN AN ENEMY SURVIVOR (player/rider) GETS HIT ──
"Survivor": {
// Enemy player hit by YOUR player/rider
// Scenario: You shoot an enemy player with a gun
"Survivor": {
"ShowToAttacker": true, // You see your damage
"ShowToDefender": true, // They see damage they're taking
"ShowToAttackerTribe": true, // Your tribe sees your hits
"ShowToDefenderTribe": true, // Their tribe sees they're hurt
"ShowToNeutrals": false // Randos don't see the fight
},
// Enemy player hit by YOUR unridden tame
// Scenario: Your aggressive Spino bites an enemy player
"Creature": {
"ShowToDefender": true, // Enemy sees damage taken
"ShowToDefenderTribe": true, // Their tribe sees them getting bitten
"ShowToAttackerTribe": true, // Your tribe sees your tame's damage
"ShowToNeutrals": false
},
// Enemy player hit by YOUR structure (turret)
// Scenario: Your turret shoots a raider
// NOTE: Many servers prefer this OFF to reduce turret spam
"Structure": {
"ShowToAttackerTribe": true, // Your tribe sees turret damage
"ShowToAttackerAllies": true,
"ShowToDefender": true, // Raider sees damage they take
"ShowToDefenderTribe": true, // Their tribe sees them getting shot
"ShowToDefenderAllies": true,
"ShowToNeutrals": false
}
},
// ── WHEN AN ENEMY CREATURE (their tame) GETS HIT ──
"Creature": {
// Enemy's tame hit by YOUR player/rider
// Scenario: You shoot an enemy's Wyvern
"Survivor": {
"ShowToAttacker": true, // You see your damage
"ShowToAttackerTribe": true, // Your tribe sees your hits
"ShowToDefenderTribe": true, // Enemy tribe sees their tame hurt
"ShowToNeutrals": false
},
// Enemy's tame hit by YOUR unridden tame
// Scenario: Your aggressive Rex attacks their parked Anky
"Creature": {
"ShowToAttackerTribe": true, // Your tribe sees the damage
"ShowToDefenderTribe": true, // Their tribe sees it too
"ShowToNeutrals": false
},
// Enemy's tame hit by YOUR structure
// Scenario: Your turret shoots their tame
"Structure": {
"ShowToAttackerTribe": true, // Your tribe sees turret damage
"ShowToDefenderTribe": true, // They see their tame getting hurt
"ShowToNeutrals": false
}
},
// ── WHEN AN ENEMY STRUCTURE GETS HIT (RAIDING) ──
"Structure": {
// Enemy structure hit by YOUR player/rider
// Scenario: You C4 their wall, rocket their turret
"Survivor": {
"ShowToAttacker": true, // You see your raid damage
"ShowToAttackerTribe": true, // Your tribe sees your raid damage
"ShowToDefenderTribe": true, // They see their base getting hit
"ShowToNeutrals": false
},
// Enemy structure hit by YOUR unridden tame
// Scenario: Your Giga chomps their wall
"Creature": {
"ShowToAttackerTribe": true, // Your tribe sees raid damage
"ShowToDefenderTribe": true, // They see their base getting hit
"ShowToNeutrals": false
},
// Enemy structure hit by YOUR structure
// Scenario: Your turret shoots their turret (rare)
"Structure": {
"ShowToAttackerTribe": true,
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
}
}
},
// ────────────────────────────────────────────────────────────────────────
// SELF - SAME TRIBE (FRIENDLY FIRE / ACCIDENTS)
// ────────────────────────────────────────────────────────────────────────
//
// When you accidentally (or purposely) damage your own tribe's stuff.
// Typically you want minimal visibility to avoid spam.
//
"Self": {
// ── WHEN A TRIBMATE GETS HIT BY ANOTHER TRIBMATE ──
"Survivor": {
// Tribmate hit by tribmate
// Scenario: You accidentally shoot your buddy
"Survivor": {
"ShowToAttacker": true, // You see you hit your friend
"ShowToDefender": true, // They see they got shot
"ShowToNeutrals": false // Others don't need to know
},
// Tribmate hit by tribe's tame
// Scenario: Your aggressive Rex bites a tribmate
"Creature": {
"ShowToDefender": true, // Victim sees damage
"ShowToDefenderTribe": true, // Tribe sees (friendly fire / accidents)
"ShowToNeutrals": false
},
// Tribmate hit by tribe's structure
// Scenario: Your turret shoots a tribmate (oops)
"Structure": {
"ShowToDefender": true, // Victim sees they're in turret range
"ShowToDefenderTribe": true, // Tribe sees (friendly fire / accidents)
"ShowToNeutrals": false
}
},
// ── WHEN A TRIBE TAME GETS HIT BY TRIBMATES ──
"Creature": {
// Tribe's tame hit by tribmate
// Scenario: You accidentally whip your own Anky
"Survivor": {
"ShowToAttacker": true, // You see you hit your tame
"ShowToAttackerTribe": true, // Tribe sees (so they know who's hurting tames)
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
}
},
// ── WHEN A TRIBE STRUCTURE GETS HIT BY TRIBMATES ──
"Structure": {
// Tribe's structure hit by tribmate
// Scenario: Demolishing your own walls
"Survivor": {
"ShowToAttacker": true, // You see demo damage
"ShowToAttackerTribe": true,
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
}
}
},
// ────────────────────────────────────────────────────────────────────────
// ALLY - ALLIED TRIBES (ACCIDENTS BETWEEN ALLIES)
// ────────────────────────────────────────────────────────────────────────
//
// Damage between tribes that have an alliance. Usually you want similar
// settings to "Self" since allies are basically extended tribe.
//
"Ally": {
// ── WHEN AN ALLIED PLAYER GETS HIT ──
"Survivor": {
// Allied player hit by you
"Survivor": {
"ShowToAttacker": true,
"ShowToDefender": true,
"ShowToNeutrals": false
},
// Allied player hit by your tame
"Creature": {
"ShowToDefender": true,
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
},
// Allied player hit by your structure
"Structure": {
"ShowToDefender": true,
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
}
},
// ── WHEN AN ALLIED TAME GETS HIT ──
"Creature": {
// Allied tame hit by you
"Survivor": {
"ShowToAttacker": true,
"ShowToAttackerTribe": true,
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
}
},
// ── WHEN AN ALLIED STRUCTURE GETS HIT ──
"Structure": {
// Allied structure hit by you
"Survivor": {
"ShowToAttacker": true,
"ShowToAttackerTribe": true,
"ShowToDefenderTribe": true,
"ShowToNeutrals": false
}
}
}
},
// ══════════════════════════════════════════════════════════════════════════
// COLOR THEMES
// ══════════════════════════════════════════════════════════════════════════
//
// Players can pick their favorite color theme with /dmg.toggle <themename>
//
// The FIRST theme in this list becomes the default for all players.
// You can add as many themes as you want - just copy/paste the format.
//
// ─────────────────────────────────────────────────────────────────────────
// AVAILABLE COLORS:
// ─────────────────────────────────────────────────────────────────────────
//
// Named colors: Red, Green, Blue, Yellow, Cyan, Magenta, Orange,
// Purple, White, Black, Gray, Pink, Lime, Teal
//
// Hex colors: "#FF0000" (red), "#00FF00" (green), "#0000FF" (blue)
//
// RGB format: "255,128,0" (orange), "128,0,255" (purple)
//
// ─────────────────────────────────────────────────────────────────────────
// HOW COLORS ARE CHOSEN:
// ─────────────────────────────────────────────────────────────────────────
//
// 1. FriendlyFire - Used when you hit your own tribmate/tame/structure
// 2. WildAttacker - Used when a WILD creature hits you
// 3. PerspectiveBased - Used for everything else (see below)
// 4. DefaultFallback - Used if nothing else matches
//
// PerspectiveBased colors depend on WHO IS LOOKING at the damage number:
//
// AttackerPerspective = Colors seen by the attacker and their tribe/allies
// DefenderPerspective = Colors seen by the defender and their tribe/allies
// NeutralPerspective = Colors seen by everyone else
//
// The keys inside each perspective describe WHAT TYPE attacked:
// Player = A player character did the damage
// Tribe = Your tribmate did the damage
// Ally = An allied player did the damage
// DinoRidden = Someone riding a dino did the damage
// DinoUnridden = An unridden tame did the damage
// Structure = A turret/trap did the damage
//
// ═══════════════════════════════════════════════════════════════════════════
"DamageNumberColorThemes": [
{
// THEME 1: "Default" - Classic green/red for attack/defend
"ThemeName": "Default",
// Color when you hit your own tribe's stuff
"FriendlyFire": "Green",
// Color when wild creatures damage you
"WildAttacker": "Yellow",
// Fallback color if nothing else matches
"DefaultFallback": "Yellow",
"PerspectiveBased": {
// Colors YOU see when YOU deal damage
"AttackerPerspective": {
"Player": "Green", // Your direct hits
"Tribe": "Green", // When tribmate hits (rare you see this)
"Ally": "Green", // When ally hits
"DinoRidden": "Green", // When you're riding and hit
"DinoUnridden": "Green", // Your tame hits
"Structure": "Green" // Your turret hits
},
// Colors YOU see when YOU take damage
"DefenderPerspective": {
"Player": "Red", // Enemy player hits you
"Tribe": "Red", // Tribmate hits you (accident)
"Ally": "Red", // Ally hits you (accident)
"DinoRidden": "Red", // Enemy rider hits you
"DinoUnridden": "Red", // Enemy tame hits you
"Structure": "Red" // Turret hits you
},
// Colors NEUTRALS see (not involved in the fight)
"NeutralPerspective": {
"Player": "Yellow",
"DinoRidden": "Yellow",
"DinoUnridden": "Yellow",
"Structure": "Yellow"
}
}
},
{
// THEME 2: "High_Contrast" - Cyan/Orange for colorblind-friendly viewing
"ThemeName": "High_Contrast",
"FriendlyFire": "Blue",
"WildAttacker": "Orange",
"DefaultFallback": "Yellow",
"PerspectiveBased": {
"AttackerPerspective": {
"Player": "Cyan",
"Tribe": "Cyan",
"Ally": "Cyan",
"DinoRidden": "Cyan",
"DinoUnridden": "Cyan",
"Structure": "Cyan"
},
"DefenderPerspective": {
"Player": "Orange",
"Tribe": "Orange",
"Ally": "Orange",
"DinoRidden": "Orange",
"DinoUnridden": "Orange",
"Structure": "Orange"
},
"NeutralPerspective": {
"Player": "Yellow",
"DinoRidden": "Yellow",
"DinoUnridden": "Yellow",
"Structure": "Yellow"
}
}
}
// ──────────────────────────────────────────────────────────────────────
// ADD MORE THEMES HERE
// ──────────────────────────────────────────────────────────────────────
// Just copy one of the themes above, change the ThemeName, and adjust
// the colors. Don't forget the comma after the } of the previous theme!
//
// Example themes you could add:
// - "Monochrome" - All white/gray for a clean look
// - "Neon" - Bright pink/lime for visibility
// - "Pastel" - Soft colors for less eye strain
// - "Rainbow" - Different color for each damage type
// ──────────────────────────────────────────────────────────────────────
]
}
}
What It Does
Players see floating damage numbers when combat happens. You control the rules. They control their preferences.
The basics:
- Damage numbers appear in combat (configurable colors, sizes, durations)
- Players toggle them on/off with a chat command
- Admins define visibility rules per combat scenario
- Optional database stores player preferences across restarts
- Players customize size, duration, spread, and hit location mode
- Solo mode filters to personal damage only
- Color themes with perspective-based coloring
- Relationship-based visibility matrix (PvE, Enemy, Self, Ally)
Visibility Control
You define who sees damage numbers for every combat scenario. The system uses a relationship-based matrix:
Relationships:
- PvE — Player/tame vs wild creatures
- Enemy — Different tribes, not allied
- Self — Same tribe (friendly fire)
- Ally — Allied tribes
- Survivor — Players and ridden dinos
- Creature — Unridden tames
- Structure — Turrets, walls, etc.
- ShowToAttacker / ShowToAttackerTribe / ShowToAttackerAllies
- ShowToDefender / ShowToDefenderTribe / ShowToDefenderAllies
- ShowToNeutrals
- "Both tribes see PvP damage, neutrals don't"
- "Only the attacker sees farming damage"
- "Turret damage visible to attackers only"
- ... and practically any other scenario you can think of.
Player Customization
Players adjust their own experience without admin intervention:
Code:
Command | What it does
--------------------------|------------------------------------------------
/dmg | Toggle on/off (or /dmg <theme> to set theme)
/dmg.size <value> | Text size (0.1–5.0)
/dmg.lifetime <value> | Display duration (0.1–25s)
/dmg.jitter <value> | Spread amount (0–500)
/dmg.solo | Solo mode — only your damage
/dmg.hitloc | Hit location mode — numbers appear where hit landed
/dmg.themes | List available color themes
Admins control which customizations are allowed and set defaults for new players.
Color Themes
Perspective-based coloring — what you see depends on your role in combat:
- Attacker perspective: Colors you see when dealing damage
- Defender perspective: Colors you see when taking damage
- Neutral perspective: Colors spectators see
- Default — Green (attack) / Red (defend)
- High_Contrast — Cyan / Orange (colorblind-friendly)
Hit Location Mode
Damage numbers appear at the exact impact point instead of entity center.
- Shoot a Rex in the tail → number appears at the tail
- Headshot → number appears at the head
Solo Mode
For players who might prefer a simple experience. Filters damage to show only:
- Damage you personally deal
- Damage you personally take
Master Switches
Disable entire damage categories without editing visibility rules:
- EnableStructureDamageNumbers — Turrets, walls, traps
- EnableWildDamageNumbers — Wild creatures
- EnableWildResourceStructureDamageNumbers — Rocks, trees, nodes
Admin Commands
Code:
Command | What it does
--------------------------|----------------------------------
/dmg.config | Reload configuration (hot reload)
/dmg.reload | Full plugin reload
/dmg.distance <value> | Set max view distance
Database (Optional)
Store player preferences in MySQL/MariaDB:
- On/off state
- Selected theme
- Size, lifetime, jitter overrides
- Solo mode and hit location mode
The plugin works without a database — preferences just reset on restart.
Configuration
750+ lines of documented configuration in commented_config.jsonc. Every setting explained with examples, recommendations, and valid ranges.
No guesswork. No trial and error.
Technical
- Built on the in-house fully custom C++ KADevARK framework
- ARK Server API v1.19+
- Optimized for high-player scenarios
- Safe config hot-reload during combat
- Automatic database schema migration on update
Support
- Documentation: ark.kadev.io/docs
- Website: ark.kadev.io
- Discord: discord.kadev.io
- Contact: ark.kadev.io/contact