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

How can I randomize the models to be spawned in Workspace? {READ DESC}

Asked by 4 years ago

This MainScript is designed to spawn a "Template" after the player has touched "Landing2" and this will keep repeating after the player dies. (I shall repeat myself). A player would touch "Landing2" for the value in leaderstats to get +1 which is the "Sub-Level" and another "Template" would spawn and repeat and repeat, but then I realized that this was getting repetitive as now I want other rooms to spawn instead of the same "Template" spawning over and over again after the player touches "Landing2" and I'm having trouble randomizing it. please help.

Note: This game is supposed to be based on SCP-087 but I changed a couple of things like instead of SCP-087-1, I just replaced it with Gordon Ramsay and I just want it to spawn a few rooms in the stairwell instead of just stairs

Another note: I just putted here portions of the MainScript as it would be too long of a question.

local Players = require(game.ServerScriptService.LeaderBoardModule)

game.Lighting.TimeOfDay = 0

local Template = workspace.Template

local SubLevel = 1
local HeightOffset = Template:GetExtentsSize().Y - 4
local MinSPCShowAtLVLFromPlr = 5
local MaxSPCShowAtLVLFromPlr = 10
local SCP_Brain = script["SCP-087 Brain"]:Clone()
local SummonedSCP = false
local TemplateTble = {Total = 0}
local Pad1 = {}
local Pad2 = {}

TemplateTble:init(Template)
--[[ Clear our function out from the table so it's not included in the for loops below and break things ]]
TemplateTble["init"] = nil



local TemplateMiddlePart = (function()
    local Part = nil
    local TemplateBits = TemplateTble
    local SX = 0
    local SY = 0
    local SZ = 0
    local CenterPoint = Vector3.new()
    for key,Obj in next, TemplateBits do
        if(key ~= "Total") then
            --print(key,Obj)
            if(Obj.Ref:IsA("BasePart") == true) then
                local X = Obj.Ref.Position.X
                local Y = Obj.Ref.Position.Y
                local Z = Obj.Ref.Position.Z
                SX = SX + X 
                SY = SY + Y
                SZ = SZ + Z
            end
        end
    end
    SX = SX/TemplateBits.Total
    SY = SY/TemplateBits.Total
    SZ = SZ/TemplateBits.Total
    CenterPoint = Vector3.new(SX,SY,SZ)
    local Dist = math.huge
    for key,Obj in next, TemplateBits do
        if(key ~= "Total") then
            if(Obj.Ref:IsA("BasePart") == true) then
                local D = (CenterPoint - Obj.Ref.Position).magnitude
                if(D < Dist) then
                    Part = Obj.Ref
                    Dist = D
                end
            end
        end
    end
    return Part
end)()

function CreateNextLevel(newLevel)
    local YOffset = Template:GetExtentsSize().Y
    local Exists = workspace:FindFirstChild("Level_"..newLevel) ~= nil  
    if(Exists == false) then
        -- Right if the level doesn't exist then lets create it!...
        local Clone = Template:Clone()
        for key,Tble in next, TemplateTble do
            if(key ~= "Total") then
                local Obj = Tble.Ref
                local CCopy_Part = Clone:FindFirstChild(key,true)
                if(CCopy_Part ~= nil) then
                    CCopy_Part.Parent.Position = Obj.Position -Vector3.new(0,SubLevel*(YOffset-4.5),0) 
                    if(CCopy_Part.Parent.Name == "Landing2") then
                        CCopy_Part.Parent.Touched:connect(function(otr) ConnectNewLevel(otr,CCopy_Part.Parent) end)
                    end
                    if(CCopy_Part.Parent.Name == "Landing1") then
                        CCopy_Part.Parent.Touched:connect(function(otr) AddLevelToPlayer(otr,CCopy_Part.Parent.Parent) end)
                    end
                end
            end

        end
        Clone.MyLevel.Value = SubLevel
        Clone.Name = "Level_"..SubLevel
        Clone.Parent = workspace 
        SubLevel = SubLevel +1
    end
end

workspace.Template.Landing1.Touched:connect(function(otr)
    local Player = otr.Parent
    AddLevelToPlayer(otr,workspace.Template)
end)

workspace.Template.Landing2.Touched:connect(function(otr) 
    local Player = otr.Parent
    ConnectNewLevel(otr,workspace.Template.Landing2)
end)

Answer this question