Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
1

Can't print value of datastore?

Asked by
Filipalla 504 Moderation Voter
5 years ago
Edited 5 years ago

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

Log in to vote
0
Answered by 5 years ago
Edited 5 years ago

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

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

, try using type instead

Ad
Log in to vote
0
Answered by
Filipalla 504 Moderation Voter
5 years ago

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

Answer this question