I can show you my leaderstats if you want.
leaderstats
-- Services
local RS = game:GetService("ReplicatedStorage")
local TS = game:GetService("TweenService")
local PLRS = game:GetService("Players")
local SSS = game:GetService("ServerScriptService")
local SS = game:GetService("ServerStorage")
local LIGHTNING = game:GetService("Lighting")
local SG = game:GetService("StarterGui")
local SP = game:GetService("StarterPack")
----------------------------------------------
-- DataStore Variables
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("DataStore")
local ToolDataStore = DataStoreService:GetDataStore("ToolDataStore")
local AvatarDataStore = DataStoreService:GetDataStore("AvatarDataStore")
----------------------------------------------
-- Variables
local TablePrinterModule = require(3148021300)
local Pets = game:GetService("ReplicatedStorage"):WaitForChild("Pets")
local PlayerPets = workspace:WaitForChild("Pets")
local Weapons = SS:WaitForChild("Weapons")
local CharacterCustomizationFolder = RS:WaitForChild("CharacterCustomization")
local Accessories = CharacterCustomizationFolder:WaitForChild("Accessories")
local HealthRemote = RS:WaitForChild("AttributeRemotes"):WaitForChild("AddHealth")
local SpeedRemote = RS:WaitForChild("AttributeRemotes"):WaitForChild("AddSpeed")
local AttackRemote = RS:WaitForChild("AttributeRemotes"):WaitForChild("AddAttack")
local MaxStaminaRemote = RS:WaitForChild("AttributeRemotes"):WaitForChild("AddMaxStamina")
local ResetRemote = RS:WaitForChild("AttributeRemotes"):WaitForChild("Reset")
----------------------------------------------
-- Attribute Variables
local StarterSpeed = game:GetService("ReplicatedStorage"):WaitForChild("CurrentWalkSpeed").Value
local StarterHealth = 100
local StarterJumpPower = 50
local starterMaxStamina = 100
local spdPerPoint = 0.5
local hpPerPoint = 10
local jumpPowerPerPoint = 1
local maxStaminaPerPoint = 10
local speedCap = 80
local jumpCap = 120
local HealthIncrementPerLevel = 5
local AttributeIncrement = 1
----------------------------------------------
-- Cancel Quest
local remote = game:GetService("ReplicatedStorage"):WaitForChild("QuestRemote")
remote.OnServerEvent:Connect(function(player, val)
local questInfoF = player:WaitForChild("QuestInformation")
if val == "CancelQuest" then
for i, v in pairs(questInfoF:GetChildren()) do
if v.className == "StringValue" then
v.Value = "Default"
elseif v.className == "IntValue" then
v.Value = 0
end
end
end
end)
----------------------------------------------------------------------------------------------
game.Players.PlayerAdded:Connect(function(player)
-- Music
player.PlayerGui:WaitForChild("GameMusic"):Play()
-----------------
-- Variables
local playerID = player.UserId
local character = player.Character
local playerGui = player.PlayerGui
local backpack = player:WaitForChild("Backpack")
local starterGear = player:WaitForChild("StarterGear")
-----------------
-- Functions
--[[ local function LoadPet(petValue)
wait(6)
if petValue.Value ~= "" then
if Pets:FindFirstChild(petValue.Value) then
local pet = Pets:FindFirstChild(petValue.Value):Clone()
local petPosition = playerGui:WaitForChild("PetShop"):WaitForChild("Frame"):WaitForChild("ScrollingFrame"):FindFirstChild(petValue.Value):FindFirstChild("Buy"):FindFirstChild("PetPosition").Value
pet.Name = player.Name
pet.Parent = PlayerPets
local function Follow(pet)
local MovementAnimationTrack = pet:FindFirstChild("AnimationController"):FindFirstChild("Animator"):LoadAnimation(pet:FindFirstChild("Animations"):FindFirstChild("Movement"))
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")
local BodyPosition = Instance.new("BodyPosition", pet:WaitForChild("Pet"))
BodyPosition.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
local BodyGyro = Instance.new("BodyGyro", pet:WaitForChild("Pet"))
BodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
character.Humanoid.Running:Connect(function(speed)
if speed > 0 then
MovementAnimationTrack:Play()
MovementAnimationTrack:AdjustSpeed(3)
end
if speed <= 0 then
MovementAnimationTrack:Stop()
MovementAnimationTrack.TimePosition = 0
end
end)
while wait() do
BodyPosition.Position = HumanoidRootPart.Position + petPosition
BodyGyro.CFrame = HumanoidRootPart.CFrame
pet:WaitForChild("Pet").Orientation = HumanoidRootPart.Orientation + Vector3.new(0,180,0)
end
end
Follow(pet)
end
end
end ]]
-----------------
-- Folders
local leaderstats = Instance.new("Folder", player)
leaderstats.Name = "leaderstats"
local weapon = Instance.new("Folder", player)
weapon.Name = "Weapon"
local attacks = Instance.new("Folder", weapon)
attacks.Name = "WeaponAttacks"
local projectiles = Instance.new("IntValue", leaderstats)
projectiles.Name = "Projectiles"
projectiles.Value = 0
local currentProjectile = Instance.new("StringValue", leaderstats)
currentProjectile.Name = "CurrentProjectile"
currentProjectile.Value = "Shuriken"
local QuestInformation = Instance.new("Folder", player)
QuestInformation.Name = "QuestInformation"
local attributes = Instance.new("Folder")
attributes.Name = "Attributes"
attributes.Parent = player
local petBoostMultiplier = Instance.new("NumberValue", player)
petBoostMultiplier.Name = "PetBoostMultiplier"
petBoostMultiplier.Value = 1
local hasReadTheTutorial = Instance.new("BoolValue", player)
hasReadTheTutorial.Name = "HasReadTheTutorial"
hasReadTheTutorial.Value = false
local customizedCharacter = Instance.new("BoolValue", player)
customizedCharacter.Name = "CustomizedCharacter"
customizedCharacter.Value = false
local loadingScreen = Instance.new("BoolValue", player)
loadingScreen.Name = "LoadingScreen"
loadingScreen.Value = false
local ownsHouse = Instance.new("BoolValue", player)
ownsHouse.Name = "OwnsHouse"
ownsHouse.Value = false
-----------------
-- leaderstats
local yen = Instance.new("IntValue", leaderstats)
yen.Name = "Yen"
yen.Value = 0
local soulPoints = Instance.new("IntValue", leaderstats)
soulPoints.Name = "Souls"
soulPoints.Value = 0
local Level = Instance.new("IntValue", leaderstats)
Level.Name = "Level"
Level.Value = 1
local XP = Instance.new("IntValue", leaderstats)
XP.Name = "XP"
XP.Value = 0
local MaxXP = Instance.new("IntValue", leaderstats)
MaxXP.Name = "MaxXP"
MaxXP.Value = 100
local rebirths = Instance.new("IntValue", leaderstats)
rebirths.Name = "Rebirths"
rebirths.Value = 0
local rebirthTokens = Instance.new("IntValue", leaderstats)
rebirthTokens.Name = "RebirthTokens"
rebirthTokens.Value = 0
local rebirthYenBoost = Instance.new("IntValue", leaderstats)
rebirthYenBoost.Name = "RebirthYenBoost"
rebirthYenBoost.Value = 1
local stamina = Instance.new("IntValue", leaderstats)
stamina.Name = "Stamina"
stamina.Value = 100
local maxStamina = Instance.new("IntValue", leaderstats)
maxStamina.Name = "MaxStamina"
maxStamina.Value = 100
local timePlayed = Instance.new("IntValue", leaderstats)
timePlayed.Name = "Time Played"
timePlayed.Value = 0
local pet = Instance.new("StringValue", leaderstats)
pet.Name = "Pet"
pet.Value = "None"
-- LoadPet(pet)
-----------------
-- Achievements
local achievements = Instance.new("Folder", player)
achievements.Name = "Achievements"
local goldenShurikens = Instance.new("IntValue", achievements)
goldenShurikens.Name = "GoldenShurikens"
goldenShurikens.Value = 0
-----------------
-- Weapon
local currentWeapon = Instance.new("StringValue", weapon)
currentWeapon.Name = "CurrentWeapon"
currentWeapon.Value = "None"
----------------
-- QuestInfo
local Title = Instance.new("StringValue", QuestInformation)
Title.Name = "QuestTitle"
Title.Value = "Default"
local Task = Instance.new("StringValue", QuestInformation)
Task.Name = "QuestTask"
Task.Value = "Default"
local Objective = Instance.new("IntValue", QuestInformation)
Objective.Name = "QuestObjective"
Objective.Value = 0
local Progress = Instance.new("IntValue", QuestInformation)
Progress.Name = "QuestProgress"
Progress.Value = 0
local Reward = Instance.new("IntValue", QuestInformation)
Reward.Name = "QuestReward"
Reward.Value = 0
local Reward2 = Instance.new("IntValue", QuestInformation)
Reward2.Name = "QuestReward2"
Reward2.Value = 0
-----------------
-- IsUsingAttack Values
local IsUsingAttack1 = Instance.new("BoolValue", attacks)
IsUsingAttack1.Name = "IsUsingAttack1"
IsUsingAttack1.Value = false
local IsUsingAttack2 = Instance.new("BoolValue", attacks)
IsUsingAttack2.Name = "IsUsingAttack2"
IsUsingAttack2.Value = false
local IsUsingAttack3 = Instance.new("BoolValue", attacks)
IsUsingAttack3.Name = "IsUsingAttack3"
IsUsingAttack3.Value = false
local IsUsingAttack4 = Instance.new("BoolValue", attacks)
IsUsingAttack4.Name = "IsUsingAttack4"
IsUsingAttack4.Value = false
local IsUsingAttack5 = Instance.new("BoolValue", attacks)
IsUsingAttack5.Name = "IsUsingAttack5"
IsUsingAttack5.Value = false
local IsUsingAttack6 = Instance.new("BoolValue", attacks)
IsUsingAttack6.Name = "IsUsingAttack6"
IsUsingAttack6.Value = false
local IsUsingAttack7 = Instance.new("BoolValue", attacks)
IsUsingAttack7.Name = "IsUsingAttack7"
IsUsingAttack7.Value = false
-----------------
-- Attributes
local health = Instance.new("IntValue")
health.Name = "Health"
health.Parent = attributes
health.Value = 0
local attack = Instance.new("IntValue")
attack.Name = "Attack"
attack.Parent = attributes
attack.Value = 0
local speed = Instance.new("IntValue")
speed.Name = "Speed"
speed.Parent = attributes
speed.Value = 0
local maximumStamina = Instance.new("IntValue")
maximumStamina.Name = "MaximumStamina"
maximumStamina.Parent = attributes
maximumStamina.Value = 0
-----------------
-- Player's Weapon Names
local WeaponNames = Instance.new("Folder", player)
WeaponNames.Name = "WeaponNames"
-----------------
-- Gamepasses
local Gamepasses = Instance.new("Folder")
Gamepasses.Name = "Gamepasses"
Gamepasses.Parent = player
local InventorySlots = Instance.new("IntValue")
InventorySlots.Name = "InventorySlots"
InventorySlots.Parent = Gamepasses
InventorySlots.Value = 3
-----------------
-- Avatar
local Avatar = Instance.new("Folder")
Avatar.Parent = player
Avatar.Name = "Avatar"
local Hair = Instance.new("StringValue")
Hair.Parent = Avatar
Hair.Name = "Hair"
-----------------
-- Attribute Points
local function PointsAvailable(player)
local PointsUsed = (player.Attributes.Health.Value + player.Attributes.Speed.Value + player.Attributes.Attack.Value + player.Attributes.MaximumStamina.Value)
local PointsAvailable = (player.leaderstats.Level.Value - PointsUsed)
return PointsAvailable > 0
end
HealthRemote.OnServerEvent:Connect(function(player)
player.Attributes.Health.Value += AttributeIncrement
player.Character.Humanoid.MaxHealth = StarterHealth + (player.leaderstats.Level.Value * HealthIncrementPerLevel) + (player.Attributes.Health.Value * hpPerPoint)
player.Character.Humanoid.Health = StarterHealth + (player.leaderstats.Level.Value * HealthIncrementPerLevel) + (player.Attributes.Health.Value * hpPerPoint)
end)
SpeedRemote.OnServerEvent:Connect(function(player)
if player.Attributes.Speed.Value < speedCap then
player.Attributes.Speed.Value += AttributeIncrement
player.Character.Humanoid.WalkSpeed = StarterSpeed + (player.Attributes.Speed.Value * spdPerPoint)
end
end)
AttackRemote.OnServerEvent:Connect(function(player)
player.Attributes.Attack.Value += AttributeIncrement
end)
MaxStaminaRemote.OnServerEvent:Connect(function(player)
player.Attributes.MaximumStamina.Value += AttributeIncrement
player.leaderstats.Stamina.Value += maxStaminaPerPoint
player.leaderstats.MaxStamina.Value += maxStaminaPerPoint
end)
ResetRemote.OnServerEvent:Connect(function(player)
player.Attributes.Health.Value = 0
player.Attributes.Attack.Value = 0
player.Attributes.Speed.Value = 0
player.Attributes.MaximumStamina.Value = 0
player.Character.Humanoid.MaxHealth = StarterHealth + (player.leaderstats.Level.Value * HealthIncrementPerLevel) + (player.Attributes.Health.Value * hpPerPoint)
player.Character.Humanoid.Health = StarterHealth + (player.leaderstats.Level.Value * HealthIncrementPerLevel) + (player.Attributes.Health.Value * hpPerPoint)
player.Character.Humanoid.WalkSpeed = (StarterSpeed + player.Attributes.Speed.Value * spdPerPoint)
player.leaderstats.MaxStamina.Value = starterMaxStamina
player.leaderstats.Stamina.Value = starterMaxStamina
end)
-----------------
-- Attribute Points Debug
for i, v in pairs(PLRS:GetChildren()) do
if v:IsA("Player") then
if #v >= 2 then
v.leaderstats.Level.Changed:Connect(function()
v.Attributes.Speed.Value = v.Attributes.Speed.Value
v.Attributes.Health.Value = v.Attributes.Health.Value
v.Attributes.Attack.Value = v.Attributes.Attack.Value
v.Attributes.MaximumStamina.Value = v.Attributes.MaximumStamina.Value
end)
end
end
end
----------------------------------------------------------------------------------------------
-- Load Stuff
game.Players.PlayerAdded:Connect(function(player)
-- Load House
local function LoadHouse(player)
wait(4)
local remote = SG:WaitForChild("HouseSystem"):WaitForChild("LoadHouseRemote")
remote:FireAllClients()
end
------------
-- Load Health
local function LoadHealth(character)
local humanoid = character.Humanoid
wait(2)
humanoid.MaxHealth = StarterHealth + (player.leaderstats.Level.Value * HealthIncrementPerLevel) + (player.Attributes.Health.Value * hpPerPoint)
wait(0.25)
humanoid.Health = humanoid.MaxHealth
end
------------
-- Load Speed
local function LoadSpeed(character)
local humanoid = character.Humanoid
humanoid.WalkSpeed = StarterSpeed + player.Attributes.Speed.Value
end
------------
-- Call Load-Functions
LoadSpeed()
player.CharacterAdded:Connect(LoadSpeed)
player.CharacterAdded:Connect(LoadHealth)
player.leaderstats.Attributes.Health.Changed:Connect(LoadHealth)
end)
-----------------
-- Formulas
local RealHP = StarterHealth + (Level.Value * HealthIncrementPerLevel) + (health.Value * hpPerPoint)
-----------------
-- Level Up
XP:GetPropertyChangedSignal('Value'):Connect(function()
repeat
if XP.Value >= MaxXP.Value then
Level.Value += 1
XP.Value -= MaxXP.Value
MaxXP.Value *= 1.25
character.Humanoid.MaxHealth = (Level.Value * HealthIncrementPerLevel) + (health.Value * hpPerPoint)
end
until XP.Value < MaxXP.Value
end)
----------------------------------------------------------------------------------------------
-- Quest Reward
local rewarded = false
Title.Changed:Connect(function()
Progress.Changed:Connect(function()
if Progress.Value >= Objective.Value and rewarded == false then
rewarded = true
local function GiveReward()
player:WaitForChild("leaderstats"):WaitForChild("Yen").Value += Reward.Value
player:WaitForChild("leaderstats"):WaitForChild("XP").Value += Reward2.Value
Title.Value = "Default"
Task.Value = "Default"
Progress.Value = 0
Objective.Value = 0
Reward.Value = 0
Reward2.Value = 0
player:WaitForChild("PlayerGui"):WaitForChild("Notifications"):WaitForChild("CompletedQuest").Visible = true
wait(2)
player:WaitForChild("PlayerGui"):WaitForChild("Notifications"):WaitForChild("CompletedQuest").Visible = false
end
GiveReward()
wait(0.001)
remote:FireClient(player, "CancelQuest")
wait(0.5)
rewarded = false
end
end)
end)
-----------------
-- DataStore
local data
local Success, ErrorMessage = pcall(function()
data = DataStore:GetAsync(playerID)
end)
if Success then
player.leaderstats.Yen.Value = data.Yen -- Saves
player.leaderstats.Souls.Value = data.Souls -- Saves
player.leaderstats.Level.Value = data.Level -- Saves
player.leaderstats.Rebirths.Value = data.Rebirths -- Saves
player.leaderstats.RebirthTokens.Value = data.RebirthTokens -- Saves
player.leaderstats.RebirthYenBoost.Value = data.RebirthYenBoost -- Saves
player.PetBoostMultiplier.Value = data.PetBoostMultiplier -- Saves
player.leaderstats["Time Played"].Value = data.TimePlayed -- Saves
player.Achievements.GoldenShurikens.Value = data.GoldenShurikens -- Saves
player.Attributes.Health.Value = data.Health -- Saves
player.Attributes.Speed.Value = data.Speed -- Saves
player.Attributes.Attack.Value = data.Attack -- Saves
player.Attributes.MaximumStamina.Value = data.MaximumStamina -- Saves
player.leaderstats.MaxStamina.Value = data.MaxStamina -- Saves
player.Weapon.CurrentWeapon.Value = data.CurrentWeapon -- Saves
player.leaderstats.Pet.Value = data.Pet -- Saves
player.OwnsHouse.Value = data.House -- Saves
player.Avatar.Hair.Value = data.Hair -- Saves
player.leaderstats.Projectiles.Value = data.Projectiles -- Saves
player.leaderstats.CurrentProjectile.Value = data.CurrentProjectile -- Saves
player.Gamepasses.InventorySlots.Value = data.InventorySlots
player.QuestInformation.QuestTitle.Value = data.QuestTitle -- Saves
player.QuestInformation.QuestTask.Value = data.QuestTask -- Saves
player.QuestInformation.QuestObjective.Value = data.QuestObjective -- Saves
player.QuestInformation.QuestProgress.Value = data.QuestProgress -- Saves
player.QuestInformation.QuestReward.Value = data.QuestReward -- Saves
player.QuestInformation.QuestReward2.Value = data.QuestReward2 -- Saves
player.CustomizedCharacter.Value = data.CustomizedCharacter -- Saves
player.HasReadTheTutorial.Value = data.HasReadTheTutorial -- Saves
player.leaderstats.MaxXP.Value = data.MaxXP
player.leaderstats.XP.Value = data.XP
else
print("An error has occured whilst loading your data.")
warn(ErrorMessage)
end
-----------------
-- Tool DataStore
local toolData = ToolDataStore:GetAsync(playerID)
if toolData ~= nil then
for i, v in pairs(toolData) do
for i, weaponFolder in pairs(Weapons:GetChildren()) do
if weaponFolder:FindFirstChild(v) and backpack:FindFirstChild(v) == nil and starterGear:FindFirstChild(v) == nil then
weaponFolder:FindFirstChild(v):Clone().Parent = backpack
end
end
end
end
player.CharacterRemoving:Connect(function(char)
char:WaitForChild("Humanoid"):UnequipTools()
end)
-----------------
-- Accessories DataStore
local accessoriesData = AvatarDataStore:GetAsync(playerID)
if accessoriesData ~= nil then
for i, v in pairs(accessoriesData) do
for i, accessoryFolder in pairs(Accessories:GetChildren()) do
if accessoryFolder:FindFirstChild(v) and character:FindFirstChild(v) then
accessoryFolder:FindFirstChild(v):Clone().Parent = character
print("Loading player's accessories...")
end
end
end
end
end)
-------------------------------------------------------------------
-- Save Player's Data
local AccessoriesTable = {}
game.Players.PlayerAdded:Connect(function(plr)
plr.CharacterRemoving:Connect(function(char)
for i, v in pairs(char:GetChildren()) do
table.insert(AccessoriesTable, v.Name)
end
end)
end)
game.Players.PlayerRemoving:Connect(function(player)
local ToolTable = {}
local Data = {
Yen = player.leaderstats.Yen.Value, -- Saves
Souls = player.leaderstats.Souls.Value, -- Saves
Level = player.leaderstats.Level.Value, -- Saves
Rebirths = player.leaderstats.Rebirths.Value, -- Saves
RebirthTokens = player.leaderstats.RebirthTokens.Value, -- Saves
RebirthYenBoost = player.leaderstats.RebirthYenBoost.Value, -- Saves
PetBoostMultiplier = player.PetBoostMultiplier.Value, -- Saves
TimePlayed = player.leaderstats["Time Played"].Value, -- Saves
GoldenShurikens = player.Achievements.GoldenShurikens.Value, -- Saves
Health = player.Attributes.Health.Value, -- Saves
Speed = player.Attributes.Speed.Value, -- Saves
Attack = player.Attributes.Attack.Value, -- Saves
MaximumStamina = player.Attributes.MaximumStamina.Value, -- Saves
MaxStamina = player.leaderstats.MaxStamina.Value, -- Saves
CurrentWeapon = player.Weapon.CurrentWeapon.Value, -- Saves
Pet = player.leaderstats.Pet.Value, -- Saves
House = player.OwnsHouse.Value, -- Saves
Hair = player.Avatar.Hair.Value, -- Saves
Projectiles = player.leaderstats.Projectiles.Value, -- Saves
CurrentProjectile = player.leaderstats.CurrentProjectile.Value, -- Saves
InventorySlots = player.Gamepasses.InventorySlots.Value,
QuestTitle = player.QuestInformation.QuestTitle.Value, -- Saves
QuestTask = player.QuestInformation.QuestTask.Value, -- Saves
QuestObjective = player.QuestInformation.QuestObjective.Value, -- Saves
QuestProgress = player.QuestInformation.QuestProgress.Value, -- Saves
QuestReward = player.QuestInformation.QuestReward.Value, -- Saves
QuestReward2 = player.QuestInformation.QuestReward2.Value, -- Saves
CustomizedCharacter = player.CustomizedCharacter.Value, -- Saves
HasReadTheTutorial = player.HasReadTheTutorial.Value, -- Saves
MaxXP = player.leaderstats.MaxXP.Value,
XP = player.leaderstats.XP.Value
}
for i, v in pairs(player.Backpack:GetChildren()) do
table.insert(ToolTable, v.Name)
end
local Success, ErrorMessage = pcall(function()
DataStore:SetAsync(player.UserId, Data)
end)
if Success then
print("Data successfully saved!")
print(TablePrinterModule(Data))
else
print("An error has occured whilst loading your data.")
warn(ErrorMessage)
end
if ToolDataStore ~= nil then
ToolDataStore:SetAsync(player.UserId, ToolTable)
end
if AvatarDataStore ~= nil then
AvatarDataStore:SetAsync(player.UserId, AccessoriesTable)
print(TablePrinterModule(AccessoriesTable))
print("Saving player's accessories...")
end
end)
------------
-- DataStore in-studio
game:BindToClose(function()
if game:GetService('RunService'):IsStudio() then
wait(2)
end
end)