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

how do you fix Argument 1 missing or nil error from egg hatching system?

Asked by 1 year ago

Hope you are having a good day. I am just here to say I have watched Alvinblox's egg hatching system tutorial and I am currently at part 2. There is a new error called "Argument 1 missing or nil" it is at line 60 in the petFollowPlayer script (local pet = game.ReplicatedStorage.HatchablePets:FindFirstChild(petName)) here is the code

petFollowPlayer


local function equipPet(player, pet, petName)
    print(player)
    local character = player.Character
    if pet ~= nil and character ~= nil then
        if character:FindFirstChild(player.Name.."s' pet") then
            character(player.Name.."s' pet"):Destroy()
        end
        if character.HumanoidRootPart:FindFirstChild("attachmentCharacter") then
            character.HumanoidRootPart:FindFirstChild("attachmentCharacter"):Destroy()
        end
        pet.Name = player.Name.."'s pet"
        pet:SetPrimaryPartCFrame(character.HumanoidRootPart.CFrame)
        local modelSize = pet.PrimaryPart.Size
        local attachmentCharacter = Instance.new("Attachment")
        attachmentCharacter.Visible = false
        attachmentCharacter.Parent = character.HumanoidRootPart
        attachmentCharacter.Position = Vector3.new(-1,0,1) + modelSize
        attachmentCharacter.Name = "attachmentCharacter"
        local attachmentPet = Instance.new("Attachment")
        attachmentPet.Parent = pet.PrimaryPart
        local alignPosition = Instance.new("AlignPosition")
        alignPosition.MaxForce = 25000
        alignPosition.Attachment0 = attachmentPet
        alignPosition.Attachment1 = attachmentCharacter
        alignPosition.Responsiveness = 25
        alignPosition.Parent = pet
        local alignOrientation = Instance.new("AlignOrientation")
        alignOrientation.MaxTorque = 25000
        alignOrientation.Attachment0= attachmentPet
        alignOrientation.Attachment1= attachmentCharacter
        alignOrientation.Responsiveness = 25
        alignOrientation.Parent = pet

        pet.Parent = character
    end
end

game.Players.PlayerAdded:Connect(function(player)
    local equipedPet = Instance.new("StringValue")
    equipedPet.Name = "EquipedPet"
    equipedPet.Parent = player
    equipedPet.Value = ""
    player.CharacterAdded:Connect(function(char)
        if game.ReplicatedStorage:WaitForChild("HatchablePets"):FindFirstChild(equipedPet.Value) then
            local clone =game.ReplicatedStorage:WaitForChild("HatchablePets"):FindFirstChild(equipedPet.Value):Clone()
            equipPet(player,clone)
        end
    end)
    equipedPet.Changed:Connect(function ()
        if equipedPet.Value ~= nil then
            if game.ReplicatedStorage:WaitForChild("HatchablePets"):FindFirstChild(equipedPet.Value) then
                equipPet(player, game.ReplicatedStorage:WaitForChild("HatchablePets"):FindFirstChild(equipedPet.Value):Clone())

            end
        end
    end)
end)
game.ReplicatedStorage.equipPet.OnServerEvent:Connect(function(player,petName)
    local pet = game.ReplicatedStorage.HatchablePets:FindFirstChild(petName)
    if pet and player.PetInventory:FindFirstChild(petName) then
        player.EquipedPet.Value = petName
    end
end)
game.ReplicatedStorage.unequipPet.OnServerEvent:Connect(function(player)
    player.EquippedPet.Value = ""
    if player.Character:FindFirstChild(player.Name.."'s name") then
        player.Character[player.Name.."'s pet"]:Destroy()
    end
    if player.Character.HumanoidRootPart:FindFirstChild("attachmentCharacter") then
        player.Character.HumanoidRootPart:FindFirstChild("attachmentCharacter"):Destroy()
    end
end)
buyBasicEgg local cost = 50 local petMoudle = require(game.ServerScriptService.BasicEggModule) local prompt = workspace["Egg Holder"].Part.ProximityPrompt prompt.Triggered:Connect(function (player) if player.leaderstats.Cash.Value >= cost then player.leaderstats.Cash.Value = player.leaderstats.Cash.Value - cost local pet = petMoudle.chooseRandomPet() local petval = Instance.new("StringValue") petval.Name = pet.Name petval.Parent = player.PetInventory print(pet.Name.." selected") game.ReplicatedStorage.HatchEgg:FireClient(player, pet) end end)

`basicEggAnimation`
local camera = workspace.Camera
local studio = workspace.Studio
local template = script.Parent.Pets.ScrollingFrame.Template
local scrollingFrame = script.Parent.Pets.ScrollingFrame
local buttonConnection = {}

local function setTemplateEquipped()
    for i,v in pairs(scrollingFrame:GetChildren()) do
        if v:FindFirstChild("Equipped") then
            v.Equipped.Text = "UNEQUIPPED"
            v.Equipped.TextColor3 = Color3.fromRGB(255,0,0)
        end
    end
    template.Equiped.Text = "Equipped"
    template.Equiped.TextColor3 = Color3.fromRGB(0,255,0)
end

