Hello Everyone,
I’m trying to make a gun game with a little help with Alvin Blox’s sword fighting game series, I’m making the shop where you can buy a item and equip it, but it keeps saying the error above, any fixes will be great.
Script for serverhandle (I haven’t finished the whole series, but this part of the script does not work)
game.ReplicatedStorage:WaitForChild(“GetTools”).OnServerInvoke = function(player)
local items = {}
for _, object in pairs(game.ServerStorage:WaitForChild("Items"):GetChildren()) do
local itemProperties = {object.Name,object.Price.Value}
table.insert(items,itemProperties)
end
return items
end
game.ReplicatedStorage:WaitForChild(“ItemCheck”).OnServerInvoke = function(player,itemName)
if game.ServerStorage.PlayerData:FindFirstChild(player.Name).Inventory:FindFirstChild(itemName) then
return true
else
return false
end
end
game.ReplicatedStorage:WaitForChild(“PurchaseItem”).OnServerInvoke = function(player,itemName)
local Credits = player.leaderstats.Credits
local item = game.ServerStorage.Items:FindFirstChild(itemName)
if item then
--Item exists
if game.ServerStorage.PlayerData[player.Name].Inventory:FindFirstChild(itemName) then
if game.ServerStorage.PlayerData[player.Name].Equipped.Value == itemName then
-- Currency Unequipped
game.ServerStorage.PlayerData[player.Name].Equipped.Value = itemName
return "Equipped"
else
game.ServerStorage.PlayerData[player.Name].Equipped.Value = ""
return "Unequipped"
end
end
if Credits.Value >= item.Price.Value then
Credits.Value = Credits.Value - item.Price.Value
local itemValue = Instance.new("ObjectValue")
itemValue.Name = itemName
itemValue.Parent = game.ServerStorage.PlayerData[player.Name].Inventory
return true
else
return "NotEnoughCredits"
end
else
return "NoItem"
end
end
Core Script:
– Core UI localscript
local availableTools = game.ReplicatedStorage:WaitForChild(“GetTools”):InvokeServer()
local mainFrame = script.Parent:WaitForChild(“MainFrame”)
local safeArea = mainFrame:WaitForChild(“SafeArea”)
local itemInformation = safeArea:WaitForChild(“ItemInformation”)
local infoFrame = itemInformation.InfoFrame
local selectedItem = itemInformation.SelectedItem
local equippedItem = itemInformation.EquippedItem
local numberOfItems = #availableTools
local itemFrame = safeArea.ItemFrame
local shopButton = script.Parent:WaitForChild(“ShopButton”)
local buyButton = infoFrame.BuyButton
local equippedItemViewport = script.Parent:WaitForChild(“EquippedItemViewport”)
local itemViewport = itemInformation.ItemViewport
shopButton.MouseButton1Click:Connect(function()
mainFrame.Visible = not mainFrame.Visible
end)
local PADDING_X = 0.02
local DROPDOWN_Y = 0.2
local DROPDOWN_X = 0.25
local item1 = itemFrame:WaitForChild(“Item1”)
local box
local numRows = 1
for i = 1,numberOfItems,1 do
if i == 1 then
box = item1
else
box = item1:Clone()
box.Name = "Item"..i
box.Parent = itemFrame
if (i-1) / (4*numRows) == 1 then
-- New row
numRows = numRows + 1
box.Position = UDim2.new(PADDING_X,0,box.Position.Y.Scale,0) + UDim2.new(0,0,DROPDOWN_Y* (numRows - 1))
else
-- Add to the X only
box.Position = itemFrame["Item"..(i-1)].Position + UDim2.new(DROPDOWN_X,0,0,0)
end
end
box.MouseButton1Click:Connect(function()
for _, v in pairs(itemViewport:GetChildren()) do
if not v:IsA("Frame") then
v:Destroy()
end
end
local itemViewportCam = Instance.new("Camera")
itemViewportCam.Parent = itemViewport
local handle = game.ReplicatedStorage:WaitForChild("ToolModules"):FindFirstChild(availableTools[i][1].."Handle"):Clone()
handle.Parent = itemViewport
itemViewport.CurrentCamera = itemViewportCam
itemViewportCam.CFrame = handle.CameraCFrame.Value
local owned = game.ReplicatedStorage.ItemCheck:InvokeServer(availableTools[i][1])
if equippedItem.Value == availableTools[i][1] then
infoFrame.Credits.Text = "Owned"
infoFrame.BuyButton.Text = "Unequip"
elseif owned == true then
infoFrame.Credits.Text = "Owned"
infoFrame.BuyButton.Text = "Equip"
else
infoFrame.BuyButton.Text = "Buy"
infoFrame.Credits.Text = "$"..availableTools[i][2]
end
infoFrame.ItemName.Text = availableTools[i][1]
selectedItem.Value =availableTools[i][1]
for _, v in pairs(itemFrame:GetChildren()) do
if v:IsA("ImageButton") then
v.BorderSizePixel = 0
end
end
itemFrame["Item"..i].BorderSizePixel = 2
end)
local fakeCam = Instance.new("Camera")
fakeCam.Parent = box.VPF
local handle = game.ReplicatedStorage:WaitForChild("ToolModules"):FindFirstChild(availableTools[i][1].."Handle"):Clone()
handle.Parent = box.VPF
box.VPF.CurrentCamera = fakeCam
fakeCam.CFrame = handle.CameraCFrame.Value
itemFrame["Item"..i].ItemName.Text = availableTools[i][1]
end
buyButton.MouseButton1Click:Connect(function()
local result = game.ReplicatedStorage.PurchaseItem:InvokeServer(selectedItem.Value)
if result == true then
buyButton.BackgroundColor3 = Color3.fromRGB(42,149,42)
buyButton.Text = “Bought!”
wait(0.5)
buyButton.Text = “Equip”
buyButton.BackgroundColor3 = Color3.fromRGB(55,193,55)
elseif result == “NotEnoughCredits” then
buyButton.BackgroundColor3 = Color3.fromRGB(204,31,31)
buyButton.Text = “Not Enough Credits”
wait(0.5)
buyButton.Text = “Buy”
buyButton.BackgroundColor3 = Color3.fromRGB(55,193,55)
elseif result == “Equipped” then
equippedItem.Value = selectedItem.Value
buyButton.BackgroundColor3 = Color3.fromRGB(42,149,42)
buyButton.Text = “Equipped”
wait(0.5)
buyButton.Text = “Unequip”
buyButton.BackgroundColor3 = Color3.fromRGB(55,193,55)
elseif result == “Unequipped” then
equippedItem.Value = “”
buyButton.BackgroundColor3 = Color3.fromRGB(42,149,42)
buyButton.Text = “Unequipped”
wait(0.5)
buyButton.Text = “Equip”
buyButton.BackgroundColor3 = Color3.fromRGB(55,193,55)
end
end)