Add 10 new Roblox Lua code templates
Expanded template library from 15 to 25 templates: - Badge Award System: Achievement badge functionality - Inventory System: Complete item management - Countdown Timer UI: Visual timer with color changes - Sound/Music Manager: Background music and SFX control - Pathfinding NPC: AI navigation using PathfindingService - Checkpoint System: Save/respawn at checkpoints - Team System: Auto-balanced team assignment - Custom Chat Commands: Player emotes and actions - Character Morphing: Appearance transformation system - Kill Brick: Hazard parts with visual effects Now covers all categories: beginner, gameplay, UI, tools, and advanced.
This commit is contained in:
parent
68c881374d
commit
6e875b147a
1 changed files with 667 additions and 0 deletions
|
|
@ -526,6 +526,673 @@ Players.PlayerAdded:Connect(function(player)
|
|||
end
|
||||
end)
|
||||
end
|
||||
end)`,
|
||||
},
|
||||
{
|
||||
id: 'badge-award',
|
||||
name: 'Badge Award System',
|
||||
description: 'Award badges to players for achievements',
|
||||
category: 'gameplay',
|
||||
code: `local BadgeService = game:GetService("BadgeService")
|
||||
local Players = game:GetService("Players")
|
||||
|
||||
local badgeIds = {
|
||||
FirstJoin = 0, -- Replace with your badge ID
|
||||
KillMonster = 0,
|
||||
ReachLevel10 = 0,
|
||||
}
|
||||
|
||||
local function awardBadge(player, badgeId)
|
||||
local success, hasBadge = pcall(function()
|
||||
return BadgeService:UserHasBadgeAsync(player.UserId, badgeId)
|
||||
end)
|
||||
|
||||
if success and not hasBadge then
|
||||
local awarded, errorMsg = pcall(function()
|
||||
BadgeService:AwardBadge(player.UserId, badgeId)
|
||||
end)
|
||||
|
||||
if awarded then
|
||||
print("Awarded badge " .. badgeId .. " to " .. player.Name)
|
||||
return true
|
||||
else
|
||||
warn("Error awarding badge: " .. tostring(errorMsg))
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- Example: Award badge on first join
|
||||
Players.PlayerAdded:Connect(function(player)
|
||||
wait(2) -- Wait for player to fully load
|
||||
awardBadge(player, badgeIds.FirstJoin)
|
||||
end)
|
||||
|
||||
-- Export function for use in other scripts
|
||||
return {
|
||||
awardBadge = awardBadge,
|
||||
badgeIds = badgeIds
|
||||
}`,
|
||||
},
|
||||
{
|
||||
id: 'inventory-system',
|
||||
name: 'Inventory System',
|
||||
description: 'Complete player inventory with items and storage',
|
||||
category: 'advanced',
|
||||
code: `local Players = game:GetService("Players")
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local inventoryData = {}
|
||||
|
||||
local function createInventory(player)
|
||||
inventoryData[player.UserId] = {
|
||||
items = {},
|
||||
maxSlots = 20
|
||||
}
|
||||
end
|
||||
|
||||
local function addItem(player, itemName, quantity)
|
||||
local inventory = inventoryData[player.UserId]
|
||||
|
||||
if not inventory then
|
||||
warn("Player inventory not found")
|
||||
return false
|
||||
end
|
||||
|
||||
-- Check if item already exists
|
||||
if inventory.items[itemName] then
|
||||
inventory.items[itemName] = inventory.items[itemName] + quantity
|
||||
else
|
||||
-- Check if inventory is full
|
||||
local itemCount = 0
|
||||
for _ in pairs(inventory.items) do
|
||||
itemCount = itemCount + 1
|
||||
end
|
||||
|
||||
if itemCount >= inventory.maxSlots then
|
||||
return false, "Inventory full"
|
||||
end
|
||||
|
||||
inventory.items[itemName] = quantity
|
||||
end
|
||||
|
||||
print("Added " .. quantity .. "x " .. itemName .. " to " .. player.Name)
|
||||
return true
|
||||
end
|
||||
|
||||
local function removeItem(player, itemName, quantity)
|
||||
local inventory = inventoryData[player.UserId]
|
||||
|
||||
if not inventory or not inventory.items[itemName] then
|
||||
return false, "Item not found"
|
||||
end
|
||||
|
||||
if inventory.items[itemName] < quantity then
|
||||
return false, "Not enough items"
|
||||
end
|
||||
|
||||
inventory.items[itemName] = inventory.items[itemName] - quantity
|
||||
|
||||
if inventory.items[itemName] <= 0 then
|
||||
inventory.items[itemName] = nil
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
local function getInventory(player)
|
||||
return inventoryData[player.UserId]
|
||||
end
|
||||
|
||||
Players.PlayerAdded:Connect(createInventory)
|
||||
|
||||
Players.PlayerRemoving:Connect(function(player)
|
||||
inventoryData[player.UserId] = nil
|
||||
end)
|
||||
|
||||
-- Export functions
|
||||
return {
|
||||
addItem = addItem,
|
||||
removeItem = removeItem,
|
||||
getInventory = getInventory
|
||||
}`,
|
||||
},
|
||||
{
|
||||
id: 'countdown-timer',
|
||||
name: 'Countdown Timer UI',
|
||||
description: 'Visual countdown timer with events',
|
||||
category: 'ui',
|
||||
code: `local Players = game:GetService("Players")
|
||||
local player = Players.LocalPlayer
|
||||
local playerGui = player:WaitForChild("PlayerGui")
|
||||
|
||||
-- Create ScreenGui
|
||||
local screenGui = Instance.new("ScreenGui")
|
||||
screenGui.Name = "TimerGui"
|
||||
screenGui.Parent = playerGui
|
||||
|
||||
-- Create timer label
|
||||
local timerLabel = Instance.new("TextLabel")
|
||||
timerLabel.Size = UDim2.new(0, 200, 0, 50)
|
||||
timerLabel.Position = UDim2.new(0.5, -100, 0, 20)
|
||||
timerLabel.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
|
||||
timerLabel.BackgroundTransparency = 0.5
|
||||
timerLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
|
||||
timerLabel.Font = Enum.Font.GothamBold
|
||||
timerLabel.TextSize = 24
|
||||
timerLabel.Text = "60"
|
||||
timerLabel.Parent = screenGui
|
||||
|
||||
local function startCountdown(duration, onComplete)
|
||||
for i = duration, 0, -1 do
|
||||
timerLabel.Text = tostring(i)
|
||||
|
||||
-- Change color as timer runs out
|
||||
if i <= 10 then
|
||||
timerLabel.TextColor3 = Color3.fromRGB(255, 0, 0)
|
||||
elseif i <= 30 then
|
||||
timerLabel.TextColor3 = Color3.fromRGB(255, 255, 0)
|
||||
else
|
||||
timerLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
|
||||
end
|
||||
|
||||
task.wait(1)
|
||||
end
|
||||
|
||||
timerLabel.Text = "TIME'S UP!"
|
||||
|
||||
if onComplete then
|
||||
onComplete()
|
||||
end
|
||||
|
||||
task.wait(2)
|
||||
timerLabel.Text = "0"
|
||||
end
|
||||
|
||||
-- Example usage
|
||||
startCountdown(60, function()
|
||||
print("Timer completed!")
|
||||
end)`,
|
||||
},
|
||||
{
|
||||
id: 'sound-manager',
|
||||
name: 'Sound/Music Manager',
|
||||
description: 'Manage background music and sound effects',
|
||||
category: 'tools',
|
||||
code: `local SoundService = game:GetService("SoundService")
|
||||
|
||||
local SoundManager = {}
|
||||
SoundManager.sounds = {}
|
||||
SoundManager.music = nil
|
||||
|
||||
-- Add sound to manager
|
||||
function SoundManager:addSound(name, soundId, volume)
|
||||
local sound = Instance.new("Sound")
|
||||
sound.Name = name
|
||||
sound.SoundId = "rbxassetid://" .. soundId
|
||||
sound.Volume = volume or 0.5
|
||||
sound.Parent = SoundService
|
||||
|
||||
self.sounds[name] = sound
|
||||
return sound
|
||||
end
|
||||
|
||||
-- Play sound effect
|
||||
function SoundManager:playSound(name)
|
||||
local sound = self.sounds[name]
|
||||
if sound then
|
||||
sound:Play()
|
||||
else
|
||||
warn("Sound not found: " .. name)
|
||||
end
|
||||
end
|
||||
|
||||
-- Set background music
|
||||
function SoundManager:setMusic(soundId, volume)
|
||||
if self.music then
|
||||
self.music:Stop()
|
||||
self.music:Destroy()
|
||||
end
|
||||
|
||||
self.music = Instance.new("Sound")
|
||||
self.music.Name = "BackgroundMusic"
|
||||
self.music.SoundId = "rbxassetid://" .. soundId
|
||||
self.music.Volume = volume or 0.3
|
||||
self.music.Looped = true
|
||||
self.music.Parent = SoundService
|
||||
self.music:Play()
|
||||
end
|
||||
|
||||
-- Stop music
|
||||
function SoundManager:stopMusic()
|
||||
if self.music then
|
||||
self.music:Stop()
|
||||
end
|
||||
end
|
||||
|
||||
-- Fade in/out
|
||||
function SoundManager:fade(sound, targetVolume, duration)
|
||||
local startVolume = sound.Volume
|
||||
local steps = duration * 30 -- 30 FPS
|
||||
local increment = (targetVolume - startVolume) / steps
|
||||
|
||||
for i = 1, steps do
|
||||
sound.Volume = sound.Volume + increment
|
||||
task.wait(1/30)
|
||||
end
|
||||
|
||||
sound.Volume = targetVolume
|
||||
end
|
||||
|
||||
-- Example usage:
|
||||
-- SoundManager:addSound("Jump", 123456, 0.5)
|
||||
-- SoundManager:playSound("Jump")
|
||||
-- SoundManager:setMusic(789012, 0.3)
|
||||
|
||||
return SoundManager`,
|
||||
},
|
||||
{
|
||||
id: 'pathfinding-npc',
|
||||
name: 'Pathfinding NPC',
|
||||
description: 'NPC that follows player using PathfindingService',
|
||||
category: 'advanced',
|
||||
code: `local PathfindingService = game:GetService("PathfindingService")
|
||||
local RunService = game:GetService("RunService")
|
||||
|
||||
local npc = script.Parent
|
||||
local humanoid = npc:WaitForChild("Humanoid")
|
||||
local rootPart = npc:WaitForChild("HumanoidRootPart")
|
||||
|
||||
local target = workspace:WaitForChild("TargetPart") -- Change to your target
|
||||
local updateRate = 0.5
|
||||
local maxDistance = 50
|
||||
|
||||
local path = PathfindingService:CreatePath({
|
||||
AgentRadius = 2,
|
||||
AgentHeight = 5,
|
||||
AgentCanJump = true,
|
||||
WaypointSpacing = 4,
|
||||
})
|
||||
|
||||
local function getNextWaypoint(targetPosition)
|
||||
local success, errorMsg = pcall(function()
|
||||
path:ComputeAsync(rootPart.Position, targetPosition)
|
||||
end)
|
||||
|
||||
if success and path.Status == Enum.PathStatus.Success then
|
||||
local waypoints = path:GetWaypoints()
|
||||
|
||||
if #waypoints > 1 then
|
||||
return waypoints[2] -- Return next waypoint
|
||||
end
|
||||
else
|
||||
warn("Path computation failed: " .. tostring(errorMsg))
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function followPath()
|
||||
while true do
|
||||
if target and (rootPart.Position - target.Position).Magnitude <= maxDistance then
|
||||
local waypoint = getNextWaypoint(target.Position)
|
||||
|
||||
if waypoint then
|
||||
if waypoint.Action == Enum.PathWaypointAction.Jump then
|
||||
humanoid.Jump = true
|
||||
end
|
||||
|
||||
humanoid:MoveTo(waypoint.Position)
|
||||
humanoid.MoveToFinished:Wait()
|
||||
end
|
||||
else
|
||||
humanoid:MoveTo(rootPart.Position) -- Stop moving
|
||||
end
|
||||
|
||||
task.wait(updateRate)
|
||||
end
|
||||
end
|
||||
|
||||
-- Start following
|
||||
spawn(followPath)`,
|
||||
},
|
||||
{
|
||||
id: 'checkpoint-system',
|
||||
name: 'Checkpoint System',
|
||||
description: 'Save player checkpoints and respawn at last checkpoint',
|
||||
category: 'gameplay',
|
||||
code: `local Players = game:GetService("Players")
|
||||
local checkpoints = workspace:WaitForChild("Checkpoints"):GetChildren()
|
||||
|
||||
local playerCheckpoints = {}
|
||||
|
||||
-- Sort checkpoints by name (Checkpoint1, Checkpoint2, etc.)
|
||||
table.sort(checkpoints, function(a, b)
|
||||
return tonumber(a.Name:match("%d+")) < tonumber(b.Name:match("%d+"))
|
||||
end)
|
||||
|
||||
local function setupCheckpoints()
|
||||
for i, checkpoint in pairs(checkpoints) do
|
||||
checkpoint.Touched:Connect(function(hit)
|
||||
local humanoid = hit.Parent:FindFirstChild("Humanoid")
|
||||
|
||||
if humanoid then
|
||||
local player = Players:GetPlayerFromCharacter(hit.Parent)
|
||||
|
||||
if player then
|
||||
local currentCheckpoint = playerCheckpoints[player.UserId] or 0
|
||||
|
||||
if i > currentCheckpoint then
|
||||
playerCheckpoints[player.UserId] = i
|
||||
checkpoint.BrickColor = BrickColor.new("Bright green")
|
||||
|
||||
-- Visual feedback
|
||||
local originalSize = checkpoint.Size
|
||||
checkpoint.Size = originalSize * 1.2
|
||||
task.wait(0.2)
|
||||
checkpoint.Size = originalSize
|
||||
|
||||
print(player.Name .. " reached checkpoint " .. i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
Players.PlayerAdded:Connect(function(player)
|
||||
playerCheckpoints[player.UserId] = 0
|
||||
|
||||
player.CharacterAdded:Connect(function(character)
|
||||
task.wait(0.1) -- Wait for character to load
|
||||
|
||||
local checkpointIndex = playerCheckpoints[player.UserId]
|
||||
|
||||
if checkpointIndex > 0 then
|
||||
local checkpoint = checkpoints[checkpointIndex]
|
||||
if checkpoint then
|
||||
character:MoveTo(checkpoint.Position + Vector3.new(0, 3, 0))
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
setupCheckpoints()`,
|
||||
},
|
||||
{
|
||||
id: 'team-system',
|
||||
name: 'Team System',
|
||||
description: 'Auto-assign players to balanced teams',
|
||||
category: 'gameplay',
|
||||
code: `local Teams = game:GetService("Teams")
|
||||
local Players = game:GetService("Players")
|
||||
|
||||
-- Create teams if they don't exist
|
||||
local function createTeam(name, color)
|
||||
local team = Teams:FindFirstChild(name)
|
||||
if not team then
|
||||
team = Instance.new("Team")
|
||||
team.Name = name
|
||||
team.TeamColor = color
|
||||
team.AutoAssignable = false
|
||||
team.Parent = Teams
|
||||
end
|
||||
return team
|
||||
end
|
||||
|
||||
local redTeam = createTeam("Red", BrickColor.new("Bright red"))
|
||||
local blueTeam = createTeam("Blue", BrickColor.new("Bright blue"))
|
||||
|
||||
local function getTeamPlayerCount(team)
|
||||
local count = 0
|
||||
for _, player in pairs(Players:GetPlayers()) do
|
||||
if player.Team == team then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
local function assignToSmallestTeam(player)
|
||||
local redCount = getTeamPlayerCount(redTeam)
|
||||
local blueCount = getTeamPlayerCount(blueTeam)
|
||||
|
||||
if redCount <= blueCount then
|
||||
player.Team = redTeam
|
||||
else
|
||||
player.Team = blueTeam
|
||||
end
|
||||
|
||||
print(player.Name .. " assigned to " .. player.Team.Name .. " team")
|
||||
end
|
||||
|
||||
Players.PlayerAdded:Connect(function(player)
|
||||
assignToSmallestTeam(player)
|
||||
|
||||
player.CharacterAdded:Connect(function(character)
|
||||
task.wait(0.1)
|
||||
|
||||
-- Give team color to character
|
||||
local bodyColors = character:FindFirstChild("Body Colors")
|
||||
if bodyColors then
|
||||
bodyColors.HeadColor = player.Team.TeamColor
|
||||
bodyColors.TorsoColor = player.Team.TeamColor
|
||||
bodyColors.LeftArmColor = player.Team.TeamColor
|
||||
bodyColors.RightArmColor = player.Team.TeamColor
|
||||
bodyColors.LeftLegColor = player.Team.TeamColor
|
||||
bodyColors.RightLegColor = player.Team.TeamColor
|
||||
end
|
||||
end)
|
||||
end)`,
|
||||
},
|
||||
{
|
||||
id: 'chat-commands',
|
||||
name: 'Custom Chat Commands',
|
||||
description: 'Player chat commands for emotes and actions',
|
||||
category: 'tools',
|
||||
code: `local Players = game:GetService("Players")
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local commands = {
|
||||
["/dance"] = function(player)
|
||||
local character = player.Character
|
||||
if character then
|
||||
local humanoid = character:FindFirstChild("Humanoid")
|
||||
if humanoid then
|
||||
-- Play dance emote
|
||||
local danceAnimation = Instance.new("Animation")
|
||||
danceAnimation.AnimationId = "rbxassetid://507770239"
|
||||
local track = humanoid:LoadAnimation(danceAnimation)
|
||||
track:Play()
|
||||
return true, "Dancing!"
|
||||
end
|
||||
end
|
||||
return false, "Cannot dance"
|
||||
end,
|
||||
|
||||
["/sit"] = function(player)
|
||||
local character = player.Character
|
||||
if character then
|
||||
local humanoid = character:FindFirstChild("Humanoid")
|
||||
if humanoid then
|
||||
humanoid.Sit = true
|
||||
return true, "Sitting down"
|
||||
end
|
||||
end
|
||||
return false, "Cannot sit"
|
||||
end,
|
||||
|
||||
["/jump"] = function(player)
|
||||
local character = player.Character
|
||||
if character then
|
||||
local humanoid = character:FindFirstChild("Humanoid")
|
||||
if humanoid then
|
||||
humanoid.Jump = true
|
||||
return true, "Jumping!"
|
||||
end
|
||||
end
|
||||
return false, "Cannot jump"
|
||||
end,
|
||||
|
||||
["/reset"] = function(player)
|
||||
if player.Character then
|
||||
player.Character:BreakJoints()
|
||||
return true, "Resetting character"
|
||||
end
|
||||
return false, "Cannot reset"
|
||||
end,
|
||||
}
|
||||
|
||||
Players.PlayerAdded:Connect(function(player)
|
||||
player.Chatted:Connect(function(message)
|
||||
local lowerMessage = string.lower(message)
|
||||
|
||||
for command, func in pairs(commands) do
|
||||
if string.sub(lowerMessage, 1, #command) == command then
|
||||
local success, result = func(player)
|
||||
if success then
|
||||
print(player.Name .. ": " .. result)
|
||||
else
|
||||
warn(player.Name .. ": " .. result)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)`,
|
||||
},
|
||||
{
|
||||
id: 'morph-system',
|
||||
name: 'Character Morphing',
|
||||
description: 'Change player appearance/morph into different models',
|
||||
category: 'gameplay',
|
||||
code: `local Players = game:GetService("Players")
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
-- Store morphs in ReplicatedStorage
|
||||
local morphsFolder = ReplicatedStorage:WaitForChild("Morphs")
|
||||
|
||||
local function applyMorph(player, morphName)
|
||||
local character = player.Character
|
||||
if not character then
|
||||
return false, "Character not found"
|
||||
end
|
||||
|
||||
local morph = morphsFolder:FindFirstChild(morphName)
|
||||
if not morph then
|
||||
return false, "Morph not found"
|
||||
end
|
||||
|
||||
local humanoid = character:FindFirstChild("Humanoid")
|
||||
if not humanoid then
|
||||
return false, "Humanoid not found"
|
||||
end
|
||||
|
||||
-- Store original values
|
||||
local originalWalkSpeed = humanoid.WalkSpeed
|
||||
local originalJumpPower = humanoid.JumpPower
|
||||
|
||||
-- Clear existing accessories
|
||||
for _, accessory in pairs(character:GetChildren()) do
|
||||
if accessory:IsA("Accessory") or accessory:IsA("Hat") then
|
||||
accessory:Destroy()
|
||||
end
|
||||
end
|
||||
|
||||
-- Apply morph appearance
|
||||
local morphClone = morph:Clone()
|
||||
|
||||
for _, part in pairs(morphClone:GetChildren()) do
|
||||
if part:IsA("Accessory") or part:IsA("Hat") then
|
||||
part.Parent = character
|
||||
elseif part:IsA("BodyColors") then
|
||||
local bodyColors = character:FindFirstChild("Body Colors")
|
||||
if bodyColors then
|
||||
bodyColors.HeadColor = part.HeadColor
|
||||
bodyColors.TorsoColor = part.TorsoColor
|
||||
bodyColors.LeftArmColor = part.LeftArmColor
|
||||
bodyColors.RightArmColor = part.RightArmColor
|
||||
bodyColors.LeftLegColor = part.LeftLegColor
|
||||
bodyColors.RightLegColor = part.RightLegColor
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Optionally modify stats
|
||||
if morphClone:FindFirstChild("WalkSpeed") then
|
||||
humanoid.WalkSpeed = morphClone.WalkSpeed.Value
|
||||
end
|
||||
|
||||
if morphClone:FindFirstChild("JumpPower") then
|
||||
humanoid.JumpPower = morphClone.JumpPower.Value
|
||||
end
|
||||
|
||||
morphClone:Destroy()
|
||||
return true, "Morphed into " .. morphName
|
||||
end
|
||||
|
||||
-- Example: Touch pad to morph
|
||||
local morphPad = workspace:WaitForChild("MorphPad")
|
||||
|
||||
morphPad.Touched:Connect(function(hit)
|
||||
local humanoid = hit.Parent:FindFirstChild("Humanoid")
|
||||
|
||||
if humanoid then
|
||||
local player = Players:GetPlayerFromCharacter(hit.Parent)
|
||||
|
||||
if player then
|
||||
local success, message = applyMorph(player, "Ninja")
|
||||
print(message)
|
||||
end
|
||||
end
|
||||
end)`,
|
||||
},
|
||||
{
|
||||
id: 'kill-brick',
|
||||
name: 'Kill Brick',
|
||||
description: 'Instantly kill player on touch (lava, void, etc.)',
|
||||
category: 'beginner',
|
||||
code: `local killBrick = script.Parent
|
||||
|
||||
-- Make it look dangerous
|
||||
killBrick.BrickColor = BrickColor.new("Really red")
|
||||
killBrick.Material = Enum.Material.Neon
|
||||
|
||||
-- Optional: Add particle effects
|
||||
local particleEmitter = Instance.new("ParticleEmitter")
|
||||
particleEmitter.Texture = "rbxasset://textures/particles/smoke_main.dds"
|
||||
particleEmitter.Color = ColorSequence.new(Color3.fromRGB(255, 0, 0))
|
||||
particleEmitter.Size = NumberSequence.new(2)
|
||||
particleEmitter.Lifetime = NumberRange.new(1, 2)
|
||||
particleEmitter.Rate = 50
|
||||
particleEmitter.Parent = killBrick
|
||||
|
||||
-- Debounce to prevent multiple deaths
|
||||
local debounce = {}
|
||||
|
||||
killBrick.Touched:Connect(function(hit)
|
||||
local humanoid = hit.Parent:FindFirstChild("Humanoid")
|
||||
|
||||
if humanoid then
|
||||
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
|
||||
|
||||
-- Debounce check
|
||||
if player and not debounce[player.UserId] then
|
||||
debounce[player.UserId] = true
|
||||
|
||||
-- Kill the player
|
||||
humanoid.Health = 0
|
||||
print(player.Name .. " touched the kill brick!")
|
||||
|
||||
-- Reset debounce after respawn
|
||||
task.wait(2)
|
||||
debounce[player.UserId] = nil
|
||||
elseif not player then
|
||||
-- Kill NPCs or other humanoids
|
||||
humanoid.Health = 0
|
||||
end
|
||||
end
|
||||
end)`,
|
||||
},
|
||||
];
|
||||
|
|
|
|||
Loading…
Reference in a new issue