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

I am trying to make a pet system, but I am new to this stuff. Can anyone help me with this error?

Asked by 2 years ago

Error: ServerScriptService.EggHandler:139: attempt to index nil with 'Value' This happens every time I try to buy a pet

Edits: Changed local Currency = Data["Currency"] to local Currency = Data["Clicks"] Error After Edit: Argument 1 missing or nil on line 139

local TS = game:GetService("TweenService")
local MS = game:GetService("MarketplaceService")
local RS = game.ReplicatedStorage
local Library = RS.Pets
local Eggs = require(Library:WaitForChild("Eggs"))
local RemoteEvents = RS.RemoteEvents
local EggModels = workspace.Eggs

local PlayerDebounce = {}

function ChoosePet(Egg)
local Data = Eggs[Egg]
local Pets = Data["Pets"]
local TotalWeight = 0
for i,v in pairs(Pets) do
TotalWeight = TotalWeight + v.Rarity
end
local Chance = math.random(1,TotalWeight)
local Counter = 0
for i,v in pairs(Pets) do
Counter = Counter+v.Rarity
if Counter >= Chance then
    return v.Name
end
end
end

function totalPets(Player)
local Pets = 0
for i,v in pairs(Player.Pets:GetChildren()) do
Pets = Pets + 1
end
return Pets
end

function RandomID(Player)
local Rand = math.random(2,1000000)
for i,v in pairs(Player.Pets:GetChildren()) do
if v.PetID.Value == Rand then
    return RandomID()
end
end
return Rand
end

function singleEgg(Player, Egg)
local Data = Eggs[Egg]
local Cost = Data["Cost"]
local Currency = Data["Currency"]
local Pets = Data["Pets"]
local PetChosen = ChoosePet(Egg)
local Settings = RS.Pets.Models:FindFirstChild(PetChosen).Settings
if Currency ~= "R$" then
Player.leaderstats:FindFirstChild(Currency).Value =                                                             Player.leaderstats:FindFirstChild(Currency).Value - Cost
end
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
    v[2] = true
end
end
spawn(function()
wait(3.2)
for i,v in pairs(PlayerDebounce) do
    if v[1] == Player.Name then
        v[2] = false
    end
end
end)
for i,v in pairs(Pets) do
if v.Name == PetChosen then
    local Clone = RS.Pets.PetFolderTemplate:Clone()
    Clone.PetID.Value = RandomID(Player)
    Clone.Multiplier1.Value = Settings.Multiplier1.Value
    Clone.Multiplier2.Value = Settings.Multiplier2.Value
    Clone.Type.Value = v.Type
    Clone.Parent = Player.Pets
    Clone.Name = PetChosen
end
end
return PetChosen
end

function tripleEgg(Player, Egg)
local Data = Eggs[Egg]
local Cost = Data["Cost"]
local Currency = Data["Currency"]
local Pets = Data["Pets"]
local PetsChosen = {}
Player.leaderstats:FindFirstChild(Currency).Value =             Player.leaderstats:FindFirstChild(Currency).Value - Cost * 3
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
    v[2] = true
