Attribute Replication Issue - Unknow bug, or am I just stupid?

Hello everyone,

I’m encountering a perplexing issue with attribute replication in Roblox Studio, and I’m hoping to get some insights or solutions from the community. Here’s what’s happening:

The Setup:

I created a minimal test place to isolate the problem. The setup is as follows:

1. Server Script (ServerScriptService):

  • Sets a “LifeForce” attribute on the player when they join.
  • Decreases the “LifeForce” attribute by 5 every 2 seconds.
   -- ServerScriptService/TestAttrServer.lua
   local Players = game:GetService("Players")

   Players.PlayerAdded:Connect(function(player)
       print("SERVER: PlayerJoined =>", player.Name)

       player:SetAttribute("LifeForce", 100)
       print("SERVER: Set LifeForce=100 for", player.Name)

       -- Slowly decrement by 5 every 2 seconds
       task.spawn(function()
           for decrement = 5, 100, 5 do
               task.wait(2)
               local lf = player:GetAttribute("LifeForce") or 0
               lf = lf - 5
               if lf < 0 then lf = 0 end
               player:SetAttribute("LifeForce", lf)
               print("SERVER: Changed LifeForce =>", lf, "for", player.Name)
               if lf == 0 then
                   break
               end
           end
       end)
   end)

Client Script (StarterPlayerScripts):

  • Listens for changes to the “LifeForce” attribute.
  • Prints the new value to the Output whenever it changes.
   -- StarterPlayerScripts/TestAttrClient.lua
   local Players = game:GetService("Players")
   local localPlayer = Players.LocalPlayer

   local function onLifeForceChanged(attrName)
       if attrName == "LifeForce" then
           local lf = localPlayer:GetAttribute("LifeForce")
           print("CLIENT: LifeForce attribute changed =>", lf)
       end
   end

   localPlayer:GetAttributeChangedSignal("LifeForce"):Connect(onLifeForceChanged)

   local initial = localPlayer:GetAttribute("LifeForce")
   print("CLIENT: Minimal test loaded. Initial LifeForce:", initial)

The Problem:

  • When I run the game in Play mode, the server correctly sets and updates the “LifeForce” attribute.

  • The client initially sees the attribute set to 100, but it never detects subsequent changes (e.g., 95, 90, etc.).

  • This issue persists even in a completely new, blank place with only these two scripts.

What I Need to Achieve:

I need the client to reliably detect and print changes to the “LifeForce” attribute as they occur on the server. This is crucial for my game mechanics, where player attributes like health and stamina need to update in real-time on the client side.

Questions:

  • Has anyone experienced similar issues with attribute replication?

  • If so, how did you resolve it?

  1. Are there any known bugs or recent changes in Roblox Studio that might affect attribute replication?
  • Could there be any other settings or configurations that might interfere with attribute replication?

  • For example, any advanced security settings or beta features?

  • Is there a recommended way to ensure attributes replicate correctly?

Example from Game:

In my game, players have a “LifeForce” attribute that represents their stamina. It decreases as they sprint and regenerates over time. The client needs to update the UI to reflect these changes, but currently, it only sees the initial value and not the updates.

Any help or guidance would be greatly appreciated. Thank you!

Issue ended up being the “if” statement in local script. As soon I removed it, everything worked out!

I think you may have gotten it confused, when something is changed on the client, it cannot be seen on the server. So I would suggest actually changing the attribute on the server.

Ah I read it wrong as it seeing the change of the attribute on the server.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.