Ok, I put a different mess, before but I wanted to go into more detail.
I am making a free-build / Tycoon
I had the tycoon working with just one dropper, and one upgrader. (both would not show up until you hit the buy button)
When I added another dropper, and another wall upgrade. (both would show always and that snot right)
I want the new dropper to not show until you buy, same for the wall upgrade.
everything is the same as the first 2, all are in the right folders, and named the right name.
here is the script that controls them, can someone help please?
P.S. I am getting a message in my output that says 11:59:32.087 - Object is not a valid member of Model 11:59:32.087 - Script 'Workspace.Tycoon Kit.Tycoons.Bright blue.PurchaseHandler', Line 41 11:59:32.088 - Stack End
---handels all buttons
objects = {} ---empty erray for script
teamcolor = BrickColor.new(script.Parent.Name)
config = script.Parent.Parent.Parent.Configuration
wait(1)
script.Parent.Essentials.Spawn.TeamColor = teamcolor
script.Parent.Essentials.Spawn.BrickColor = teamcolor
script.Parent.Essentials.Collector.Touched:connect(function(hit)
if hit:FindFirstChild("Cash") then
script.Parent.Cash.Value = script.Parent.Cash.Value + hit.Cash.Value --checks if they ahve cash and takes the price from it
Instance.new("Sparkles",hit).Color=Color3.new(math.random(1,255)/255,math.random(1,255)/255,math.random(1,255)/255)
game.Debris:AddItem(hit,0.1)
end
end)
script.Parent.Essentials.Giver.Touched:connect(function(hit)
local player = game.Players:GetPlayerFromCharacter(hit.Parent) ---makes sure that is is a player
if player ~= nil then
if script.Parent.Owner.Value == player then ---makes sure that it is the owner
if hit.Parent:FindFirstChild("Humanoid") then
if hit.Parent.Humanoid.Health > 0 then ---makes sure thta the player is alive when touched
local cashmoney = game.ServerStorage.MoneyStorage:FindFirstChild(player.Name)---checks the storage for cash
if cashmoney ~= nil then
cashmoney.Value = cashmoney.Value + script.Parent.Cash.Value
script.Parent.Cash.Value = 0 ----makes sure that they have enough money to buy the item
end
end
end
end
end
end)
script.Parent:WaitForChild("Buttons") ---- waits for all the buttons to arrive
for i,v in pairs(script.Parent.Buttons:GetChildren()) do
if v:FindFirstChild("Head") then ---makes sure it is a button
local object = script.Parent.Purchases:FindFirstChild(v.Object.Value)---look for an object by the name of the button
if object ~= nil then
objects[object.Name] = object:Clone() --- clones the object
object:Destroy() ----destroys the object
else
print("Button: "..v.Name.." is missing its object and has been removed.")
v.Head.CanCollide = false
v.Head.Transparency = 1 ---removes the button
end
if v:FindFirstChild("Dependency") then
v.Head.CanCollide = false
v.Head.Transparency = 1
coroutine.resume(coroutine.create(function()
if script.Parent.PurchasedObjects:WaitForChild(v.Dependency.Value) then
if config.ButtonFadeInDependency.Value == true then
for i=1,20 do
wait(config.ButtonFadeInTime.Value/20)
v.Head.Transparency = v.Head.Transparency - 0.05
end
end
v.Head.CanCollide = true
v.Head.Transparency = 0
end
end))
end
v.Head.Touched:connect(function(hit)
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
if v.Head.CanCollide == true then
if player ~= nil then
if script.Parent.Owner.Value == player then
if hit.Parent:FindFirstChild("Humanoid") then
if hit.Parent.Humanoid.Health > 0 then
local cashmoney = game.ServerStorage.MoneyStorage:FindFirstChild(player.Name)
if cashmoney ~= nil then
if cashmoney.Value >= v.Price.Value then
cashmoney.Value = cashmoney.Value - v.Price.Value ---makes sure you have enough money
objects[v.Object.Value].Parent = script.Parent.PurchasedObjects ---makes the object go away until bought
if config.ButtonExplodeOnBuy.Value == true then
local explosion = Instance.new("Explosion",workspace)
explosion.Position = v.Head.Position
explosion.DestroyJointRadiusPercent = 0
explosion.BlastPressure = 0
end
if config.ButtonFadeOutOnBuy.Value == true then
v.Head.CanCollide = false
coroutine.resume(coroutine.create(function()
for i=1,20 do
wait(config.ButtonFadeOutTime.Value/20)
v.Head.Transparency = v.Head.Transparency + 0.05
end
end))
else
v.Head.CanCollide = false
v.Head.Transparency = 1
end
end
end
end
end
end
end
end
end)
end
end
