-- lol
local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/n9owns/Files/refs/heads/main/antiafk", true))()
end)
end)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Camera = game:GetService("Workspace").CurrentCamera
local LocalPlayer = Players.LocalPlayer
local CoreGui = game:GetService("CoreGui")
local TweenService = game:GetService("TweenService")
local MarketplaceService = game:GetService("MarketplaceService")
local Colors = {
Orange = Color3.fromHex("#FF6B1A"),
DarkOrange = Color3.fromHex("#FF4500"),
Purple = Color3.fromHex("#9D4EDD"),
DarkPurple = Color3.fromHex("#5A189A"),
Blood = Color3.fromHex("#8B0000"),
Ghost = Color3.fromHex("#E0E0E0"),
Pumpkin = Color3.fromHex("#FF7518"),
Witch = Color3.fromHex("#6B2E8A"),
Midnight = Color3.fromHex("#0D0221"),
Toxic = Color3.fromHex("#39FF14"),
Red = Color3.fromHex("#FF0000"),
Green = Color3.fromHex("#00FF00"),
Gold = Color3.fromHex("#FFD700"),
Silver = Color3.fromHex("#C0C0C0"),
Blue = Color3.fromHex("#1E90FF"),
Innocent = Color3.fromHex("#39FF14"),
Sheriff = Color3.fromHex("#001e80"),
Murder = Color3.fromHex("#e80909"),
}
local function CreateGradientText(text, color1, color2)
local result = ""
local length = #text
for i = 1, length do
local progress = (i - 1) / math.max(length - 1, 1)
local r = math.floor((color1.R + (color2.R - color1.R) * progress) * 255)
local g = math.floor((color1.G + (color2.G - color1.G) * progress) * 255)
local b = math.floor((color1.B + (color2.B - color1.B) * progress) * 255)
result = result .. string.format(
'%s',
r, g, b, text:sub(i, i)
)
end
return result
end
local popupClosed = false
WindUI:Popup({
Title = CreateGradientText("Kuni Hub", Colors.Red, Colors.Green),
Icon = "skull",
Content = CreateGradientText("Best Murder Mystery 2 Script ", Colors.Gold, Colors.Blue)
.. "
"
.. CreateGradientText("Join our discord server! Daily Giveaways", Colors.Blue, Colors.Purple),
Buttons = {
{
Title = "Exit",
Callback = function() end,
Variant = "Tertiary",
},
{
Title = "Copy Discord",
Callback = function()
setclipboard("https://discord.gg/rp62esPbCm")
WindUI:Notify({
Title = "Discord Copied!",
Content = "Discord invite copied to clipboard!",
Icon = "check-circle",
Duration = 3,
})
popupClosed = true
end,
Variant = "Secondary",
},
{
Title = CreateGradientText("Continue", Colors.Toxic, Colors.Orange),
Callback = function()
popupClosed = true
end,
Variant = "Primary",
}
},
})
repeat task.wait() until popupClosed
local Window = WindUI:CreateWindow({
Title = CreateGradientText("Kuni Hub | Murder Mystery 2", Colors.Red, Colors.Green),
Author = "by kuni ",
Folder = "Kuni Hb",
Icon = "skull",
NewElements = true,
Size = UDim2.new(0, 580, 0, 480),
Transparent = true,
BackgroundTransparency = 0.5,
Theme = "Dark",
SideBarWidth = 220,
HideSearchBar = false,
ScrollBarEnabled = true,
OpenButton = {
Title = "Open Kuni Hub",
CornerRadius = UDim.new(0.5, 0),
StrokeThickness = 2,
Enabled = true,
Draggable = true,
OnlyMobile = false,
Color = ColorSequence.new(Colors.Red, Colors.Green),
},
User = {
Enabled = true,
Anonymous = false,
Callback = function() end,
},
})
local coinAutofarmEnabled = false
local candyAutofarmEnabled = false
local autoEndRoundEnabled = false
local autoFlingMurdererEnabled = false
local flingMurdererOnFull = false
local collectedItems = {}
local autofarmSpeed = 25
local coinsCollected = 0
local candyCollected = 0
local maxCandyCapacity = 40
local character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local roundActive = false
local isTeleporting = false
local roundEnding = false
local startPosition = nil
local isResetting = false
local bagFull = false
local PREMIUM_GAMEPASS_ID = 818078531
local function CheckGamepass()
local success, ownsGamepass = pcall(function()
return MarketplaceService:UserOwnsGamePassAsync(LocalPlayer.UserId, PREMIUM_GAMEPASS_ID)
end)
if success then
if ownsGamepass then
maxCandyCapacity = 50
print("[Gamepass Check] ✅ You own the premium gamepass!")
else
maxCandyCapacity = 40
print("[Gamepass Check] ⌠You do NOT own the premium gamepass.")
end
else
maxCandyCapacity = 40
print("[Gamepass Check] âš ï¸ Failed to check ownership.")
end
end
CheckGamepass()
local murdererFound = false
local sheriffFound = false
local espFilters = {"Esp All"}
local highlightEnabled = true
local lineESPEnabled = false
local lineESPObjects = {}
local selectedWeaponName = ""
local dupeAmount = 1
local fromWeapon = ""
local toWeapon = ""
local inventoryMain = nil
if LocalPlayer.PlayerGui.MainGUI.Game:FindFirstChild("Inventory") then
inventoryMain = LocalPlayer.PlayerGui.MainGUI.Game.Inventory.Main
else
inventoryMain = LocalPlayer.PlayerGui.MainGUI.Lobby.Screens.Inventory.Main
end
local CharacterStats = {
WalkSpeed = {
Value = 16,
Default = 16,
Locked = false,
},
JumpPower = {
Value = 50,
Default = 50,
Locked = false,
},
}
local function GetPlayerRole(player)
local char = player.Character
if not char then return nil end
local backpack = player:FindFirstChild("Backpack")
if char:FindFirstChild("Knife") or (backpack and backpack:FindFirstChild("Knife")) then
return "Murderer"
end
if char:FindFirstChild("Gun") or (backpack and backpack:FindFirstChild("Gun")) then
return "Sheriff"
end
return "Innocent"
end
local function ShouldHighlightPlayer(player, filters)
local role = GetPlayerRole(player)
if not role then return false end
if table.find(filters, "Esp All") then
return true
end
if table.find(filters, "Esp Murder") and role == "Murderer" then
return true
end
if table.find(filters, "Esp Sheriff") and role == "Sheriff" then
return true
end
if table.find(filters, "Esp Sheriff / Murder") and (role == "Sheriff" or role == "Murderer") then
return true
end
return false
end
local function CreateHighlight(character, color)
local highlight = character:FindFirstChild("RoleHighlight")
if not highlight then
highlight = Instance.new("Highlight")
highlight.Name = "RoleHighlight"
highlight.FillTransparency = 0.5
highlight.OutlineTransparency = 1
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Adornee = character
highlight.Parent = character
end
highlight.FillColor = color
end
local function RemoveHighlight(character)
local highlight = character:FindFirstChild("RoleHighlight")
if highlight then
highlight:Destroy()
end
end
local function CreateLineESP(player, color)
local line = Drawing.new("Line")
line.Thickness = 2
line.Color = color or Color3.new(1, 1, 1)
line.Transparency = 1
lineESPObjects[player] = line
end
local function RemoveLineESP(player)
if lineESPObjects[player] then
lineESPObjects[player]:Remove()
lineESPObjects[player] = nil
end
end
local function UpdateESP()
murdererFound = false
sheriffFound = false
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local role = GetPlayerRole(player)
if role == "Murderer" then
murdererFound = true
end
if role == "Sheriff" then
sheriffFound = true
end
end
end
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local role = GetPlayerRole(player)
local shouldHighlight = ShouldHighlightPlayer(player, espFilters)
local highlightColor = nil
if highlightEnabled then
if shouldHighlight then
if role == "Murderer" then
highlightColor = Colors.Blood
elseif role == "Sheriff" then
highlightColor = Colors.Toxic or Colors.Orange
end
CreateHighlight(player.Character, highlightColor)
else
RemoveHighlight(player.Character)
end
else
RemoveHighlight(player.Character)
end
if lineESPEnabled and shouldHighlight then
if role == "Murderer" then
highlightColor = Colors.Blood
elseif role == "Sheriff" then
highlightColor = Colors.Toxic or Colors.Orange
end
if not lineESPObjects[player] then
CreateLineESP(player, highlightColor)
else
lineESPObjects[player].Color = highlightColor
end
else
RemoveLineESP(player)
end
end
end
end
local function ApplyCharacterStats()
local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
if not CharacterStats.WalkSpeed.Locked then
humanoid.WalkSpeed = CharacterStats.WalkSpeed.Value
end
if not CharacterStats.JumpPower.Locked then
humanoid.JumpPower = CharacterStats.JumpPower.Value
end
end
end
local function FlingPlayers(playerNames)
local Players = game:GetService("Players")
local flingAll = false
local function GetPlayerFromName(name)
name = name:lower()
if name == "all" or name == "others" then
flingAll = true
return
end
if name == "random" then
local allPlayers = Players:GetPlayers()
if table.find(allPlayers, Players.LocalPlayer) then
table.remove(allPlayers, table.find(allPlayers, Players.LocalPlayer))
end
return allPlayers[math.random(#allPlayers)]
end
for _, player in pairs(Players:GetPlayers()) do
if player ~= Players.LocalPlayer then
if player.Name:lower():match("^" .. name) then
return player
end
if player.DisplayName:lower():match("^" .. name) then
return player
end
end
end
end
local function FlingPlayer(targetPlayer)
local localChar = Players.LocalPlayer.Character
local localHumanoid = localChar and localChar:FindFirstChildOfClass("Humanoid")
local localRoot = localHumanoid and localHumanoid.RootPart
local targetChar = targetPlayer.Character
local targetHumanoid = targetChar:FindFirstChildOfClass("Humanoid")
local targetRoot = targetHumanoid and targetHumanoid.RootPart
local targetHead = targetChar:FindFirstChild("Head")
if not localChar or not localHumanoid or not localRoot then
return
end
if localRoot.Velocity.Magnitude < 50 then
getgenv().OldPos = localRoot.CFrame
end
if targetHumanoid and targetHumanoid.Sit and not flingAll then
return
end
if targetHead then
workspace.CurrentCamera.CameraSubject = targetHead
elseif targetHumanoid and targetRoot then
workspace.CurrentCamera.CameraSubject = targetHumanoid
end
local function Teleport(part, offset, rotation)
localRoot.CFrame = CFrame.new(part.Position) * offset * rotation
localChar:SetPrimaryPartCFrame(CFrame.new(part.Position) * offset * rotation)
localRoot.Velocity = Vector3.new(900000000, 900000000, 900000000)
localRoot.RotVelocity = Vector3.new(900000000, 900000000, 900000000)
end
local function PerformFling(part)
local spinDegrees = 0
local startTime = tick()
local maxTime = 2
while localRoot do
if targetHumanoid then
if part.Velocity.Magnitude < 50 then
spinDegrees = spinDegrees + 100
Teleport(part, CFrame.new(0, 1.5, 0) + targetHumanoid.MoveDirection * part.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(spinDegrees), 0, 0))
task.wait()
Teleport(part, CFrame.new(0, -1.5, 0) + targetHumanoid.MoveDirection * part.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(spinDegrees), 0, 0))
task.wait()
Teleport(part, CFrame.new(2.25, 1.5, -2.25) + targetHumanoid.MoveDirection * part.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(spinDegrees), 0, 0))
task.wait()
Teleport(part, CFrame.new(-2.25, -1.5, 2.25) + targetHumanoid.MoveDirection * part.Velocity.Magnitude / 1.25, CFrame.Angles(math.rad(spinDegrees), 0, 0))
task.wait()
else
Teleport(part, CFrame.new(0, 1.5, targetHumanoid.WalkSpeed), CFrame.Angles(math.rad(90), 0, 0))
task.wait()
Teleport(part, CFrame.new(0, -1.5, -targetHumanoid.WalkSpeed), CFrame.Angles(0, 0, 0))
task.wait()
end
if part.Velocity.Magnitude > 500 then break end
if part.Parent ~= targetPlayer.Character then break end
if targetPlayer.Parent ~= Players then break end
if targetPlayer.Character ~= targetChar then break end
if targetHumanoid.Sit then break end
if localHumanoid.Health <= 0 then break end
if tick() > startTime + maxTime then break end
else
break
end
end
end
workspace.FallenPartsDestroyHeight = 0/0
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.Name = "EpixVel"
bodyVelocity.Parent = localRoot
bodyVelocity.Velocity = Vector3.new(900000000, 900000000, 900000000)
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
localHumanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, false)
if targetRoot and targetHead then
if (targetRoot.CFrame.p - targetHead.CFrame.p).Magnitude > 5 then
PerformFling(targetHead)
else
PerformFling(targetRoot)
end
elseif targetRoot then
PerformFling(targetRoot)
elseif targetHead then
PerformFling(targetHead)
end
bodyVelocity:Destroy()
localHumanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, true)
workspace.CurrentCamera.CameraSubject = localHumanoid
repeat
localRoot.CFrame = getgenv().OldPos * CFrame.new(0, 0.5, 0)
localChar:SetPrimaryPartCFrame(getgenv().OldPos * CFrame.new(0, 0.5, 0))
localHumanoid:ChangeState("GettingUp")
for _, part in pairs(localChar:GetChildren()) do
if part:IsA("BasePart") then
part.Velocity = Vector3.new()
part.RotVelocity = Vector3.new()
end
end
task.wait()
until (localRoot.Position - getgenv().OldPos.p).Magnitude < 25
workspace.FallenPartsDestroyHeight = -500
end
if not playerNames[1] then return end
if flingAll then
for _, player in pairs(Players:GetPlayers()) do
FlingPlayer(player)
end
else
for _, name in pairs(playerNames) do
local targetPlayer = GetPlayerFromName(name)
if targetPlayer and targetPlayer ~= Players.LocalPlayer then
FlingPlayer(targetPlayer)
end
end
end
end
local function FlingMurderer()
local murderer = nil
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
if player.Character:FindFirstChild("Knife") then
murderer = player
break
else
local backpack = player:FindFirstChild("Backpack")
if backpack and backpack:FindFirstChild("Knife") then
murderer = player
break
end
end
end
end
if murderer and murderer.Character then
WindUI:Notify({
Title = "Flinging Murderer",
Content = "Flinging " .. murderer.Name .. "!",
Icon = "zap",
Duration = 3,
})
FlingPlayers({murderer.Name})
WindUI:Notify({
Title = "Fling Complete",
Content = "Murderer has been flung!",
Icon = "check-circle",
Duration = 2,
})
return true
end
WindUI:Notify({
Title = "Fling Error",
Content = "No murderer found!",
Icon = "x-circle",
Duration = 3,
})
return false
end
local function GetCharacter()
return LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
end
local function GetHumanoidRootPart()
return GetCharacter():WaitForChild("HumanoidRootPart")
end
local function FindNearestCoin()
local root = GetHumanoidRootPart()
local nearestCoin = nil
local nearestDistance = math.huge
for _, obj in pairs(workspace:GetChildren()) do
if obj:FindFirstChild("CoinContainer") then
for _, coin in pairs(obj.CoinContainer:GetChildren()) do
if coin:IsA("BasePart") and coin:FindFirstChild("TouchInterest") then
local distance = (root.Position - coin.Position).Magnitude
if distance < nearestDistance then
nearestDistance = distance
nearestCoin = coin
end
end
end
end
end
return nearestCoin, nearestDistance
end
local function FindNearestCandy()
local root = GetHumanoidRootPart()
local nearestCandy = nil
local nearestDistance = math.huge
for _, obj in pairs(workspace:GetChildren()) do
if obj:FindFirstChild("CoinContainer") then
for _, candy in pairs(obj.CoinContainer:GetChildren()) do
if candy:IsA("BasePart")
and candy:GetAttribute("CoinID") == "Candy"
and candy:FindFirstChild("TouchInterest") then
local distance = (root.Position - candy.Position).Magnitude
if distance < nearestDistance then
nearestDistance = distance
nearestCandy = candy
end
end
end
end
end
if not nearestCandy then
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and obj.Name == "candy" then
local distance = (root.Position - obj.Position).Magnitude
if distance < nearestDistance then
nearestDistance = distance
nearestCandy = obj
end
end
end
end
return nearestCandy, nearestDistance
end
local CoinCollectedRemote = ReplicatedStorage:FindFirstChild("Remotes")
and ReplicatedStorage.Remotes:FindFirstChild("Gameplay")
and ReplicatedStorage.Remotes.Gameplay:FindFirstChild("CoinCollected")
local RoundStartRemote = ReplicatedStorage:FindFirstChild("Remotes")
and ReplicatedStorage.Remotes:FindFirstChild("Gameplay")
and ReplicatedStorage.Remotes.Gameplay:FindFirstChild("RoundStart")
local RoundEndRemote = ReplicatedStorage:FindFirstChild("Remotes")
and ReplicatedStorage.Remotes:FindFirstChild("Gameplay")
and ReplicatedStorage.Remotes.Gameplay:FindFirstChild("RoundEndFade")
if RoundStartRemote then
RoundStartRemote.OnClientEvent:Connect(function()
roundActive = true
startPosition = GetHumanoidRootPart().CFrame
print("[DEBUG] Round started, farming enabled")
end)
end
if RoundEndRemote then
RoundEndRemote.OnClientEvent:Connect(function()
roundActive = false
print("[DEBUG] Round ended, farming disabled")
end)
end
task.spawn(function()
while true do
if (coinAutofarmEnabled or candyAutofarmEnabled) and roundActive and not isTeleporting then
local root = GetHumanoidRootPart()
local targetItem = nil
local distance = math.huge
if candyAutofarmEnabled then
targetItem, distance = FindNearestCandy()
elseif coinAutofarmEnabled then
targetItem, distance = FindNearestCoin()
end
if targetItem then
if distance > 150 then
root.CFrame = targetItem.CFrame
print("[DEBUG] Teleported to distant coin at distance:", distance)
else
local tween = TweenService:Create(
root,
TweenInfo.new(distance / autofarmSpeed, Enum.EasingStyle.Linear),
{CFrame = targetItem.CFrame}
)
tween:Play()
print("[DEBUG] Tweening to nearby coin at distance:", distance)
while true do
task.wait()
if not targetItem:FindFirstChild("TouchInterest") then break end
if not roundActive then break end
if not (coinAutofarmEnabled or candyAutofarmEnabled) then break end
end
tween:Cancel()
end
coinsCollected = coinsCollected + 1
print("[DEBUG] Collected item, total collected:", coinsCollected)
else
print("[DEBUG] No valid items found to collect")
end
end
task.wait(0.2)
end
end)
RunService.Stepped:Connect(function()
if (coinAutofarmEnabled or candyAutofarmEnabled) and roundActive and not isTeleporting then
local char = LocalPlayer.Character
if char and char:IsDescendantOf(workspace) then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end
end
end)
LocalPlayer.CharacterAdded:Connect(function(char)
character = char
humanoidRootPart = char:WaitForChild("HumanoidRootPart")
collectedItems = {}
candyCollected = 0
isTeleporting = false
roundEnding = false
CheckGamepass()
print("[DEBUG] Character respawned, farming state reset")
end)
if CoinCollectedRemote then
CoinCollectedRemote.OnClientEvent:Connect(function(coinType, amount, _, _)
if coinType == "Candy" then
candyCollected = amount
print("[DEBUG] Collected candy! Current amount:", candyCollected)
if candyCollected >= maxCandyCapacity then
print("[DEBUG] Bag is full! (" .. maxCandyCapacity .. " candies reached)")
WindUI:Notify({
Title = "Bag Full!",
Content = "Candy bag is full (" .. candyCollected .. "/" .. maxCandyCapacity .. ")",
Icon = "package",
Duration = 3,
})
candyAutofarmEnabled = false
coinAutofarmEnabled = false
print("[DEBUG] Stopped autofarm")
if autoFlingMurdererEnabled then
print("[DEBUG] Auto fling murderer enabled...")
WindUI:Notify({
Title = "Auto Fling Murderer",
Content = "Flinging murderer now!",
Icon = "zap",
Duration = 2,
})
FlingMurderer()
end
if autoEndRoundEnabled and not roundEnding then
roundEnding = true
isTeleporting = true
local root = GetHumanoidRootPart()
if startPosition then
print("[DEBUG] Returning to start position...")
local returnTween = TweenService:Create(
root,
TweenInfo.new(2, Enum.EasingStyle.Linear),
{CFrame = startPosition}
)
returnTween:Play()
returnTween.Completed:Wait()
end
task.wait(0.5)
print("[DEBUG] Resetting character...")
WindUI:Notify({
Title = "Auto Reset",
Content = "Resetting character instantly!",
Icon = "refresh-cw",
Duration = 2,
})
if LocalPlayer.Character then
LocalPlayer.Character:BreakJoints()
LocalPlayer.CharacterAdded:Wait()
task.wait(1.5)
print("[DEBUG] Character reset completed")
end
roundEnding = false
isTeleporting = false
print("[DEBUG] Farming state reset")
end
end
end
end)
end
if RoundStartRemote then
RoundStartRemote.OnClientEvent:Connect(function()
candyCollected = 0
collectedItems = {}
isTeleporting = false
roundEnding = false
roundActive = true
startPosition = GetHumanoidRootPart().CFrame
print("[DEBUG] Round started, farming enabled")
if candyAutofarmEnabled then
candyAutofarmEnabled = true
WindUI:Notify({
Title = "Round Started!",
Content = "Candy autofarm resumed automatically",
Icon = "play-circle",
Duration = 2,
})
end
if coinAutofarmEnabled then
coinAutofarmEnabled = true
WindUI:Notify({
Title = "Round Started!",
Content = "Coin autofarm resumed automatically",
Icon = "play-circle",
Duration = 2,
})
end
end)
end
local function DuplicateWeapon()
wait(math.random(1, 3))
for _, weaponCategory in pairs(inventoryMain.Weapons.Items.Container:GetChildren()) do
for _, itemFolder in pairs(weaponCategory.Container:GetChildren()) do
if itemFolder.Name == "Christmas" or itemFolder.Name == "Halloween" then
for _, item in pairs(itemFolder.Container:GetChildren()) do
if item:IsA("Frame") and item.ItemName.Label.Text == selectedWeaponName then
local currentAmount = item.Container.Amount.Text
if currentAmount == "" or currentAmount == "None" then
item.Container.Amount.Text = "x2"
else
local num = tonumber(currentAmount:match("x(%d+)"))
if num then
item.Container.Amount.Text = "x" .. tostring(num + 1)
end
end
end
end
elseif item:IsA("Frame") and itemFolder.ItemName.Label.Text == selectedWeaponName then
local currentAmount = itemFolder.Container.Amount.Text
if currentAmount == "" or currentAmount == "None" then
itemFolder.Container.Amount.Text = "x2"
else
local num = tonumber(currentAmount:match("x(%d+)"))
if num then
itemFolder.Container.Amount.Text = "x" .. tostring(num + 1)
end
end
end
end
end
end
local function DuplicateInventory()
wait(math.random(3, 5))
for _, weaponCategory in pairs(inventoryMain.Weapons.Items.Container:GetChildren()) do
for _, itemFolder in pairs(weaponCategory.Container:GetChildren()) do
if itemFolder.Name == "Christmas" or itemFolder.Name == "Halloween" then
for _, item in pairs(itemFolder.Container:GetChildren()) do
if item:IsA("Frame")
and item.ItemName.Label.Text ~= "Default Knife"
and item.ItemName.Label.Text ~= "Default Gun" then
local currentAmount = item.Container.Amount.Text
if currentAmount == "" or currentAmount == "None" then
item.Container.Amount.Text = "x2"
else
local num = tonumber(currentAmount:match("x(%d+)"))
if num then
item.Container.Amount.Text = "x" .. tostring(num * 2)
end
end
end
end
elseif itemFolder:IsA("Frame")
and itemFolder.ItemName.Label.Text ~= "Default Knife"
and itemFolder.ItemName.Label.Text ~= "Default Gun" then
local currentAmount = itemFolder.Container.Amount.Text
if currentAmount == "" or currentAmount == "None" then
itemFolder.Container.Amount.Text = "x2"
else
local num = tonumber(currentAmount:match("x(%d+)"))
if num then
itemFolder.Container.Amount.Text = "x" .. tostring(num * 2)
end
end
end
end
end
for _, pet in pairs(inventoryMain.Pets.Items.Container.Current.Container:GetChildren()) do
if pet:IsA("Frame") then
local currentAmount = pet.Container.Amount.Text
if currentAmount == "" or currentAmount == "None" then
pet.Container.Amount.Text = "x2"
else
local num = tonumber(currentAmount:match("x(%d+)"))
if num then
pet.Container.Amount.Text = "x" .. tostring(num * 2)
end
end
end
end
end
local function WeaponNameMatches(fullName, searchTerm)
return fullName:gsub("_G_%d%d%d%d", ""):gsub("_K_%d%d%d%d", ""):lower():find(searchTerm:lower(), 1, true) ~= nil
end
local function ActivateTradeScam()
if game:GetService("Players").LocalPlayer.PlayerGui.TradeGUI.Enabled == true
or game:GetService("Players").LocalPlayer.PlayerGui.TradeGUI_Phone.Enabled == true then
wait(1)
WindUI:Notify({
Title = "Trade Scam Active",
Content = "Items In Trade Are Now Visual, Remove All Items!",
Icon = "alert-triangle",
Duration = 5,
})
else
WindUI:Notify({
Title = "Trade Scam Error",
Content = "You Need To Be In Trade For This To Work!",
Icon = "x-circle",
Duration = 5,
})
end
end
local function GetRandomMysteryBox()
local success, boxData = pcall(function()
return require(ReplicatedStorage.Database.Sync.MysteryBox)
end)
if not success or not boxData or next(boxData) == nil then
return "StandardBox"
end
local boxes = {}
for boxName, _ in pairs(boxData) do
table.insert(boxes, boxName)
end
return boxes[math.random(1, #boxes)]
end
local function SpawnWeapon(weaponName)
if not pcall(function()
local BoxModule = require(ReplicatedStorage.Modules.BoxModule)
local ItemDatabase = require(ReplicatedStorage.Database.Sync.Item)
if weaponName and ItemDatabase[weaponName] then
print("Spawning:", weaponName)
BoxModule.OpenBox(GetRandomMysteryBox(), weaponName)
pcall(function()
getsenv(LocalPlayer.PlayerGui.MainGUI.Inventory.NewItem)._G.NewItem(weaponName, nil, nil, "Weapons", 1)
end)
WindUI:Notify({
Title = "Success",
Content = "Successfully spawned: " .. weaponName,
Icon = "check-circle",
Duration = 3,
})
else
WindUI:Notify({
Title = "Error",
Content = "Invalid item: " .. weaponName,
Icon = "x-circle",
Duration = 3,
})
end
end) then
WindUI:Notify({
Title = "Error",
Content = "Error opening crate for: " .. weaponName,
Icon = "x-circle",
Duration = 3,
})
end
end
local GunSystem = {
AutoGrabEnabled = false,
NotifyGunDrop = true,
GunDropCheckInterval = 1,
ActiveGunDrops = {},
}
local MAP_NAMES = {
"ResearchFacility",
"Hospital3",
"MilBase",
"House2",
"Workplace",
"Mansion2",
"BioLab",
"Hotel",
"Factory",
"Bank2",
"PoliceStation"
}
local function FindGunDrops()
GunSystem.ActiveGunDrops = {}
for _, mapName in ipairs(MAP_NAMES) do
local map = workspace:FindFirstChild(mapName)
if map then
local gunDrop = map:FindFirstChild("GunDrop")
if gunDrop then
table.insert(GunSystem.ActiveGunDrops, gunDrop)
end
end
end
local mainGunDrop = workspace:FindFirstChild("GunDrop")
if mainGunDrop then
table.insert(GunSystem.ActiveGunDrops, mainGunDrop)
end
end
local function GrabGun(specificGun)
if not specificGun then
FindGunDrops()
if #GunSystem.ActiveGunDrops == 0 then
WindUI:Notify({
Title = "Gun System",
Content = "No guns available on the map",
Icon = "x-circle",
Duration = 3,
})
return false
end
local nearestGun = nil
local nearestDistance = math.huge
local char = LocalPlayer.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if root then
for _, gun in ipairs(GunSystem.ActiveGunDrops) do
local distance = (root.Position - gun.Position).Magnitude
if distance < nearestDistance then
nearestGun = gun
nearestDistance = distance
end
end
end
specificGun = nearestGun
end
if specificGun and LocalPlayer.Character then
local root = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if root then
root.CFrame = specificGun.CFrame
task.wait(0.3)
local prompt = specificGun:FindFirstChildOfClass("ProximityPrompt")
if prompt then
fireproximityprompt(prompt)
WindUI:Notify({
Title = "Gun System",
Content = "Successfully grabbed the gun!",
Icon = "check-circle",
Duration = 3,
})
return true
end
end
end
return false
end
local function AutoGrabGunLoop()
while GunSystem.AutoGrabEnabled do
FindGunDrops()
if #GunSystem.ActiveGunDrops > 0 and LocalPlayer.Character then
local root = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if root then
local nearestGun = nil
local nearestDistance = math.huge
for _, gun in ipairs(GunSystem.ActiveGunDrops) do
local distance = (root.Position - gun.Position).Magnitude
if distance < nearestDistance then
nearestGun = gun
nearestDistance = distance
end
end
if nearestGun then
root.CFrame = nearestGun.CFrame
task.wait(0.3)
local prompt = nearestGun:FindFirstChildOfClass("ProximityPrompt")
if prompt then
fireproximityprompt(prompt)
task.wait(1)
end
end
end
end
task.wait(GunSystem.GunDropCheckInterval)
end
end
local killAllEnabled = false
local attackDelay = 0.5
local VALID_TARGET_ROLES = {
"Sheriff",
"Hero",
"Innocent"
}
local function GetPlayerRoleFromServer(player)
local playerData = ReplicatedStorage:FindFirstChild("GetPlayerData", true):InvokeServer()
if playerData and playerData[player.Name] then
return playerData[player.Name].Role
end
return nil
end
local function HasKnife()
local char = LocalPlayer.Character
if not char then return false end
if char:FindFirstChild("Knife") then
return true
end
local knife = LocalPlayer.Backpack:FindFirstChild("Knife")
if knife then
knife.Parent = char
return true
end
return false
end
local function GetNearestTarget()
local validTargets = {}
local playerData = ReplicatedStorage:FindFirstChild("GetPlayerData", true):InvokeServer()
local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not myRoot then return nil end
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local role = GetPlayerRoleFromServer(player)
local humanoid = player.Character:FindFirstChild("Humanoid")
local root = player.Character:FindFirstChild("HumanoidRootPart")
if role and humanoid and humanoid.Health > 0 and root and table.find(VALID_TARGET_ROLES, role) then
table.insert(validTargets, {
Player = player,
Distance = (myRoot.Position - root.Position).Magnitude,
})
end
end
end
table.sort(validTargets, function(a, b)
return a.Distance < b.Distance
end)
return validTargets[1] and validTargets[1].Player or nil
end
local function KillTarget(target)
if not target or not target.Character then
return false
end
local humanoid = target.Character:FindFirstChild("Humanoid")
if not humanoid or humanoid.Health <= 0 then
return false
end
if not HasKnife() then
return false
end
local targetRoot = target.Character:FindFirstChild("HumanoidRootPart")
local myRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetRoot and myRoot then
myRoot.CFrame = CFrame.new(
targetRoot.Position + ((myRoot.Position - targetRoot.Position)).Unit * 2,
targetRoot.Position
)
end
local knife = LocalPlayer.Character:FindFirstChild("Knife")
if knife and knife:FindFirstChild("Stab") then
for i = 1, 3 do
knife.Stab:FireServer("Down")
end
return true
end
return false
end
local function StartKillAll()
if killAllEnabled then return end
killAllEnabled = true
task.spawn(function()
while killAllEnabled do
local target = GetNearestTarget()
if not target then
killAllEnabled = false
break
else
KillTarget(target)
task.wait(attackDelay)
end
end
end)
end
local function StopKillAll()
killAllEnabled = false
end
local shotType = "Default"
local function ShootMurderer()
if not LocalPlayer.Character or LocalPlayer.Character.Humanoid.Health <= 0 then
return
end
local success, playerData = pcall(function()
return ReplicatedStorage:FindFirstChild("GetPlayerData", true):InvokeServer()
end)
if not success or not playerData then
return
end
local murderer = nil
for playerName, data in pairs(playerData) do
if data.Role == "Murderer" then
murderer = Players:FindFirstChild(playerName)
break
end
end
if not murderer or not murderer.Character or not murderer.Character:FindFirstChild("Humanoid")
or murderer.Character.Humanoid.Health <= 0 then
return
end
local gun = LocalPlayer.Character:FindFirstChild("Gun") or LocalPlayer.Backpack:FindFirstChild("Gun")
if shotType == "Default" and not gun then
return
end
if gun and not LocalPlayer.Character:FindFirstChild("Gun") then
gun.Parent = LocalPlayer.Character
end
if shotType == "Teleport" then
local murdererRoot = murderer.Character:FindFirstChild("HumanoidRootPart")
local myRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if murdererRoot and myRoot then
myRoot.CFrame = murdererRoot.CFrame * CFrame.new(0, 0, -4)
end
end
gun = LocalPlayer.Character:FindFirstChild("Gun")
if gun and gun:FindFirstChild("KnifeLocal") then
local murdererRoot = murderer.Character:FindFirstChild("HumanoidRootPart")
if murdererRoot then
gun.KnifeLocal.CreateBeam.RemoteFunction:InvokeServer(unpack({
[1] = 1,
[2] = murdererRoot.Position,
[3] = "AH2",
}))
end
end
end
local function AutoResetCharacter()
print("[DEBUG] autoResetCharacter function called")
WindUI:Notify({
Title = "Auto Reset",
Content = "Resetting character instantly!",
Icon = "refresh-cw",
Duration = 3,
})
if LocalPlayer.Character then
print("[DEBUG] Character found, attempting reset...")
pcall(function()
LocalPlayer.Character:BreakJoints()
print("[DEBUG] BreakJoints method used")
end)
task.wait(0.2)
pcall(function()
if LocalPlayer.Character then
LocalPlayer.Character:Destroy()
print("[DEBUG] Character destroyed")
task.wait(0.2)
LocalPlayer:LoadCharacter()
print("[DEBUG] Character reloaded")
end
end)
print("[DEBUG] Character reset process completed")
else
print("[DEBUG] No character found to reset")
pcall(function()
LocalPlayer:LoadCharacter()
print("[DEBUG] Attempted to load character")
end)
end
end
local MainSection = Window:Section({
Title = CreateGradientText("Kuni Functions", Colors.Pumpkin, Colors.Purple),
Icon = "flame",
Opened = true,
})
local ESPTab = MainSection:Tab({
Title = "ESP",
Icon = "eye",
})
ESPTab:Section({
Title = "Player ESP Settings",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
ESPTab:Toggle({
Flag = "HighlightESP",
Title = "Highlight ESP",
Desc = "Enable player highlighting (shows all by default)",
Default = true,
Callback = function(value)
highlightEnabled = value
if value then
espFilters = {"Esp All"}
end
UpdateESP()
end,
})
ESPTab:Space()
ESPTab:Dropdown({
Flag = "ESPOptions",
Title = "Filter ESP",
Desc = "Filter which players to highlight",
Values = {
{Title = "Esp All", Icon = "users"},
{Title = "Esp Sheriff", Icon = "shield"},
{Title = "Esp Murder", Icon = "knife"},
{Title = "Esp Sheriff / Murder", Icon = "target"},
},
Value = "Esp All",
Callback = function(selected)
espFilters = {selected.Title}
UpdateESP()
end,
})
ESPTab:Space()
ESPTab:Toggle({
Flag = "LineESP",
Title = "Line ESP (Tracers)",
Desc = "Draw lines to players",
Default = false,
Callback = function(value)
lineESPEnabled = value
if not value then
for _, line in pairs(lineESPObjects) do
line:Remove()
end
lineESPObjects = {}
end
UpdateESP()
end,
})
local AutoFarmTab = MainSection:Tab({
Title = CreateGradientText("Auto Farm", Colors.Pumpkin, Colors.DarkOrange),
Icon = "trending-up",
})
AutoFarmTab:Section({
Title = "Coin & Candy Collection",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
AutoFarmTab:Toggle({
Flag = "CoinAutofarm",
Title = "Coin Autofarm",
Desc = "Automatically collect coins from the map",
Default = false,
Callback = function(value)
coinAutofarmEnabled = value
if value then
collectedItems = {}
coinsCollected = 0
WindUI:Notify({
Title = "Coin Autofarm",
Content = "Coin farming started!",
Icon = "dollar-sign",
Duration = 3,
})
else
WindUI:Notify({
Title = "Coin Autofarm",
Content = "Coin farming stopped",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
AutoFarmTab:Space()
AutoFarmTab:Toggle({
Flag = "CandyAutofarm",
Title = "Candy Autofarm",
Desc = "Collect Halloween candy for event rewards",
Default = false,
Callback = function(value)
candyAutofarmEnabled = value
if value then
collectedItems = {}
coinsCollected = 0
WindUI:Notify({
Title = "Candy Autofarm",
Content = "Candy farming started!",
Icon = "candy",
Duration = 3,
})
else
WindUI:Notify({
Title = "Candy Autofarm",
Content = "Candy farming stopped",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
AutoFarmTab:Space()
AutoFarmTab:Toggle({
Flag = "AutoEndRound",
Title = "Auto Reset Character",
Desc = "Automatically reset character when bag is full",
Default = false,
Callback = function(value)
autoEndRoundEnabled = value
flingMurdererOnFull = value
if value then
WindUI:Notify({
Title = "Auto Reset Character",
Content = "Will reset character at " .. maxCandyCapacity .. " candy",
Icon = "refresh-cw",
Duration = 3,
})
else
WindUI:Notify({
Title = "Auto Reset Character",
Content = "Auto reset character disabled",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
AutoFarmTab:Space()
AutoFarmTab:Toggle({
Flag = "AutoFlingMurderer",
Title = "Auto Fling Murderer",
Desc = "Automatically fling murderer when bag is full",
Default = false,
Callback = function(value)
autoFlingMurdererEnabled = value
if value then
WindUI:Notify({
Title = "Auto Fling Murderer",
Content = "Will fling murderer at " .. maxCandyCapacity .. " candy",
Icon = "zap",
Duration = 3,
})
else
WindUI:Notify({
Title = "Auto Fling Murderer",
Content = "Auto fling murderer disabled",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
AutoFarmTab:Space()
AutoFarmTab:Slider({
Flag = "FlySpeed",
Title = "Autofarm Speed",
Desc = "Adjust collection speed",
Step = 1,
Value = {
Min = 5,
Max = 50,
Default = 25,
},
Callback = function(value)
autofarmSpeed = value
end,
})
AutoFarmTab:Space()
AutoFarmTab:Section({
Title = "âš ï¸ Recommended: 25, higher will probably get you kicked",
TextSize = 14,
TextTransparency = 0.3,
FontWeight = Enum.FontWeight.Medium,
})
AutoFarmTab:Space()
AutoFarmTab:Button({
Title = "Reset Counter",
Icon = "refresh-cw",
Justify = "Center",
Callback = function()
coinsCollected = 0
collectedItems = {}
candyCollected = 0
WindUI:Notify({
Title = "Counter Reset",
Content = "Collection counter reset!",
Icon = "check-circle",
Duration = 3,
})
end,
})
AutoFarmTab:Space()
AutoFarmTab:Button({
Title = "Fling Murderer",
Icon = "zap",
Color = Colors.Blood,
Justify = "Center",
Callback = function()
FlingMurderer()
end,
})
local CharacterTab = MainSection:Tab({
Title = "Character",
Icon = "user",
})
CharacterTab:Section({
Title = "Movement Settings",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
CharacterTab:Slider({
Flag = "WalkSpeed",
Title = "Walk Speed",
Desc = "Adjust your walking speed",
Step = 1,
Value = {
Min = 0,
Max = 200,
Default = 16,
},
Callback = function(value)
CharacterStats.WalkSpeed.Value = value
ApplyCharacterStats()
end,
})
CharacterTab:Space()
CharacterTab:Toggle({
Flag = "BlockWalkSpeed",
Title = "Lock Walk Speed",
Desc = "Prevent walkspeed changes",
Default = false,
Callback = function(value)
CharacterStats.WalkSpeed.Locked = value
end,
})
CharacterTab:Space()
CharacterTab:Slider({
Flag = "JumpPower",
Title = "Jump Power",
Desc = "Adjust your jump height",
Step = 1,
Value = {
Min = 0,
Max = 200,
Default = 50,
},
Callback = function(value)
CharacterStats.JumpPower.Value = value
ApplyCharacterStats()
end,
})
CharacterTab:Space()
CharacterTab:Toggle({
Flag = "BlockJumpPower",
Title = "Lock Jump Power",
Desc = "Prevent jump power changes",
Default = false,
Callback = function(value)
CharacterStats.JumpPower.Locked = value
end,
})
CharacterTab:Space()
CharacterTab:Button({
Title = "Reset to Default",
Icon = "rotate-ccw",
Color = Colors.Orange,
Justify = "Center",
Callback = function()
CharacterStats.WalkSpeed.Value = 16
CharacterStats.JumpPower.Value = 50
ApplyCharacterStats()
WindUI:Notify({
Title = "Character Reset",
Content = "Settings reset to default!",
Icon = "check-circle",
Duration = 3,
})
end,
})
local TeleportTab = MainSection:Tab({
Title = "Teleport",
Icon = "move",
})
TeleportTab:Section({
Title = "Player Teleportation",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
local selectedPlayer = nil
local playerDropdown = nil
local function GetPlayerList()
local playerList = {}
for _, player in pairs(Players:GetPlayers()) do
if player ~= LocalPlayer then
table.insert(playerList, {
Title = player.Name,
Icon = "user",
})
end
end
return playerList
end
playerDropdown = TeleportTab:Dropdown({
Flag = "TeleportPlayer",
Title = "Select Player",
Desc = "Choose a player to teleport to",
Values = GetPlayerList(),
Callback = function(selected)
selectedPlayer = Players:FindFirstChild(selected.Title)
end,
})
TeleportTab:Space()
TeleportTab:Button({
Title = "Teleport to Player",
Icon = "zap",
Color = Colors.Purple,
Justify = "Center",
Callback = function()
if selectedPlayer and selectedPlayer.Character then
local targetRoot = selectedPlayer.Character:FindFirstChild("HumanoidRootPart")
local myRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetRoot and myRoot then
myRoot.CFrame = targetRoot.CFrame
WindUI:Notify({
Title = "Teleport Success",
Content = "Teleported to " .. selectedPlayer.Name,
Icon = "check-circle",
Duration = 3,
})
end
else
WindUI:Notify({
Title = "Teleport Error",
Content = "Target not found!",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
TeleportTab:Space()
TeleportTab:Button({
Title = "Refresh Player List",
Icon = "refresh-cw",
Justify = "Center",
Callback = function()
playerDropdown:Refresh(GetPlayerList())
WindUI:Notify({
Title = "Players Updated",
Content = "Player list refreshed!",
Icon = "check-circle",
Duration = 2,
})
end,
})
TeleportTab:Space({Columns = 2})
TeleportTab:Section({
Title = "Role Teleportation",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
TeleportTab:Button({
Title = "Teleport to Murderer",
Icon = "knife",
Color = Colors.Blood,
Justify = "Center",
Callback = function()
local murderer = nil
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
if player.Character:FindFirstChild("Knife") then
murderer = player
break
else
local backpack = player:FindFirstChild("Backpack")
if backpack and backpack:FindFirstChild("Knife") then
murderer = player
break
end
end
end
end
if murderer and murderer.Character then
local targetRoot = murderer.Character:FindFirstChild("HumanoidRootPart")
local myRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetRoot and myRoot then
myRoot.CFrame = targetRoot.CFrame
WindUI:Notify({
Title = "Teleport Success",
Content = "Teleported to murderer: " .. murderer.Name,
Icon = "check-circle",
Duration = 3,
})
end
else
WindUI:Notify({
Title = "Teleport Error",
Content = "No murderer found!",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
TeleportTab:Space()
TeleportTab:Button({
Title = "Teleport to Sheriff",
Icon = "shield",
Color = Colors.Toxic,
Justify = "Center",
Callback = function()
local sheriff = nil
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
if player.Character:FindFirstChild("Gun") then
sheriff = player
break
else
local backpack = player:FindFirstChild("Backpack")
if backpack and backpack:FindFirstChild("Gun") then
sheriff = player
break
end
end
end
end
if sheriff and sheriff.Character then
local targetRoot = sheriff.Character:FindFirstChild("HumanoidRootPart")
local myRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetRoot and myRoot then
myRoot.CFrame = targetRoot.CFrame
WindUI:Notify({
Title = "Teleport Success",
Content = "Teleported to sheriff: " .. sheriff.Name,
Icon = "check-circle",
Duration = 3,
})
end
else
WindUI:Notify({
Title = "Teleport Error",
Content = "No sheriff found!",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
local WeaponSpawnerTab = MainSection:Tab({
Title = "Weapon Spawner",
Icon = "sword",
})
WeaponSpawnerTab:Section({
Title = "Spawn Weapons",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
local weaponNameInput = ""
WeaponSpawnerTab:Input({
Flag = "WeaponName",
Title = "Weapon Name",
Desc = "Enter the name of the weapon",
Placeholder = "e.g., CandyBlade, Raygun",
Callback = function(value)
weaponNameInput = value
end,
})
WeaponSpawnerTab:Space()
WeaponSpawnerTab:Button({
Title = "Spawn Weapon",
Icon = "sparkles",
Color = Colors.Orange,
Justify = "Center",
Callback = function()
if weaponNameInput ~= "" then
SpawnWeapon(weaponNameInput)
else
WindUI:Notify({
Title = "Error",
Content = "Please enter a weapon name!",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
WeaponSpawnerTab:Space({Columns = 2})
WeaponSpawnerTab:Section({
Title = "Quick Spawn Godlies",
TextSize = 16,
FontWeight = Enum.FontWeight.SemiBold,
})
WeaponSpawnerTab:Button({
Title = "Spawn Raygun (Battlepass)",
Icon = "zap",
Color = Colors.Toxic,
Callback = function()
SpawnWeapon("Raygun")
end,
})
WeaponSpawnerTab:Space()
WeaponSpawnerTab:Button({
Title = "Spawn XenoKnife",
Icon = "knife",
Color = Colors.Blood,
Callback = function()
SpawnWeapon("XenoKnife")
end,
})
WeaponSpawnerTab:Space()
WeaponSpawnerTab:Button({
Title = "Spawn XenoGun",
Icon = "crosshair",
Color = Colors.DarkPurple,
Callback = function()
SpawnWeapon("XenoGun")
end,
})
local WeaponDupeTab = MainSection:Tab({
Title = "Weapon Dupe",
Icon = "copy",
})
WeaponDupeTab:Section({
Title = "Single Weapon Duplication",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
WeaponDupeTab:Input({
Flag = "DupeWeaponName",
Title = "Weapon Name",
Desc = "Enter weapon to duplicate",
Placeholder = "e.g., Lightbringer",
Callback = function(value)
selectedWeaponName = value
end,
})
WeaponDupeTab:Space()
WeaponDupeTab:Input({
Flag = "DupeAmount",
Title = "Dupe Amount",
Desc = "How many times to duplicate",
Placeholder = "e.g., 5",
Value = "1",
Callback = function(value)
dupeAmount = tonumber(value) or 1
end,
})
WeaponDupeTab:Space()
WeaponDupeTab:Button({
Title = "Start Duplication",
Icon = "layers",
Color = Colors.DarkOrange,
Justify = "Center",
Callback = function()
if selectedWeaponName == "" then
WindUI:Notify({
Title = "Weapon Dupe Error",
Content = "Please enter a weapon name!",
Icon = "x-circle",
Duration = 5,
})
return
end
WindUI:Notify({
Title = "Weapon Dupe",
Content = "Duplicating " .. selectedWeaponName .. " " .. dupeAmount .. " times...",
Icon = "loader",
Duration = 3,
})
for i = 1, dupeAmount do
DuplicateWeapon()
end
WindUI:Notify({
Title = "Dupe Complete",
Content = "Successfully duplicated " .. selectedWeaponName .. "!",
Icon = "check-circle",
Duration = 5,
})
end,
})
WeaponDupeTab:Space({Columns = 3})
WeaponDupeTab:Section({
Title = "Inventory Duplication",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
WeaponDupeTab:Button({
Title = "Dupe Entire Inventory",
Icon = "package",
Color = Colors.Witch,
Justify = "Center",
Callback = function()
WindUI:Notify({
Title = "Inventory Dupe",
Content = "Duplicating entire inventory...",
Icon = "loader",
Duration = 3,
})
DuplicateInventory()
WindUI:Notify({
Title = "Inventory Dupe Complete",
Content = "Successfully duplicated inventory!",
Icon = "check-circle",
Duration = 5,
})
end,
})
local WeaponReplacerTab = MainSection:Tab({
Title = "Weapons Replacer",
Icon = "eye-off",
})
WeaponReplacerTab:Section({
Title = "Change Weapon Appearance",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
WeaponReplacerTab:Input({
Flag = "FromWeapon",
Title = "Weapon to Replace",
Desc = "Current weapon you have",
Placeholder = "e.g., Blossom",
Callback = function(value)
fromWeapon = value
end,
})
WeaponReplacerTab:Space()
WeaponReplacerTab:Input({
Flag = "ToWeapon",
Title = "Weapon to Receive",
Desc = "Weapon appearance you want",
Placeholder = "e.g., Chroma",
Callback = function(value)
toWeapon = value
end,
})
WeaponReplacerTab:Space()
WeaponReplacerTab:Button({
Title = "Change Visual",
Icon = "wand-2",
Color = Colors.Purple,
Justify = "Center",
Callback = function()
if fromWeapon == "" or toWeapon == "" then
WindUI:Notify({
Title = "Visual Weapons Error",
Content = "Please enter both weapon names!",
Icon = "x-circle",
Duration = 5,
})
return
end
if not pcall(function()
local ItemDatabase = require(ReplicatedStorage.Database.Sync.Item)
local fromWeapons = {}
local toWeapons = {}
for itemName, _ in pairs(ItemDatabase) do
if WeaponNameMatches(itemName, fromWeapon) then
table.insert(fromWeapons, itemName)
end
if WeaponNameMatches(itemName, toWeapon) then
table.insert(toWeapons, itemName)
end
end
if #fromWeapons > 0 and #toWeapons > 0 then
for _, from in ipairs(fromWeapons) do
for _, to in ipairs(toWeapons) do
ItemDatabase[from] = {}
for key, value in pairs(ItemDatabase[to]) do
ItemDatabase[from][key] = value
end
ReplicatedStorage.Remotes.Inventory.Equip:FireServer(to)
end
end
WindUI:Notify({
Title = "Visual Success",
Content = "Weapon visual changed!",
Icon = "check-circle",
Duration = 5,
})
else
WindUI:Notify({
Title = "Visual Error",
Content = "Weapon not found!",
Icon = "x-circle",
Duration = 5,
})
end
end) then
WindUI:Notify({
Title = "Visual Error",
Content = "Failed to change visual!",
Icon = "x-circle",
Duration = 5,
})
end
end,
})
local TradeScamTab = MainSection:Tab({
Title = "Trade Scam",
Icon = "shield-alert",
})
TradeScamTab:Section({
Title = "Visual Trade Protection",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
local visualTradeEnabled = false
TradeScamTab:Toggle({
Flag = "VisualTrade",
Title = "Enable Visual Trade",
Desc = "Make items in trade appear visual only",
Default = false,
Callback = function(value)
visualTradeEnabled = value
WindUI:Notify({
Title = "Visual Trade",
Content = value and "Visual Trade Enabled!" or "Visual Trade Disabled!",
Icon = value and "shield-check" or "shield-off",
Duration = 3,
})
end,
})
TradeScamTab:Space()
TradeScamTab:Button({
Title = "Activate Visual Trade",
Icon = "alert-triangle",
Color = Colors.Blood,
Justify = "Center",
Callback = function()
if not visualTradeEnabled then
WindUI:Notify({
Title = "Error",
Content = "Enable Visual Trade first!",
Icon = "x-circle",
Duration = 5,
})
return
end
ActivateTradeScam()
end,
})
local UtilitiesTab = MainSection:Tab({
Title = "Utilities",
Icon = "wrench",
})
UtilitiesTab:Section({
Title = "Server Utilities",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
UtilitiesTab:Button({
Title = "Enable Anti-AFK",
Icon = "moon",
Color = Colors.Midnight,
Justify = "Center",
Callback = function()
if pcall(function()
loadstring(game:HttpGet("https://raw.githubusercontent.com/hassanxzayn-lua/Anti-afk/main/antiafkbyhassanxzyn"))()
end) then
WindUI:Notify({
Title = "Anti-AFK",
Content = "Anti-AFK enabled!",
Icon = "check-circle",
Duration = 3,
})
else
WindUI:Notify({
Title = "Anti-AFK Error",
Content = "Failed to load Anti-AFK!",
Icon = "x-circle",
Duration = 5,
})
end
end,
})
UtilitiesTab:Space()
UtilitiesTab:Button({
Title = "Server Lagger",
Icon = "zap",
Color = Colors.Blood,
Justify = "Center",
Callback = function()
WindUI:Notify({
Title = "Server Lagger",
Content = "Lagging server... Risk of disconnect!",
Icon = "alert-triangle",
Duration = 5,
})
pcall(function()
local GetSyncData = ReplicatedStorage.GetSyncData
local InvokeServer = GetSyncData.InvokeServer
local counter = 0
while true do
for i = 1, 1 do
task.spawn(InvokeServer, GetSyncData)
end
counter = counter + 1
if counter == 3 then
counter = 0
wait(0)
end
end
end)
end,
})
local InnocentTab = MainSection:Tab({
Title = CreateGradientText("Innocent", Colors.Innocent, Colors.Innocent),
Icon = "user-check",
})
InnocentTab:Section({
Title = "Gun System",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
InnocentTab:Toggle({
Flag = "AutoGrabGun",
Title = "Auto Grab Gun",
Desc = "Automatically collect dropped gun",
Default = false,
Callback = function(value)
GunSystem.AutoGrabEnabled = value
if value then
coroutine.wrap(AutoGrabGunLoop)()
WindUI:Notify({
Title = "Auto Grab Gun",
Content = "Auto grab enabled!",
Icon = "check-circle",
Duration = 3,
})
else
WindUI:Notify({
Title = "Auto Grab Gun",
Content = "Auto grab disabled",
Icon = "x-circle",
Duration = 3,
})
end
end,
})
InnocentTab:Space()
InnocentTab:Button({
Title = "Grab Gun Manually",
Icon = "hand",
Color = Colors.Toxic,
Justify = "Center",
Callback = function()
GrabGun()
end,
})
InnocentTab:Space()
InnocentTab:Toggle({
Flag = "NotifyGunDrop",
Title = "Notify Gun Drop",
Desc = "Get notified when gun drops",
Default = true,
Callback = function(value)
GunSystem.NotifyGunDrop = value
end,
})
local MurdererTab = MainSection:Tab({
Title = CreateGradientText("Murder", Colors.Blood, Colors.Murder),
Icon = "skull",
})
MurdererTab:Section({
Title = "Kill Functions",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
MurdererTab:Toggle({
Flag = "KillAll",
Title = "Kill All Players",
Desc = "Automatically attack nearby targets",
Default = false,
Callback = function(value)
if value then
StartKillAll()
WindUI:Notify({
Title = "Kill All",
Content = "Attack sequence started!",
Icon = "skull",
Duration = 2,
})
else
StopKillAll()
WindUI:Notify({
Title = "Kill All",
Content = "Attack stopped",
Icon = "x-circle",
Duration = 2,
})
end
end,
})
MurdererTab:Space()
MurdererTab:Slider({
Flag = "AttackDelay",
Title = "Attack Delay",
Desc = "Time between attacks",
Step = 0.1,
Value = {
Min = 0.1,
Max = 2,
Default = 0.5,
},
Callback = function(value)
attackDelay = value
end,
})
MurdererTab:Space()
MurdererTab:Button({
Title = "Equip Knife",
Icon = "knife",
Color = Colors.Blood,
Justify = "Center",
Callback = function()
if HasKnife() then
WindUI:Notify({
Title = "Knife Equipped",
Content = "Knife is ready!",
Icon = "check-circle",
Duration = 2,
})
else
WindUI:Notify({
Title = "Error",
Content = "No knife found!",
Icon = "x-circle",
Duration = 2,
})
end
end,
})
local SheriffTab = MainSection:Tab({
Title = CreateGradientText("Sherrif", Colors.Sheriff, Colors.Sheriff),
Icon = "shield",
})
SheriffTab:Section({
Title = "Shooting Functions",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
SheriffTab:Dropdown({
Flag = "ShotType",
Title = "Shot Type",
Desc = "Choose shooting method",
Values = {
{Title = "Default", Icon = "target"},
{Title = "Teleport", Icon = "zap"},
},
Value = "Default",
Callback = function(selected)
shotType = selected.Title
WindUI:Notify({
Title = "Shot Type",
Content = "Set to: " .. selected.Title,
Icon = "check-circle",
Duration = 2,
})
end,
})
SheriffTab:Space()
SheriffTab:Toggle({
Title = "Shoot Murderer",
Icon = "crosshair",
Color = Colors.Toxic,
Justify = "Center",
Callback = function(value)
local coreGui = CoreGui
if value and not coreGui:FindFirstChild("GunW") then
local screenGui = Instance.new("ScreenGui", coreGui)
screenGui.Name = "GunW"
local button = Instance.new("TextButton", screenGui)
button.Draggable = true
button.Size = UDim2.new(0, 200, 0, 100)
button.Position = UDim2.new(0.5, -100, 0.5, 0)
button.TextStrokeTransparency = 0
button.BackgroundTransparency = 0.2
button.BackgroundColor3 = Color3.fromRGB(44, 44, 45)
button.BorderColor3 = Color3.new(1, 1, 1)
button.Text = "Shoot Murder"
button.TextColor3 = Color3.new(1, 1, 1)
button.TextSize = 20
button.Visible = true
button.AnchorPoint = Vector2.new(0.5, 0.5)
button.Active = true
button.TextWrapped = true
local corner = Instance.new("UICorner", button)
local stroke = Instance.new("UIStroke", button)
stroke.Color = Color3.new(0, 0, 0)
stroke.Thickness = 4
stroke.Transparency = 0.4
button.MouseButton1Click:Connect(function()
if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Gun") then
pcall(function()
LocalPlayer.Character.Gun.KnifeLocal.CreateBeam.RemoteFunction:InvokeServer(
1,
getMurdererTarget(),
"AH2"
)
end)
end
end)
elseif coreGui:FindFirstChild("GunW") then
coreGui:FindFirstChild("GunW"):Destroy()
end
end,
})
local SettingsTab = MainSection:Tab({
Title = "Settings",
Icon = "settings",
})
SettingsTab:Section({
Title = "GUI Settings",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
SettingsTab:Keybind({
Flag = "GUIKeybind",
Title = "GUI Toggle Key",
Desc = "Press to open/close GUI",
Value = "G",
Callback = function(key)
Window:SetToggleKey(Enum.KeyCode[key])
WindUI:Notify({
Title = "Keybind Set",
Content = "GUI toggle key: " .. key,
Icon = "keyboard",
Duration = 3,
})
end,
})
SettingsTab:Space({Columns = 2})
SettingsTab:Section({
Title = "Config Management",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
local configName = "default"
local ConfigManager = Window.ConfigManager
local configInput = SettingsTab:Input({
Flag = "ConfigName",
Title = "Config Name",
Desc = "Name for your configuration",
Icon = "file",
Value = configName,
Callback = function(value)
configName = value
end,
})
SettingsTab:Space()
local allConfigs = ConfigManager:AllConfigs()
SettingsTab:Dropdown({
Flag = "ConfigSelect",
Title = "Load Config",
Desc = "Select existing configuration",
Values = allConfigs,
Value = table.find(allConfigs, configName) and configName or nil,
Callback = function(selected)
configName = selected
configInput:Set(selected)
end,
})
SettingsTab:Space()
SettingsTab:Button({
Title = "Save Config",
Icon = "save",
Color = Colors.Toxic,
Justify = "Center",
Callback = function()
Window.CurrentConfig = ConfigManager:CreateConfig(configName)
if Window.CurrentConfig:Save() then
WindUI:Notify({
Title = "Config Saved",
Content = "Saved as '" .. configName .. "'",
Icon = "check",
Duration = 3,
})
end
end,
})
SettingsTab:Space()
SettingsTab:Button({
Title = "Load Config",
Icon = "upload",
Color = Colors.Purple,
Justify = "Center",
Callback = function()
Window.CurrentConfig = ConfigManager:CreateConfig(configName)
if Window.CurrentConfig:Load() then
WindUI:Notify({
Title = "Config Loaded",
Content = "Loaded '" .. configName .. "'",
Icon = "refresh-cw",
Duration = 3,
})
end
end,
})
local InfoTab = MainSection:Tab({
Title = "Info & Socials",
Icon = "info",
})
InfoTab:Section({
Title = "Kuni",
TextSize = 20,
FontWeight = Enum.FontWeight.Bold,
})
InfoTab:Space()
InfoTab:Section({
Title = "Enhanced MM2 script with comprehensive features including ESP, auto-farming, weapon duplication, role-specific functions, and much more! Perfect for Murder Mystery 2 players looking for an edge.",
TextSize = 16,
TextTransparency = 0.3,
FontWeight = Enum.FontWeight.Medium,
})
InfoTab:Space({Columns = 3})
InfoTab:Section({
Title = "Features",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
InfoTab:Space()
InfoTab:Section({
Title = "Player ESP • Auto Farm • Character Mods • Teleportation • Weapon Spawner • Weapon Duplication • Visual Weapons • Trade Scam • Role Functions • Anti-AFK • Server Utilities",
TextSize = 15,
TextTransparency = 0.4,
FontWeight = Enum.FontWeight.Medium,
})
InfoTab:Space({Columns = 3})
InfoTab:Section({
Title = "Community & Support",
TextSize = 18,
FontWeight = Enum.FontWeight.SemiBold,
})
InfoTab:Button({
Title = "Copy Discord Invite",
Icon = "message-circle",
Color = Colors.DarkPurple,
Justify = "Center",
Callback = function()
setclipboard("https://discord.gg/rp62esPbCm")
WindUI:Notify({
Title = "Discord",
Content = "Invite copied to clipboard!",
Icon = "check-circle",
Duration = 3,
})
end,
})
InfoTab:Space()
InfoTab:Button({
Title = "Other Scripts",
Icon = "message-circle",
Color = Colors.Toxic,
Justify = "Center",
Callback = function()
setclipboard("https://discord.gg/W2T39YnVGx")
WindUI:Notify({
Title = "More Scripts",
Content = "ADM - MM2 Scripts link copied!",
Icon = "check-circle",
Duration = 3,
})
end,
})
InfoTab:Space()
InfoTab:Button({
Title = "YouTube Channel",
Icon = "youtube",
Color = Colors.Blood,
Justify = "Center",
Callback = function()
setclipboard("https://www.youtube.com/@crixilgotstacks")
WindUI:Notify({
Title = "YouTube",
Content = "Channel link copied!",
Icon = "check-circle",
Duration = 3,
})
end,
})