Simulator Data Module

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?

  1. Go Into The Data Module And Go Under Data:CreatePlayerData Function
  2. Add Your Stats There (Ex. PlayersData[“DataName”] = Value (Can Be A Table, Number, String, Bool, Etc.) )

How Do I Add Leaderstats?

  1. Go Into The Data Module And Go under Data:CreateLeaderstats
  2. 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

  1. Put The Data Module Script Inside A Module Script And Put It Where Ever You Want
  2. Make A Server Script And Require The Module
  3. 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!

4 Likes