I am creating a serverscript that lowers everyones hunger and thirst values, it uses ProfileService to handle stats and also save them, so when they leave they keep the amount of hunger/thirst they had.
It works fine in studio when testing it by myself, but when I run a test server the values it prints are all over the place, sometimes it says a players hunger is 2700 othertimes its like 190, and for reference the profileservice template has hunger and thirst set to 100 by default
I will leave my method of lowering stats and the script that runs the functions.
This is the manager that handles lowering stats
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Remotes = ReplicatedStorage.Remotes
local module = {}
module.Profiles = {}
function module.AdjustHunger(player: Player, amount: number)
local profile = module.Profiles[player]
if not profile then return end
profile.Data.PlayerStats.Hunger = profile.Data.PlayerStats.Hunger - amount
end
function module.AdjustThirst(player: Player, amount: number)
local profile = module.Profiles[player]
if not profile then return end
profile.Data.PlayerStats.Thirst = profile.Data.PlayerStats.Thirst - amount
end
return module
This is the Serverscript that depletes hunger and thirst, hunger every 3 seconds and thirst every 6 seconds
while HungerSystem and ThirstSystem do
for _, player in Players:GetPlayers() do
local profile = PlayerData.Profiles[player]
if not profile then continue end
local CurrentTime = tick()
if CurrentTime - HungerSystemTime >= HungerSettings.HungerDecreaseTime then
PlayerData.AdjustHunger(player, HungerSettings.HungerDecreaseAmount)
HandleStarvation(player, profile)
HungerSystemTime = CurrentTime
print(player.Name..profile.Data.PlayerStats.Hunger.." Hunger")
end
if CurrentTime - ThirstSystemTime >= ThirstSettings.ThirstDecreaseTime then
PlayerData.AdjustThirst(player, ThirstSettings.ThirstDecreaseAmount)
HandleDehydration(player, profile)
ThirstSystemTime = CurrentTime
print(player.Name..profile.Data.PlayerStats.Thirst.." Thirst")
end
end
task.wait(0.5)
end
If you need extra info or need me to provide more of my code I will, I’ve been debugging this for a while and tried other methods and haven’t figured out what’s going on so thank you to anybody who looks into this
I am also very new to ProfileService, I learnt it a few days ago. I was originally gonna make my own datastores but I heard profileservice is a better option.