Stat Bars Configuration

Configure the player stats bars shown in the player box, the player names displayed above the sprites and the life bars of players, NPCs and enemies.

Stat bars customization

The bars are built from the stats of the game and styled with config rows, both managed from the administration panel.

  1. Log in to the administration panel at /reldens-admin (the path can be changed with the RELDENS_ADMIN_ROUTE_PATH environment variable).
  2. Open Users > Stats (/reldens-admin/stats). Each bar is linked to a stat through its Key (hp, mp, stamina, etc.), write down the keys of the stats that need a bar.
  3. To track a new stat click Create New and fill the Key (unique, the same value goes in the bars config), the Label, the Description and the Base Value, then click Save.
  4. Open Settings > Config (/reldens-admin/config), search players/barsProperties and edit the row. Its Value is a JSON object with one entry per stat key (enabled, label, activeColor and inactiveColor), see the examples below.
  5. For the floating life bars search lifeBar: the list shows the colors, size, position and visibility rows. Edit the Value of each row as needed.
  6. For the names above the players search ui/players and edit the showNames and nameText rows.
  7. Rows that are not installed (ui/lifeBar/showCurrentPlayer, ui/players/showCurrentPlayerName, ui/players/showNamesLimit) are added with Create New and the scope client.
  8. Restart the server and reload the game: the config is loaded when the server starts.
Admin Panel - Stats list with the stat keys used by the bars Admin Panel - Create stat form with the key, label, description and base value fields Admin Panel - Config list filtered by lifeBar with the life bar rows

Configuration reference

All the rows use the scope client:

  • players/barsProperties (json) - the bars of the player box, one entry per stat key. Installed with the HP and MP bars.
  • ui/lifeBar/... - the floating life bars: enabled, fillStyle, lineStyle, width, height, top, fixedPosition, x, y, responsiveX, responsiveY and the visibility switches.
  • ui/players/... - the player names: showNames, showCurrentPlayerName, showNamesLimit and the nameText style rows.
  • actions/skills/affectedProperty (string, hp) - the stat tracked by the life bars, it is also the stat that kills players and enemies (see Bar Property below).

The defaults and the meaning of every row are listed in the sections below.

Code integration (advanced)

Player Stats Bars

The player stats bars system is a generic client-side feature that displays visual bars for any configured player stat in the player box UI.

Configuration Path

  • Scope: client
  • Path: players/barsProperties
  • Type: JSON (type 4)

Configuration Structure

The configuration is a JSON object where each key represents a stat key, and each value contains the bar properties for that stat:

{
    "statKey": {
        "enabled": true,
        "label": "Display Label",
        "activeColor": "#hexcolor",
        "inactiveColor": "#hexcolor"
    }
}

Properties

Each stat bar configuration requires the following properties:

  • enabled (boolean): whether the bar should be displayed.
  • label (string): the display label shown above the bar.
  • activeColor (string): hex color for the filled portion of the bar.
  • inactiveColor (string): hex color for the empty / background portion of the bar.

All four properties are required. If any property is missing, the bar will not be displayed.

Activation Rules

  • If the config does not exist or is empty: the bars system is NOT activated.
  • If the config exists: bars are activated ONLY for the stats with all the required properties.
  • Each stat is validated independently via the BarProperties model.
  • Only bars with ready === true are rendered.

Database Configuration

Development migration, from migrations/development/beta.39.7-sql-update.sql:

INSERT INTO `config` (`scope`, `path`, `value`, `type`) VALUES
('client', 'players/barsProperties', '{"hp":{"enabled":true,"label":"HP","activeColor":"#d53434","inactiveColor":"#330000"},"mp":{"enabled":true,"label":"MP","activeColor":"#5959fb","inactiveColor":"#000033"}}', 4);

Production migration: migrations/production/reldens-basic-config-v4.0.0.sql seeds the same row (scope client, path players/barsProperties, type 4) with the same HP and MP value.

Examples

HP and MP bars:

{
    "hp": {
        "enabled": true,
        "label": "HP",
        "activeColor": "#ff0000",
        "inactiveColor": "#330000"
    },
    "mp": {
        "enabled": true,
        "label": "MP",
        "activeColor": "#0000ff",
        "inactiveColor": "#000033"
    }
}

