Datastore headache

These two pcall functions can be simplified:

-- Original
    local success, data = pcall(function()
       return DataStore:GetAsync(player.UserId)
    end)

    local success = pcall(function()
        DataStore:SetAsync(player.UserId, data)
    end)

-- Simplified
local success, response = pcall(DataStore.GetAsync, DataStore, player.UserId)

local success = pcall(DataStore.SetAsync, DataStore, player.UserId, data)

Pcalls take a function to run and catches the error. Since there is only one function being executed within the pcalls, you should just pass the function being called. You can look at this post for more information: