i am trying to use a table to store loadout data, and i have 1 server-side script and multiple local scripts that access it.
the server-side script has the actual table stored, and sends, recieves and saves data from the local scripts through remote functions. on the server side script, there are a few events that: get a player's loadout data from a datastore when they connect, set their loadout data to default loadouts if they have no loadout data, and save their loadout data when they leave. the problem is so far, every time that the local scripts try to access the table using the remote function, it returns an error about the table being "nil", and invoking the function through the console during testing has had an identical result.
here's the entire server-side script:
local dataStore = game:GetService("DataStoreService")
local replicatedStorage = game:GetService("ReplicatedStorage")
local serverLoadouts = {}
game.Players.PlayerAdded:Connect(function(player) -- gets the player's loadout presets when they connect, gives them empty presets if there's no data
local userId = player.UserId
print(userId.." connected, checking for loadout data")
serverLoadouts[userId] = dataStore:GetDataStore("loadouts"):GetAsync(userId)
if serverLoadouts[userId] then -- checks if the player has loadout information
print("giving "..userId.." default loadout")
serverLoadouts[userId] = {
selectedLoadout = 1,
survivorLoadout1 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
survivorLoadout2 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
survivorLoadout3 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
survivorLoadout4 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
survivorLoadout5 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
tideLoadout1 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
tideLoadout2 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
tideLoadout3 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
tideLoadout4 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
};
tideLoadout5 = {
armour = "none",
class = "none",
equipment = "none",
ppe = "none",
primary = "none"
}
} -- ends the default loadout
dataStore:GetDataStore("loadouts"):SetAsync(userId, serverLoadouts[userId]) -- gives the player "empty" loadouts
end -- ends the if statement
end) -- ends the function PlayerAdded
game.Players.PlayerRemoving:Connect(function(player)
local userId = player.UserId
print(userId.." disconnecting, saving loadout data")
dataStore:GetDataStore("loadouts"):SetAsync(userId, serverLoadouts[userId]) -- saves any possible loadout changes when a player leaves
end)
replicatedStorage.returnServerLoadouts.OnServerInvoke = function(clientId)
print("sending "..clientId.." loadout data")
return serverLoadouts[clientId]
end -- remote function for sending the server's loadout data to the client
replicatedStorage.returnClientLoadouts.OnServerInvoke = function(clientLoadout, clientId)
print("recieving "..clientId.." loadout data")
serverLoadouts[clientId] = clientLoadout
end -- remote function to send client loadout data to the server
and every local script has
local function getLoadout()
print(game.Players.UserId.." recieving loadout data from server")
return game:GetService("ReplicatedStorage").returnServerLoadouts:InvokeServer(game.Players.UserId)
end -- invokes the server, returns loadout data
to get the loadout data, and something similar to
local function setLoadout(slot, itemName)
print(userId.." setting "..slot.." to "..itemName)
local userLoadout = getLoadout()
userLoadout["survivorLoadout"..userLoadout.selectedLoadout][slot] = itemName
sendLoadout:InvokeServer(userLoadout, userId)
end -- gets the loadout, changes it according to parameters, sends it back
to change the loadout data.
any idea what's going on?