Stamina bar:

{
    "stamina": {
        "enabled": true,
        "label": "Stamina",
        "activeColor": "#00ff00",
        "inactiveColor": "#003300"
    }
}

Multiple stats:

{
    "hp": {
        "enabled": true,
        "label": "HP",
        "activeColor": "#ff0000",
        "inactiveColor": "#330000"
    },
    "mp": {
        "enabled": true,
        "label": "MP",
        "activeColor": "#0000ff",
        "inactiveColor": "#000033"
    },
    "stamina": {
        "enabled": true,
        "label": "STA",
        "activeColor": "#ffff00",
        "inactiveColor": "#333300"
    },
    "atk": {
        "enabled": false,
        "label": "ATK",
        "activeColor": "#ff6600",
        "inactiveColor": "#331100"
    }
}

In this example, the HP, MP and Stamina bars will be displayed. The ATK bar will not be displayed because of enabled: false.

Disabling Bars

To disable a specific stat bar, set enabled: false:

{
    "hp": {
        "enabled": false,
        "label": "HP",
        "activeColor": "#ff0000",
        "inactiveColor": "#330000"
    }
}

To disable the entire bars system, remove the config or set it to an empty object {}.

Technical Notes

  • The stat key in the config must match the stat key in the database stats table.
  • Bars are rendered in the order they appear in the configuration object.
  • Bar values are calculated from message.stats[statKey] (current) and message.statsBase[statKey] (max).
  • Percentage calculation: (currentValue / maxValue) * 100.
  • Bars update automatically when the stats change, via the reldens.playerStatsUpdateAfter event.
  • Bars are rendered inside #player-stats-bars-wrapper within the #ui-player-extras container.

Common Patterns

  • RPG with mana: HP (red) and MP (blue) bars for a classic RPG feel.
  • Stamina-based game: a stamina (yellow / green) bar for action games. Hide the current player floating life bar (see Life Bar Configuration below) if you want all the health info inside the player box.
  • Multi-resource character: add as many stats as your game requires, each one gets its own bar. Use distinct color schemes per resource (red for HP, blue for MP, green for stamina, yellow for energy, etc.).

Player Names Configuration

The player names system displays character names above the sprites. Names can be configured separately for the current player and the other players.

Configuration Path

  • Scope: client
  • Path: ui/players
  • Type: multiple (boolean, object)

Visibility Controls

  • showCurrentPlayerName (type 3 - boolean): show the name of the current player.
    • Default: hidden (no config row is seeded, the value resolves to false).
    • Database: client/ui/players/showCurrentPlayerName (not included in the migrations, must be added manually).
    • When disabled, the current player's name will not be displayed.
    • Useful when using alternative UI systems or for a cleaner visual experience.
  • showNames (type 3 - boolean): show the names of all the other players.
    • Default: 1 (enabled).
    • Database: client/ui/players/showNames.
    • Controls the name visibility for the other players (not the current player).
  • showNamesLimit (type 2 - number): maximum name length before truncation.
    • Default: 10 (code fallback, no config row is seeded).
    • Database: client/ui/players/showNamesLimit (not included in the migrations, must be added manually).
    • Names longer than this value will be truncated with ....

Visual Appearance

Names are styled using the nameText configuration object with the following properties:

  • align (type 1 - string): text alignment. Default: center. Database: client/ui/players/nameText/align.
  • depth (type 2 - number): rendering depth / z-index. Default: 200000. Database: client/ui/players/nameText/depth.
  • fill (type 1 - string): text color. Default: #ffffff. Database: client/ui/players/nameText/fill.
  • fontFamily (type 1 - string): font family. Default: Verdana, Geneva, sans-serif. Database: client/ui/players/nameText/fontFamily.
  • fontSize (type 1 - string): font size. Default: 12px. Database: client/ui/players/nameText/fontSize.
  • height (type 2 - number): vertical offset from the sprite. Default: -90. Database: client/ui/players/nameText/height.
  • shadowBlur (type 2 - number): shadow blur radius. Default: 5. Database: client/ui/players/nameText/shadowBlur.
  • shadowColor (type 1 - string): shadow color. Default: rgba(0,0,0,0.7). Database: client/ui/players/nameText/shadowColor.
  • shadowX (type 2 - number): shadow X offset. Default: 5. Database: client/ui/players/nameText/shadowX.
  • shadowY (type 2 - number): shadow Y offset. Default: 5. Database: client/ui/players/nameText/shadowY.
  • stroke (type 1 - string): text stroke color. Default: #000000. Database: client/ui/players/nameText/stroke.
  • strokeThickness (type 2 - number): stroke thickness. Default: 4. Database: client/ui/players/nameText/strokeThickness.

