Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

attempt to index number with 'Position'?

I feel i am missing out on something and that im being dumb.

Can you fix this error? (On line 35) (Workspace.Crate Drops.Crate Drop.Handler:35: attempt to index number with 'Position')

DB = false
HitBox = script.Parent["Crate"].Hit
local Remote = script.Parent.Regen
local Workspace = game:GetService("Workspace")
HitBox.CFrame = CFrame.new(math.random(-1024,1024),1000,math.random(-1024,1024))
function Stuff(PRT)
		if not DB then
		local function SpawnItem(POS)
			if math.random(1,2) ~= 1 then
				Tier = 1
			else
				if math.random(1,4) ~= 1 then
					Tier = 2
				else
	 				if math.random(1,8) ~= 1 then
						Tier = 3
					else
						if math.random(1,16) == 1 then
							Tier = 4
						else
							Tier = 3
						end
					end
				end
			end
			local TierFolder = game.ServerStorage.Tools:FindFirstChild("Tier"..Tier)
			print(TierFolder)
			if TierFolder then
				local Tools = TierFolder:GetChildren()
				local RandomTool = Tools[math.random(1, #Tools)]
				if RandomTool then
					local ToolClone = RandomTool:Clone()
					ToolClone.Parent = script.Parent
					if ToolClone.Parent == script.Parent and ToolClone and ToolClone:FindFirstChild("Handle") then
						ToolClone.Handle.Position = POS.Position
					end
				end
			end
		end
		local HUM = PRT.Parent:FindFirstChild("Humanoid")
		local PLR = game.Players:GetPlayerFromCharacter(PRT.Parent)
		if HUM and PLR then
			local LDR = PLR:FindFirstChild("leaderstats")
			local Points = LDR:WaitForChild("Points")
			local Multi = LDR:WaitForChild("Multiplier")
			local UMulti = LDR:WaitForChild("UL. Multiplier")
			if not HUM or not Points or not Multi or not UMulti then return end
			SpawnItem(1, script.Parent.Crate.Position1)
			local function DestroyWeld(Parent)
				for i, v in pairs(Parent:GetChildren()) do
					if v:IsA("Weld") then
						v:Destroy()
					elseif v:IsA("Model") or v:IsA("Folder") or v:IsA("BasePart") then
						DestroyWeld(v)
					end
				end
			end
			DestroyWeld(HitBox.Parent)
			DB = true
			Multi.Value = UMulti.Value+1*Multi.Value + 0.1
			Points.Value = Points.Value + math.random(500,Multi.Value+1*3000)
			wait(30)
			HitBox.Parent.Parent = game.ServerStorage
			wait(math.random(30,60))
			Remote:Fire()
			Touched:Disconnect()
			HitBox = script.Parent["Crate"].Hit
			Touched = HitBox.Touched:Connect(Stuff)
			HitBox.Parent.Parent = script.Parent
			HitBox.CFrame = CFrame.new(math.random(-1024,1024),1000,math.random(-1024,1024))
			DB = false
		end
	end
end
Touched = HitBox.Touched:Connect(Stuff)

function IsInVoid()
	if HitBox.Position.Y >= -10 then return end
	HitBox.CFrame = CFrame.new(math.random(-1024,1024),1000,math.random(-1024,1024))
end

while wait(1) do
	IsInVoid()
end

Thank you, Btw the script is made for a crate supply thingy.

1 answer

✓ Accepted answer

The problem is "POS" is equal to 1, as stated on line 48. Assuming there is nothing else wrong with the script, removing the "1" parameter should work. If you planing on using the first parameter, then add a second argument on line 8.

Edited version.


DB = false
HitBox = script.Parent["Crate"].Hit
local Remote = script.Parent.Regen
local Workspace = game:GetService("Workspace")
HitBox.CFrame = CFrame.new(math.random(-1024,1024),1000,math.random(-1024,1024))
function Stuff(PRT)
        if not DB then
        local function SpawnItem(POS)
            if math.random(1,2) ~= 1 then
                Tier = 1
            else
                if math.random(1,4) ~= 1 then
                    Tier = 2
                else
                    if math.random(1,8) ~= 1 then
                        Tier = 3
                    else
                        if math.random(1,16) == 1 then
                            Tier = 4
                        else
                            Tier = 3
                        end
                    end
                end
            end
            local TierFolder = game.ServerStorage.Tools:FindFirstChild("Tier"..Tier)
            print(TierFolder)
            if TierFolder then
                local Tools = TierFolder:GetChildren()
                local RandomTool = Tools[math.random(1, #Tools)]
                if RandomTool then
                    local ToolClone = RandomTool:Clone()
                    ToolClone.Parent = script.Parent
                    if ToolClone.Parent == script.Parent and ToolClone and ToolClone:FindFirstChild("Handle") then
                        ToolClone.Handle.Position = POS.Position
                    end
                end
            end
        end
        local HUM = PRT.Parent:FindFirstChild("Humanoid")
        local PLR = game.Players:GetPlayerFromCharacter(PRT.Parent)
        if HUM and PLR then
            local LDR = PLR:FindFirstChild("leaderstats")
            local Points = LDR:WaitForChild("Points")
            local Multi = LDR:WaitForChild("Multiplier")
            local UMulti = LDR:WaitForChild("UL. Multiplier")
            if not HUM or not Points or not Multi or not UMulti then return end
            SpawnItem(script.Parent.Crate.Position1)
            local function DestroyWeld(Parent)
                for i, v in pairs(Parent:GetChildren()) do
                    if v:IsA("Weld") then
                        v:Destroy()
                    elseif v:IsA("Model") or v:IsA("Folder") or v:IsA("BasePart") then
                        DestroyWeld(v)
                    end
                end
            end
            DestroyWeld(HitBox.Parent)
            DB = true
            Multi.Value = UMulti.Value+1*Multi.Value + 0.1
            Points.Value = Points.Value + math.random(500,Multi.Value+1*3000)
            wait(30)
            HitBox.Parent.Parent = game.ServerStorage
            wait(math.random(30,60))
            Remote:Fire()
            Touched:Disconnect()
            HitBox = script.Parent["Crate"].Hit
            Touched = HitBox.Touched:Connect(Stuff)
            HitBox.Parent.Parent = script.Parent
            HitBox.CFrame = CFrame.new(math.random(-1024,1024),1000,math.random(-1024,1024))
            DB = false
        end
    end
end
Touched = HitBox.Touched:Connect(Stuff)

function IsInVoid()
    if HitBox.Position.Y >= -10 then return end
    HitBox.CFrame = CFrame.new(math.random(-1024,1024),1000,math.random(-1024,1024))
end

while wait(1) do
    IsInVoid()
end

1 comment

0

Yes

This discussion is preserved as it was. New answers, comments, and votes are closed.