So I'm making a game and I'm wondering if it's possible for an exploiter to exploit a module script that contains shop information like prices.
This is the current module script, I have a local script that does require the module but just to read it.
local StoreItems = {
Clicks = {
[0] = {
Name = "Default",
Price = 0,
Clicks = 1,
Image = "http://www.roblox.com/asset/?id=6685581620"
},
[1] = {
Name = "Test1",
Price = 10,
Clicks = 2,
Image = "http://www.roblox.com/asset/?id=6689477815"
},
[2] = {
Name = "Test2",
Price = 100,
Clicks = 4,
Image = "http://www.roblox.com/asset/?id=6689478231"
},
[3] = {
Name = "Test3",
Price = 1000,
Clicks = 6,
Image = "http://www.roblox.com/asset/?id=6689478897"
},
[4] = {
Name = "Test4",
Price = 10000,
Clicks = 8,
Image = "http://www.roblox.com/asset/?id=6689479543"
},
[5] = {
Name = "Test5",
Price = 100000,
Clicks = 10,
Image = "http://www.roblox.com/asset/?id=6689481117"
},
},
Backpacks = {},
Ranks = {}
}
return StoreItems
And this is the local script.
--[ Variables ]--
local RS = game:GetService("RunService")
local replicatedStorage = game:GetService("ReplicatedStorage")
local replicatedData = replicatedStorage:FindFirstChild("replicatedData")
local modules = replicatedStorage:FindFirstChild("Modules")
local storeData = require(modules:FindFirstChild("StoreData"))
local Sample = replicatedStorage:FindFirstChild("Sample")
local Clicks = script.Parent.Background.Clicks.ClicksIcon
local Backpacks = script.Parent.Background.Backpacks.BackpacksIcon
local Ranks = script.Parent.Background.Ranks.RanksIcon
local layout = script.Parent.Background.Items.UIPageLayout
local player = game.Players.LocalPlayer
local Background = script.Parent.Background
local Items = Background.Items
local Equip = Background.Equip
local ItemImage = Background.ItemImage
local ItemName = Background.ItemName
local ItemStats = Background.ItemStats
local ItemStats2 = Background.ItemStats2
local ItemPrice = Background.ItemPrice
local abbreviations = {
"",
"K",
"M",
"B",
"T",
"Qa",
"Qi",
"Sx",
"Sp",
"Oc",
"N",
"d",
"Ud",
"Dd",
"Td",
"Qad",
"Qid",
"Sxd",
}
--[ Functions ]--
local function roundNumber(Amount)
local Text = tostring(Amount)
local chosenAbbreviation = nil
for i = 1, #abbreviations do
if tonumber(Amount) < 10^(i*3) then
Text = math.floor(Amount/((10^((i-1)*3))/100))/(100).. abbreviations[i]
break
end
end
return Text
end
--[ Main ]--
Clicks.MouseButton1Click:Connect(function()
layout:JumpToIndex(0)
end)
Backpacks.MouseButton1Click:Connect(function()
layout:JumpToIndex(1)
end)
Ranks.MouseButton1Click:Connect(function()
layout:JumpToIndex(2)
end)
--// Put items in gui
for i = 1, #storeData.Clicks do
local ItemClone = Sample:Clone()
ItemClone.Name = i
ItemClone.Image = storeData.Clicks[i].Image
ItemClone.Parent = Items.Clicks
ItemClone.ItemNumber.Value = i
end
for i,v in pairs(Items.Clicks:GetChildren()) do
if v:IsA("ImageButton") then
v.MouseButton1Click:Connect(function()
local ClickedItem = storeData.Clicks[v.ItemNumber.Value]
if Background:FindFirstChild("ItemStats2") then
Background.ItemStats2.Visible = false
end
local Price = ClickedItem["Price"]
local Clicks = ClickedItem["Clicks"]
ItemImage.Image = ClickedItem["Image"]
ItemName.Text = ClickedItem["Name"]
ItemStats.Text = "+" ..roundNumber(Clicks).." Clicks"
ItemPrice.Text = "$" ..roundNumber(Price).. " Coins"
end)
end
end

2 comments
They can exploit Items the are replicated to their client so you should RemoteEvents instead.
That are Replicated*