Database Configuration

Development migration, add to your migrations/development/[version]-sql-update.sql:

INSERT INTO `config` (`scope`, `path`, `value`, `type`) VALUES
('client', 'ui/players/showCurrentPlayerName', '0', 3);

Production migration, existing configurations seeded by migrations/production/reldens-basic-config-v4.0.0.sql (scope, path, value, type):

('client', 'ui/players/nameText/align', 'center', 1),
('client', 'ui/players/nameText/depth', '200000', 2),
('client', 'ui/players/nameText/fill', '#ffffff', 1),
('client', 'ui/players/nameText/fontFamily', 'Verdana, Geneva, sans-serif', 1),
('client', 'ui/players/nameText/fontSize', '12px', 1),
('client', 'ui/players/nameText/height', '-90', 2),
('client', 'ui/players/nameText/shadowBlur', '5', 2),
('client', 'ui/players/nameText/shadowColor', 'rgba(0,0,0,0.7)', 1),
('client', 'ui/players/nameText/shadowX', '5', 2),
('client', 'ui/players/nameText/shadowY', '5', 2),
('client', 'ui/players/nameText/stroke', '#000000', 1),
('client', 'ui/players/nameText/strokeThickness', '4', 2),
('client', 'ui/players/nameText/textLength', '4', 2),
('client', 'ui/players/showNames', '1', 3),

New configuration to add (omit the id column, it is auto-increment):

('client', 'ui/players/showCurrentPlayerName', '0', 3),

Configuration Examples

Example 1: hide the current player name. The showCurrentPlayerName row is not seeded, so an UPDATE changes 0 rows. Insert it or update it when it exists (the config table has the scope_path unique key):

INSERT INTO `config` (`scope`, `path`, `value`, `type`) VALUES ('client', 'ui/players/showCurrentPlayerName', '0', 3)
ON DUPLICATE KEY UPDATE `value` = '0';

The current player's name will not be displayed. Useful when using alternative UI systems.

Example 2: hide all the other players' names.

UPDATE `config` SET `value` = '0' WHERE `scope` = 'client' AND `path` = 'ui/players/showNames';

The other players' names will not be displayed. The current player's name visibility depends on showCurrentPlayerName.

Example 3: show both the current player and the other players' names.

INSERT INTO `config` (`scope`, `path`, `value`, `type`) VALUES ('client', 'ui/players/showCurrentPlayerName', '1', 3)
ON DUPLICATE KEY UPDATE `value` = '1';
UPDATE `config` SET `value` = '1' WHERE `scope` = 'client' AND `path` = 'ui/players/showNames';

All the players' names will be displayed.

Example 4: customize the name text style.

UPDATE `config` SET `value` = '#00ff00' WHERE `scope` = 'client' AND `path` = 'ui/players/nameText/fill';
UPDATE `config` SET `value` = '16px' WHERE `scope` = 'client' AND `path` = 'ui/players/nameText/fontSize';
UPDATE `config` SET `value` = '6' WHERE `scope` = 'client' AND `path` = 'ui/players/nameText/strokeThickness';

Creates green player names with a 16px font size and a thicker stroke.

Visibility Behavior

  • showCurrentPlayerName=0, showNames=0
    • Current player: name hidden
    • Other players: names hidden
  • showCurrentPlayerName=0, showNames=1
    • Current player: name hidden
    • Other players: names shown
  • showCurrentPlayerName=1, showNames=0
    • Current player: name shown
    • Other players: names hidden
  • showCurrentPlayerName=1, showNames=1
    • Current player: name shown
    • Other players: names shown

Implementation Details

