Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Why is this Upgrade Script with Money Limits not work, it only upgrades once?

Asked by 4 years ago
Edited 4 years ago

I am currently working on a Sandbox Tycoon game. And my upgrading script isn't working correctly. There is supposed to be a Money Limit (moneyLimit) functionality, where the ore's value will not go above the Money's Limit. However, it ends up not working. It will upgrade the ore once (I have a way to count it)

Here is the script:

local multiplier = 1.15 --// set what amount the ore's value will be multiplied by

local useLimit = 0 --// 0 removes the limit
local moneyLimit = 100000 --// 0 removes the limit

local Color = BrickColor.new("Deep blue")
local Error = BrickColor.new("Really red")

script.Parent.Touched:connect(function(hit)
    if hit:FindFirstChild("OreValue") then
        if hit:FindFirstChild("Upgrades") then
            if hit.Upgrades:FindFirstChild(script.Parent.Parent.Name) then
                if useLimit == 0 then
                    if moneyLimit == 0 then
                        hit.OreValue.Value = math.floor(hit.OreValue.Value * multiplier)
                        hit.Upgrades[script.Parent.Parent.Name].Value = hit.Upgrades[script.Parent.Parent.Name].Value + 1
                    elseif moneyLimit >= 1 then
                        if hit.OreValue.Value >= moneyLimit then
                            script.Parent.BrickColor = Error
                            script.Parent.Error:Play()
                            wait(.1)
                            script.Parent.BrickColor = Color
                        end
                    end
                elseif useLimit >= 1 then
                    if moneyLimit == 0 then
                        if hit.Upgrades[script.Parent.Parent.Name].Value < useLimit then
                            hit.OreValue.Value = math.floor(hit.OreValue.Value * multiplier)
                            hit.Upgrades[script.Parent.Parent.Name].Value = hit.Upgrades[script.Parent.Parent.Name].Value + 1
                        else
                            script.Parent.BrickColor = Error
                            script.Parent.Error:Play()
                            wait(.1)
                            script.Parent.BrickColor = Color
                        end
                    elseif moneyLimit >= 1 then
                        if hit.OreValue.Value < moneyLimit then
                            if hit.Upgrades[script.Parent.Parent.Name].Value < useLimit then
                                hit.OreValue.Value = math.floor(hit.OreValue.Value * multiplier)
                                hit.Upgrades[script.Parent.Parent.Name].Value = hit.Upgrades[script.Parent.Parent.Name].Value + 1
                            else
                                script.Parent.BrickColor = Error
                                script.Parent.Error:Play()
                                wait(.1)
                                script.Parent.BrickColor = Color
                            end
                        end
                    end
                end
            else
                local counter = Instance.new("IntValue", hit.Upgrades)
                counter.Value = 1
                counter.Name = script.Parent.Parent.Name
                hit.OreValue.Value = math.floor(hit.OreValue.Value * multiplier)
            end
        end
    end
end)

Here is a gif to show what happens. https://gyazo.com/833b7f3ba601d8ce4319a1a95786a350

This is where the issue most likely is

                    elseif moneyLimit >= 1 then
                        if hit.OreValue.Value < moneyLimit then
                            if hit.Upgrades[script.Parent.Parent.Name].Value < useLimit then
                                hit.OreValue.Value = math.floor(hit.OreValue.Value * multiplier)
                                hit.Upgrades[script.Parent.Parent.Name].Value = hit.Upgrades[script.Parent.Parent.Name].Value + 1
                            else
                                script.Parent.BrickColor = Error
                                script.Parent.Error:Play()
                                wait(.1)
                                script.Parent.BrickColor = Color
                            end

The only way I can think its not working is due to some slight error with either spelling or just using < and > the wrong way.

Answer this question