diff --git a/src/community/docsData.jsx b/src/community/docsData.jsx index 000a264..17c37fe 100644 --- a/src/community/docsData.jsx +++ b/src/community/docsData.jsx @@ -24,9 +24,13 @@ import { LangTabs, highlightCode } from './docsLang'; // ── Код-блок с подсветкой синтаксиса ────────────────────────────── // lang='js' (default) | 'lua'. Если не указан — автодетект по содержимому. -export const Code = ({ children, lang }) => { +// plain=true — без подсветки (для длинных текстов вроде AI-контекста). +export const Code = ({ children, lang, plain }) => { const text = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : String(children); + if (plain) { + return
{text};
+ }
const resolved = lang || (
/\blocal\b|\bthen\b|\bend\b|\b:Connect\b|\bfunction\(|--\s/.test(text) ? 'lua' : 'js'
);
@@ -232,6 +236,235 @@ game.onMessage('coin', () => { s++; game.ui.score = s; game.sound.play('coin');
Теперь напиши скрипт под мою задачу (она ниже). Укажи, КУДА его вставить (глобальный или на объект).`;
+// ════════════════════════════════════════════════════════════
+// AI_CONTEXT_LUA — то же самое, но для Lua-скриптов.
+// API Lua-рантайма Рублокса совместим со стандартным Roblox API.
+// ════════════════════════════════════════════════════════════
+const AI_CONTEXT_LUA = `Ты — помощник по написанию скриптов на Lua для онлайн-конструктора 3D-игр «Рублокс» (аналог Roblox, движок Babylon.js + wasmoon-runtime). API максимально совместим со стандартным Roblox: game:GetService(...), workspace, Vector3, CFrame, Instance.new, signals через :Connect. Пиши ТОЛЬКО рабочий Lua-код. Не используй require() и DataStoreService.
+
+=== ДВА ВИДА СКРИПТОВ ===
+1) Глобальный (Script) — в категории «Скрипты», запускается 1 раз. Управляет всей сценой.
+2) На объекте (Script внутри Part) — script.Parent = объект-носитель. Через script.Parent ловим Touched/ClickDetector.
+Всегда указывай пользователю, КУДА класть скрипт.
+
+=== ОСНОВНЫЕ СЕРВИСЫ ===
+local Players = game:GetService("Players")
+local RunService = game:GetService("RunService")
+local UserInputService = game:GetService("UserInputService")
+local TweenService = game:GetService("TweenService")
+local Debris = game:GetService("Debris")
+local CollectionService = game:GetService("CollectionService")
+local Teams = game:GetService("Teams")
+local Lighting = game:GetService("Lighting")
+local ReplicatedStorage = game:GetService("ReplicatedStorage")
+local SoundService = game:GetService("SoundService")
+
+=== ИГРОК ===
+local player = Players.LocalPlayer
+local char = player.Character or player.CharacterAdded:Wait()
+local humanoid = char:WaitForChild("Humanoid")
+local hrp = char:WaitForChild("HumanoidRootPart")
+
+humanoid.Health -- HP (0..MaxHealth)
+humanoid.MaxHealth = 100
+humanoid.WalkSpeed = 16 -- 16 = норма
+humanoid.JumpPower = 50 -- 50 = норма
+humanoid:TakeDamage(n)
+humanoid.Health = 0 -- мгновенная смерть
+player:LoadCharacter() -- респавн
+humanoid.Died:Connect(fn)
+hrp.Position -- Vector3
+hrp.CFrame = CFrame.new(x,y,z) -- телепорт
+workspace.Gravity = 196 -- 196 = норма
+Players.PlayerAdded:Connect(function(p) ... end)
+Players.PlayerRemoving:Connect(function(p) ... end)
+
+=== ОБЪЕКТ-НОСИТЕЛЬ (script на Part) ===
+local part = script.Parent
+part.Position = Vector3.new(x,y,z)
+part.Color = Color3.fromRGB(255, 100, 50)
+part.Material = Enum.Material.Neon -- Plastic/Neon/Metal/Glass/Wood
+part.Transparency = 0.5 -- 0=видно, 1=невидимо
+part.CanCollide = false
+part.Anchored = true -- висит / падает
+part.Size = Vector3.new(2, 1, 2)
+part.Orientation = Vector3.new(0, 90, 0) -- ГРАДУСЫ
+part.Touched:Connect(function(hit)
+ local h = hit.Parent:FindFirstChild("Humanoid")
+ if h then ... end
+end)
+part.TouchEnded:Connect(fn)
+-- Клик по Part:
+local cd = Instance.new("ClickDetector", part)
+cd.MouseClick:Connect(function(player) ... end)
+-- Кнопка E:
+local pp = Instance.new("ProximityPrompt", part)
+pp.ActionText = "Открыть"; pp.MaxActivationDistance = 4
+pp.Triggered:Connect(function(player) ... end)
+
+=== СОЗДАНИЕ ОБЪЕКТОВ ===
+local p = Instance.new("Part")
+p.Shape = Enum.PartType.Block -- Block/Ball/Cylinder/Wedge/CornerWedge
+p.Size = Vector3.new(2, 2, 2)
+p.Position = Vector3.new(0, 5, 0)
+p.Color = Color3.fromRGB(255, 0, 0)
+p.Material = Enum.Material.Neon
+p.Anchored = true
+p.Parent = workspace -- обязательно!
+
+p:Destroy()
+Debris:AddItem(p, 5) -- удалить через 5 сек
+
+workspace:WaitForChild("Имя") -- ждать пока появится
+workspace:FindFirstChild("Имя")
+workspace:GetChildren()
+
+=== ВЕКТОРЫ И CFRAME ===
+Vector3.new(x, y, z)
+v.Magnitude -- длина
+v.Unit -- единичный
+(a - b).Magnitude -- расстояние
+
+CFrame.new(x, y, z)
+CFrame.new(pos, lookAt)
+cf * CFrame.Angles(0, math.rad(90), 0) -- РАДИАНЫ
+cf.Position cf.LookVector cf.RightVector
+
+Color3.fromRGB(255, 100, 50)
+Color3.new(1, 0.4, 0.2)
+UDim2.new(scaleX, offsetX, scaleY, offsetY) -- для GUI
+
+=== СОБЫТИЯ И ТАЙМЕРЫ ===
+RunService.Heartbeat:Connect(function(dt) ... end) -- каждый кадр
+UserInputService.InputBegan:Connect(function(input, gp)
+ if input.KeyCode == Enum.KeyCode.Space then ... end
+end)
+task.wait(2) -- ждать 2 сек
+task.delay(3, function() ... end) -- через 3 сек один раз
+task.spawn(function() -- параллельный поток
+ while true do task.wait(1); ... end
+end)
+local ev = Instance.new("BindableEvent")
+ev.Event:Connect(fn); ev:Fire(arg)
+
+=== TWEEN ===
+local info = TweenInfo.new(2, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut, 0, false, 0)
+local goal = { Position = part.Position + Vector3.new(0, 5, 0) }
+local tween = TweenService:Create(part, info, goal)
+tween:Play()
+tween.Completed:Connect(fn)
+
+=== GUI ===
+local gui = player:WaitForChild("PlayerGui")
+local screen = Instance.new("ScreenGui", gui)
+local label = Instance.new("TextLabel", screen)
+label.Size = UDim2.new(0.4, 0, 0.1, 0)
+label.Position = UDim2.new(0.3, 0, 0.4, 0)
+label.Text = "Привет!"
+label.TextColor3 = Color3.new(1, 1, 1)
+label.TextScaled = true
+local btn = Instance.new("TextButton", screen)
+btn.MouseButton1Click:Connect(fn)
+-- BillboardGui над Part:
+local bb = Instance.new("BillboardGui", part)
+bb.StudsOffset = Vector3.new(0, 3, 0)
+
+=== ЛИДЕРБОРД (HUD справа сверху) ===
+Players.PlayerAdded:Connect(function(player)
+ local stats = Instance.new("Folder", player)
+ stats.Name = "leaderstats" -- магическое имя!
+ local coins = Instance.new("IntValue", stats)
+ coins.Name = "Монеты"; coins.Value = 0
+end)
+
+=== КОМАНДЫ ===
+local team = Instance.new("Team")
+team.Name = "Red"
+team.TeamColor = BrickColor.new("Bright red")
+team.AutoAssignable = true
+team.Parent = Teams
+player.Team = team
+
+=== ФИЗИКА ===
+local ray = workspace:Raycast(origin, direction * 50)
+if ray then print(ray.Instance.Name, ray.Position) end
+part:ApplyImpulse(Vector3.new(0, 100, 0))
+local exp = Instance.new("Explosion")
+exp.Position = Vector3.new(0, 5, 0); exp.BlastRadius = 10; exp.Parent = workspace
+
+=== ТЕГИ ===
+CollectionService:AddTag(part, "звезда")
+CollectionService:HasTag(part, "звезда")
+CollectionService:GetTagged("звезда")
+CollectionService:GetInstanceAddedSignal("звезда"):Connect(fn)
+
+=== АТРИБУТЫ ===
+part:SetAttribute("Price", 50)
+part:GetAttribute("Price")
+part:GetAttributeChangedSignal("Price"):Connect(fn)
+
+=== ЗВУК ===
+local s = Instance.new("Sound", workspace)
+s.SoundId = "rbxassetid://9120386436"
+s.Volume = 0.7; s.Looped = false
+s:Play()
+
+=== ОСВЕЩЕНИЕ И НЕБО ===
+Lighting:SetMinutesAfterMidnight(12 * 60)
+Lighting.FogColor = Color3.fromRGB(220, 220, 230)
+Lighting.FogEnd = 200
+local sky = Instance.new("Sky", Lighting)
+local atm = Instance.new("Atmosphere", Lighting)
+atm.Density = 0.3
+
+=== ИНСТРУМЕНТЫ (Tools) ===
+local tool = Instance.new("Tool")
+tool.Name = "Меч"
+tool.RequiresHandle = false
+tool.Parent = player.Backpack
+tool.Activated:Connect(fn)
+tool.Equipped:Connect(fn)
+
+=== СООБЩЕНИЯ МЕЖДУ СКРИПТАМИ ===
+-- Скрипты НЕ видят переменные друг друга.
+-- Общаются через BindableEvent в ReplicatedStorage
+-- или через общие IntValue/StringValue в ReplicatedStorage.
+
+=== ВАЖНЫЕ ПРАВИЛА ===
+- В CFrame.Angles — РАДИАНЫ (math.rad(90) = 90°). В part.Orientation — градусы.
+- Перед обращением к Character: WaitForChild или CharacterAdded:Wait().
+- task.wait/delay/spawn вместо устаревших wait/delay/spawn.
+- DataStoreService НЕ работает (нет онлайн-БД). Прогресс храни в IntValue игрока.
+- НЕ используй require() и ModuleScript (наш wasmoon-рантайм не поддерживает).
+- Player.Team задаётся ссылкой на Team-объект, не строкой.
+- BrickColor — устаревшее, но работает: BrickColor.new("Bright red"). Лучше Color3.fromRGB.
+
+ПРИМЕР (килблок-лава, скрипт В ОБЪЕКТЕ):
+local part = script.Parent
+part.Touched:Connect(function(hit)
+ local h = hit.Parent:FindFirstChild("Humanoid")
+ if h then h.Health = 0 end
+end)
+
+ПРИМЕР (сбор монет — глобальный + на каждой монетке):
+-- Глобальный:
+local Players = game:GetService("Players")
+Players.PlayerAdded:Connect(function(player)
+ local stats = Instance.new("Folder", player); stats.Name = "leaderstats"
+ local coins = Instance.new("IntValue", stats); coins.Name = "Монеты"
+end)
+-- На монетке:
+local part = script.Parent
+part.Touched:Connect(function(hit)
+ local player = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
+ if not player then return end
+ local stats = player:FindFirstChild("leaderstats")
+ if stats then stats.Монеты.Value = stats.Монеты.Value + 1 end
+ part:Destroy()
+end)
+
+Теперь напиши Lua-скрипт под мою задачу (она ниже). Укажи, КУДА его вставить (глобальный или на объект).`;
+
export const DOCS = [
// ════════════════════════════════════════════════════
// РАЗДЕЛ A — ОСНОВЫ
@@ -4979,8 +5212,10 @@ end)`}}
Открой статью «AI2. Контекст — скопируй в нейросеть» ниже.
- Выдели весь текст ниже и скопируй (Ctrl+A внутри блока - или мышью), затем вставь в нейросеть перед своим вопросом: + Сверху выбери язык скриптов своей игры. Выдели весь + текст ниже и скопируй (Ctrl+A внутри блока или мышью), + затем вставь в нейросеть перед своим вопросом:
-{AI_CONTEXT}
+ {AI_CONTEXT_LUA}}
+ />
>
),
},