diff --git a/src/lib/templates.ts b/src/lib/templates.ts index 7440160..ed75f50 100644 --- a/src/lib/templates.ts +++ b/src/lib/templates.ts @@ -3,7 +3,7 @@ export interface ScriptTemplate { name: string; description: string; code: string; - category: 'beginner' | 'gameplay' | 'ui' | 'tools'; + category: 'beginner' | 'gameplay' | 'ui' | 'tools' | 'advanced'; } export const templates: ScriptTemplate[] = [ @@ -195,6 +195,337 @@ Players.PlayerRemoving:Connect(function(player) else warn("Error saving data: " .. errorMsg) end +end)`, + }, + { + id: 'proximity-prompt', + name: 'Proximity Prompt Interaction', + description: 'Interactive prompt that appears when player is near', + category: 'ui', + code: `local part = script.Parent +local ProximityPromptService = game:GetService("ProximityPromptService") + +-- Create proximity prompt +local prompt = Instance.new("ProximityPrompt") +prompt.ObjectText = "Treasure Chest" +prompt.ActionText = "Open" +prompt.MaxActivationDistance = 10 +prompt.Parent = part + +prompt.Triggered:Connect(function(player) + print(player.Name .. " opened the chest!") + + -- Add your interaction logic here + part.BrickColor = BrickColor.new("Bright green") + + -- Disable for a cooldown + prompt.Enabled = false + wait(5) + prompt.Enabled = true + part.BrickColor = BrickColor.new("Bright yellow") +end)`, + }, + { + id: 'round-system', + name: 'Round System', + description: 'Complete round-based game loop system', + category: 'advanced', + code: `local ReplicatedStorage = game:GetService("ReplicatedStorage") +local Players = game:GetService("Players") + +local roundLength = 60 +local intermissionLength = 10 +local minimumPlayers = 2 + +local status = ReplicatedStorage:WaitForChild("Status") + +while true do + -- Intermission + repeat + status.Value = "Waiting for " .. minimumPlayers .. " players..." + wait(1) + until #Players:GetPlayers() >= minimumPlayers + + status.Value = "Intermission" + wait(intermissionLength) + + -- Round start + status.Value = "Game starting..." + wait(2) + + -- Game round + for i = roundLength, 0, -1 do + status.Value = "Round: " .. i .. " seconds remaining" + wait(1) + end + + status.Value = "Round ended!" + wait(3) +end`, + }, + { + id: 'leaderstats-advanced', + name: 'Advanced Leaderstats with XP', + description: 'Complete leaderstats system with coins, XP, and level', + category: 'gameplay', + code: `local Players = game:GetService("Players") + +local function calculateLevel(xp) + return math.floor(xp / 100) + 1 +end + +Players.PlayerAdded:Connect(function(player) + local leaderstats = Instance.new("Folder") + leaderstats.Name = "leaderstats" + leaderstats.Parent = player + + local coins = Instance.new("IntValue") + coins.Name = "Coins" + coins.Value = 0 + coins.Parent = leaderstats + + local level = Instance.new("IntValue") + level.Name = "Level" + level.Value = 1 + level.Parent = leaderstats + + local xp = Instance.new("IntValue") + xp.Name = "XP" + xp.Value = 0 + xp.Parent = player + + -- Update level when XP changes + xp.Changed:Connect(function(newXP) + level.Value = calculateLevel(newXP) + end) + + -- Example: Award XP every 10 seconds + spawn(function() + while player.Parent do + wait(10) + xp.Value = xp.Value + 10 + coins.Value = coins.Value + 5 + end + end) +end)`, + }, + { + id: 'shop-system', + name: 'Shop System', + description: 'Basic shop system with purchase handling', + category: 'gameplay', + code: `local Players = game:GetService("Players") +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +-- Shop items configuration +local shopItems = { + SpeedBoost = { + price = 100, + name = "Speed Boost", + duration = 30 + }, + DoubleJump = { + price = 250, + name = "Double Jump Power", + duration = 60 + } +} + +-- Purchase handler (put in ServerScriptService) +local function purchaseItem(player, itemName) + local item = shopItems[itemName] + + if not item then + return false, "Item not found" + end + + local leaderstats = player:FindFirstChild("leaderstats") + local coins = leaderstats and leaderstats:FindFirstChild("Coins") + + if not coins then + return false, "Player data not loaded" + end + + if coins.Value < item.price then + return false, "Not enough coins" + end + + -- Deduct coins + coins.Value = coins.Value - item.price + + -- Grant item effect + if itemName == "SpeedBoost" then + local character = player.Character + if character then + local humanoid = character:FindFirstChild("Humanoid") + if humanoid then + humanoid.WalkSpeed = humanoid.WalkSpeed * 2 + task.wait(item.duration) + humanoid.WalkSpeed = humanoid.WalkSpeed / 2 + end + end + end + + return true, "Purchased " .. item.name +end + +-- Example usage: +-- local success, message = purchaseItem(player, "SpeedBoost")`, + }, + { + id: 'camera-manipulation', + name: 'Camera Manipulation', + description: 'Custom camera angles and cinematic views', + category: 'advanced', + code: `local Players = game:GetService("Players") +local RunService = game:GetService("RunService") + +local player = Players.LocalPlayer +local camera = workspace.CurrentCamera + +-- Set camera mode +camera.CameraType = Enum.CameraType.Scriptable + +-- Example 1: Fixed camera position +local function setFixedCamera(position, lookAt) + camera.CFrame = CFrame.new(position, lookAt) +end + +-- Example 2: Follow a part +local targetPart = workspace:WaitForChild("CameraTarget") + +RunService.RenderStepped:Connect(function() + if targetPart then + local offset = Vector3.new(0, 10, 20) + camera.CFrame = CFrame.new(targetPart.Position + offset, targetPart.Position) + end +end) + +-- Example 3: Cinematic orbit +local angle = 0 +local radius = 30 +local center = Vector3.new(0, 10, 0) + +RunService.RenderStepped:Connect(function(delta) + angle = angle + delta * 0.5 + local x = math.cos(angle) * radius + local z = math.sin(angle) * radius + local position = center + Vector3.new(x, 15, z) + camera.CFrame = CFrame.new(position, center) +end)`, + }, + { + id: 'combat-system', + name: 'Basic Combat System', + description: 'Simple damage and health system', + category: 'gameplay', + code: `local tool = script.Parent +local damage = 10 +local cooldown = 1 +local canAttack = true + +tool.Activated:Connect(function() + if not canAttack then return end + + canAttack = false + local player = tool.Parent.Parent + local character = player.Character or player.CharacterAdded:Wait() + local humanoid = character:FindFirstChild("Humanoid") + + if humanoid then + -- Play attack animation + local animation = Instance.new("Animation") + animation.AnimationId = "rbxassetid://YOUR_ANIMATION_ID" + local animTrack = humanoid:LoadAnimation(animation) + animTrack:Play() + + -- Detect hit + local handle = tool:FindFirstChild("Handle") + if handle then + local hitPart = nil + local connection + + connection = handle.Touched:Connect(function(hit) + if hit.Parent ~= character then + local enemyHumanoid = hit.Parent:FindFirstChild("Humanoid") + if enemyHumanoid then + enemyHumanoid:TakeDamage(damage) + print("Dealt " .. damage .. " damage!") + connection:Disconnect() + end + end + end) + + wait(0.5) -- Attack window + connection:Disconnect() + end + end + + wait(cooldown) + canAttack = true +end)`, + }, + { + id: 'admin-commands', + name: 'Basic Admin Commands', + description: 'Simple admin command system with permissions', + category: 'tools', + code: `local Players = game:GetService("Players") + +local admins = { + 123456789, -- Replace with actual UserIds + 987654321, +} + +local commands = { + ["kill"] = function(admin, targetName) + local target = Players:FindFirstChild(targetName) + if target and target.Character then + target.Character.Humanoid.Health = 0 + return true, "Killed " .. targetName + end + return false, "Player not found" + end, + + ["tp"] = function(admin, targetName) + local target = Players:FindFirstChild(targetName) + if target and target.Character and admin.Character then + admin.Character.HumanoidRootPart.CFrame = + target.Character.HumanoidRootPart.CFrame + return true, "Teleported to " .. targetName + end + return false, "Cannot teleport" + end, + + ["heal"] = function(admin, targetName) + local target = Players:FindFirstChild(targetName) + if target and target.Character then + target.Character.Humanoid.Health = + target.Character.Humanoid.MaxHealth + return true, "Healed " .. targetName + end + return false, "Player not found" + end, +} + +local function isAdmin(player) + return table.find(admins, player.UserId) ~= nil +end + +Players.PlayerAdded:Connect(function(player) + if isAdmin(player) then + print(player.Name .. " is an admin!") + + player.Chatted:Connect(function(message) + local args = string.split(message, " ") + local cmd = string.lower(args[1]) + + if commands[cmd] then + local success, result = commands[cmd](player, args[2]) + print(result) + end + end) + end end)`, }, ];