local function addToFrame(pet)
    local newTemplate = template:Clone()
    newTemplate.Name = pet.Name
    newTemplate.petName.Text = pet.Name
    newTemplate.Parent = scrollingFrame
    newTemplate.Visible = true
    local camera = Instance.new("Camera")
    local newPet = pet:Clone()
    newPet.Parent = newTemplate.ViewportFrame
    camera.CFrame = CFrame.new(newPet.PrimaryPart.Position + (newPet.PrimaryPart.CFrame.LookVector * 3), newPet.PrimaryPart.Position)
    camera.Parent = newTemplate.ViewportFrame
    newTemplate.ViewportFrame.CurrentCamera = camera
    buttonConnection[#buttonConnection+1] = newTemplate.MouseButton1Click:Connect(function()
        if newTemplate.Equiped.Text == "EQUIPPED" then
            game.ReplicatedStorage.unequipPet:FireServer(pet.Name)
            newTemplate.Equiped.Text = "UNEQUIPPED"
            newTemplate.Equiped.TextColor3 = Color3.fromRGB(255,0,0)
        else
            game.ReplicatedStorage.equipPet:FireServer()
            setTemplateEquipped(newTemplate)
        end
    end)
end

game.ReplicatedStorage.HatchEgg.OnClientEvent:Connect(function (pet)
    addToFrame(pet)
    camera.CameraType = Enum.CameraType.Scriptable
    camera.CFrame = studio.CameraPart.CFrame
    wait(1.5)
    for i = 1,50,1 do
        studio["Egg Mesh"].Size = studio["Egg Mesh"].Size + Vector3.new(0.1,0.1,0.1)
        wait(0.01)
    end
    local explosion = Instance.new("Explosion")
    explosion.BlastRadius = 10
    explosion.BlastPressure = 0
    explosion.Position = studio["Egg Mesh"].Position
    explosion.ExplosionType = Enum.ExplosionType.NoCraters
    explosion.DestroyJointRadiusPercent = 0
    explosion.Parent = studio["Egg Mesh"]
    studio["Egg Mesh"].Transparency = 1
    local petClone = pet:Clone()
    for i,v in pairs(petClone:GetChildren()) do
        if v:IsA("ParticleEmitter") then
            v.Enabled = true
        end
    end 
    petClone:SetPrimaryPartCFrame(CFrame.new(studio["Egg Mesh"].Position, studio.CameraPart.Position))
    petClone.Parent = studio
    petClone.PrimaryPart.Position = Vector3.new(-14.382, -8.112, -605.565)
    petClone.PrimaryPart.Anchored = true
    local tweenInfo = TweenInfo.new(
        2,
        Enum.EasingStyle.Bounce,
        Enum.EasingDirection.Out,
        0,
        false,
        0
    )
    local TweenService = game:GetService("TweenService")
    local targetVector = petClone.PrimaryPart.Position + (petClone.PrimaryPart.CFrame.lookVector * 5) + Vector3.new(0,0.75,0)
    local lookVector = petClone.PrimaryPart.Position
    local targetCframe = CFrame.new(targetVector, lookVector)
    local propsToTween = { CFrame = targetCframe }
    local tween  = TweenService:Create(camera, tweenInfo, propsToTween)
    tween:Play()
    wait(5)
    for i,v in pairs(petClone:GetChildren()) do
        if v:IsA("ParticleEmitter") then
            v.Enabled = false
        end
    end 
    camera.CameraType = Enum.CameraType.Custom
    studio["Egg Mesh"].Transparency = 0
    studio["Egg Mesh"].Size = Vector3.new(4.732, 6, 4.732)
    petClone:Destroy()
end)

If you can help thank you so much it will be very appreciated :)

1 answer

Log in to vote
0
Answered by
sleazel 1287 Moderation Voter
1 year ago

You are missing an argument 1. Quick look at the line 60 of Your code reveals that the argument missing is petName.

local pet = game.ReplicatedStorage.HatchablePets:FindFirstChild(petName)

Where is that argument coming from? Going back a little bit, You will find that petName is being passed via a remote event:

game.ReplicatedStorage.equipPet.OnServerEvent:Connect(function(player,petName)

Now this means that the server is not receiving this argument on the event being fired. That means we need to find where the event is being fired on client. By browsing Your local script for a while I have found this fragment:

buttonConnection[#buttonConnection+1] = newTemplate.MouseButton1Click:Connect(function()
        if newTemplate.Equiped.Text == "EQUIPPED" then
            game.ReplicatedStorage.unequipPet:FireServer(pet.Name)
            newTemplate.Equiped.Text = "UNEQUIPPED"
            newTemplate.Equiped.TextColor3 = Color3.fromRGB(255,0,0)
        else
            game.ReplicatedStorage.equipPet:FireServer()
            setTemplateEquipped(newTemplate)
        end
    end)

As you can see, there are 2 events that may be fired here. Equip and unequip. You may notice that while unequip provides the pet name to unequip, equip event does not. You then need to replace this line (36 in You code) with this

game.ReplicatedStorage.equipPet:FireServer(pet.Name)

so that the server knows which pet to equip.

I hope this helps.

0
THANK YOU SO MUCH THIS WORKED guuguu058 9 — 1y
Ad

Answer this question