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

Can't print value of datastore?

When i try to print the CarModelName table in the table from GetStat it throws this error: ServerStorage.CarDataManager:27: attempt to index field '?' (a nil value). I have tried to fix it myself but couldn't.

OnCarPurchase

local CarDataManager = require(game.ServerStorage.CarDataManager)

local CarsAPI = require(game.ServerStorage.CarsAPI)

local Money --Where your money value is located

game.ReplicatedStorage.PurchaseCar.OnServerEvent:Connect(functi		on(Player, CarModelName)

	print(CarDataManager:GetStat(Player)[CarModelName])
end

CarDataManager (https://pastebin.com/5eQRzwZ1)

-- Set up table to return to any script that requires this module script

local CarStatManager = {}

local DataStoreService = game:GetService("DataStoreService")

local carData = DataStoreService:GetDataStore("carData")

  

-- Table to hold player information for the current session

local sessionData = {}

  

  

-- Function that other scripts can call to change a player's stats

function CarStatManager:ChangeStat(player, statName, value)

local playerUserId = "Player_" .. player.UserId

assert(typeof(sessionData[playerUserId][statName]) == typeof(value), "ChangeStat error: types do not match")

if typeof(sessionData[playerUserId][statName]) == "number" then

sessionData[playerUserId][statName] = sessionData[playerUserId][statName] + value

else

sessionData[playerUserId][statName] = value

end

end

function CarStatManager:GetStat(player)
	return sessionData[player.UserId]["Owned"]
end

-- Function to add player to the 'sessionData' table

local function setupPlayerData(player)

local playerUserId = "Player_" .. player.UserId

local success, data = pcall(function()

return carData:GetAsync(playerUserId)

end)

if success then

if data then

warn(player.Name.." Is in car database.")

warn("Fetching data for player: "..player.Name)

-- Data exists for this player

sessionData[playerUserId] = data

else

warn(player.Name.." Haven't played before")

warn("Setting Default Values for Player: "..player.Name)

-- Data store is working, but no current data for this player

sessionData[playerUserId] = {

["Owned"] = {}

}

end

else

warn("Error: Couldn't fetch Car Data")

end

end

  

-- Function to save player's data

local function saveCarData(playerUserId)

if sessionData[playerUserId] then

carData:SetAsync(playerUserId, sessionData[playerUserId])

end

end

-- Function to save player data on exit

local function saveOnExit(player)

local playerUserId = "Player_" .. player.UserId

saveCarData(playerUserId)

end

-- Connect 'setupPlayerData()' function to 'PlayerAdded' event

game.Players.PlayerAdded:Connect(setupPlayerData)

  

-- Connect 'saveOnExit()' function to 'PlayerRemoving' event

game.Players.PlayerRemoving:Connect(saveOnExit)

return CarStatManager

2 answers

I'm no rocket scientist but on line 27 it says

if  typeof(sessionData[playerUserId][statName]) ==  "number"  then

, try using type instead

I decided to use DataStore2 Instead and i think i have figured it out

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