Files:

  • PlayerEngine: lib/users/client/player-engine.js - main player management class.
  • SpriteTextFactory: lib/game/client/engine/sprite-text-factory.js - text rendering utility.

Key methods:

  • showPlayerName(id): displays the name above the player sprite, checks the configuration.
  • updateNamePosition(playerSprite): updates the name position during movement.
  • applyNameLengthLimit(showName): truncates long names.
  • removePlayer(key): destroys the name sprite (when the player has one) and the player sprite, so players without names (for example with showNames set to 0) are also removed.

Call sites:

  • PlayerEngine.addPlayer(): calls showPlayerName(id) before emitting reldens.playerEngineAddPlayer.
  • PlayerEngine.updatePlayerState(): calls updateNamePosition(playerSprite) after emitting reldens.runPlayerAnimation.

Life Bar Configuration

The life bar system displays health bars for the current player, other players, NPCs and enemies. Life bars are rendered using Phaser graphics and can be positioned either fixed on the UI scene or floating above the sprites.

Configuration Path

  • Scope: client
  • Path: ui/lifeBar
  • Type: multiple (boolean, number, string)

Core Settings

  • enabled (type 3 - boolean): enable or disable the entire lifebar system. Default: 1 (enabled). Database: client/ui/lifeBar/enabled.

Visual Appearance

  • fillStyle (type 1 - string): hex color for the filled portion of the bar.
    • Default: 0xff0000 (red).
    • Database: client/ui/lifeBar/fillStyle.
    • Format: hex color without the # prefix (e.g. 0xff0000).
  • lineStyle (type 1 - string): hex color for the bar border.
    • Default: 0xffffff (white).
    • Database: client/ui/lifeBar/lineStyle.
    • Format: hex color without the # prefix (e.g. 0xffffff).
  • height (type 2 - number): height of the bar in pixels. Default: 5. Database: client/ui/lifeBar/height.
  • width (type 2 - number): width of the bar in pixels. Default: 50. Database: client/ui/lifeBar/width.
  • top (type 2 - number): distance above the sprite in pixels. Default: 5. Database: client/ui/lifeBar/top.

Positioning

The lifebar system supports two positioning modes: fixed and floating.

Fixed position:

  • fixedPosition (type 3 - boolean): the current player's bar appears at a fixed position on the UI scene.
    • Default: 0 (floating above the sprite).
    • Database: client/ui/lifeBar/fixedPosition.
    • When enabled, uses the x, y, responsiveX and responsiveY properties.
  • x (type 2 - number): fixed X position in pixels.
    • Default: 5.
    • Database: client/ui/lifeBar/x.
    • Used when fixedPosition: 1 and the responsive mode is disabled.
  • y (type 2 - number): fixed Y position in pixels.
    • Default: 12.
    • Database: client/ui/lifeBar/y.
    • Used when fixedPosition: 1 and the responsive mode is disabled.

Responsive positioning:

  • responsiveX (type 2 - number): responsive X position as a percentage of the screen width.
    • Default: 1.
    • Database: client/ui/lifeBar/responsiveX.
    • Calculation: uiX = responsiveX * screenWidth / 100.
    • Used when fixedPosition: 1 and client/ui/screen/responsive is enabled.
  • responsiveY (type 2 - number): responsive Y position as a percentage of the screen height.
    • Default: 24.
    • Database: client/ui/lifeBar/responsiveY.
    • Calculation: uiY = responsiveY * screenHeight / 100.
    • Used when fixedPosition: 1 and client/ui/screen/responsive is enabled.

Visibility Controls

  • showCurrentPlayer (type 3 - boolean): show the lifebar of the current player.
    • Default: hidden (no config row is seeded, the value resolves to undefined).
    • Database: client/ui/lifeBar/showCurrentPlayer (not included in the migrations, must be added manually).
    • When disabled, the current player's lifebar will not be displayed.
    • Useful when using alternative UI systems like the player stats bars.
  • showAllPlayers (type 3 - boolean): show the lifebars of all the other players.
    • Default: 0 (hidden).
    • Database: client/ui/lifeBar/showAllPlayers.
    • When disabled, the other players' bars only show via showOnClick.
  • showEnemies (type 3 - boolean): show the lifebars of NPCs and enemies.
    • Default: 1 (enabled).
    • Database: client/ui/lifeBar/showEnemies.
    • Controls all the objects (NPCs / enemies). When disabled, the objects bars are never shown (not even on click).
    • When showOnClick is also enabled, only the clicked target bar is shown.
  • showOnClick (type 3 - boolean): show the lifebars only when the target is clicked.
    • Default: 1 (enabled).
    • Database: client/ui/lifeBar/showOnClick.
    • Other players: applies when showAllPlayers is disabled, the clicked player bar is shown.
    • NPCs / enemies: requires showEnemies enabled, and restricts their bars to the clicked target (ObjectsHandler.isValidMessage() and ObjectsHandler.isValidToDraw() in lib/users/client/objects-handler.js).

