Hi, I'm trying to make a model spawn at different spots in a place and I want people to catch the model and earn a badge. How do I do that? and also I'm new to scripting.
Let's assume you have a model aptly named "Model" in game.ServerStorage
Your spawning script should look like this:
--Initiate the model variable model = game.ServerStorage:FindFirstChild("Model") --Spawning function function spawnmodel(modeltospawn) --Randomize numbers (optional) math.randomseed(tick()) --Create a clone of the model local modelclone = modeltospawn:Clone() --Choose the location where the model spawns. Further explanation below. local modelpos = CFrame.new(math.random(x1,x2), <height>, math.random(y1,y2) --Set the position of the clone to the randomly selected position modelclone.Position = modelpos --Move the clone to game.Workspace (makes it appear in the game) modelclone.Parent = game.Workspace modelclone:MakeJoints() --Wait until the model is gone before allowing anything else to run while game.Workspace.model do wait() end end while true do math.randomseed(tick()) --Wait between 5 and 20 seconds wait(math.random(5,20) spawnmodel() end
Now, the model position picker on line 11.
How it works is it takes a number between x1 and x2 and makes that the model's x position, and takes a number between y1 and y2 and makes that the model's y position. This is important if we want our model to only spawn in a certain area. The height here is constant.
An easy way to find the numbers you need is to place 2 bricks at the corners of the area you want. When you look at the position property of the brick you'll see 3 numbers. Copy down the first one off the first brick and the first one off the second one and put them into the "math.random(x1,x2)" part. Do the same with (y1, y2), but with the last numbers of the position. To set the height, place another part where you want the model to be and copy down the middle number. Once you have all your position values, you can then remove the parts you used to find the numbers.
Use the function :SetPrimaryPartCFrame() like this:
model:SetPrimaryPartCFrame(CFrame.new(math.random(workspace.Baseplate.CFrame.X, workspace.Baseplate.CFrame.X+workspace.Baseplate.Size.X, workspace.Baseplate.CFrame.Y, workspace.Baseplate.CFrame.Z, workspace.Baseplate.CFrame.Z+workspace.Baseplate.Size.Z)
The function :SetPrimaryPartCFrame() requires a model to have a PrimaryPart set. It will change the CFrame of the Model's PrimaryPart and any other Part inside of it aswell.(Parts in Tools, Hats, Models, etc. included)