- 16
- 3 387
TropicalMasterpiece
เข้าร่วมเมื่อ 3 ก.พ. 2024
Roblox Studio videos
Roblox Studio - Hide & Seek Game | Map Voting I
In this video, I will be beginning to make a map voting system for our Hide & Seek game.
0:00 Intro
0:32 Setup
3:56 voteHandler Local Script
7:11 voteSender Local Script
8:39 voteHandler Script
15:21 Main Script
18:41 Testing
21:22 Outro
0:00 Intro
0:32 Setup
3:56 voteHandler Local Script
7:11 voteSender Local Script
8:39 voteHandler Script
15:21 Main Script
18:41 Testing
21:22 Outro
มุมมอง: 39
วีดีโอ
Roblox Studio - Hide & Seek Game | Random Map Selector & Frozen Seekers
มุมมอง 18714 วันที่ผ่านมา
In this video, I will be making a random map selector so that I can use multiple maps in my Hide & Seek game. I will also be making chambers for our seekers to stay in while the hiders run and hide. 0:00 Intro 0:44 Random Map Selector 5:44 Frozen Seekers 8:28 Testing 10:57 Outro
Roblox Studio - Hide & Seek Game | Caverns Trailer
มุมมอง 9214 วันที่ผ่านมา
In this video, I will be showcasing the new Caverns map for my Hide and Seek game. This is mainly used to experiment so I can create better game trailers in the future.
Roblox Studio | How to make a NPC Pathfinding System
มุมมอง 38021 วันที่ผ่านมา
In this video, I will be making a NPC movement system using PathfindingService. R15 Idle Animation: "rbxassetid://507766388" R15 Walk Animation: "rbxassetid://507767714" PathfindingService Documentation create.roblox.com/docs/characters/pathfinding 0:00 Intro 1:08 NPCMover Script 2:10 Enabling NPCMover Script 3:40 Scripting the NPCMover 14:09 Testing 15:25 Outro
Roblox Studio | How to make a Player Friend NPC Spawner
มุมมอง 22921 วันที่ผ่านมา
In this video, I will be making a player friend NPC spawner. GetFriendsAsync Documentation create.roblox.com/docs/reference/engine/classes/Players#GetFriendsAsync 0:00 Intro 0:21 Setup 1:47 FriendsHandler Script 5:47 NPCHandler ModuleScript 10:43 Testing 10:59 CallScript 12:12 Final Testing 12:38 Outro
Roblox Studio | How to make a Tagging System
มุมมอง 31121 วันที่ผ่านมา
In this video, I will be making a tagging system suitable for games such as Hide & Seek. 0:00 Intro 0:25 Setup 1:19 TagModule 6:04 TagHandler Script 9:10 CallScript 10:35 Testing 11:10 Final Changes 11:52 Outro
Roblox Studio | How to make a Team-Based Round System
มุมมอง 20028 วันที่ผ่านมา
In this video, I will be improving the round system and adding support for teams.
Roblox Studio | How to make a Moving Kill Brick
มุมมอง 98หลายเดือนก่อน
In this video, I will be making a moving kill brick / laser system.
Roblox Studio | How to make a Round System
มุมมอง 258หลายเดือนก่อน
In this video, I will be making a basic round system.
Roblox Studio - Hide & Seek Game | House Map
มุมมอง 174หลายเดือนก่อน
In this video, I will be making a house map to serve as a basis for the Hide & Seek game.
Roblox Studio | How to make a Secret Door
มุมมอง 127หลายเดือนก่อน
In this video, I will be making a secret door to use in my Hide & Seek Roblox game.
Roblox Studio - Hide & Seek Game | Status GUI
มุมมอง 112หลายเดือนก่อน
In this video, I create the Status UI that will tell players what is currently occurring in the game, informing them of the time remaining and seeker / hider counts. To fix script formatting: Ctrl A (Select All) Ctrl X (Cut selected text) Ctrl V (Paste selected text) This series is not intended to be used as a tutorial. My goal is to document my progress and improve my development abilities, wh...
Roblox Studio - Hide & Seek Game | Round System III
มุมมอง 85หลายเดือนก่อน
In this video, I will be improving the round system, fixing various errors, and adding a few visual details. To fix script formatting: Ctrl A (Select All) Ctrl X (Cut selected text) Ctrl V (Paste selected text) This series is not intended to be used as a tutorial. My goal is to document my progress and improve my development abilities, while also potentially helping viewers learn new things.
Roblox Studio - Hide & Seek Game | Round System II
มุมมอง 181หลายเดือนก่อน
In this video, I will be improving the round system, allowing for the game to endlessly loop & repeat. To fix script formatting: Ctrl A (Select All) Ctrl X (Cut selected text) Ctrl V (Paste selected text) This series is not intended to be used as a tutorial. My goal is to document my progress and improve my development abilities, while also potentially helping viewers learn new things.
Roblox Studio - Hide & Seek Game | Round System I
มุมมอง 184หลายเดือนก่อน
In this video, I will be making a round system and improving the tagging system in my Roblox Hide & Seek game. This series is not intended to be used as a tutorial. My goal is to document my progress and improve my development abilities, while also potentially helping viewers learn new things.
Roblox Studio - Hide & Seek Game | Basics
มุมมอง 775หลายเดือนก่อน
Roblox Studio - Hide & Seek Game | Basics
W video fam
Sorry for the wait! Anyways, here are the scripts added in this video:
voteHandler LocalScript - local repStorage = game:GetService("ReplicatedStorage") local events = repStorage:FindFirstChild("Events") local voteFolder = repStorage:FindFirstChild("Votes") local display = script.Parent local voteSender = script.voteSender events.sendVote.OnClientEvent:Connect(function() display.Visible = true -- Clone the votesender into all 3 displays for a = 1,3 do local clonedVS = voteSender:Clone() clonedVS.Parent = display:FindFirstChild("Display"..a) clonedVS.Enabled = true end end) events.endVoting.OnClientEvent:Connect(function() display.Visible = false end)
voteSender LocalScript - local repStorage = game:GetService("ReplicatedStorage") local events = repStorage:FindFirstChild("Events") local sendVote = events:FindFirstChild("sendVote") local display = script.Parent local voteButton = display:FindFirstChild("VoteButton") local voteNumber = display:FindFirstChild("voteNumber").Value local mapName = display:FindFirstChild("mapName") mapName.Text = repStorage:FindFirstChild("MapVotes"):FindFirstChild(voteNumber).Value voteButton.MouseButton1Click:Connect(function() sendVote:FireServer(voteNumber) end) -- Self destruct events.endVoting.OnClientEvent:Connect(function() script:Destroy() end)
voteHandler Script - local repStorage = game:GetService("ReplicatedStorage") local events = repStorage:FindFirstChild("Events") local sendVote = events:FindFirstChild("sendVote") local mapVotes = repStorage:FindFirstChild("MapVotes") local Votes = repStorage:FindFirstChild("Votes") local function finish() if #Votes:GetChildren() == repStorage.VotingPlayers.Value then -- Count the votes local votes = {} for playerVote, vote in pairs(Votes:GetChildren()) do local voteIndex = vote.Value if votes[voteIndex] == nil then votes[voteIndex] = 1 else votes[voteIndex] += 1 end end -- Determine a winner local highestNum = -1 local winnerMap = nil for mapIndex, voteNum in pairs(votes) do if voteNum > highestNum then highestNum = voteNum winnerMap = mapIndex end end -- Convert mapIndex to the chosen map local chosenMap = mapVotes:FindFirstChild(winnerMap).Value print("Voting over!","Winning map: "..chosenMap) -- Send info to the server repStorage.VotingFinished.Value = true repStorage.WinningMap.Value = chosenMap end end sendVote.OnServerEvent:Connect(function(plr,vote) local matchVote = Votes:FindFirstChild(plr.Name) if matchVote then matchVote:Destroy() end local plrVote = Instance.new("IntValue",Votes) plrVote.Name = plr.Name plrVote.Value = vote finish() end)
Main Script - local tweenService = game:GetService("TweenService") local players = game:GetService("Players") local serverStorage = game:GetService("ServerStorage") local serverScriptService = game:GetService("ServerScriptService") local repStorage = game:GetService("ReplicatedStorage") local pSpawn = repStorage:FindFirstChild("playSpawn") local module = require(serverScriptService:FindFirstChild("ExtraCommands")) local roundTime = 3 * 60 local playerFolder = serverStorage:FindFirstChild("Hiders") local chosenFolder = serverStorage:FindFirstChild("Seekers") local hidercount = repStorage:FindFirstChild("hiderCount") local seekercount = repStorage:FindFirstChild("seekerCount") local status = repStorage:FindFirstChild("Status") local maps = serverStorage:FindFirstChild("Maps") while task.wait(5) do status.Value = "Waiting for players." -- Wait until two players have joined the game repeat task.wait() until #players:GetChildren() > 1 local plrCount = #players:GetChildren() -- Begin map voting status.Value = "Vote for a map!" -- Randomize map selections local mapVotes = repStorage:FindFirstChild("MapVotes") for a=1,3 do mapVotes:FindFirstChild(a).Value = maps:GetChildren()[math.random(1,#maps:GetChildren())].Name end -- Give our players the voting GUI repStorage.Events.sendVote:FireAllClients() repStorage.VotingPlayers.Value = plrCount -- Countdown local cdNum = 0 while task.wait(1) do cdNum += 1 if cdNum == 30 or repStorage.VotingFinished.Value == true then break else status.Value = "Vote for a map! "..30-cdNum end end local winningMap = repStorage:FindFirstChild("WinningMap").Value local wMap = maps:FindFirstChild(winningMap) or maps:GetChildren()[math.random(1,#maps:GetChildren())] local cMap = wMap:Clone() cMap.Parent = workspace -- Reset values repStorage.VotingFinished.Value = false winningMap = "" -- Finish map voting status.Value = cMap.Name.." has been chosen" repStorage.Events.endVoting:FireAllClients() task.wait(2) local playSpawn = cMap:FindFirstChild("playSpawn") pSpawn.Value = playSpawn.Position -- Starting the game local random = Random.new() local chosen = players:GetChildren()[random.NextInteger(random,1,#game.Players:GetChildren())] -- Picks random player print(chosen.Name.." has been chosen as the seeker.") for a,b in pairs(players:GetChildren()) do if b.Name ~= chosen.Name then -- if player is NOT it local playerName = Instance.new("StringValue",playerFolder) playerName.Name = b.Name local pChar = b.Character or b.CharacterAdded:Wait() pChar:PivotTo(playSpawn.CFrame) end end -- Send chosen player into battle local seekerTeleport = cMap:FindFirstChild("SeekerTeleport") local cChar = chosen.Character or chosen.CharacterAdded:Wait() cChar:PivotTo(seekerTeleport.CFrame) task.wait(.1) cChar.HumanoidRootPart.Anchored = true for i = 30,0,-1 do task.wait(1) status.Value = "Hide: "..i end cChar.HumanoidRootPart.Anchored = false module:setSeeker(chosen) -- Restart the game once hiders are no longer playing local number = roundTime while task.wait(1) do number -= 1 status.Value = number hidercount.Value = #playerFolder:GetChildren() seekercount.Value = #chosenFolder:GetChildren() local over = false local Winners = {} local winner for a,b in pairs(playerFolder:GetChildren()) do if players:FindFirstChild(b.Name) == nil then b:Destroy() end end for a,b in pairs(chosenFolder:GetChildren()) do if players:FindFirstChild(b.Name) == nil then b:Destroy() end end if #playerFolder:GetChildren() == 0 then over = true winner = "Seekers" end if #chosenFolder:GetChildren() == 0 then over = true winner = "Hiders" end if number <= 0 then over = true winner = "Hiders" end if over == true then local function removePlayer(b) task.wait() local playerCounter = game.Players:FindFirstChild(b.Name) print(b.Name) local cChar = playerCounter.Character or playerCounter.CharacterAdded:Wait() if cChar:FindFirstChild("tagRadius") ~= nil then cChar:FindFirstChild("tagRadius"):Destroy() end if cChar:FindFirstChild("Highlight") ~= nil then cChar:FindFirstChild("Highlight"):Destroy() end -- Delete all welds that may prevent teleportation for _,d in pairs(cChar.HumanoidRootPart:GetChildren()) do if d:IsA("WeldConstraint") then d:Destroy() end end -- Remove map cMap:Destroy() -- Bring players back to spawn task.wait() cChar:SetPrimaryPartCFrame(workspace.SpawnLocation.CFrame + Vector3.new(0,3,0)) b:Destroy() end status.Value = "The "..winner.." have won the game." task.wait() for a,b in pairs(playerFolder:GetChildren()) do removePlayer(b) end for a,b in pairs(chosenFolder:GetChildren()) do removePlayer(b) end break end end task.wait(5) status.Value = "Intermission" end
thanks that would be much simple for me to do that thanks
very good tutorial, but can you please make tutorial on IT skins?
veryt cool i use for rooms fangame
i cant use for rooms fangame anyrmore i alredy made entity real!11!!
what if i want the code to select random players as the seeker
can you send this one to please
hahaha so funny and i have some crazy ideas =)
this was my script local tweenService = game.GetService("TweenService") local charTagged = game.charTagged:WaitForChild("TropicalMasterpiece") local character = charTagged.Character or charTagged.CharcterAdded:Wait() local root = character.HmanoidRooPart local ball = Instance.new("Part",character) ball.CFrame = root.cFrame ball.CanCollide = false ball.Shape = Enum.PartType.Ball local weld = Instance.new("Weld",ball) weld.Name = "Tagwled" weld.Part0 = root weld.Part1 = ball ball.Size = Vector3.new(9,9,9) ball.Transparency = 0 ball.Touched:Connect(function(part) local charTagged = part.Parent local d = false if part.Parent:FindFirstChild("Humanoid")and charTagged:FindFirstChild("freeze") and d == false then d = true print("testing") -- freezing the player local rootTagged = charTagged.HumanoidRootPart rootTagged.Anchored = true local freeze = Instance.new("Part",charTagged) freeze.CFrame = rootTagged.cFrame freeze.Name = "freeze" local weld = Instance.new("WeldConstraint",rootTagged) weld.Name = "freezeweld" weld.Part0 = rootTagged weld.Part1 = freeze freeze.Transparency = 0 freeze.BrickColor =BrickColor.Blue() freeze.Size = Vector3.new(1,1,1) local tweeninfo = TweenInfo.new(0.5,Enum.EasingStyle.Sine) local goal = {} goal.size = Vector3.new(1.88, 5.854, 4.594) goal.cFrame = rootTagged.cFrame local tween = tweenService:Create(freeze,tweeninfo,goal) tween:Play() tween.Completed:Wait() d = false end end)
I posted the up-to-date scripts in my newest video. But I've noticed that you get "TropicalMasterpiece" instead of your roblox character, make sure you change this to your username.
@@tropicalmasterpiece thanks
@@tropicalmasterpiece can you send me the script?
?
I tried to fix the script up a little, this worked for me. I would recommend that you update to the newer script though local tweenService = game:GetService("TweenService") repeat task.wait() until #game.Players:GetChildren() > 0 local tagPlayer = game.Players:GetChildren()[1] local character = tagPlayer.Character or tagPlayer.CharacterAdded:Wait() local root = character.HumanoidRootPart local ball = Instance.new("Part",character) ball.CFrame = root.cFrame ball.CanCollide = false ball.Shape = Enum.PartType.Ball local weld = Instance.new("Weld",ball) weld.Name = "tagWeld" weld.Part0 = root weld.Part1 = ball ball.Size = Vector3.new(9,9,9) ball.Transparency = 0.7 ball.Touched:Connect(function(part) local charTagged = part.Parent local d = false if part.Parent:FindFirstChild("Humanoid") and not charTagged:FindFirstChild("Freeze") and d == false then d = true print("Testing") -- Freezing the player local rootTagged = charTagged.HumanoidRootPart rootTagged.Anchored = true local freeze = Instance.new("Part",charTagged) freeze.CFrame = rootTagged.CFrame freeze.Name = "Freeze" local weld = Instance.new("WeldConstraint",rootTagged) weld.Name = "freezeWeld" weld.Part0 = rootTagged weld.Part1 = freeze freeze.Transparency = 0.7 freeze.BrickColor = BrickColor.Blue() freeze.Size = Vector3.new(1,1,1) local tweeninfo = TweenInfo.new(0.5,Enum.EasingStyle.Sine) local goal = {} goal.Size = Vector3.new(4,6,2) goal.CFrame = rootTagged.CFrame local tween = tweenService:Create(freeze,tweeninfo,goal) tween:Play() tween.Completed:Wait() d = false end end)
can you send the script because it dont work
this is one of the best tutorial series i found 👍 for me sometimes i struggle with you ;) but over all the game runs fine and i fixed or add some stuff i like. so thank you for the time and work ;) keep it up it would be nice if you can add: - afk system - so player can go afk and dont jump into the game. - winner (seeker or hider) get some coins - coins shop for some seeker and hider extras like speed or jump boost etc ;) - level system... only winners get some exp - based on the level system: give players an aura/title if they reached a specific level like 5, 10, 25, 50, 75, 100....
Yo sorry for being late but great video mate!
oh wait....where can i get the module script 'basic commands' for the time display ?
The format is: ("%02i:%02i"):format(s/60%60, s%60) Just make sure your seconds variable is called "s"
I really like this tutorial! I recommend adding more customisability options (e.g seeker skins, auras etc.) and a level system!
TagModule Script - local module = {} local taghandler = script.tagHandler -- Get team folders local repStorage = game:GetService("ReplicatedStorage") local chasers = repStorage:FindFirstChild("Chasers") local runners = repStorage:FindFirstChild("Runners") -- Set players to a team function module:AddTeam(player,team) local stringvalue = Instance.new('StringValue',team) stringvalue.Name = player.Name end -- Tagging the player function module:Tag(player) -- Getting the character of the player local char = player.Character or player.CharacterAdded:Wait() local hrp = char:FindFirstChild("HumanoidRootPart") -- Check if the player is not already tagged if not char:FindFirstChild("TagCircle") then -- Tagging player module:AddTeam(player,chasers) -- Create tag circle local circle = Instance.new("Part",char) circle.Name = "TagCircle" circle.CFrame = hrp.CFrame - Vector3.new(0,.5,0) circle.Shape = Enum.PartType.Ball circle.Size = Vector3.new(7,7,7) circle.Transparency = 1 circle.CanCollide = false -- Connect the tag circle local weld = Instance.new('WeldConstraint',hrp) weld.Part0 = hrp weld.Part1 = circle -- Enable the tagging system local ts = taghandler:Clone() ts.Parent = circle ts.Disabled = false end end return module
TagHandler Script - local players = game:GetService("Players") -- Get team folder local repStorage = game:GetService("ReplicatedStorage") local chasers = repStorage:FindFirstChild("Chasers") local runners = repStorage:FindFirstChild("Runners") -- Getting module script local tagModule = require(repStorage.tagmodule) -- Getting chaser info local circle = script.Parent local char = circle.Parent local tagplayer = players:GetPlayerFromCharacter(char) -- Tag player circle.Touched:Connect(function(hit) local tagchar = hit.Parent local humanoid = tagchar:FindFirstChild("Humanoid") if humanoid and not tagchar:FindFirstChild("TagCircle") then -- Get tagged player local tagged = players:GetPlayerFromCharacter(tagchar) local taggedvalue = runners:FindFirstChild(tagged.Name) -- Tag the player tagModule:Tag(tagged) taggedvalue:Destroy() end end)
NPCMover Script - local pathService = game:GetService("PathfindingService") local NPC = script.NPC.Value local humanoid = NPC.Humanoid local npcPaths = workspace:FindFirstChild("NPCPaths") local npcPoints = npcPaths:FindFirstChild("NPCPoints") local spawnpoint, endpoint -- Generate random spawn and end point repeat spawnpoint = npcPoints:GetChildren()[math.random(1,#npcPoints:GetChildren())] endpoint = npcPoints:GetChildren()[math.random(1,#npcPoints:GetChildren())] task.wait() until spawnpoint ~= endpoint -- Move NPC to spawn NPC:PivotTo(spawnpoint.CFrame) -- Animations local idleAnim = Instance.new("Animation",humanoid) idleAnim.AnimationId = "rbxassetid://507766388" idleAnim = humanoid.Animator:LoadAnimation(idleAnim) local walkAnim = Instance.new("Animation",humanoid) walkAnim.AnimationId = "rbxassetid://507767714" walkAnim = humanoid.Animator:LoadAnimation(walkAnim) -- Roblox Documentation - PathfindingService local Waypoints, NextWaypoint, Reached, Blocked -- Determine what the NPC will and wont walk on local mCosts = { -- Prioritize Smaller Numbers Concrete = 1, Plastic = 1000, Grass = 1000, SmoothPlastic = 1000 } -- Create path local path = pathService:CreatePath({ AgentRadius = 3, AgentHeight = 5, AgentCanJump = false, Costs = mCosts }) local function moveNPC(endPoint) local success, errorMessage = pcall(function() path:ComputeAsync(NPC.HumanoidRootPart.Position, endPoint.Position) end) -- If the path succeeds if success and path.Status == Enum.PathStatus.Success then Waypoints = path:GetWaypoints() Blocked = path.Blocked:Connect(function(blockedWaypointIndex) if blockedWaypointIndex >= NextWaypoint then Blocked:Disconnect() moveNPC(endPoint) end end) if not Reached then -- If the NPC still needs to move Reached = humanoid.MoveToFinished:Connect(function(reached) if reached and NextWaypoint < #Waypoints then NextWaypoint += 1 humanoid:MoveTo(Waypoints[NextWaypoint].Position) if walkAnim.IsPlaying ~= true then idleAnim:Stop() walkAnim:Play() end else walkAnim:Stop() idleAnim:Play() Reached:Disconnect() Blocked:Disconnect() task.wait(1) NPC:Destroy() script:Destroy() end end) end NextWaypoint = 2 humanoid:MoveTo(Waypoints[NextWaypoint].Position) else warn(errorMessage) NPC:Destroy() script:Destroy() end end moveNPC(endpoint)
FriendsHandler Script - local repStorage = game:GetService("ReplicatedStorage") local friends = repStorage:FindFirstChild("Friends") -- Roblox Documentation GetFriendsAsync local function getPages(pages) return coroutine.wrap(function() local page = 1 while true do for number, info in ipairs(pages:GetCurrentPage()) do coroutine.yield(info,page) end if pages.IsFinished then break end pages:AdvanceToNextPageAsync() page += 1 end end) end -- Recieve player joined message game.Players.PlayerAdded:Connect(function(player) -- Get the userID of the player local userId = player.UserId -- Create the folder local folder = Instance.new("Folder",friends) folder.Name = userId -- Get friends list from the server local pages = game.Players:GetFriendsAsync(userId) -- Search the pages for info,page in getPages(pages) do -- Insert the found user into friends list local idValue = Instance.new("IntValue",folder) idValue.Name = "Friend" idValue.Value = info.Id end end) -- Recieve player leaving message game.Players.PlayerRemoving:Connect(function(player) -- Remove the friends list from the server local userId = player.UserId local findFolder = friends:FindFirstChild(userId) if findFolder then findFolder:Destroy() end end)
NPCHandler Module - local module = {} local repStorage = game:GetService("ReplicatedStorage") local friends = repStorage:FindFirstChild("Friends") -- Create our NPC function module:CreateClient(player,userId) -- Locate our friend list local friendfolder = friends:FindFirstChild(player.UserId) -- Grab random friend if not userId then if not friendfolder or #friendfolder:GetChildren() < 2 then -- Grab default friend list friendfolder = friends:FindFirstChild("Default") end -- Find a random friend userId = friendfolder:GetChildren()[math.random(1,#friendfolder:GetChildren())].Value end -- Clone our rig local rig = repStorage:FindFirstChild("Rig"):Clone() -- Overload protection local reset = 0 -- Attempt to generate the NPC repeat reset += 1 local success, error = pcall(function() rig.Parent = game.Workspace local description = game.Players:GetHumanoidDescriptionFromUserId(userId) rig.Humanoid:ApplyDescription(description) end) task.wait() -- If this takes more than 10 attempts if reset == 10 then rig:Destroy() break end until success if rig then return rig end end return module
Scripts Checkpoint: Main Script- local tweenService = game:GetService("TweenService") local players = game:GetService("Players") local serverStorage = game:GetService("ServerStorage") local serverScriptService = game:GetService("ServerScriptService") local repStorage = game:GetService("ReplicatedStorage") local pSpawn = repStorage:FindFirstChild("playSpawn") local module = require(serverScriptService:FindFirstChild("ExtraCommands")) local roundTime = 3 * 60 local playerFolder = serverStorage:FindFirstChild("Hiders") local chosenFolder = serverStorage:FindFirstChild("Seekers") local hidercount = repStorage:FindFirstChild("hiderCount") local seekercount = repStorage:FindFirstChild("seekerCount") local status = repStorage:FindFirstChild("Status") local maps = serverStorage:FindFirstChild("Maps") while task.wait(5) do status.Value = "Waiting for players." -- Wait until two players have joined the game repeat task.wait() until #players:GetChildren() > 1 status.Value = "Game Starting" -- Get our map local map = maps:GetChildren()[math.random(1,#maps:GetChildren())] local cMap = map:Clone() cMap.Parent = workspace task.wait(2) local playSpawn = cMap:FindFirstChild("playSpawn") pSpawn.Value = playSpawn.Position -- Starting the game local random = Random.new() local chosen = players:GetChildren()[random.NextInteger(random,1,#game.Players:GetChildren())] -- Picks random player print(chosen.Name.." has been chosen as the seeker.") for a,b in pairs(players:GetChildren()) do if b.Name ~= chosen.Name then -- if player is NOT it local playerName = Instance.new("StringValue",playerFolder) playerName.Name = b.Name local pChar = b.Character or b.CharacterAdded:Wait() pChar:PivotTo(playSpawn.CFrame) end end -- Send chosen player into battle local seekerTeleport = cMap:FindFirstChild("SeekerTeleport") local cChar = chosen.Character or chosen.CharacterAdded:Wait() cChar:PivotTo(seekerTeleport.CFrame) task.wait(.1) cChar.HumanoidRootPart.Anchored = true for i = 30,0,-1 do task.wait(1) status.Value = "Hide: "..i end cChar.HumanoidRootPart.Anchored = false module:setSeeker(chosen) -- Restart the game once hiders are no longer playing local number = roundTime while task.wait(1) do number -= 1 status.Value = number hidercount.Value = #playerFolder:GetChildren() seekercount.Value = #chosenFolder:GetChildren() local over = false local Winners = {} local winner for a,b in pairs(playerFolder:GetChildren()) do if players:FindFirstChild(b.Name) == nil then b:Destroy() end end for a,b in pairs(chosenFolder:GetChildren()) do if players:FindFirstChild(b.Name) == nil then b:Destroy() end end if #playerFolder:GetChildren() == 0 then over = true winner = "Seekers" end if #chosenFolder:GetChildren() == 0 then over = true winner = "Hiders" end if number <= 0 then over = true winner = "Hiders" end if over == true then local function removePlayer(b) task.wait() local playerCounter = game.Players:FindFirstChild(b.Name) print(b.Name) local cChar = playerCounter.Character or playerCounter.CharacterAdded:Wait() if cChar:FindFirstChild("tagRadius") ~= nil then cChar:FindFirstChild("tagRadius"):Destroy() end if cChar:FindFirstChild("Highlight") ~= nil then cChar:FindFirstChild("Highlight"):Destroy() end -- Delete all welds that may prevent teleportation for _,d in pairs(cChar.HumanoidRootPart:GetChildren()) do if d:IsA("WeldConstraint") then d:Destroy() end end -- Remove map cMap:Destroy() -- Bring players back to spawn task.wait() cChar:SetPrimaryPartCFrame(workspace.SpawnLocation.CFrame + Vector3.new(0,3,0)) b:Destroy() end status.Value = "The "..winner.." have won the game." task.wait() for a,b in pairs(playerFolder:GetChildren()) do removePlayer(b) end for a,b in pairs(chosenFolder:GetChildren()) do removePlayer(b) end break end end task.wait(5) status.Value = "Intermission" end
ExtraCommands Module - local tweenService = game:GetService("TweenService") local players = game:GetService("Players") local serverStorage = game:GetService("ServerStorage") local serverScriptService = game:GetService("ServerScriptService") local repStorage = game:GetService("ReplicatedStorage") local module = {} local tagHandler = script:FindFirstChild("tagHandler") local playSpawn = repStorage:FindFirstChild("playSpawn") local hiders = serverStorage:FindFirstChild("Hiders") local seekers = serverStorage:FindFirstChild("Seekers") function module:weldPart(p0,p1) local weld = Instance.new("WeldConstraint",p0) weld.Part0 = p0 weld.Part1 = p1 end function module:freezePlayer(char) local rootTagged = char.HumanoidRootPart local freeze = Instance.new("Part",char) freeze.CFrame = rootTagged.CFrame freeze.Name = "Freeze" freeze.Transparency = 0.6 freeze.BrickColor = BrickColor.Blue() freeze.Size = Vector3.new(1,1,1) freeze.Anchored = true module:weldPart(rootTagged,freeze) -- Make the freeze part expand local tweenInfo = TweenInfo.new(0.5,Enum.EasingStyle.Sine) local goal = {} goal.Size = Vector3.new(4.5, 6.5, 2.5) game.Debris:AddItem(freeze,5) local tween = tweenService:Create(freeze,tweenInfo,goal) tween:Play() tween.Completed:Wait() repeat wait() until char:FindFirstChild("Freeze") == nil local explosion = Instance.new("Explosion",char) explosion.Position = char.HumanoidRootPart.Position explosion.BlastPressure = 0 local frozen = game.Players:GetPlayerFromCharacter(char) local counter = hiders:FindFirstChild(frozen.Name) if counter then counter:Destroy() end module:setSeeker(frozen) end function module:tagRadius(player) local char = player.Character or player.CharacterAdded:Wait() local root = char.HumanoidRootPart local ball = Instance.new("Part",char) ball.Name = "tagRadius" ball.CFrame = root.CFrame ball.CanCollide = false ball.Shape = Enum.PartType.Ball ball.Size = Vector3.new(9,9,9) ball.Transparency = 1 local tagHandle = tagHandler:Clone() tagHandle.Parent = ball tagHandle.Enabled = true module:weldPart(root,ball) return ball end function module:setSeeker(seeker) local seekerValue = Instance.new("StringValue",seekers) seekerValue.Name = seeker.Name local spawnLocation = playSpawn.Value local cChar = seeker.Character or seeker.CharacterAdded:Wait() local highlight = Instance.new("Highlight",cChar) highlight.FillTransparency = 0.85 highlight.OutlineTransparency = 0.4 highlight.OutlineColor = Color3.fromRGB(255,0,0) cChar:MoveTo(spawnLocation) module:tagRadius(seeker) end return module
Tag Handler Script- local tweenService = game:GetService("TweenService") local players = game:GetService("Players") local serverStorage = game:GetService("ServerStorage") local serverScriptService = game:GetService("ServerScriptService") local repStorage = game:GetService("ReplicatedStorage") local module = require(serverScriptService:FindFirstChild("ExtraCommands")) local ball = script.Parent local charSeeker = ball.Parent local hiderFolder = serverStorage:FindFirstChild("Hiders") local seekerFolder = serverStorage:FindFirstChild("Seekers") local d = false ball.Touched:Connect(function(hitPart) local char = hitPart.Parent if d == false and char and char:FindFirstChild("Humanoid") and char:FindFirstChild("Freeze") == nil and hiderFolder:FindFirstChild(char.Name) ~= nil then d = true -- Freezing the player module:freezePlayer(char) -- Tagging the player print(char.Name.." has been tagged by "..charSeeker.Name..".") -- Remove the player from hiders for a,b in pairs(hiderFolder:GetChildren()) do if b.Name == char.Name then b:Destroy() end end d = false end end)
I'm getting the error ServerScriptService.FriendsHandler:27: ServerScriptService.FriendsHandler:11: attempt to index number with 'IsFinished' and ReplicatedStorage.NpcHandler:7: attempt to index nil with 'userId'. how can i fix those?
I would assume your "pages" variable somehow became a number. I will put the scripts in the pinned comment
@@tropicalmasterpiece thanks! much appreciated
Can you send me all scrips from past videos pls
I will pin a comment with all the scripts so far
@@tropicalmasterpiece thank you this helps some ppl i think. i dont need it cause i have my code that works fine ;)
good game i love it. keep up!!
cant you just write the script in the comment at the end
I'll begin doing that in my tutorial videos. Thanks for the suggestion!
9:14 the script doesnt work see my script local tweenService = game:GetService("TweenService") local player = game.Players:WaitForChild("TropicalMasterpiece") local character = player.character or player.characterAdedd:Wait() local root = character.HumanoidRootPart local ball = Instance.new("Part",character) ball.CFrame = root.CFrame ball.CanCollide = false ball.Shape = Enum.PartType.Ball local weld = Instance.new("WeldConstraint",root) weld.Name = "TagWeld" weld.Part0 = root weld.Part1 = ball ball.Size = Vector3.new(9,9,9) ball.Transparency = 0.8 ball.Touched:Connect(function(part) local player = part.Parent if part.Parent:FindFirstChild("Humanoid") then --Freazing the player local rootTagged = player.HumanoidRootPart rootTagged.Anchorad = true local freeze = Instance.new("Part") freeze.CFrame = rootTagged.CFrame local weld = Instance.new("WeldConstraint",rootTagged) weld.Name = "FreezeWeld" weld.Part0 = root weld.Part1 = freeze freeze.Transparency = 0.6 freeze.BrickColor = BrickColor.Blue() freeze.Size = Vector3.new(1,1,1) local tweenInfo = TweenInfo.new(0.5,Enum.EasingStyle.Sine) local goal = {} goal.Size = Vector3.new(4,5,2) goal.CFrame = rootTagged.CFrame local tween = tweenService:Create(freeze,tweenInfo,goal) tween:Play() end end)
Your script looks fine, other than a few typos. When you check for your local player, make sure you change "TropicalMasterpiece" to your roblox username. When you check for your local character, change CharacterAdedd:Wait() to CharacterAdded:Wait() In your touched function, once you freeze the player, change "rootTagged.Anchorad = true" to "rootTagged.Anchored = true" Hope this helps!
ok,give me the script to copy it and make round system +maps+spectate for die people
ngl it would be cool to show some of the mechanics :>, map looks nice btw :D
Bro thanks so much
yo can you help me with one of my games I need a perm dev not just a commison please respond back for more
Hello! For now, I would like to remain solo as I don't currently have a lot of time for actual game development. However, if you have any issues or ideas I will gladly assist with those
yo
pls give me the script becuse it doesnt work
What doesn't work in the script, could you provide me with yours? Anyways, I plan on making a dedicated tutorial series for this in the future, and I plan on making the game uncopylocked once I publish it.
Amazingg
so i cant test the game with 2 people
for some reason whenever i test game with the 2 players thing no one is chosen as it but if i play the game normally it works
Can you provide the part of your script that would choose a player? Is it trying to find your username instead of a random one?
can you make uncopylocked pls
A great map but you could try duplicating those crystal and resize the second copy to be bigger than the original glowing one try setting transparent to 0.5 or 0.6 it will give you a glowing crystal effects nice video btw!
I’m using this as a tutorial 😅
And keep doing things wrong and I broke everything
is there a way to pathfind on certain parts with names instead of materials?
I'm not sure, probably not But you can also use invisible parts with a concrete material if you want the NPC to follow specific paths.
@@tropicalmasterpiece OHH I FOUND THE ISSUE. the parts were invisible, but need cancollide to properly work as a pathfinding material/part
ServerScriptService.NPC Handler:139: attempt to compare nil <= number if blockedWaypointIndex >= nextwaypoint then blocked:Disconnect() moveNPC(endpoint) end I also get a warn error message of nil
Could you provide me with your entire moveNPC local function?
@@tropicalmasterpiece it was because the nextwaypoint variable was nil when trying to compare it
great video man! keep going :D
great video underrated!
Tysm! This helped me! This is probs the easiest tutorial Ive seen! Keep the good work up!
ONLY 10 SUBS? underrated af
Thanks for tutorial underated as uhh hmmm like uhm eggs
hey whats your roblox username, great video btw!
Very good video 🔥
this is sick, I've never learned how to script other than AI. If you want I'd gladly test the scripts/game for you
keep up the good work it looks fun and better then the original one id love to try it
Great video and very informative❕❗️❕🤍❤🤍