end
end
spawn(function()
wait(3.2)
for i,v in pairs(PlayerDebounce) do
    if v[1] == Player.Name then
        v[2] = false
    end
end
end)
for i = 1,3 do
local PetChosen = ChoosePet(Egg)
local Settings = RS.Pets.Models:FindFirstChild(PetChosen).Settings
for i,v in pairs(Pets) do
    if v.Name == PetChosen then
        local Clone = RS.Pets.PetFolderTemplate:Clone()
        Clone.PetID.Value = RandomID(Player)
        Clone.Multiplier1.Value = Settings.Multiplier1.Value
        Clone.Multiplier2.Value = Settings.Multiplier2.Value
        Clone.Type.Value = v.Type
        Clone.Parent = Player.Pets
        Clone.Name = PetChosen
        PetsChosen[#PetsChosen + 1] = PetChosen
    end
end
end
return PetsChosen
end

function UnboxEgg(Player, Egg, Type)
if Eggs[Egg] ~= nil then
local Data = Eggs[Egg]
local Cost = Data["Cost"]
local Currency = Data["Currency"]
local Pets = Data["Pets"]
local Model = EggModels:FindFirstChild(Egg)
local Debounce = false
for i,v in pairs(PlayerDebounce) do
    if v[1] == Player.Name then
        Debounce = v[2]
    end
end
if (Player.Character.HumanoidRootPart.Position -        Model.UIanchor.Position).Magnitude  <= 10 then
    if not Debounce then
        if Currency ~= "R$" then
            if Type == "Single" then
                if Player.leaderstats:FindFirstChild(Currency).Value >= Cost        then
                    if totalPets(Player) < Player.Data.MaxStorage.Value then
                        local PetChosen = singleEgg(Player, Egg)
                        return PetChosen
                    else
                        return "Error", "Not Enough Inventory Room"
                    end
                else
                    return "Error", "Insufficient Currency"
                end
            elseif Type == "Triple" then
                if Player.leaderstats:FindFirstChild(Currency).Value >= Cost * 3    then
                    if totalPets(Player) < Player.Data.MaxStorage.Value - 2     then
                        if Player.Data.TripleEggOwned.Value == true then
                            local PetsChosen = tripleEgg(Player, Egg)
                            return PetsChosen
                        else
                            return "Error", "Player Doesn't Own Gamepass"
                        end
                    else
                        return "Error", "Not Enough Inventory Room"
                    end
                else
                    return "Error", "Insufficient Currency"
                end
            elseif Type == "Auto" then  
                if Player.Data.AutoEggOwned.Value == true then
                    if Player.Data.TripleEggOwned.Value == true then
                        if Player.leaderstats:FindFirstChild(Currency).Value    >= Cost * 3 then
                            if totalPets(Player) <  Player.Data.MaxStorage.Value - 2 then
                                if Player.Data.TripleEggOwned.Value ==  true then
                                    local PetsChosen = tripleEgg(Player,    Egg)
                                    return PetsChosen
                                else
                                    return "Error", "Player Doesn't Own     Gamepass"
                                end
                            else
                                return "Error", "Not Enough Inventory   Room"
                            end
                        else
                            return "Error", "Insufficient Currency"
                        end
                    else
                        if Player.leaderstats:FindFirstChild(Currency).Value    >= Cost then
                            if totalPets(Player) <  Player.Data.MaxStorage.Value then
                                local PetChosen = singleEgg(Player, Egg)
                                return PetChosen
                            else
                                return "Error", "Not Enough Inventory   Room"
                            end
                        else
                            return "Error", "Insufficient Currency"
                        end
                    end
                else
                    return "Error", "Player Doesn't Own Gamepass"
                end
            end
        else
            if totalPets(Player) < Player.Data.MaxStorage.Value then
                return "Error", "Robux Purchase"
            else
                return "Error", "Not Enough Inventory Room"
            end
        end
    end
else
    return "Error", "Too far away"
end
end
end

game.Players.PlayerAdded:Connect(function(plr)
PlayerDebounce[#PlayerDebounce + 1] = {plr.Name, false}
end)

game.Players.PlayerRemoving:Connect(function(plr)
for i,v in pairs(PlayerDebounce) do
if v[1] == plr.Name then
    v = nil
end
end
end)

for i,v in pairs(Eggs) do
local ProductID = v["ProductID"]
if ProductID ~= nil then
MS.ProcessReceipt = function(ReceiptInfo)
    local Player =  game:GetService("Players"):GetPlayerByUserId(ReceiptInfo.PlayerId)
    if ReceiptInfo.ProductId == ProductID then
        spawn(function()
            local Result = singleEgg(Player, i)
            RS.RemoteEvents.EggOpened:InvokeClient(Player, Eggs[i], Result)
        end)
        return Enum.ProductPurchaseDecision.PurchaseGranted
    end
end
end
end

RS.RemoteEvents.EggOpened.OnServerInvoke = UnboxEgg
0
This is kind of a long script. Did you took this script from a tutorial or smth? AProgrammR 398 — 2y
0
Kinda, this is the Egg Hatching System (OP) by DAVIDvniev. I have been trying to make it work with the script I have. urbanninja2442 0 — 2y

Answer this question