Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How do I increase a stat every certain amount of levels?

I am trying to make it so every 10 levels the player's max stamina goes up by half.

Code:

--//Services
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local ServerStorage = game:GetService('ServerStorage')
local ServerScriptService = game:GetService('ServerScriptService')
local DataStoreService = game:GetService('DataStoreService')
local Players = game:GetService('Players')

--//Variables
local Level = DataStoreService:GetDataStore('Level')
local EXP = DataStoreService:GetDataStore('EXP')
local AEXP = DataStoreService:GetDataStore('AEXP')
local SkillPoints = DataStoreService:GetDataStore('SkillPoints')
local Stamina = DataStoreService:GetDataStore('Stamina')
local MaxStamina = DataStoreService:GetDataStore('MaxStamina')

--//Coding
function SaveData(DataName, PlayerId, Value)
	DataStoreService:GetDataStore(DataName):SetAsync(PlayerId, Value)
end

game.Players.PlayerAdded:Connect(function(Player)
	local PlayerStats = Instance.new('Folder')
	PlayerStats.Name = 'PlayerStats'
	PlayerStats.Parent = Player
	local PlayerLevel = Instance.new('IntValue')
	PlayerLevel.Value = Level:GetAsync(tostring(Player.UserId)) or 1
	PlayerLevel.Name = 'PlayerLevel'
	PlayerLevel.Parent = Player:WaitForChild('PlayerStats')
	local PlayerEXP = Instance.new('NumberValue')
	PlayerEXP.Value = EXP:GetAsync(tostring(Player.UserId)) or 0
	PlayerEXP.Name = 'PlayerEXP'
	PlayerEXP.Parent = Player:WaitForChild('PlayerStats')
	local PlayerEXPN = Instance.new('IntValue')
	PlayerEXPN.Value = AEXP:GetAsync(tostring(Player.UserId)) or 100
	PlayerEXPN.Name = 'EXPNeeded'
	PlayerEXPN.Parent = Player:WaitForChild('PlayerStats')
	local PlayerSkillPoints = Instance.new('IntValue')
	PlayerSkillPoints.Value = SkillPoints:GetAsync(tostring(Player.UserId)) or 0
	PlayerSkillPoints.Name = 'PlayerSkillPoints'
	PlayerSkillPoints.Parent = Player:WaitForChild('PlayerStats')
	local PlayerStamina = Instance.new('IntValue')
	PlayerStamina.Value = Stamina:GetAsync(tostring(Player.UserId)) or 100
	PlayerStamina.Name = 'PlayerStamina'
	PlayerStamina.Parent = Player:WaitForChild('PlayerStats')
	local PlayerMaxStamina = Instance.new('IntValue')
	PlayerMaxStamina.Value = MaxStamina:GetAsync(tostring(Player.UserId)) or 100
	PlayerMaxStamina.Name = 'PlayerMaxStamina'
	PlayerMaxStamina.Parent = Player:WaitForChild('PlayerStats')
	PlayerEXP.Changed:Connect(function()
		if Player.PlayerStats:WaitForChild('PlayerEXP').Value >= Player.PlayerStats:WaitForChild('EXPNeeded').Value then
			if Player.PlayerStats:WaitForChild('PlayerLevel').Value == 1000 then return end
			PlayerLevel.Value = PlayerLevel.Value + 1
			PlayerEXPN.Value = PlayerEXPN.Value + (PlayerEXPN.Value / 10)
			PlayerEXP.Value = 0
			PlayerSkillPoints.Value = PlayerSkillPoints.Value + 2
			PlayerMaxStamina.Value = PlayerMaxStamina.Value + (PlayerMaxStamina.Value / 2)
			PlayerStamina.Value = PlayerMaxStamina.Value
			SaveData('Level', Player.UserId, PlayerLevel.Value)
			SaveData('EXP', Player.UserId, PlayerEXP.Value)
			SaveData('AEXP', Player.UserId, PlayerEXPN.Value)
			SaveData('SkillPoints', Player.UserId, PlayerSkillPoints.Value)
			SaveData('PlayerStamina', Player.UserId, PlayerStamina.Value)
			SaveData('MaxStamina', Player.UserId, PlayerMaxStamina.Value)
		else
			SaveData('Level', Player.UserId, PlayerLevel.Value)
			SaveData('EXP', Player.UserId, PlayerEXP.Value)
			SaveData('AEXP', Player.UserId, PlayerEXPN.Value)
			SaveData('SkillPoints', Player.UserId, PlayerSkillPoints.Value)
			SaveData('PlayerStamina', Player.UserId, PlayerStamina.Value)
			SaveData('MaxStamina', Player.UserId, PlayerMaxStamina.Value)
		end
		SaveData('Level', Player.UserId, PlayerLevel.Value)
		SaveData('EXP', Player.UserId, PlayerEXP.Value)
		SaveData('AEXP', Player.UserId, PlayerEXPN.Value)
		SaveData('SkillPoints', Player.UserId, PlayerSkillPoints.Value)
		SaveData('PlayerStamina', Player.UserId, PlayerStamina.Value)
		SaveData('MaxStamina', Player.UserId, PlayerMaxStamina.Value)
	end)
end)

game.Players.PlayerRemoving:Connect(function(Player)
	SaveData('Level', Player.UserId, Player.PlayerStats.PlayerLevel.Value)
	SaveData('EXP', Player.UserId, Player.PlayerStats.PlayerEXP.Value)
	SaveData('AEXP', Player.UserId, Player.PlayerStats.PlayerEXPN.Value)
	SaveData('SkillPoints', Player.UserId, Player.PlayerStats.PlayerSkillPoints.Value)
	SaveData('PlayerStamina', Player.UserId, Player.PlayerStats.PlayerStamina.Value)
	SaveData('MaxStamina', Player.UserId, Player.PlayerStats.PlayerMaxStamina.Value)
end)

5 comments

0

Dude you don't need separate data stores!! It can all be done in one data store

0

Do you mean having them as children in 1 data store?

0

You can store multiple values inside a table then save the table to the data store.

0

Ah I see, makes sense.

0

I'm still confused on having stamina increase incrementally based on level.

1 answer

make max stamina equal Level divided by 10 multiplied by the current max stamina

1 comment

0

Do you mean like this: PlayerMaxStamina.Value = (PlayerLevel.Value / 10) * PlayerMaxStamina.Value

This discussion is preserved as it was. New answers, comments, and votes are closed.