I used @Kampfkarren’s DataStore2 to save and load player’s arrest data in table, few keys combined using DataStore2.Combine
.
The Economy and License data worked as well as I’ve intended, but the problem is I can’t really understand how to add and save the key and value in the retrieved table of Arrester
, ArrestTime
, and ArrestReason
by using :GetTable
of DataStore2
.
I found several possible reasons why it wouldn’t load any data on Arresting GUI;
- the default table itself is written incorrectly
- failure during retrieving saved data table
- failure during saving table
- incorrectly written table which is meant to be saved as new data after being retrieved by
:GetTable
function - error made during turning table to an array using
for do
loop (refer script below)
Things which are not concern about the error; irrelevant
- failure to send or receive
RemoteEvent
(tested withprint()
) - misspelling (was checked multiple times, and script won’t output any errors)
Maybe you are curious about
Why don’t you use DataStore Editor Plugin to check if your data is saved correctly as you have intended?
But unfortunately, I do not own DataStore Editor plugin, and I am not the owner of the place itself; - hence I couldn’t check if value is saving correctly.
Script
```lua
local ServerScriptService = game:GetService("ServerScriptService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ArrestRemote = game:GetService("ReplicatedStorage").ArrestRemote
local DataStore2 = require(1936396537)
if not game:GetService("RunService"):IsStudio() then
DataStore2.Combine("UserData", "Economy", "License", "Arrester", "ArrestTime", "ArrestReason", "LastArrestedTime", "Wanted")
_G.UserData = {
Economy = {
["Cash"] = 1000,
["Bank"] = 0
},
License = {
["DriverLicense"] = false,
["BladeLicense"] = false,
["LightFirearmLicense"] = false,
["HeavyFirearmLicense"] = false
},
Arrester = {
},
ArrestTime = {
},
ArrestReason = {
},
LastArrestedTime = 0,
Wanted = "Not Wanted"
}
Players.PlayerAdded:Connect(function(player)
local EconomyData = DataStore2("Economy", player)
local LicenseData = DataStore2("License", player)
local ArresterData= DataStore2("Arrester", player)
local ArrestTimeData = DataStore2("ArrestTime", player)
local ArrestRecordData = DataStore2("ArrestReason", player)
local LastArrestedTimeData = DataStore2("LastArrestedTime", player)
local WantedLevelData = DataStore2("Wanted", player)
player.CharacterAppearanceLoaded:Wait()
local function UpdateEconomy()
local getEconomyData = EconomyData:GetTable(_G.UserData.Economy)
local getLicenseData = LicenseData:GetTable(_G.UserData.License)
player.PlayerGui.MainUI.Information.Cash.Text = getEconomyData["Cash"]
player.PlayerGui.MainUI.Information.Bank.Text = getEconomyData["Bank"]
end
local function UpdateLicense()
local getEconomyData = EconomyData:GetTable(_G.UserData.Economy)
local getLicenseData = LicenseData:GetTable(_G.UserData.License)
if getLicenseData["DriverLicense"] == false then
player.PlayerGui.MainUI.Information.DriverLicense.BackgroundColor3 = Color3.fromRGB(211, 58, 58)
elseif getLicenseData["DriverLicense"] == true then
player.PlayerGui.MainUI.Information.DriverLicense.BackgroundColor3 = Color3.fromRGB(58, 211, 64)
end
if getLicenseData["BladeLicense"] == false then
player.PlayerGui.MainUI.Information.BladeLicense.BackgroundColor3 = Color3.fromRGB(211, 58, 58)
elseif getLicenseData["BladeLicense"] == true then
player.PlayerGui.MainUI.Information.BladeLicense.BackgroundColor3 = Color3.fromRGB(58, 211, 64)
end
if getLicenseData["LightFirearmLicense"] == false then
player.PlayerGui.MainUI.Information.LightFirearmLicense.BackgroundColor3 = Color3.fromRGB(211, 58, 58)
elseif getLicenseData["LightFirearmLicense"] == true then
player.PlayerGui.MainUI.Information.LightFirearmLicense.BackgroundColor3 = Color3.fromRGB(58, 211, 64)
end
if getLicenseData["HeavyFirearmLicense"] == false then
player.PlayerGui.MainUI.Information.HeavyFirearmLicense.BackgroundColor3 = Color3.fromRGB(211, 58, 58)
elseif getLicenseData["HeavyFirearmLicense"] == true then
player.PlayerGui.MainUI.Information.HeavyFirearmLicense.BackgroundColor3 = Color3.fromRGB(58, 211, 64)
end
end
UpdateEconomy()
UpdateLicense()
EconomyData:OnUpdate(UpdateEconomy)
LicenseData:OnUpdate(UpdateLicense)
end)
local function tableToArray(Data, DefaultData)
local Table = Data:GetTable(DefaultData)
local Array = {}
for k, v in pairs(Table) do
table.insert(Table, {k, v})
end
return Array
end
ArrestRemote.OnServerEvent:Connect(function(player, state, raycastInstance, arrestingReason, arrestingTime)
local ArrestUI = player.PlayerGui.ArrestUI
local ArrestPopUp = player.PlayerGui.ArrestUI.ArrestPopUp
local ArrestRecord = player.PlayerGui.ArrestUI.ArrestRecord
if state == "ArrestUI" then
local TargetPlayer = Players:GetPlayerFromCharacter(raycastInstance.Parent)
local Array = tableToArray(DataStore2("ArrestReason", TargetPlayer), "ArrestReason")
print(TargetPlayer.Name)
ArrestUI.Main.ArrestPrior.Text = tostring(#Array)
ArrestUI.Main.Wanted.Text = DataStore2("Wanted", player):Get(_G.UserData.Wanted)
elseif state == "MakeArrest" then
local TargetPlayer = Players:FindFirstChild(ArrestUI.Main.Username.Text)
local ArresterArray = tableToArray(DataStore2("Arrester", TargetPlayer), _G.UserData.Arrester)
local ArrestReasonArray = tableToArray(DataStore2("ArrestReason", TargetPlayer), _G.UserData.ArrestReason)
local ArrestTimeArray = tableToArray(DataStore2("ArrestTime", TargetPlayer), _G.UserData.ArrestTime)
local getArresterTable = {}
DataStore2("Arrester", TargetPlayer):GetTable(_G.UserData.Arrester)
local getArrestReasonTable = {}
DataStore2("ArrestReason", TargetPlayer):GetTable(_G.UserData.ArrestReason)
local getArrestTimeTable = {}
DataStore2("ArrestTime", TargetPlayer):GetTable(_G.UserData.ArrestTime)
print(TargetPlayer.Name)
getArresterTable[tostring(#ArresterArray + 1)] = player.Name
getArrestReasonTable[tostring(#ArrestReasonArray + 1)] = ArrestPopUp.Main.ArrestingReason.TextBox.Text
getArrestTimeTable[tostring(#ArrestTimeArray + 1)] = ArrestPopUp.Main.ArrestingTime.TextBox.Text
DataStore2("Arrester", TargetPlayer):Set(getArresterTable)
DataStore2("ArrestReason", TargetPlayer):Set(getArrestReasonTable)
DataStore2("ArrestTime", TargetPlayer):Set(getArrestTimeTable)
DataStore2("LastArrestTime", TargetPlayer):Set(tonumber(ArrestPopUp.Main.ArrestingTime.TextBox.Text))
elseif state == "ArrestRecordOpen" then
local TargetPlayer = Players:FindFirstChild(ArrestUI.Main.Username.Text)
local ArresterArray = tableToArray(DataStore2("Arrester", TargetPlayer), "Arrester")
local ArrestReasonArray = tableToArray(DataStore2("ArrestReason", TargetPlayer), "ArrestReason")
local ArrestTimeArray = tableToArray(DataStore2("ArrestTime", TargetPlayer), "ArrestTime")
local getArresterTable = DataStore2("Arrester", TargetPlayer):GetTable(_G.UserData.Arrester)
local getArrestReasonTable = DataStore2("ArrestReason", TargetPlayer):GetTable(_G.UserData.ArrestReason)
local getArrestTimeTable = DataStore2("ArrestTime", TargetPlayer):GetTable(_G.UserData.ArrestTime)
if #ArresterArray ~= 0 then
ArrestRecord.Main.Page.Text = tostring(#ArresterArray)
ArrestRecord.Main.Arrester.TextLabel.Text = getArresterTable[tostring(#ArresterArray)]
ArrestRecord.Main.ArrestTime.TextLabel.Text = getArrestTimeTable[tostring(#ArrestTimeArray)]
ArrestRecord.Main.ArrestReason.TextLabel.Text = getArrestReasonTable[tostring(#ArrestReasonArray)]
end
elseif state == "ArrestRecordNext" then
local TargetPlayer = Players:FindFirstChild(ArrestUI.Main.Username.Text)
local ArresterArray = tableToArray(DataStore2("Arrester", TargetPlayer), "Arrester")
local ArrestReasonArray = tableToArray(DataStore2("ArrestReason", TargetPlayer), "ArrestReason")
local ArrestTimeArray = tableToArray(DataStore2("ArrestTime", TargetPlayer), "ArrestTime")
local getArresterTable = DataStore2("Arrester", TargetPlayer):GetTable(_G.UserData.Arrester)
local getArrestReasonTable = DataStore2("ArrestReason", TargetPlayer):GetTable(_G.UserData.ArrestReason)
local getArrestTimeTable = DataStore2("ArrestTime", TargetPlayer):GetTable(_G.UserData.ArrestTime)
if #ArresterArray ~= 0 then
if tonumber(ArrestRecord.Main.Page.Text) >= #ArresterArray then
ArrestRecord.Main.Page.Text = "1"
ArrestRecord.Main.Arrester.TextLabel.Text = getArresterTable["1"]
ArrestRecord.Main.ArrestTime.TextLabel.Text = getArrestTimeTable["1"]
ArrestRecord.Main.ArrestReason.TextLabel.Text = getArrestReasonTable["1"]
elseif #ArresterArray > tonumber(ArrestRecord.Main.Page.Text) >= 1 then
ArrestRecord.Main.Arrester.TextLabel.Text = getArresterTable[tostring(tonumber(ArrestRecord.Main.Page.Text) + 1)]
ArrestRecord.Main.ArrestTime.TextLabel.Text = getArrestTimeTable[tostring(tonumber(ArrestRecord.Main.Page.Text) + 1)]
ArrestRecord.Main.ArrestReason.TextLabel.Text = getArrestReasonTable[tostring(tonumber(ArrestRecord.Main.Page.Text) + 1)]
ArrestRecord.Main.Page.Text = tostring(tonumber(ArrestRecord.Main.Page.Text) + 1)
end
end
elseif state == "ArrestRecordPrevious" then
local TargetPlayer = Players:FindFirstChild(ArrestUI.Main.Username.Text)
local ArresterArray = tableToArray(DataStore2("Arrester", TargetPlayer), "Arrester")
local ArrestReasonArray = tableToArray(DataStore2("ArrestReason", TargetPlayer), "ArrestReason")
local ArrestTimeArray = tableToArray(DataStore2("ArrestTime", TargetPlayer), "ArrestTime")
local getArresterTable = DataStore2("Arrester", TargetPlayer):GetTable(_G.UserData.Arrester)
local getArrestReasonTable = DataStore2("ArrestReason", TargetPlayer):GetTable(_G.UserData.ArrestReason)
local getArrestTimeTable = DataStore2("ArrestTime", TargetPlayer):GetTable(_G.UserData.ArrestTime)
if #ArresterArray ~= 0 then
if tonumber(ArrestRecord.Main.Page.Text) <= 1 then
ArrestRecord.Main.Page.Text = tostring(#ArresterArray)
ArrestRecord.Main.Arrester.TextLabel.Text = getArresterTable[tostring(#ArresterArray)]
ArrestRecord.Main.ArrestTime.TextLabel.Text = getArrestTimeTable[tostring(#ArresterArray)]
ArrestRecord.Main.ArrestReason.TextLabel.Text = getArrestReasonTable[tostring(#ArresterArray)]
elseif #ArresterArray >= tonumber(ArrestRecord.Main.Page.Text) > 1 then
ArrestRecord.Main.Arrester.TextLabel.Text = getArresterTable[tostring(tonumber(ArrestRecord.Main.Page.Text) - 1)]
ArrestRecord.Main.ArrestTime.TextLabel.Text = getArrestTimeTable[tostring(tonumber(ArrestRecord.Main.Page.Text) - 1)]
ArrestRecord.Main.ArrestReason.TextLabel.Text = getArrestReasonTable[tostring(tonumber(ArrestRecord.Main.Page.Text) - 1)]
ArrestRecord.Main.Page.Text = tostring(tonumber(ArrestRecord.Main.Page.Text) - 1)
end
end
end
end)
end
```
I would heavily appreciate your help, solution and any suggestions, if you have any concern related to my issue, please do reply to this topic.