Вот код для того, чтобы при появлении игрок выбирал куда ему телепортироваться 👇🏻👇🏻👇🏻
Вот пример простого кода, который позволяет игрокам выбрать место спавна, когда они входят в игру.
1. Создайте места для спавна. В вашем игровом мире создайте несколько точек спавна (например, с помощью объектов SpawnLocation). Убедитесь, что они имеют уникальные имена, например "Spawn1", "Spawn2" или "Spawn3".
2. Создайте GUI для выбора спавна. Добавьте ScreenGui в StarterGui:
- Вставьте ScreenGui в StarterGui.
- Вставьте Frame в ScreenGui и настройте его, чтобы он выглядел как меню.
- Добавьте несколько TextButton, например, "Spawn1", "Spawn2" или "Spawn3".
3. Напишите скрипт для логики выбора спавна. Вот пример скрипта, который можно добавить в ServerScriptService или LocalScript в вашем GUI:
-- LocalScript в вашем ScreenGui
local player = game.Players.LocalPlayer
local gui = script.Parent
local spawnLocations = {"Spawn1", "Spawn2", "Spawn3"} -- Названия ваших точек спавна
-- Функция для спавна игрока
local function teleportToSpawn(spawnName)
local spawnLocation = game.Workspace:FindFirstChild(spawnName)
if spawnLocation then
player.Character:MoveTo(spawnLocation.Position)
else
warn("Точка спавна не найдена: " .. spawnName)
end
end
-- Обработчики нажатий на кнопки
for _, button in pairs(gui:GetChildren()) do
if button:IsA("TextButton") then
button.MouseButton1Click:Connect(function()
teleportToSpawn(button.Name) -- используйте имя кнопки как имя спавна
gui.Enabled = false -- Скрыть меню после выбора
end)
end
end
4. Настройте точки спавна. В каждой точке спавна убедитесь, что она имеет соответствующее имя (например, "Spawn1", "Spawn2", "Spawn3"), как указано в массиве spawnLocations`.
5. Запускайте игру. Когда вы запускаете игру, меню появится, и игрок сможет выбрать, где он хочет появиться.
Теперь у вас есть система выбора спавна, которая позволяет игроку выбирать, где появиться при входе в игру. Не забудьте протестировать свою игру, чтобы убедиться, что все работает правильно!
1. Создайте места для спавна. В вашем игровом мире создайте несколько точек спавна (например, с помощью объектов SpawnLocation). Убедитесь, что они имеют уникальные имена, например "Spawn1", "Spawn2" или "Spawn3".
2. Создайте GUI для выбора спавна. Добавьте ScreenGui в StarterGui:
- Вставьте ScreenGui в StarterGui.
- Вставьте Frame в ScreenGui и настройте его, чтобы он выглядел как меню.
- Добавьте несколько TextButton, например, "Spawn1", "Spawn2" или "Spawn3".
3. Напишите скрипт для логики выбора спавна. Вот пример скрипта, который можно добавить в ServerScriptService или LocalScript в вашем GUI:
-- LocalScript в вашем ScreenGui
local player = game.Players.LocalPlayer
local gui = script.Parent
local spawnLocations = {"Spawn1", "Spawn2", "Spawn3"} -- Названия ваших точек спавна
-- Функция для спавна игрока
local function teleportToSpawn(spawnName)
local spawnLocation = game.Workspace:FindFirstChild(spawnName)
if spawnLocation then
player.Character:MoveTo(spawnLocation.Position)
else
warn("Точка спавна не найдена: " .. spawnName)
end
end
-- Обработчики нажатий на кнопки
for _, button in pairs(gui:GetChildren()) do
if button:IsA("TextButton") then
button.MouseButton1Click:Connect(function()
teleportToSpawn(button.Name) -- используйте имя кнопки как имя спавна
gui.Enabled = false -- Скрыть меню после выбора
end)
end
end
4. Настройте точки спавна. В каждой точке спавна убедитесь, что она имеет соответствующее имя (например, "Spawn1", "Spawn2", "Spawn3"), как указано в массиве spawnLocations`.
5. Запускайте игру. Когда вы запускаете игру, меню появится, и игрок сможет выбрать, где он хочет появиться.
Теперь у вас есть система выбора спавна, которая позволяет игроку выбирать, где появиться при входе в игру. Не забудьте протестировать свою игру, чтобы убедиться, что все работает правильно!
Вот 15 примеров того, на что можно написать код в Roblox Studio:
1. Персонажи с уникальными способностями: Создание различных классов персонажей, каждый из которых имеет свои особые умения и способности.
2. Система навыков и уровней: Разработка системы, где игроки могут повышать свои уровни и развивать навыки, такие как скорость, сила или ловкость.
3. Интерактивные объекты: Программирование предметов, которые реагируют на действия игроков, например, скамейки, на которые можно сесть, или двери, которые открываются по сигналу.
4. Игра на выживание: Разработка механики для игры на выживание, где игроки должны собирать ресурсы и строить укрытия.
5. Система квестов: Создание квестов и миссий, которые игроки могут выполнять, чтобы получать вознаграждения.
6. Магазин и экономика: Программирование торговой системы, где игроки могут покупать, продавать и обменивать предметы.
7. Гонки: Реализация гоночной механики с автомобилями или другими транспортными средствами, включая контроль скорости и управления.
8. Ограниченное время на выполнение задач: Создание игр с таймером, где игроки должны выполнить определенные задачи до истечения времени.
9. Искусственный интеллект (Ии) для NPC: Программирование NPC, которые могут взаимодействовать с игроками, следовать им или выполнять другие действия.
10. Парк аттракционов: Создание аттракционов и игровых зон, где игроки могут участвовать в различных активностях.
11. Система достижений: Разработка системы достижений, где игроки могут зарабатывать трофеи за выполнение определенных условий.
12. Милые животные (питомцы): Реализация системы, в которой игроки могут иметь виртуальных питомцев, которых они могут ухаживать, кормить и тренировать.
13. Открытый мир: Создание большого открытого мира, где игроки могут исследовать, находить сокровища и выполнять задания.
14. Анимации и эффекты: Программирование специальных анимаций и эффектов для различных действий, например, прыжков, атак или взаимодействий.
15. Система погоды и времени суток: Создание динамической системы, где погодные условия и время суток могут влиять на игровой процесс.
Эти идеи помогут вам начать разработку интересных и увлекательных игр в Roblox Studio!
1. Персонажи с уникальными способностями: Создание различных классов персонажей, каждый из которых имеет свои особые умения и способности.
2. Система навыков и уровней: Разработка системы, где игроки могут повышать свои уровни и развивать навыки, такие как скорость, сила или ловкость.
3. Интерактивные объекты: Программирование предметов, которые реагируют на действия игроков, например, скамейки, на которые можно сесть, или двери, которые открываются по сигналу.
4. Игра на выживание: Разработка механики для игры на выживание, где игроки должны собирать ресурсы и строить укрытия.
5. Система квестов: Создание квестов и миссий, которые игроки могут выполнять, чтобы получать вознаграждения.
6. Магазин и экономика: Программирование торговой системы, где игроки могут покупать, продавать и обменивать предметы.
7. Гонки: Реализация гоночной механики с автомобилями или другими транспортными средствами, включая контроль скорости и управления.
8. Ограниченное время на выполнение задач: Создание игр с таймером, где игроки должны выполнить определенные задачи до истечения времени.
9. Искусственный интеллект (Ии) для NPC: Программирование NPC, которые могут взаимодействовать с игроками, следовать им или выполнять другие действия.
10. Парк аттракционов: Создание аттракционов и игровых зон, где игроки могут участвовать в различных активностях.
11. Система достижений: Разработка системы достижений, где игроки могут зарабатывать трофеи за выполнение определенных условий.
12. Милые животные (питомцы): Реализация системы, в которой игроки могут иметь виртуальных питомцев, которых они могут ухаживать, кормить и тренировать.
13. Открытый мир: Создание большого открытого мира, где игроки могут исследовать, находить сокровища и выполнять задания.
14. Анимации и эффекты: Программирование специальных анимаций и эффектов для различных действий, например, прыжков, атак или взаимодействий.
15. Система погоды и времени суток: Создание динамической системы, где погодные условия и время суток могут влиять на игровой процесс.
Эти идеи помогут вам начать разработку интересных и увлекательных игр в Roblox Studio!
Вот код, который делает так, что если нажать на кнопку, будет спавниться объект. ( Предполагается, что у вас уже есть модель объекта, например дом. )
Для того чтобы создать функционал, который будет спавнить объект в Roblox Studio при нажатии на кнопку, вам нужно использовать LocalScript и Server Script. Вот пример кода, который позволяет это сделать.
1. Создайте кнопку:
- Вставьте ScreenGui в StarterGui.
- Вставьте TextButton в ScreenGui (вы можете настроить его цвет, размер и текст).
2. Создайте объект, который вы хотите спавнить:
- Например, создайте модель или объект в ReplicatedStorage.
3. Напишите код:
- В TextButton добавьте LocalScript с следующим кодом:
local button = script.Parent -- Указывает на TextButton
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local function onButtonClicked()
-- Отправляем запрос на сервер для спавна объекта
game.ReplicatedStorage.SpawnObject:FireServer()
end
button.MouseButton1Click:Connect(onButtonClicked)
4. Создайте RemoteEvent:
- В ReplicatedStorage создайте RemoteEvent и назовите его SpawnObject.
5. Добавьте серверный скрипт:
- В ServerScriptService создайте Script с следующим кодом:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SpawnObjectEvent = ReplicatedStorage:WaitForChild("SpawnObject")
local function onSpawnObject(player)
-- Здесь создаем объект, который вы хотите спавнить
local newObject = Instance.new("Part") -- Вы можете заменить это на вашу модель
newObject.Size = Vector3.new(1, 1, 1)
newObject.Position = Vector3.new(0, 50, 0) -- Позиция, где будет спавниться объект
newObject.Anchored = true
newObject.Parent = workspace
end
SpawnObjectEvent.OnServerEvent:Connect(onSpawnObject)
Теперь, когда игрок нажимает на кнопку в интерфейсе, он получит событие на стороне сервера, и объект будет создан в игре. Вы можете заменить Instance.new("Part") на вашу модель, которая находится в ReplicatedStorage.
Не забудьте протестировать вашу игру, чтобы убедиться, что всё работает корректно.
1. Создайте кнопку:
- Вставьте ScreenGui в StarterGui.
- Вставьте TextButton в ScreenGui (вы можете настроить его цвет, размер и текст).
2. Создайте объект, который вы хотите спавнить:
- Например, создайте модель или объект в ReplicatedStorage.
3. Напишите код:
- В TextButton добавьте LocalScript с следующим кодом:
local button = script.Parent -- Указывает на TextButton
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local function onButtonClicked()
-- Отправляем запрос на сервер для спавна объекта
game.ReplicatedStorage.SpawnObject:FireServer()
end
button.MouseButton1Click:Connect(onButtonClicked)
4. Создайте RemoteEvent:
- В ReplicatedStorage создайте RemoteEvent и назовите его SpawnObject.
5. Добавьте серверный скрипт:
- В ServerScriptService создайте Script с следующим кодом:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SpawnObjectEvent = ReplicatedStorage:WaitForChild("SpawnObject")
local function onSpawnObject(player)
-- Здесь создаем объект, который вы хотите спавнить
local newObject = Instance.new("Part") -- Вы можете заменить это на вашу модель
newObject.Size = Vector3.new(1, 1, 1)
newObject.Position = Vector3.new(0, 50, 0) -- Позиция, где будет спавниться объект
newObject.Anchored = true
newObject.Parent = workspace
end
SpawnObjectEvent.OnServerEvent:Connect(onSpawnObject)
Теперь, когда игрок нажимает на кнопку в интерфейсе, он получит событие на стороне сервера, и объект будет создан в игре. Вы можете заменить Instance.new("Part") на вашу модель, которая находится в ReplicatedStorage.
Не забудьте протестировать вашу игру, чтобы убедиться, что всё работает корректно.
Коды для роблокс студио
Розыгрыш 100 телеграмм звёзд в честь первых 10 подписчиков!
Уже завтра объявление о победителе розыгрыша!
14 2 1 1
Вот готовый код для управления камерой и прозрачностью персонажа. Создайте LocalScript в StarterPlayerScripts:
1. 1 - Первое лицо (от первого лица)
2. 2 - Вид спереди
3. 3 - Третье лицо (обычный вид)
4. Колесо мыши - Приближение/отдаление (в режиме 3-го лица)
5. T - Переключение прозрачности
Особенности:
- Плавное управление камерой в режиме третьего лица
- Полная прозрачность всех частей тела и аксессуаров
- Автоматическое отслеживание персонажа
- Защита от выхода за пределы зума
Для кастомизации можно менять значения:
- ZOOM_SPEED - скорость изменения масштаба
- CAMERA_OFFSET - позиция камеры относительно персонажа
- MIN_ZOOM/MAX_ZOOM - ограничения зума
local Players = game:GetService("Players")Управление:
local UserInput = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local camera = workspace.CurrentCamera
-- Настройки
local ZOOM_SPEED = 4 -- Скорость зума
local MIN_ZOOM = 2 -- Минимальное расстояние
local MAX_ZOOM = 20 -- Максимальное расстояние
local CAMERA_OFFSET = Vector3.new(0, 3, 0) -- Смещение камеры для 3-го лица
local currentCameraMode = "ThirdPerson" -- FirstPerson/ThirdPerson/FrontView
local currentZoom = 10
local isTransparent = false
-- Переключение режимов камеры
local function SetCameraMode(mode)
currentCameraMode = mode
camera.CameraType = Enum.CameraType.Scriptable
if mode == "FirstPerson" then
camera.CFrame = character.Head.CFrame
elseif mode == "FrontView" then
camera.CFrame = character.Head.CFrame * CFrame.new(0, 0, 5) * CFrame.Angles(0, math.pi, 0)
end
end
-- Управление прозрачностью
local function ToggleTransparency()
isTransparent = not isTransparent
local transparency = isTransparent and 0.8 or 0
for _, part in pairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.LocalTransparencyModifier = transparency
end
end
end
-- Обработка ввода
UserInput.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.T then
ToggleTransparency()
elseif input.KeyCode == Enum.KeyCode.One then
SetCameraMode("FirstPerson")
elseif input.KeyCode == Enum.KeyCode.Two then
SetCameraMode("FrontView")
elseif input.KeyCode == Enum.KeyCode.Three then
SetCameraMode("ThirdPerson")
end
end)
UserInput.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseWheel then
currentZoom = math.clamp(currentZoom - input.Position.Z * ZOOM_SPEED, MIN_ZOOM, MAX_ZOOM)
end
end)
-- Обновление камеры
RunService.RenderStepped:Connect(function()
if currentCameraMode == "ThirdPerson" then
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local cameraPosition = rootPart.Position + CAMERA_OFFSET + rootPart.CFrame.LookVector * -currentZoom
camera.CFrame = CFrame.lookAt(cameraPosition, rootPart.Position + Vector3.new(0, 2, 0))
end
end
end)
-- Первоначальная настройка
SetCameraMode("ThirdPerson")
1. 1 - Первое лицо (от первого лица)
2. 2 - Вид спереди
3. 3 - Третье лицо (обычный вид)
4. Колесо мыши - Приближение/отдаление (в режиме 3-го лица)
5. T - Переключение прозрачности
Особенности:
- Плавное управление камерой в режиме третьего лица
- Полная прозрачность всех частей тела и аксессуаров
- Автоматическое отслеживание персонажа
- Защита от выхода за пределы зума
Для кастомизации можно менять значения:
- ZOOM_SPEED - скорость изменения масштаба
- CAMERA_OFFSET - позиция камеры относительно персонажа
- MIN_ZOOM/MAX_ZOOM - ограничения зума
3 4 2 2 1
Ребята, простите что давно коды не выкладывал)
Скоро будет всё как раньше
Скоро будет всё как раньше
Кстати, на что хотите код?
Пишите в комментарии (только коды, не создание целых игр)
Пишите в комментарии (только коды, не создание целых игр)
Вот полный код для игры по типу зомби апокалипсиса спустя НЕВЕРОЯТНО долгое время (такого больше не будет). Вам понадобятся два скрипта: один для сервера (зомби и здоровье игрока), другой для клиента (управление и интерфейс). Создайте модель зомби и назовите «zombie», затем соедините его руки, ноги, голову и туловище.
1. Серверный скрипт (вставьте в Script внутри ServerScriptService)
`lua
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
-- Настройки
local ZOMBIE_SPEED = 4
local DAMAGE_RANGE = 3
local DAMAGE_AMOUNT = 10
local DETECTION_RANGE = 20
local RESPAWN_POSITION = Vector3.new(0, 5, 0) -- Позиция спавна
local HEALTH_REGEN_RATE = 0.5 -- Регенерация здоровья в секунду
-- Инициализация зомби
local zombie = workspace:FindFirstChild("zombie")
if not zombie then error("Zombie model not found!") end
local zombieRoot = zombie:FindFirstChild("HumanoidRootPart")
local zombieHumanoid = zombie:FindFirstChildOfClass("Humanoid")
-- Система здоровья и состояния игроков
local playerStats = {}
local function respawnPlayer(player)
local character = player.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 100
end
character:MoveTo(RESPAWN_POSITION)
end
playerStats[player].health = 100
end
Players.PlayerAdded:Connect(function(player)
playerStats[player] = {
health = 100,
sprinting = false,
stamina = 100
}
player.CharacterAdded:Connect(function(character)
playerStats[player].health = 100
playerStats[player].stamina = 100
local humanoid = character:WaitForChild("Humanoid")
humanoid.Health = 100
-- Отправляем начальные значения клиенту
playerStats[player].updateEvent:Fire(playerStats[player].health, playerStats[player].stamina)
end)
-- Создаем удаленное событие для обновления состояния
playerStats[player].updateEvent = Instance.new("RemoteEvent")
playerStats[player].updateEvent.Name = "PlayerStatsUpdate"
playerStats[player].updateEvent.Parent = player
end)
-- ИИ зомби
local function findNearestPlayer(zombiePos)
local closestPlayer = nil
local closestDistance = math.huge
for player, stats in pairs(playerStats) do
local character = player.Character
if character and stats.health > 0 then
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
local distance = (hrp.Position - zombiePos).Magnitude
if distance < closestDistance and distance < DETECTION_RANGE then
closestDistance = distance
closestPlayer = player
end
end
end
end
return closestPlayer
end
local lastAttack = 0
local wanderDirection = Vector3.new(math.random(), 0, math.random()).Unit
-- Обработка спринта от клиента
local sprintEvent = Instance.new("RemoteEvent")
sprintEvent.Name = "SprintEvent"
sprintEvent.Parent = game:GetService("ReplicatedStorage")
sprintEvent.OnServerEvent:Connect(function(player, sprinting)
if playerStats[player] then
playerStats[player].sprinting = sprinting
end
end)
RunService.Heartbeat:Connect(function(delta)
-- Обновление здоровья и стамины игроков
for player, stats in pairs(playerStats) do
if stats.health < 100 then
stats.health = math.min(stats.health + HEALTH_REGEN_RATE * delta, 100)
local character = player.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = stats.health
end
end
-- Отправляем обновление клиенту
stats.updateEvent:Fire(stats.health, stats.stamina)
end
end
-- ИИ зомби
if not zombieRoot then return end
local target = findNearestPlayer(zombieRoot.Position)
if target then
`lua
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
-- Настройки
local ZOMBIE_SPEED = 4
local DAMAGE_RANGE = 3
local DAMAGE_AMOUNT = 10
local DETECTION_RANGE = 20
local RESPAWN_POSITION = Vector3.new(0, 5, 0) -- Позиция спавна
local HEALTH_REGEN_RATE = 0.5 -- Регенерация здоровья в секунду
-- Инициализация зомби
local zombie = workspace:FindFirstChild("zombie")
if not zombie then error("Zombie model not found!") end
local zombieRoot = zombie:FindFirstChild("HumanoidRootPart")
local zombieHumanoid = zombie:FindFirstChildOfClass("Humanoid")
-- Система здоровья и состояния игроков
local playerStats = {}
local function respawnPlayer(player)
local character = player.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 100
end
character:MoveTo(RESPAWN_POSITION)
end
playerStats[player].health = 100
end
Players.PlayerAdded:Connect(function(player)
playerStats[player] = {
health = 100,
sprinting = false,
stamina = 100
}
player.CharacterAdded:Connect(function(character)
playerStats[player].health = 100
playerStats[player].stamina = 100
local humanoid = character:WaitForChild("Humanoid")
humanoid.Health = 100
-- Отправляем начальные значения клиенту
playerStats[player].updateEvent:Fire(playerStats[player].health, playerStats[player].stamina)
end)
-- Создаем удаленное событие для обновления состояния
playerStats[player].updateEvent = Instance.new("RemoteEvent")
playerStats[player].updateEvent.Name = "PlayerStatsUpdate"
playerStats[player].updateEvent.Parent = player
end)
-- ИИ зомби
local function findNearestPlayer(zombiePos)
local closestPlayer = nil
local closestDistance = math.huge
for player, stats in pairs(playerStats) do
local character = player.Character
if character and stats.health > 0 then
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
local distance = (hrp.Position - zombiePos).Magnitude
if distance < closestDistance and distance < DETECTION_RANGE then
closestDistance = distance
closestPlayer = player
end
end
end
end
return closestPlayer
end
local lastAttack = 0
local wanderDirection = Vector3.new(math.random(), 0, math.random()).Unit
-- Обработка спринта от клиента
local sprintEvent = Instance.new("RemoteEvent")
sprintEvent.Name = "SprintEvent"
sprintEvent.Parent = game:GetService("ReplicatedStorage")
sprintEvent.OnServerEvent:Connect(function(player, sprinting)
if playerStats[player] then
playerStats[player].sprinting = sprinting
end
end)
RunService.Heartbeat:Connect(function(delta)
-- Обновление здоровья и стамины игроков
for player, stats in pairs(playerStats) do
if stats.health < 100 then
stats.health = math.min(stats.health + HEALTH_REGEN_RATE * delta, 100)
local character = player.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = stats.health
end
end
-- Отправляем обновление клиенту
stats.updateEvent:Fire(stats.health, stats.stamina)
end
end
-- ИИ зомби
if not zombieRoot then return end
local target = findNearestPlayer(zombieRoot.Position)
if target then
-- Преследование игрока
local targetPos = target.Character.HumanoidRootPart.Position
local direction = (targetPos - zombieRoot.Position).Unit
zombieRoot.CFrame = CFrame.lookAt(zombieRoot.Position, zombieRoot.Position + direction)
zombieRoot.Position += direction * ZOMBIE_SPEED * delta
-- Атака
if (tick() - lastAttack) > 1 then
if (targetPos - zombieRoot.Position).Magnitude < DAMAGE_RANGE then
playerStats[target].health = math.max(playerStats[target].health - DAMAGE_AMOUNT, 0)
local character = target.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = playerStats[target].health
end
end
-- Отправляем обновление клиенту
playerStats[target].updateEvent:Fire(playerStats[target].health, playerStats[target].stamina)
if playerStats[target].health <= 0 then
respawnPlayer(target)
end
lastAttack = tick()
end
end
else
-- Случайное блуждание
if (tick() - lastAttack) > 5 then
wanderDirection = Vector3.new(math.random(-1, 1), 0, math.random(-1, 1)).Unit
lastAttack = tick()
end
zombieRoot.Position += wanderDirection * ZOMBIE_SPEED * delta
end
end)
-- Инициализация позиции зомби
zombieRoot.Anchored = false
zombieRoot.CFrame = CFrame.new(RESPAWN_POSITION + Vector3.new(10, 0, 10))
local targetPos = target.Character.HumanoidRootPart.Position
local direction = (targetPos - zombieRoot.Position).Unit
zombieRoot.CFrame = CFrame.lookAt(zombieRoot.Position, zombieRoot.Position + direction)
zombieRoot.Position += direction * ZOMBIE_SPEED * delta
-- Атака
if (tick() - lastAttack) > 1 then
if (targetPos - zombieRoot.Position).Magnitude < DAMAGE_RANGE then
playerStats[target].health = math.max(playerStats[target].health - DAMAGE_AMOUNT, 0)
local character = target.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = playerStats[target].health
end
end
-- Отправляем обновление клиенту
playerStats[target].updateEvent:Fire(playerStats[target].health, playerStats[target].stamina)
if playerStats[target].health <= 0 then
respawnPlayer(target)
end
lastAttack = tick()
end
end
else
-- Случайное блуждание
if (tick() - lastAttack) > 5 then
wanderDirection = Vector3.new(math.random(-1, 1), 0, math.random(-1, 1)).Unit
lastAttack = tick()
end
zombieRoot.Position += wanderDirection * ZOMBIE_SPEED * delta
end
end)
-- Инициализация позиции зомби
zombieRoot.Anchored = false
zombieRoot.CFrame = CFrame.new(RESPAWN_POSITION + Vector3.new(10, 0, 10))
(Этот длинный скрипт телеграм разделил на 2 части, но это все один код.)