NOTE: THIS IS VERY LONG! I HOPE YOU HAVE THE TIME TO READ THIS!

I am making a Town and City game that is like no other. I thought of an idea and thought of a phone system where you can text other players. Sadly, it seems to glitch. I use LocalScripts to allow them to access a Folder in ReplicatedStorage called Numbers. Inside that folder are NumberValues that are named the player's name and the value's value is the number that the player has picked. However, when you set the number it always stays as 0. No matter what. It changes it in the ServerScript so it's not because I'm using a localscript. Also, when I tried changing the value manually in the server test mode all that happened was when you received a text it said "New Text from: 0. Select your phone to read it." It won't change the player's phone number at all! I've tried putting the values inside ReplicatedStorage and inside a folder instead of a model, but that doesn't do anything either! Any help?

There are many scripts used in this system. Main Script inside the PhoneGui:

wait(1)
local Player = script.Parent.Parent.Parent
local Number = game.Workspace.Numbers:FindFirstChild(Player.Name)
local Gui = script.Parent
local frame = Instance.new("Frame")
frame.Position = UDim2.new(1, 0, 0.75, 0)
frame.Size = UDim2.new(1, 0, 0.25, 0)
frame.Style = "DropShadow"
local label = Instance.new("TextLabel", frame)
label.Size = UDim2.new(1, 0, 1, 0)
label.TextColor3 = Color3.new(1, 1, 1)
label.TextStrokeTransparency = 0
label.BackgroundTransparency = 1
label.TextScaled = true
label.TextWrapped = true
num = game.Workspace.Numbers:FindFirstChild(Player.Name)

if Number.Value == 0 then
	Gui.NoNum.Visible = true
end

num.ChildAdded:connect(function(child)
	local noti = frame:Clone()
	for i,v in pairs(script.Parent.NotificationFrame:GetChildren()) do
		v:TweenPosition(UDim2.new(0, 0, v.Position.X.Scale-0.25, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, 0.3)
	end
	noti.Parent = script.Parent.NotificationFrame
	noti.TextLabel.Text = "You have received a text from "..child.Name..". Select your phone to read it."
	noti:TweenPosition(UDim2.new(0, 0, 0.75, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, 0.5)
end)

script that opens the TextFrame LOCAL:

local mouse = game.Players.LocalPlayer:GetMouse()
local Gui = script.Parent

mouse.KeyDown:connect(function(key)
	if key == "q" then
		if Gui.TextFrame.Visible then
			Gui.TextFrame.Visible = false
		else
			Gui.TextFrame.Visible = true
		end
	end
end)

script inside the send button inside the TextFrame:

num = game.Workspace.Numbers:FindFirstChild(script.Parent.Parent.Parent.Parent.Parent.Name)

script.Parent.MouseButton1Down:connect(function()
	script.Parent.Text = "Sending..."
	wait(0.5)
	local sendnum
	for i,v in pairs(game.Workspace.Numbers:GetChildren()) do
		if v.Value == tonumber(script.Parent.Parent.Number.Text) then
			sendnum = v
			break
		else
			sendnum = false
		end
	end
	if sendnum == false then
		script.Parent.Text = "ERROR: Number is invalid!"
	elseif sendnum ~= false then
		local text = Instance.new("StringValue", sendnum)
		text.Name = num.Value
		text.Value = script.Parent.Parent.Message.Text
		script.Parent.Text = "Sent!"
		script.Parent.Parent.Message.Text = "Enter Message Here"
	end
end)

Main script inside the ReadFrame:

Player = script.Parent.Parent.Parent.Parent
num = game.Workspace.Numbers:FindFirstChild(Player.Name)
local m = Instance.new("TextButton")
m.Size = UDim2.new(1, 0, 0, 45)
m.TextColor3 = Color3.new(1, 1, 1)
m.TextStrokeTransparency = 0
m.TextScaled = true
m.TextWrapped = true

script.Parent.Changed:connect(function(prop)
	if prop == "Visible" then
		if script.Parent.Visible == true then
			for i,v in pairs(script.Parent:GetChildren()) do
				if v:IsA("TextButton") then
					if v.Name ~= "From" then
						if v.Name ~= "Message" then
							v:Destroy()
						end
					end
				end
			end
		end
		local row = 0
		for i,v in pairs(num:GetChildren()) do
			local text = m:Clone()
			text.Parent = script.Parent
			text.Name = v.Name
			text.Text = "Click to read message from: "..v.Name
			text.Position = UDim2.new(0, 0, 0, 45*row)
			text.ZIndex = 3
			text.Style = Enum.ButtonStyle.RobloxRoundDropdownButton
			text.MouseButton1Down:connect(function()
				script.Parent.From.Visible = true
				script.Parent.Message.Visible = true
				script.Parent.From.Text = v.Name
				script.Parent.Message.Text = v.Value
				text:Destroy()
				v:Destroy()
			end)
			row = row+1
		end
	end
end)

script inside the message button:

script.Parent.MouseButton1Down:connect(function()
	script.Parent.Visible = false
	script.Parent.Parent.From.Visible = false
end)

Script inside the NoNum Frame's Enter Button

script.Parent.MouseButton1Down:connect(function()
	local num = script.Parent.Text
	script.Parent.Text = "Checking Availability..."
	script.Parent.BackgroundColor3 = Color3.new(0, 0, 1)
	wait(0.5)
	local Taken
	for i,v in pairs(game.Workspace.Numbers:GetChildren()) do
		if v.Value == num then
			Taken = true
			break
		end
	end
	if Taken then
		script.Parent.Text = "That number is already taken!"
		script.Parent.BackgroundColor3 = Color3.new(1, 0, 0)
		wait(2)
		script.Parent.Text = "Enter"
		script.Parent.BackgroundColor3 = Color3.new(0, 1, 0)
	end
	if not Taken then
		game.Workspace.Numbers[script.Parent.Parent.Parent.Parent.Parent.Name].Value = num
		script.Parent.Text = "Number has been set!"
		script.Parent.BackgroundColor3 = Color3.new(0, 1, 0)
		wait(2)
		script.Parent.Parent.Visible = false
	end
end)

LocalScript inside the Phone:

wait(1)
local Player = game.Players.LocalPlayer
local Number = game.Workspace.Numbers:FindFirstChild(Player.Name)
local Tool = script.Parent
local Character = Player.Character
local GlobalMouse = Player:GetMouse()
local Gui = Player.PlayerGui:FindFirstChild("PhoneGui")

Tool.Equipped:connect(function(mouse)
	mouse.Button1Down:connect(function()
		if not Gui.ReadFrame.Visible then
			Gui.ReadFrame.Visible = true
		else
			Gui.ReadFrame.Visible = false
		end
	end)
end)

If you need to see the whole thing I can uncopylock the place containing it.

1 comment

0

Could someone help please? I really want this to work!