Simulator Data Module Is A Fully Customizable Data Module For Simulator Type Games! You Can Add Your Own Stats To The Module, Add New Functions, This Is Just The Basic Simulator Data. Feel Free To Use, You Don’t Need To Give Credit Either.
This Was Made In Roughly 30-45 Minutes So There Might Be Some Bugs, So Please Let Me Know If You Encounter Any Problems!
Features
- Create Player Data
- Equip Swords & Pets (You will need to make your own script that equips the object, this only “equips” it data wise.)
- Gain XP, Give Money, Give Gems
- Rebirth
- Load Data
- Create Leaderstats
- Award Pets & Swords
Data Module
local Data = {}
local PlayerData = {}
function Data:GetPlayerData(Player: Player)
local PlayersData = nil
for playerID, Data in pairs(PlayerData) do
if playerID == Player.UserId then
PlayersData = Data
end
end
return PlayersData
end
function Data:CreatePlayerData(Player: Player)
if PlayerData[Player.UserId] then return PlayerData[Player.UserId] end
PlayerData[Player.UserId] = {}
local PlayersData = PlayerData[Player.UserId]
PlayersData["Pets"] = {
--[[
["Basic"] = {
["Level"] = 1,
["Equipped"] = false,
}
]]--
}
PlayersData["MaxPets"] = 50
PlayersData["MaxEquippedPets"] = 3
PlayersData["Weapons"] = {
["Basic"] = {
["Level"] = 1,
}
}
PlayersData["Weapon"] = {
["Name"] = "Shadow Sword",
["Level"] = 1,
}
PlayersData["EquippedPets"] = {
--[[
["Basic"] = {
["Level"] = 1,
}
]]--
}
PlayersData["Money"] = {
["Money"] = 0,
["Gems"] = 0,
}
PlayersData["Stats"] = {
["Damage"] = 1,
["Speed"] = 1,
["XPBoost"] = 1,
}
PlayersData["Level"] = {
["Level"] = 1,
["XP"] = 0,
["Rebirths"] = 0,
}
PlayersData["Zones"] = {
["Starter"] = true,
}
PlayersData["DailyRewards"] = {
["Claimed"] = false,
["Streak"] = 0,
["TimeClaimed"] = 0,
}
return PlayersData
end
function Data:LoadData(Player: Player, Data)
local PlayersData = self:GetPlayerData(Player)
PlayersData["Pets"] = Data["Pets"]
PlayersData["Weapons"] = Data["Weapons"]
PlayersData["Money"] = Data["Money"]
PlayersData["Stats"] = Data["Stats"]
PlayersData["Level"] = Data["Level"]
PlayersData["Zones"] = Data["Zones"]
PlayersData["DailyRewards"] = Data["DailyRewards"]
return PlayersData
end
function Data:GiveMoney(Player: Player, Amount: number)
local PlayersData = self:GetPlayerData(Player)
PlayersData["Money"]["Money"] = PlayersData["Money"]["Money"] + Amount
return PlayersData["Money"]["Money"]
end
function Data:GiveGems(Player: Player, Amount: number)
local PlayersData = self:GetPlayerData(Player)
PlayersData["Money"]["Gems"] = PlayersData["Money"]["Gems"] + Amount
return PlayersData["Money"]["Gems"]
end
function Data:CheckIfSwordOwned(Player: Player, SwordName: string)
local PlayersData = self:GetPlayerData(Player)
local Owned = {false, nil}
for i, v in pairs(PlayersData["Weapons"]) do
if i == SwordName then
Owned[1] = true
Owned[2] = v
end
end
return Owned
end
function Data:EquipSword(Player: Player, SwordName: string)
local PlayersData = self:GetPlayerData(Player)
local Owns = self:CheckIfSwordOwned(Player, SwordName)
if Owns[1] then
PlayersData["Weapon"]["Name"] = SwordName
PlayersData["Weapon"]["Level"] = Owns[2]["Level"]
end
end
function Data:CheckIfPetOwned(Player: Player, PetName: string)
local PlayersData = self:GetPlayerData(Player)
local Owns = {false, nil}
for i, v in pairs(PlayersData["Pets"]) do
if i == PetName then
Owns[1] = true
Owns[2] = v
end
end
return Owns
end
function Data:EquipPet(Player: Player, PetName: string)
local PlayersData = self:GetPlayerData(Player)
local Owns = self:CheckIfPetOwned(Player, PetName)
if Owns[1] and Owns[2]["Equipped"] == false then
if #PlayersData["EquippedPets"] < PlayersData["MaxEquippedPets"] then
PlayersData["EquippedPets"][PetName] = {}
PlayersData["EquippedPets"][PetName]["Level"] = Owns[2]["Level"]
PlayersData["Pets"][PetName]["Equipped"] = true
end
end
end
function Data:GainXP(Player: Player, Amount: number)
local PlayersData = self:GetPlayerData(Player)
PlayersData["Level"]["XP"] = PlayersData["Level"]["XP"] + Amount
return PlayersData["Level"]["XP"]
end
function Data:Rebirth(Player:Player, Amount: number)
local PlayersData = self:GetPlayerData(Player)
local Level = PlayersData["Level"]
Level["Rebirths"] = Level["Rebirths"] + Amount
return Level["Rebirths"]
end
function Data:AwardWeapon(Player: Player, WeaponData)
--[[
WeaponData = {
"WeaponName",
1, -- Weapon Level
}
]]--
local PlayersData = self:GetPlayerData(Player)
local Weapons = PlayersData["Weapons"]
Weapons[WeaponData[1]] = {}
local WeaponTab = Weapons[WeaponData[1]]
WeaponTab["Level"] = WeaponData[2]
return WeaponTab
end
function Data:AwardPet(Player: Player, PetData)
local PlayersData = self:GetPlayerData(Player)
local Pets = PlayersData["Pets"]
Pets[PetData[1]] = {}
local PetTab = Pets[PetData[1]]
PetTab["Level"] = PetData[2]
return PetTab
end
function Data:CreateLeaderstats(Player: Player)
local PlayersData = self:GetPlayerData(Player)
local folder = Instance.new("Folder")
folder.Name = "leaderstats"
local Money = Instance.new("NumberValue")
Money.Name = "Money"
local Gems = Instance.new("NumberValue")
Gems.Name = "Gems"
local Level = Instance.new("NumberValue")
Level.Name = "Level"
local Rebirths = Instance.new("NumberValue")
Rebirths.Name = "Rebirths"
Money.Value = PlayersData["Money"]["Money"]
Gems.Value = PlayersData["Money"]["Gems"]
Level.Value = PlayersData["Level"]["Level"]
Rebirths.Value = PlayersData["Level"]["Rebirths"]
Money.Parent = folder
Gems.Parent = folder
Level.Parent = folder
Rebirths.Parent = folder
return folder
end
return Data
How To Use
local DataStore = game:GetService("DataStoreService"):GetDataStore("Data_Store_1")
local DataKey = function(player: Player) return "~~"..player.UserId end
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Modules = ReplicatedStorage:WaitForChild("Modules")
local DataHandler = require(Modules:WaitForChild("DataHandler"))
function onJoin(Player: Player)
--/ Create Player Data
local PlayerData = DataHandler:CreatePlayerData(Player)
--/ Create Leaderstats
local Leaderstats = DataHandler:CreateLeaderstats(Player)
Leaderstats.Parent = Player
--/ Get Player Data
local PlayersData = DataHandler:GetPlayerData(Player)
--/ Load Saved Data (Do this before you use GetPlayerData)
local PlayerSavedData = nil
pcall(function()
PlayerSavedData = DataStore:GetAsync(DataKey(Player))
end)
if PlayerSavedData ~= nil then
DataHandler:LoadData(Player, PlayerSavedData)
end
--/ Equip Weapon
DataHandler:EquipSword(Player, "SwordNameHere")
--/ Equip Pet
DataHandler:EquipPet(Player, "PetNameHere")
--/ Give Money & Give Gems & Gain XP
DataHandler:GiveMoney(Player, 10)
DataHandler:GiveGems(Player, 10)
DataHandler:GainXP(Player, 20)
--/ Rebirth
DataHandler:Rebirth(Player, 1)
--/ Award Weapon
local WeaponToAward = {
"SwordName",
1, -- Sword Level
}
DataHandler:AwardWeapon(Player, WeaponToAward)
--/ Award Pet
local PetToAward = {
"PetName",
1, -- Pet Level
}
DataHandler:AwardPet(Player, PetToAward)
--/ Check If Sword Owned
local Owned = DataHandler:CheckIfSwordOwned(Player, "SwordName")
--[[
Owned[1] = Owned (Bool)
Owned[2] = Sword Data (Table)
]]
--/ Check If Pet Owned
local Owned2 = DataHandler:CheckIfPetOwned(Player, "PetName")
--[[
Owned2[1] = Owned (Bool)
Owned2[2] = Pet Data (Table)
]]
--/ Equip Sword
DataHandler:EquipSword(Player, "SwordName")
--/ Equip Pet
DataHandler:EquipPet(Player, "PetName")
end
function onLeave(Player: Player)
local DataToSave = DataHandler:GetPlayerData(Player)
DataStore:SetAsync(DataKey(Player), DataToSave)
end
game.Players.PlayerAdded:Connect(onJoin)
game.Players.PlayerRemoving:Connect(onLeave)
How Do I Add My Own Data?
- Go Into The Data Module And Go Under Data:CreatePlayerData Function
- Add Your Stats There (Ex. PlayersData[“DataName”] = Value (Can Be A Table, Number, String, Bool, Etc.) )
How Do I Add Leaderstats?
- Go Into The Data Module And Go under Data:CreateLeaderstats
- Add A Instance And Name It Whatever You Need It To be
Does The Module Save Your Data?
No, you must save it through a data store on a server script, and you must load the saved data from the server script to the module( Shown Under “Load Saved Data” in the How To Use Section).
How To Setup
- Put The Data Module Script Inside A Module Script And Put It Where Ever You Want
- Make A Server Script And Require The Module
- Use The “How To Use” Section To Use The Module
Thank you for using this if anyone does, any feedback on what I could improve or change, or any bug reports would be appreciated!