Не делать случайного питомца, просто давать каждый раз самого редкого. Как мне это исправить? - PullRequest
0 голосов
/ 30 мая 2020

Я делаю симулятор на roblox, и в нем есть система питомцев. Я переделал, как работает люк, и по какой-то причине он начал давать сбои, и всегда давал одного и того же питомца, а питомец всегда был самым редким. Не знаю, в чем проблема, вот сценарий. Раньше весовая система работала отлично, но теперь она не работает. Я сравнил его со старой версией игры, и разница только в том, как называются переменные.

game.ReplicatedStorage.OpenEgg.OnServerInvoke = (function(player, amount, egg)
    print("Fired")
    if not player:FindFirstChild("Debounce") then
        if amount == "One" then
            local CC = player.leaderstats.CloudCoins
            local EO = player.leaderstats.EggsOpened
            local EGGS = require(game.ReplicatedStorage.EGGS)
            local Data = EGGS[egg]
            local Price = Data["Cost"]
            local Pets = Data["Pets"]
            local TotalWeight = 0
            for i,v in pairs(Pets) do
                TotalWeight = TotalWeight + v[1]
            end
            local function ChoosePet(player)
                local Chance = math.random(1,TotalWeight)
                local Counter = 0
                for d,c in pairs(Pets)do
                    Counter = Counter + c[1]
                    if Chance >= Counter then
                        return d
                    end
                end
            end
            local function GetChance(ChosenPet)
                for i, v in pairs(Pets)do
                    for o,b in pairs(Pets) do
                        if o == ChosenPet then
                            return b[1]
                        end
                    end
                end
            end
            if CC.Value >= Price then
                local ChosenPet = ChoosePet(player)
                local Chance = GetChance(ChosenPet)
                CC.Value = CC.Value - Price
                EO.Value = EO.Value + 1
                local Pet = Instance.new("BoolValue")
                Pet.Name = ChosenPet
                Pet.Parent = player.Pets
                if not player.PetsA:FindFirstChild(Pet.Name.." Amount") then
                    local AmountA = Instance.new("IntValue")
                    AmountA.Name = Pet.Name.." Amount"
                    AmountA.Value = 1
                else
                    local AmountA = player.PetsA[Pet.Name.." Amount"]
                    AmountA.Value = AmountA.Value + 1
                end
                local Level = Instance.new("IntValue")
                local Xp = Instance.new("IntValue")
                local Number = Instance.new("IntValue")
                Number.Name = "Number"
                Number.Value = player.PetsA[Pet.Name.." Amount"].Value
                Number.Parent = Pet
                Level.Name = "Level"
                Xp.Name = "XP"
                Level.Value = 1
                Xp.Value = 0
                Level.Parent = Pet
                Xp.Parent = Pet
                return("Hatched")
            else
                return("NotEnoughCoins")
            end
        end
        if amount == "Triple" then
            local CC = player.leaderstats.CloudCoins
            local EO = player.leaderstats.EggsOpened
            local EGGS = require(game.ReplicatedStorage.EGGS)
            local Data = EGGS[egg]
            local Price = Data["Cost"]
            local Pets = Data["Pets"]
            local TotalWeight = 0
            for i,v in pairs(Pets) do
                TotalWeight = TotalWeight + v[1]
            end
            local function ChoosePet(player)
                local Chance = math.random(1,TotalWeight)
                local Counter = 0
                for d,c in pairs(Pets)do
                    Counter = Counter + c[1]
                    if Chance >= Counter then
                        return d
                    end
                end
            end
            local function GetChance(ChosenPet)
                for i, v in pairs(Pets)do
                    for o,b in pairs(Pets) do
                        if o == ChosenPet then
                            return b[1]
                        end
                    end
                end
            end
            if CC.Value >= Price*3 then
                local ChosenPet1,ChosenPet2,ChosenPet3 = ChoosePet(player),ChoosePet(player),ChoosePet(player)
                local Chance1,Chance2,Chance3 = GetChance(ChosenPet1),GetChance(ChosenPet2),GetChance(ChosenPet3)
                CC.Value = CC.Value - Price*3
                EO.Value = EO.Value + 3
                local Pet1 = Instance.new("BoolValue")
                Pet1.Name = ChosenPet1
                Pet1.Parent = player.Pets
                local Level1 = Instance.new("IntValue")
                local Xp1 = Instance.new("IntValue")
                local Number1 = Instance.new("IntValue")
                Number1.Name = "Number"
                if not player.PetsA:FindFirstChild(Pet1.Name.." Amount") then
                    local AmountA = Instance.new("IntValue")
                    AmountA.Name = Pet1.Name.." Amount"
                    AmountA.Value = 1
                else
                    local AmountA = player.PetsA[Pet1.Name.." Amount"]
                    AmountA.Value = AmountA.Value + 1
                end
                Number1.Value = player.PetsA[Pet1.Name.." Amount"].Value
                Number1.Parent = Pet1
                Level1.Name = "Level"
                Xp1.Name = "XP"
                Level1.Value = 1
                Xp1.Value = 0
                Level1.Parent = Pet1
                Xp1.Parent = Pet1
                local Pet2 = Instance.new("BoolValue")
                Pet2.Name = ChosenPet2
                Pet2.Parent = player.Pets
                local Level2 = Instance.new("IntValue")
                local Xp2 = Instance.new("IntValue")
                local Number2 = Instance.new("IntValue")
                Number2.Name = "Number"
                if not player.PetsA:FindFirstChild(Pet2.Name.." Amount") then
                    local AmountA = Instance.new("IntValue")
                    AmountA.Name = Pet2.Name.." Amount"
                    AmountA.Value = 1
                else
                    local AmountA = player.PetsA[Pet2.Name.." Amount"]
                    AmountA.Value = AmountA.Value + 1
                end
                Number2.Value = player.PetsA[Pet2.Name.." Amount"].Value
                Number2.Parent = Pet2
                Level2.Name = "Level"
                Xp2.Name = "XP"
                Level2.Value = 1
                Xp2.Value = 0
                Level2.Parent = Pet2
                Xp2.Parent = Pet2
                local Pet3 = Instance.new("BoolValue")
                Pet3.Name = ChosenPet3
                Pet3.Parent = player.Pets
                local Level3 = Instance.new("IntValue")
                local Xp3 = Instance.new("IntValue")
                local Number3 = Instance.new("IntValue")
                Number3.Name = "Number"
                if not player.PetsA:FindFirstChild(Pet3.Name.." Amount") then
                    local AmountA = Instance.new("IntValue")
                    AmountA.Name = Pet3.Name.." Amount"
                    AmountA.Value = 1
                else
                    local AmountA = player.PetsA[Pet3.Name.." Amount"]
                    AmountA.Value = AmountA.Value + 1
                end
                Number3.Value = player.PetsA[Pet3.Name.." Amount"].Value
                Number3.Parent = Pet3
                Level3.Name = "Level"
                Xp3.Name = "XP"
                Level3.Value = 1
                Xp3.Value = 0
                Level3.Parent = Pet3
                Xp3.Parent = Pet3
                return("Hatched")
            else
                return("NotEnoughCoins")
            end
        end
    end
end)

1 Ответ

0 голосов
/ 30 мая 2020

внимательно посмотрите на эти строки кода.

            local TotalWeight = 0
            for i,v in pairs(Pets) do
                TotalWeight = TotalWeight + v[1]
            end
            local function ChoosePet(player)
                local Chance = math.random(1,TotalWeight)
                local Counter = 0
                for d,c in pairs(Pets)do
                    Counter = Counter + c[1]
                    if Chance >= Counter then
                        return d
                    end
                end
            end

в следующий раз, когда мы увидим эту функцию, она назначит выбранного питомца игроку. Я бы посоветовал поиграть со значением Chance. Установите что-нибудь сумасшедшее и посмотрите, не попадете ли вы вместо другого питомца.

...