-- 🔥 Rayfield
local Rayfield = loadstring(game:HttpGet('https://[Log in to view URL]'))()
local Window = Rayfield:CreateWindow({
Name = "🔥 마인민이 핵 V1(라이벌용)",
LoadingTitle = "로딩중...",
LoadingSubtitle = "마인민이 구독!",
ConfigurationSaving = { Enabled = false }
})
-- =====================
-- 탭
-- =====================
local MainTab = Window:CreateTab("메인")
local PlayerTab = Window:CreateTab("플레이어")
local WinTab = Window:CreateTab("레이지봇")
-- =====================
-- 서비스
-- =====================
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local GuiService = game:GetService("GuiService") -- [추가] 오차 계산용 서비스
-- =====================
-- 상태값
-- =====================
local Fly, FlySpeed = false, 50
local Noclip = false
local Aim = false
local AimPart = "Head"
local Smooth = 0.15
local RightClick = false
local LockedTarget = nil
local FOV = 200
-- 오토봇(트리거봇) 변수
local TriggerBot = false
local TriggerDelay = 0.1
local lastShot = 0
local Speed = 16
local Invisible = false
-- TP
local TPPlayer = nil
local TPInfinite = false
local ESP = false
local ESPObjects = {}
-- =====================
-- 🎯 FOV 원
-- =====================
local FOV = 150 -- (예시 값, 기존에 설정하신 변수 사용하시면 됩니다)
local circle = Drawing.new("Circle")
circle.Radius = FOV
circle.Thickness = 2
circle.Filled = false
circle.Visible = true
RunService.RenderStepped:Connect(function()
-- UIS:GetMouseLocation()의 결과값에서 상단 메뉴바의 두께(Inet)만큼 빼줍니다.
local mousePos = UIS:GetMouseLocation()
local inset = GuiService:GetGuiInset()
circle.Position = Vector2.new(mousePos.X - inset.X, mousePos.Y - inset.Y)
circle.Radius = FOV
end)
-- =====================
-- UI
-- =====================
-- 🚀 FLY
MainTab:CreateToggle({
Name = "플라이",
CurrentValue = false,
Callback = function(v) Fly = v end
})
MainTab:CreateSlider({
Name = "플라이 속도",
Range = {10,200},
Increment = 5,
CurrentValue = 50,
Callback = function(v) FlySpeed = v end
})
MainTab:CreateToggle({
Name = "ESP",
CurrentValue = false,
Callback = function(v)
ESP = v
-- 끄면 삭제
if not v then
for p,gui in pairs(ESPObjects) do
if gui then gui:Destroy() end
ESPObjects[p] = nil
end
end
end
})
-- 🧱 NOCLIP
MainTab:CreateToggle({
Name = "노클립",
CurrentValue = false,
Callback = function(v) Noclip = v end
})
-----
MainTab:CreateToggle({
Name = "내 몸 투명",
CurrentValue = false,
Callback = function(v)
Invisible = v
end
})
-- =====================
-- 🔫 총기 쿨다운 줄이기
-- =====================
MainTab:CreateButton({
Name = "총기 쿨다운 줄이기",
Callback = function()
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local weaponDataCache
local modulesFolder = ReplicatedStorage:FindFirstChild("Modules")
if modulesFolder then
local possibleNames = {"ItemLibrary", "WeaponStats", "Items", "WeaponData", "Weapons"}
for _, name in ipairs(possibleNames) do
local found = modulesFolder:FindFirstChild(name)
if found then
weaponDataCache = require(found)
break
end
end
end
if weaponDataCache and weaponDataCache.Items then
for _, stats in pairs(weaponDataCache.Items) do
if stats.ShootCooldown then stats.ShootCooldown = 0 end
if stats.ShootBurstCooldown then stats.ShootBurstCooldown = 0 end
if stats.AttackCooldown then stats.AttackCooldown = 0 end
if stats.HeavyAttackCooldown then stats.HeavyAttackCooldown = 0 end
if stats.Cooldown then stats.Cooldown = 0 end
if stats.DeflectCooldown then stats.DeflectCooldown = 0 end
if stats.DashCooldown then stats.DashCooldown = 0 end
if stats.BuildCooldown then stats.BuildCooldown = 0 end
if stats.SpinCooldown then stats.SpinCooldown = 0 end
if stats.AirblastCooldown then stats.AirblastCooldown = 0 end
if stats.QuickShotCooldown then stats.QuickShotCooldown = 0 end
if stats.TransitionCooldown then stats.TransitionCooldown = 0 end
if stats.ReloadTime then stats.ReloadTime = 0.01 end
end
Rayfield:Notify({Title = "총기 쿨다운", Content = "모든 무기 쿨다운이 제거되었습니다!", Duration = 3})
else
Rayfield:Notify({Title = "총기 쿨다운", Content = "무기 데이터를 찾을 수 없습니다.", Duration = 3})
end
end
})
-- ⚡ SPEED
PlayerTab:CreateSlider({
Name = "스피드",
Range = {16,200},
Increment = 1,
CurrentValue = 16,
Callback = function(v)
Speed = v
local char = player.Character
if char and char:FindFirstChild("Humanoid") then
char.Humanoid.WalkSpeed = v
end
end
})
-- 🎯 AIM
PlayerTab:CreateToggle({
Name = "에임 ON/OFF",
CurrentValue = false,
Callback = function(v) Aim = v end
})
PlayerTab:CreateDropdown({
Name = "에임 위치",
Options = {"Head","Body"},
CurrentOption = {"Head"},
Callback = function(v)
AimPart = (v[1] == "Head") and "Head" or "HumanoidRootPart"
end
})
PlayerTab:CreateSlider({
Name = "부드러움",
Range = {1,100},
Increment = 1,
CurrentValue = 15,
Callback = function(v) Smooth = v/100 end
})
PlayerTab:CreateSlider({
Name = "FOV",
Range = {50,500},
Increment = 10,
CurrentValue = 200,
Callback = function(v) FOV = v end
})
-- 🔫 트리거봇
PlayerTab:CreateToggle({
Name = "오토봇",
CurrentValue = false,
Callback = function(v) TriggerBot = v end
})
PlayerTab:CreateSlider({
Name = "발사 속도",
Range = {0.05,0.5},
Increment = 0.01,
CurrentValue = 0.1,
Callback = function(v) TriggerDelay = v end
})
-- =====================
-- 🔥 TP
-- =====================
-- =====================
-- 🔥 TP
-- =====================
local function GetPlayers()
local t = {}
for _,p in pairs(Players:GetPlayers()) do
if p ~= player then table.insert(t,p.Name) end
end
return t
end
PlayerTab:CreateDropdown({
Name = "TP 대상",
Options = GetPlayers(),
CurrentOption = {},
Callback = function(v)
TPPlayer = Players:FindFirstChild(v[1])
end
})
PlayerTab:CreateButton({
Name = "한번 TP",
Callback = function()
if TPPlayer and TPPlayer.Character and player.Character then
local hrp = player.Character:FindFirstChild("HumanoidRootPart")
local target = TPPlayer.Character:FindFirstChild("HumanoidRootPart")
if hrp and target then
hrp.CFrame = target.CFrame + Vector3.new(0,2,0)
end
end
end
})
PlayerTab:CreateToggle({
Name = "무한 TP",
CurrentValue = false,
Callback = function(v) TPInfinite = v end
})
-- =====================
-- 🎮 입력
-- =====================
UIS.InputBegan:Connect(function(i,gp)
if gp then return end
if i.UserInputType == Enum.UserInputType.MouseButton2 then
RightClick = true
LockedTarget = nil
end
end)
UIS.InputEnded:Connect(function(i)
if i.UserInputType == Enum.UserInputType.MouseButton2 then
RightClick = false
LockedTarget = nil
end
end)
-- =====================
-- 🎯 타겟 찾기
-- =====================
-- 2. 가장 가까운 적을 찾는 함수 (화면 중앙 기준)
local function GetClosest()
local closest, dist = nil, math.huge
for _, p in pairs(Players:GetPlayers()) do
if p ~= player and p.Character and p.Character:FindFirstChild(AimPart) then
local pos, ons = camera:WorldToViewportPoint(p.Character[AimPart].Position)
if ons then
-- 마우스 커서(화면 중앙)와 적 사이의 거리 계산
local d = (Vector2.new(pos.X, pos.Y) - UIS:GetMouseLocation()).Magnitude
if d < dist and d < FOV then
dist = d
closest = p
end
end
end
end
return closest
end
-- =====================
-- 🧠 메인 루프
-- =====================
RunService.RenderStepped:Connect(function()
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChild("Humanoid")
if not hrp or not hum then return end
-- 🚀 FLY (Space ↑ / Shift ↓ 완전 고정)
if Fly then
if not hrp:FindFirstChild("BP") then
local bp = Instance.new("BodyPosition", hrp)
bp.Name = "BP"
bp.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bp.Position = hrp.Position
local bg = Instance.new("BodyGyro", hrp)
bg.Name = "BG"
bg.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
end
local bp = hrp:FindFirstChild("BP")
local bg = hrp:FindFirstChild("BG")
local move = Vector3.new(0,0,0)
-- 앞뒤좌우
if UIS:IsKeyDown(Enum.KeyCode.W) then
move += camera.CFrame.LookVector
end
if UIS:IsKeyDown(Enum.KeyCode.S) then
move -= camera.CFrame.LookVector
end
if UIS:IsKeyDown(Enum.KeyCode.A) then
move -= camera.CFrame.RightVector
end
if UIS:IsKeyDown(Enum.KeyCode.D) then
move += camera.CFrame.RightVector
end
-- 🔥 위/아래 (중요)
if UIS:IsKeyDown(Enum.KeyCode.Space) then
move += Vector3.new(0,1,0)
end
if UIS:IsKeyDown(Enum.KeyCode.LeftShift) then
move -= Vector3.new(0,1,0)
end
if move.Magnitude > 0 then
bp.Position = hrp.Position + move.Unit * FlySpeed
else
bp.Position = hrp.Position
end
bg.CFrame = camera.CFrame
else
if hrp:FindFirstChild("BP") then hrp.BP:Destroy() end
if hrp:FindFirstChild("BG") then hrp.BG:Destroy() end
end
-- 🧱 NOCLIP
for _,v in pairs(char:GetDescendants()) do
if v:IsA("BasePart") then
v.CanCollide = not Noclip
end
end
-- 🔴 ESP
if ESP then
for _,p in pairs(Players:GetPlayers()) do
if p ~= player and p.Character and p.Character:FindFirstChild("Head") then
local hum2 = p.Character:FindFirstChildOfClass("Humanoid")
local hrp2 = p.Character:FindFirstChild("HumanoidRootPart")
if not hum2 or not hrp2 then continue end
if not ESPObjects[p] then
local bill = Instance.new("BillboardGui")
bill.Name = "ESP_"..p.Name
bill.Size = UDim2.new(0,200,0,50)
bill.Adornee = p.Character.Head
bill.AlwaysOnTop = true
bill.Parent = p.Character
local text = Instance.new("TextLabel")
text.Size = UDim2.new(1,0,1,0)
text.BackgroundTransparency = 1
text.TextStrokeTransparency = 0
text.TextColor3 = Color3.fromRGB(255,255,255)
text.TextScaled = true
text.Parent = bill
ESPObjects[p] = bill
end
local bill = ESPObjects[p]
local label = bill and bill:FindFirstChildOfClass("TextLabel")
if label then
local dist = (hrp.Position - hrp2.Position).Magnitude
local hp = math.floor(hum2.Health)
label.Text = p.Name.." | "..math.floor(dist).."m | "..hp.."HP"
end
end
end
end
-- 👻 투명
for _,v in pairs(char:GetDescendants()) do
if v:IsA("BasePart") then
v.LocalTransparencyModifier = Invisible and 1 or 0
end
end
-- 🎯 AIM (락온 유지)
-----------------------------------------------------------------
-- [기능 1] 🎯 에임봇 로직 (우클릭을 누르고 있을 때만 작동)
-----------------------------------------------------------------
if Aim and RightClick then
if not LockedTarget then
LockedTarget = GetClosest()
end
if LockedTarget and LockedTarget.Character and LockedTarget.Character:FindFirstChild(AimPart) then
local targetPos = LockedTarget.Character[AimPart].Position
-- 연사 시 탄이 튀는 문제를 막기 위해 Lerp 속도를 강하게 주거나 즉시 고정합니다.
-- 부드럽게 움직이고 싶다면 0.5 값을 낮추세요 (낮출수록 반동 때문에 에임이 튑니다).
camera.CFrame = camera.CFrame:Lerp(CFrame.new(camera.CFrame.Position, targetPos), Smooth)
end
end
-- 🔫 트리거봇
if TriggerBot and (tick() - lastShot > TriggerDelay) then
-- 현재 내 화면 중앙에서 가장 가까운 적을 탐색
local autoTarget = GetClosest()
if autoTarget and autoTarget.Character and autoTarget.Character:FindFirstChild(AimPart) then
local targetPos = autoTarget.Character[AimPart].Position
local screenPos, onScreen = camera:WorldToViewportPoint(targetPos)
if onScreen then
local mouseLoc = UIS:GetMouseLocation()
local distanceToCursor = (Vector2.new(screenPos.X, screenPos.Y) - mouseLoc).Magnitude
-- 적이 설정한 FOV 범위 내에 있고,
-- 마우스 크로스헤어(중앙)와 적의 거리가 25픽셀 이하로 조준되었을 때 자동 연사
if distanceToCursor < 25 then
lastShot = tick()
if mouse1click then
mouse1click()
end
end
end
end
end
-- 🔥 무한 TP (루프 내부로 정상 편입)
if TPInfinite and TPPlayer and TPPlayer.Character then
local target = TPPlayer.Character:FindFirstChild("HumanoidRootPart")
if target then
hrp.CFrame = target.CFrame + Vector3.new(0,2,0)
end
end
-- ⚡ Speed 유지 (루프 내부로 정상 편입)
if hum.WalkSpeed ~= Speed then
hum.WalkSpeed = Speed
end
end) -- ◀ 메인 루프는 여기서 딱 한 번만 닫혀야 합니다.
-- 🔁 리스폰
player.CharacterAdded:Connect(function(c)
c:WaitForChild("Humanoid").WalkSpeed = Speed
end)
player.CharacterAdded:Connect(function()
for p,gui in pairs(ESPObjects) do
if gui then gui:Destroy() end
ESPObjects[p] = nil
end
end)
-- =====================
-- 🔥 렉 이동 루프 (추가)
-- =====================
-- =====================
-- 🔥 렉 이동 루프 (추가)
-- =====================
local TargetPlayer = nil
local Loop = false
-- 1. 대상 선택 UI (실시간 즉시 실행 함수 적용)
PlayerTab:CreateDropdown({
Name = "렉 이동 대상",
Options = (function()
local t = {}
for _, p in pairs(Players:GetPlayers()) do
if p ~= player then
table.insert(t, p.Name)
end
end
return t
end)(),
CurrentOption = {},
Callback = function(v)
if v and v[1] then
TargetPlayer = Players:FindFirstChild(v[1])
else
TargetPlayer = nil
end
end
})
-- 2. 중복되던 드롭다운을 삭제하고 사라졌던 토글 기능을 다시 정상 배치했습니다.
PlayerTab:CreateToggle({
Name = "렉 이동 루프",
CurrentValue = false,
Callback = function(v)
Loop = v
if v then
if _G.LagLoopRunning then return end
_G.LagLoopRunning = true
task.spawn(function()
while Loop do
task.wait(0.01) -- 무한 루프 크래시 방지
if not TargetPlayer then continue end -- 대상이 없으면 안전하게 통과
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local targetChar = TargetPlayer.Character
local targetHRP = targetChar and targetChar:FindFirstChild("HumanoidRootPart")
if hrp and targetHRP then
-- 🔥 멀리 이동 (렌더 밖)
hrp.CFrame = CFrame.new(0, 100000, 0)
-- 🔥 0.01초 후 복귀
task.wait(0.01)
hrp.CFrame = targetHRP.CFrame + Vector3.new(0,2,0)
end
end
_G.LagLoopRunning = false -- 루프 종료 시 플래그 해제
end)
end
end
})
player.CharacterAdded:Connect(function()
Rayfield:Notify({
Title = "리스폰",
Content = "다시 사용 가능",
Duration = 2
})
end)
-- 변수 설정
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local VirtualInputService = game:GetService("VirtualInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local RageEnabled = false
local AutoClickEnabled = false
local GameMode = "1v1 (개인전)"
local Whitelist = {}
local TargetPlayer = nil
-- ==================== [기능] 총기 쿨다운 줄이기 로직 ====================
local function reduceWeaponCooldowns()
local weaponDataCache
local modulesFolder = ReplicatedStorage:FindFirstChild("Modules")
if modulesFolder then
local possibleNames = {"ItemLibrary", "WeaponStats", "Items", "WeaponData", "Weapons"}
for _, name in ipairs(possibleNames) do
local found = modulesFolder:FindFirstChild(name)
if found then
weaponDataCache = require(found)
break
end
end
end
if weaponDataCache and weaponDataCache.Items then
for _, stats in pairs(weaponDataCache.Items) do
if stats.ShootCooldown then stats.ShootCooldown = 0 end
if stats.ShootBurstCooldown then stats.ShootBurstCooldown = 0 end
if stats.AttackCooldown then stats.AttackCooldown = 0 end
if stats.HeavyAttackCooldown then stats.HeavyAttackCooldown = 0 end
if stats.Cooldown then stats.Cooldown = 0 end
if stats.DeflectCooldown then stats.DeflectCooldown = 0 end
if stats.DashCooldown then stats.DashCooldown = 0 end
if stats.BuildCooldown then stats.BuildCooldown = 0 end
if stats.SpinCooldown then stats.SpinCooldown = 0 end
if stats.AirblastCooldown then stats.AirblastCooldown = 0 end
if stats.QuickShotCooldown then stats.QuickShotCooldown = 0 end
if stats.TransitionCooldown then stats.TransitionCooldown = 0 end
if stats.ReloadTime then stats.ReloadTime = 0.01 end
end
Rayfield:Notify({Title = "총기 쿨다운", Content = "모든 무기 쿨다운이 제거되었습니다!", Duration = 2})
else
Rayfield:Notify({Title = "총기 쿨다운", Content = "무기 데이터를 찾을 수 없습니다.", Duration = 2})
end
end
-- ==================== 팀 ID 및 적군 판별 로직 ====================
local function getTeamID(player)
local teamID = player:GetAttribute("TeamID")
if teamID then return teamID end
if player.Character then
local teamValue = player.Character:FindFirstChild("TeamID")
if teamValue then
if teamValue:IsA("StringValue") or teamValue:IsA("IntValue") then
return teamValue.Value
end
end
end
if player.Team then
return player.Team.Name
end
return nil
end
local function isEnemy(player)
if not player or player == LocalPlayer then
return false
end
if GameMode == "1v1 (개인전)" then
return true
else
local myTeam = getTeamID(LocalPlayer)
local theirTeam = getTeamID(player)
if not myTeam or not theirTeam then
return true
end
return myTeam ~= theirTeam
end
end
-- [기능] 가장 가까운 살아있는 적 찾기
local function getClosestPlayer()
local closestPlayer = nil
local shortestDistance = math.huge
for _, player in pairs(Players:GetPlayers()) do
if player ~= LocalPlayer and not table.find(Whitelist, player.Name) and isEnemy(player) then
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character:FindFirstChild("Humanoid") then
if player.Character.Humanoid.Health > 0 then
local distance = (LocalPlayer.Character.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).Magnitude
if distance < shortestDistance then
shortestDistance = distance
closestPlayer = player
end
end
end
end
end
return closestPlayer
end
-- [메인 루프] 레이지 이동, 에임 고정 및 자동 발사
RunService.RenderStepped:Connect(function()
if not RageEnabled then return end
local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not myRoot then return end
TargetPlayer = getClosestPlayer()
if not TargetPlayer or not TargetPlayer.Character then return end
local enemyRoot = TargetPlayer.Character:FindFirstChild("HumanoidRootPart")
local enemyHead = TargetPlayer.Character:FindFirstChild("Head")
local enemyHumanoid = TargetPlayer.Character:FindFirstChild("Humanoid")
if enemyRoot and enemyHead and enemyHumanoid and enemyHumanoid.Health > 0 then
-- 1. 적 뒤쪽 좌표 계산
local backOffset = -enemyRoot.CFrame.LookVector * 3.5
local targetPosition = enemyRoot.Position + backOffset
-- 2. 내 몸을 적 뒤로 순간이동시키며 적 머리를 보게 함
myRoot.CFrame = CFrame.new(targetPosition, enemyHead.Position)
-- 3. 게임 내부 카메라 및 마우스 히트 위치를 적 머리로 강제 고정
local camera = workspace.CurrentCamera
if camera then
camera.CFrame = CFrame.new(camera.CFrame.Position, enemyHead.Position)
end
-- 4. 자동 클릭 진행
if AutoClickEnabled then
VirtualInputService:FireMouseButtonPressed(Vector2.new(0, 0), Enum.UserInputType.MouseButton1)
task.wait()
VirtualInputService:FireMouseButtonReleased(Vector2.new(0, 0), Enum.UserInputType.MouseButton1)
end
end
end)
-- 유저 이름 목록 가져오기 함수
local function getPlayerNames()
local names = {}
for _, p in pairs(Players:GetPlayers()) do
if p ~= LocalPlayer then
table.insert(names, p.Name)
end
end
return names
end
-- ==================== UI 탭 및 컨트롤 구성 ====================
-- 1. 게임 모드 선택 Dropdown
local ModeDropdown = WinTab:CreateDropdown({
Name = "Select Game Mode (게임 모드 선택)",
Options = {"1v1 (개인전)", "2v2 ~ 5v5 (팀전)"},
CurrentOption = "1v1 (개인전)", -- 단일 선택이므로 문자열 유지
MultipleOptions = false,
Flag = "GameModeDropdown",
Callback = function(Options)
GameMode = Options[1]
Rayfield:Notify({Title = "Game Mode Changed", Content = "현재 모드: " .. GameMode, Duration = 2})
end,
})
-- 2. 레이지 봇 On/Off 토글
local RageToggle = WinTab:CreateToggle({
Name = "Rage TP Bot (Back & Head Lock)",
CurrentValue = false,
Flag = "RageToggle",
Callback = function(Value)
RageEnabled = Value
AutoClickEnabled = Value
if Value then
Rayfield:Notify({Title = "Rage Bot", Content = "레이지 봇 및 자동 공격이 활성화되었습니다.", Duration = 2})
reduceWeaponCooldowns()
else
Rayfield:Notify({Title = "Rage Bot", Content = "레이지 봇 비활성화", Duration = 2})
end
end,
})
-- 3. 예외 유저 선택 Dropdown (화이트리스트)
local WhitelistDropdown = WinTab:CreateDropdown({
Name = "Exclude From Target (적에서 제외할 사람)",
Options = getPlayerNames(),
CurrentOption = {},
MultipleOptions = true,
Flag = "WhitelistDropdown",
Callback = function(Options)
Whitelist = Options
end,
})
-- 4. 유저 입출장 시 실시간 목록 리프레시 로직
Players.PlayerAdded:Connect(function()
if WhitelistDropdown then
WhitelistDropdown:Refresh(getPlayerNames(), true)
end
end)
Players.PlayerRemoving:Connect(function()
if WhitelistDropdown then
WhitelistDropdown:Refresh(getPlayerNames(), true)
end
end)
-- =====================
-- 서비스 및 변수 정의
-- =====================
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local UIS = game:GetService("UserInputService")
local Debris = game:GetService("Debris")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- 기능 상시 활성화 고정
local SnowEnabled = true
local IsMouseDown = false
-- =====================
-- 1. [강제 렌더링] 눈덩이 생성 시스템 (크기 1.0)
-- =====================
RunService.Heartbeat:Connect(function()
if SnowEnabled and math.random(1, 2) == 1 then
local snow = Instance.new("Part")
snow.Shape = Enum.PartType.Ball
snow.Size = Vector3.new(1, 1, 1) -- 딱 보기 좋은 크기 1.0
snow.Color = Color3.fromRGB(255, 255, 255)
snow.Material = Enum.Material.Ice
snow.Anchored = false
snow.CanCollide = false
snow.CanQuery = false
-- 카메라 주변 하늘에서 넓게 생성
local pos = camera.CFrame.Position + Vector3.new(math.random(-150, 150), 60, math.random(-150, 150))
snow.CFrame = CFrame.new(pos)
snow.Parent = workspace
local bv = Instance.new("BodyVelocity")
bv.Velocity = Vector3.new(math.random(-5, 5), -15, math.random(-5, 5))
bv.Parent = snow
Debris:AddItem(snow, 6)
end
end)
-- =====================
-- 3. 고급 셰이더 효과 함수
-- =====================
local function applyShader()
Lighting.ClockTime = 14
Lighting.Brightness = 3.5
Lighting.GlobalShadows = true
Lighting.Ambient = Color3.fromRGB(30, 30, 35)
Lighting.OutdoorAmbient = Color3.fromRGB(45, 50, 60)
local fx = {"ShaderBloom", "ShaderCC", "ShaderRays", "ShaderAtmos"}
for _, name in pairs(fx) do if not Lighting:FindFirstChild(name) then
if name == "ShaderBloom" then Instance.new("BloomEffect", Lighting).Name = name
elseif name == "ShaderCC" then Instance.new("ColorCorrectionEffect", Lighting).Name = name
elseif name == "ShaderRays" then Instance.new("SunRaysEffect", Lighting).Name = name
elseif name == "ShaderAtmos" then Instance.new("Atmosphere", Lighting).Name = name end
end end
end
task.spawn(applyShader)
-- =====================
-- 4. 상시 연사 루프
-- =====================
RunService.RenderStepped:Connect(function()
if BeamEnabled and IsMouseDown then
local origin = camera.CFrame.Position
local targetDirection = camera.CFrame.LookVector
local result = workspace:Raycast(origin, targetDirection * 1000, RaycastParams.new())
local targetPosition = result and result.Position or (origin + targetDirection * 1000)
task.spawn(createYellowBeam, origin, targetPosition)
end
end)
-- =====================
-- 5. 마우스/터치 인식
-- =====================
UIS.InputBegan:Connect(function(input, gp)
if gp then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
IsMouseDown = true
end
end)
UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
IsMouseDown = false
end
end)
To embed this project on your website, copy the following code and paste it into your website's HTML: