I'm working on a player search system which involves a datastore to store the usernames of each player.

This is my datastore script [server-side]:

local datastore = game:GetService("DataStoreService"):GetDataStore("rP")
print("Got datastore!")
local serverstorage = game:GetService("ServerStorage")
print("Got serverstorage!")
game.Players.PlayerAdded:connect(function(plyr)
	local rp = Instance.new("IntValue")
	rp.Parent = serverstorage
	rp.Name = "rP-"..plyr.Name
	print("rp made!")
	local key = "plyr"..plyr.userId
	print("Key generated!")
	local username = Instance.new("StringValue")
	username.Parent = serverstorage
	username.Name = plyr.Name
	username.Value = plyr.Name
	print("Username has been created and inserted into serverstorage.")
	
	local userid = Instance.new("IntValue")
	userid.Parent = serverstorage
	userid.Name = plyr.Name.."-id"
	userid.Value = plyr.userId
	print("userid acquired!")
	
	local savedvalue = datastore:GetAsync(key)
	print("Savedvalue loaded")
	
	if savedvalue then
		savedvalue[1] = rp.Value
		savedvalue[2] = username.Value
		savedvalue[3] = userid.Value
		print("Savedvalue table generated")
	else
		datastore:SetAsync(key, {rp.Value, username.Value,userid.Value})
		print("Items saved")
	end
end)

And my search script [client-side; local script]:

local frame = script.Parent.Parent
print("Got frame")
local inputbox = frame:WaitForChild("TextBox")
print("Got textbox")
local value = inputbox:WaitForChild("Value")
local holder = frame.Parent
print("Got admin")
local display = holder:WaitForChild("display")
print("Got display")
local imagelabel = display:WaitForChild("ImageLabel")
print("Got imagelabel")
local serverstorage = game:GetService("ServerStorage")
print("Got serverstorage")
local userimg = 'http://www.roblox.com/Thumbs/Avatar.ashx?format=png&x=100&y=100&username='
print("Got userimg")
local rptext = display:WaitForChild("rptext")
print("Got rptext")
local username = frame:WaitForChild("username")
print("Got username")

script.Parent.MouseButton1Click:connect(function()
	username.Value = value.Value
	print("1")
	wait()
	imagelabel.Image = userimg..username.Value
	print("2")
	wait()
	local rpvalue = serverstorage:findFirstChild("rP-"..value.Value)
	print("3")
	if rpvalue then
		print("rpvalue exists")
	rptext.Text = "rP | "..rpvalue.Value
	else
		print("rpvalue does not exist; assuming user has no profile.")
		rptext.Text = "This user has not created a profile."
		end
end)

When I enter the game and I search my name, it returns "This user has not created a profile."

This entire system works in edit mode, but not in-game. Could someone please explain to me my problem?

Sorry for the messy scripts!

EDIT:

By the way, my rpvalue DOES exist. I checked with a script.

local serverstorage = game:GetService("ServerStorage")

local rpvalue = serverstorage:findFirstChild("rP-Vexture")

if rpvalue then
print("rpvalue exists")
else
print("rpvalue is nil")
end

It returns "rpvalue exists"

So I'm not quite sure what the problem is here. Can localscripts not access serverstorage? Is this the problem?