Database Configuration

Development migration: all the lifeBar rows except showCurrentPlayer are already seeded, and the config table has the scope_path unique key, so inserting them again fails. Add only the missing row to your migrations/development/[version]-sql-update.sql:

INSERT INTO `config` (`scope`, `path`, `value`, `type`) VALUES
('client', 'ui/lifeBar/showCurrentPlayer', '0', 3);

Production migration, seeded by migrations/production/reldens-basic-config-v4.0.0.sql (scope, path, value, type), note there is no showCurrentPlayer row:

('client', 'ui/lifeBar/enabled', '1', 3),
('client', 'ui/lifeBar/fillStyle', '0xff0000', 1),
('client', 'ui/lifeBar/fixedPosition', '0', 3),
('client', 'ui/lifeBar/height', '5', 2),
('client', 'ui/lifeBar/lineStyle', '0xffffff', 1),
('client', 'ui/lifeBar/responsiveX', '1', 2),
('client', 'ui/lifeBar/responsiveY', '24', 2),
('client', 'ui/lifeBar/showAllPlayers', '0', 3),
('client', 'ui/lifeBar/showEnemies', '1', 3),
('client', 'ui/lifeBar/showOnClick', '1', 3),
('client', 'ui/lifeBar/top', '5', 2),
('client', 'ui/lifeBar/width', '50', 2),
('client', 'ui/lifeBar/x', '5', 2),
('client', 'ui/lifeBar/y', '12', 2),

Configuration Examples

Example 1: fixed position in the top-left corner.

UPDATE `config` SET `value` = '1' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/fixedPosition';
UPDATE `config` SET `value` = '5' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/x';
UPDATE `config` SET `value` = '5' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/y';

This positions the current player's lifebar at coordinates (5, 5) on the UI scene, fixed regardless of the player movement.

Example 2: responsive fixed position.

UPDATE `config` SET `value` = '1' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/fixedPosition';
UPDATE `config` SET `value` = '50' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/responsiveX';
UPDATE `config` SET `value` = '5' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/responsiveY';

This positions the current player's lifebar at 50% of the screen width and 5% of the screen height, adapting to different resolutions.

Example 3: show all the players' lifebars.

UPDATE `config` SET `value` = '1' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/showAllPlayers';

All the other players' lifebars are always visible, floating above their sprites.

Example 4: hide the enemy lifebars.

UPDATE `config` SET `value` = '0' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/showEnemies';

NPCs and enemies will not show lifebars at all.

Example 5: hide the current player lifebar. The showCurrentPlayer row is not seeded, so an UPDATE changes 0 rows:

INSERT INTO `config` (`scope`, `path`, `value`, `type`) VALUES ('client', 'ui/lifeBar/showCurrentPlayer', '0', 3)
ON DUPLICATE KEY UPDATE `value` = '0';

The current player's lifebar will not be displayed. Useful when using alternative UI systems like the player stats bars.

Example 6: always show the bars (no click required).

UPDATE `config` SET `value` = '0' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/showOnClick';
UPDATE `config` SET `value` = '1' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/showAllPlayers';
UPDATE `config` SET `value` = '1' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/showEnemies';

Other players and enemies will always show their lifebars without requiring a click. The current player bar still depends on showCurrentPlayer.

Example 7: custom colors and dimensions.

UPDATE `config` SET `value` = '0x00ff00' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/fillStyle';
UPDATE `config` SET `value` = '0x000000' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/lineStyle';
UPDATE `config` SET `value` = '80' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/width';
UPDATE `config` SET `value` = '8' WHERE `scope` = 'client' AND `path` = 'ui/lifeBar/height';

Creates a green lifebar with a black border, 80 pixels wide and 8 pixels tall.

Visibility Behavior

The current player's lifebar visibility is controlled by the showCurrentPlayer configuration.

  • showCurrentPlayer=0, showAllPlayers=0, showEnemies=0, showOnClick=0
    • Current player: never
    • Other players: never
    • NPCs / enemies: never
  • showCurrentPlayer=0, showAllPlayers=0, showEnemies=0, showOnClick=1
    • Current player: never
    • Other players: on click
    • NPCs / enemies: never
  • showCurrentPlayer=0, showAllPlayers=0, showEnemies=1, showOnClick=1
    • Current player: never
    • Other players: on click
    • NPCs / enemies: on click
  • showCurrentPlayer=1, showAllPlayers=0, showEnemies=0, showOnClick=0
    • Current player: always
    • Other players: never
    • NPCs / enemies: never
  • showCurrentPlayer=1, showAllPlayers=0, showEnemies=1, showOnClick=1
    • Current player: always
    • Other players: on click
    • NPCs / enemies: on click
  • showCurrentPlayer=1, showAllPlayers=1, showEnemies=0, showOnClick=0
    • Current player: always
    • Other players: always
    • NPCs / enemies: never
  • showCurrentPlayer=1, showAllPlayers=1, showEnemies=1, showOnClick=0
    • Current player: always
    • Other players: always
    • NPCs / enemies: always

Positioning Behavior

Floating mode (fixedPosition: 0):

  • The current player's bar floats above the sprite.
  • The other players' bars float above their sprites.
  • The NPCs / enemies bars float above their sprites.
  • Bars automatically update their position as the sprites move.
  • Position calculation: (spriteX - barWidth/2, spriteY - barHeight - top + ownerTop/2), where ownerTop is player.topOff - client/players/size/height.

Fixed mode (fixedPosition: 1):

  • Current player only: the bar appears at a fixed position on the UI scene.
  • Other players and NPCs / enemies always float above the sprites.
  • The fixed position uses either:
    • Absolute coordinates: the x, y properties (when responsive is disabled).
    • Responsive coordinates: the responsiveX, responsiveY properties (when client/ui/screen/responsive is enabled).
  • The bar position updates on screen resize.

Implementation Details

Files:

  • LifebarUi: lib/users/client/lifebar-ui.js - main lifebar management class.
  • ObjectsHandler: lib/users/client/objects-handler.js - handles the NPCs / enemies lifebars.
  • Plugin: lib/users/client/plugin.js - initializes the lifebar system.

Events:

  • reldens.playerStatsUpdateAfter: updates the current player's lifebar.
  • reldens.joinedRoom: sets up the message listeners for the lifebar updates.
  • reldens.runPlayerAnimation: redraws the player lifebar.
  • reldens.updateGameSizeBefore: recalculates the fixed position on resize.
  • reldens.playersOnRemove: removes the player lifebar on disconnect.
  • reldens.playerEngineAddPlayer: processes the queued lifebar messages.
  • reldens.createAnimationAfter: draws the object lifebars.
  • reldens.objectBodyChanged: updates the object lifebar.
  • reldens.gameEngineShowTarget: shows the target lifebar on click.
  • reldens.gameEngineClearTarget: hides the previous target lifebar.

Bar Property

The lifebar tracks the stat configured at client/actions/skills/affectedProperty, which defaults to hp. To change the tracked stat:

UPDATE `config` SET `value` = 'mp' WHERE `scope` = 'client' AND `path` = 'actions/skills/affectedProperty';

This would make the lifebars track magic points instead of health points.

Warning: this path is not only used by the lifebars. The server uses the same stat as the death and revive stat for players and enemies (updateTargetClient() and revivePlayer() in lib/actions/server/battle.js, lib/actions/server/pve.js, handlePlayerLastState() in lib/rooms/server/scene.js, lib/objects/server/object/type/enemy-object.js), and lib/users/server/plugin.js sends the lifebar updates with it. Changing it also changes which stat kills players and enemies.

Related Documentation

Go Up