Возвращаемое значение не должно быть нулевым. Но это. Почему?
В моей системе инкубации яиц симулятора у меня возникла проблема. Я хочу вернуть случайный индекс ранга словаря (??), но когда я хочу клонировать возвращаемое значение объекта, но он говорит:
Попытка проиндексировать ноль с помощью «Клона»
Так что возвращаемое значение должно быть нулевым, я думаю...
У меня есть скрипт модуля под названием 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