Возвращаемое значение не должно быть нулевым. Но это. Почему?

В моей системе инкубации яиц симулятора у меня возникла проблема. Я хочу вернуть случайный индекс ранга словаря (??), но когда я хочу клонировать возвращаемое значение объекта, но он говорит:

Попытка проиндексировать ноль с помощью «Клона»

Так что возвращаемое значение должно быть нулевым, я думаю...

У меня есть скрипт модуля под названием PetModule. Есть две таблицы, таблица редкости и таблица питомцев. Существует функция под названием «ChooseRandomPet». Я перечислил эти функции и таблицы здесь:

-PetsTable

      petmodule.pets = {
    
    ["Chocolatary"] = {
        "Chocolate Golem"
        
    };
    
    ["Insane"] = {
        "Choco Demon"
        
    };
    
    ["Mythical"] = {
        "Light Choco Bat"
        
    };
    
    ["Epic"] = {
        "Choco Bunny"
        
    };
    
    ["Rare"] = {
        "Choco Fox"
        
    };
    
    ["Common"] = {
        "Choco Mouse"
        
    };
    
    ["Poop"] = {
        "Choco Bear"
        
    };
    
}

-Таблица редкостей

      petmodule.rarities = {
    
    ["Chocolatary"] = 1;
    
    ["Insane"] = 2;
    
    ["Mythical"] = 4;
    
    ["Epic"] = 8;
    
    ["Rare"] = 14;
    
    ["Common"] = 38;
    
    ["Poop"] = 33;
    
}

-Выберите функцию случайного питомца

      petmodule.chooseRandomPet = function()
    

    
    
    local randomNumber = math.random(1,100)
    
    local   counter = 0
    
    for rarity, weight in pairs(petmodule.rarities) do
        
        counter += 1
        
        if randomNumber <= counter then
            
            local rarityTable = petmodule.pets[rarity]
            
            local chosenPet = rarityTable[math.random(1, #rarityTable)]
            
            return chosenPet
            
        end
    end
    
end

Я не знаю, что может быть не так. Если я хочу получить к нему доступ в своем локальном скрипте, скрипт покупки (скрипт модуля находится в RepStorage), а затем запустить функцию, если событие запущено, оно говорит, что возвращаемое значение равно нулю.

-Скрипт покупки (локальный)

      local debounce = false
local cost = 20

local Player = game.Players.LocalPlayer

local petmodule = require(game:GetService("ReplicatedStorage"):FindFirstChild("PetModule"))


script.Parent.MouseButton1Click:Connect(function()

    if Player.leaderstats[" Money "].Value >= cost then
        
        if not debounce then
            debounce = true


            game:GetService("ReplicatedStorage"):FindFirstChild("ChangeMoney"):FireServer(tonumber(Player.leaderstats[" Money "].Value - cost))
            local player = game.Players.LocalPlayer
            local petName = petmodule.chooseRandomPet(player)
            
            local petVal = Instance.new("StringValue", Player.PetInventory)
            


            game.ReplicatedStorage.HatchEgg:FireServer(petName)


            
            wait(3)
            debounce = false
        end

    end

end)

-Скрипт люка (локальный)

      game.ReplicatedStorage.HatchEgg.OnClientEvent:Connect(function(petName)

        
    camera.CameraType = Enum.CameraType.Scriptable
    
    camera.CFrame = studio.CamPart.CFrame
    
    wait(1.5)
    
    for i = 1, 50, 1 do
        studio["Meshes/egg"].Size = studio["Meshes/egg"].Size + Vector3.new(0.2,0.2,0.2)
        wait(0.01)
    end
    
    local explosion = Instance.new("Explosion")
    explosion.BlastRadius = 15
    explosion.BlastPressure = 0
    explosion.Position = studio["Meshes/egg"].Position
    explosion.ExplosionType = Enum.ExplosionType.NoCraters
    explosion.DestroyJointRadiusPercent = 0
    
    explosion.Parent = studio["Meshes/egg"]
    
    studio["Meshes/egg"].Transparency = 1
    local pet = game.ReplicatedStorage.Pets:FindFirstChild(petName)
    local petclone = pet:Clone() -- Here it errors

1 ответ

Я считаю, что ваша проблема в том, как вы выбираете редкость. Давайте используем некоторые реальные числа и пройдемся по вашему коду:

          local randomNumber = math.random(1,100)
    local counter = 0
    
    for rarity, weight in pairs(petmodule.rarities) do
        counter += 1
        if randomNumber <= counter then

Перебирая таблицу редкостей, давайте отследимcounterзначение, и давайте предположим, что наше случайное число вернулось14

Другие вопросы по тегам